Esempio n. 1
0
def elegir_dotes(dotes, clase):

    opciones = [
        t('Elegir una nueva dote'),
        t('Ver las dotes que ya se tienen'),
        t('Ver una lista de las dotes elegibles'),
        t('Ver información sobre una dote específica'),
        t('Ver una lista de todas las dotes')
    ]

    while True:
        imprimir_titulo()
        print(v.barra(p.CARS, s.alins[p.alini]['Abr'], p.raza['Nombre']))
        print(t('Seleccione sus Dotes para este nivel'))
        sublista = posicion(p.e_dts, clase, len(p.cla), s.CLASES, s.DOTES)
        print('\n' + t('¿Que desea hacer?'))
        op = v.subselector(t('Opción'), opciones)
        if op == 0:  # Elegir una nueva dote
            if not any(p.e_dts.values()):
                print('\n' + t('No se pueden elegir más dotes por el momento'))
            else:
                todas = AutoDot(sublista[0], p.competencias['Armas'],
                                p.conjuros, s.DOTES, s.ARMAS, s.HABS,
                                s.ESCUELAS)
                posibles = GenerarListadeAyuda(todas, s.DOTES)
                dote = SelDot(s.DOTES, posibles)
                if dote != '':
                    p.agregar_dote(dote, sublista[1])
                if not any(p.e_dts.values()):
                    opciones.append(t('Nada más'))
        elif op == 1:  # Ver las dotes que ya se tienen
            if len(dotes) < 1:
                print(t('No hay dotes elegidas de momento'))
            else:
                lista = ver_dotes(dotes, s.DOTES, s.ARMAS, s.HABS, s.ESCUELAS)
                v.paginar_dos_columnas(15, lista)
        elif op == 2:  # Ver una lista de las dotes elegibles
            if not any(p.e_dts.values()):
                print('\n' + t('No se pueden elegir más dotes por el momento'))
            else:
                todas = AutoDot(sublista[0], p.competencias['Armas'],
                                p.conjuros, s.DOTES, s.ARMAS, s.HABS,
                                s.ESCUELAS)
                posibles = GenerarListadeAyuda(todas, s.DOTES)
                v.paginar_dos_columnas(
                    15, [s.DOTES[str(i)]['Nombre'] for i in posibles])
        elif op == 3:  # Ver información sobre una dote específica
            print(info_dote(s.DOTES))
        elif op == 4:  # Ver una lista de todas las dotes
            lista_de_dotes(s.DOTES)
        elif op == 5:
            break

        input(t('\n[Presione Enter para continuar]\n'))
Esempio n. 2
0
def comprar_equipo(clase):
    compras = []
    opciones = [
        'Comprar armas y munición', 'Comprar armaduras y escudos',
        'Comprar equipo de aventura',
        'Ver las propiedades de un objeto, arma o armadura',
        'Ver los objetos poseídos', 'Devolver objetos comprados'
    ]

    dinero = riqueza(clase, s.CLASES, len(p.cla))
    while True:
        imprimir_titulo()
        print(barra(p.CARS, s.alins[p.alini]['Abr'], p.raza['Nombre']))
        print('\nTienes ' + unificar_precio(convertir_precio(dinero)) +
              ' para gastar')
        op = subselector('Opción', opciones)
        if op == 0:  # Comprar armas y munición
            nuevas = comprar(dinero, s.ARMAS, 'armas')
            compras += nuevas
            subtotal = 0
            for i in nuevas:
                dinero -= calcular_precio(i, s.ARMAS, s.OBJMAG)
            if 'Nada más' not in opciones: opciones.append('Nada más')
        elif op == 1:  # Comprar armaduras y escudos
            nuevas = comprar(dinero, s.ARMDS, 'armds')
            compras += nuevas
            subtotal = 0
            for i in nuevas:
                dinero -= calcular_precio(i, s.ARMDS, s.OBJMAG)
            if 'Nada más' not in opciones: opciones.append('Nada más')
        elif op == 2:  # Comprar objetos varios
            print('Opción aún no disponible')
            # compras['Otros'] += comprar(dinero,Otros)
            #if 'Nada más' not in opciones: opciones.append('Nada más')
        elif op == 3:  # Ver las estadísticas de un objeto, arma o armadura
            print('Opción aún no disponible')
        elif op == 4:  # Ver los objetos poseídos
            print('Opción aún no disponible')
        elif op == 5:  # Devolver objetos comprados
            print('Opción aún no disponible')
        elif op == 6:  # Nada más
            return compras, dinero
Esempio n. 3
0
def go():
    while True:
        P.nivel += 1
        if P.nivel == 1:
            imprimir_titulo()

            ## Inicio ##
            tipo = puntgen[0]
            sub = puntgen[1:]
            if tipo == 'A':
                tirs = C.imprimir_puntos(
                    C.generar_tiradas(S.CAMPNG[tipo][sub]), 'A')
            elif tipo == 'C':
                tirs = C.imprimir_puntos(S.CAMPNG[tipo][sub], 'C')

            ## Seleccionar Raza ##
            raza = B.elegir_raza(S.RAZAS)

            ## Repartir puntuaciones de característica ##
            if tipo in ('A', 'C'):
                P.asignar_carcteristicas(S.CAMPNG, tirs)
            else:
                P.asignar_carcteristicas(S.CAMPNG)

            ## Aplicar modificadores raciales ##
            P.aplicar_raza(raza)

            ## Elección de Alineamiento ##
            P.alini = B.elegir_alineamiento(S.alins)

        imprimir_titulo()
        print(V.barra(P.CARS, S.alins[P.alini]['Abr'], P.raza['Nombre']))
        print('\n~~ ' + t(str(P.nivel) + 'º') + ' ' + t('NIVEL') + ' ~~\n')

        ## Elección de Clase ##
        if P.nivel == 1:
            clase = B.elegir_clase('', S.CLASES, P.alini)
            P.idiomas = B.idiomas_iniciales(S.IDIOMAS, S.CLASES[clase], P.raza,
                                            P.CARS['INT']['Mod'])
        else:
            clase = B.elegir_clase(P.clases[P.nivel - 2], S.CLASES, P.alini)
        P.aplicar_clase(clase)

        ## Asignar y aplicar Aptitudes de clase ##
        nuevas = []
        if str(P.cla.count(clase)) in S.CLASES[clase]['Apts']:
            for aptitud in S.CLASES[clase]['Apts'][str(P.cla.count(clase))]:
                nuevas.append(str(aptitud))
                for ap in nuevas:
                    apt = A.actualizar_aptitudes(ap, P.apts, S.APTS)
                    if apt != None:  #chapuza. el 'NoneType' se genera con Aptitud Especial,
                        #debido a que no es una aptitud real, si no un mero placeholder.
                        P.agregar_ap(*apt)
                nuevas = []

        ## Aumento de Características en niveles multiplos de 4 ##
        if P.nivel % 4 == 0:
            C.elegir_aumento_de_caracteristica(nivel, S.Cars)

        ## Cáculo de puntos y Asignación de Rangos de habilidad ##
        hab_rng = H.elegir_habs(P.habs, clase, P.nivel, S.HABS)
        P.actualizar_habilidades(hab_rng)

        ## Elección de Dotes ##
        if P.nivel == 1 or P.nivel % 3 == 0:
            P.e_dts['dt_nv'] = True
        if any(P.e_dts.values()):
            D.elegir_dotes(P.dotes, clase)

        ## Elección de Equipo ##
        compras = O.comprar_equipo(clase)
        P.dinero = compras[1]

        P.actualizar_inventario(compras[0])
        P.equipar_pj()

        ## Cálculo de estadísticas de combate
        P.calcular_estadisticas_de_combate(clase, S.DOTES, S.CLASES)

        if "Lanzamiento_de_conjuros" in S.CLASES[clase]:
            A.elegir_conjuros(clase, P.cla.count(clase), P.conjuros, S.CLASES,
                              S.CONJUROS, S.ESCUELAS)

        if not input('\nDesea subir de nivel? ').lower().startswith('s'):
            break

    if P.nombre == '':
        P.nombre = input('\nNombre: ').capitalize()

    P.calcular_sinergias(S.HABS)
    P.aprin = E.imprimir_apts(P.apts, S.APTS, P.aprin)
    E.autoguardar(P.guardar_pj())
    E.exportar_pj()
Esempio n. 4
0
def elegir_habs(rangos, clase, nivel, HABS):
    '''Proporciona un más completo selector de habilidades.'''

    opciones = [
        t('Maximizar/actualizar habilidades'),
        t('Repartir rango por rango'),
        t('Ver las habilidades que tienen rangos'),
        t('Ver las habilidades que no tienen rangos'),
        t('Ver las habilidades de clase'),
        t('Ver una lista de todas las habilidades')
    ]
    op = ''
    hab_rng = rangos
    while op == '':
        imprimir_titulo()
        print(v.barra(p.CARS, s.alins[p.alini]['Abr'], p.raza['Nombre']))
        print(t('Seleccione sus Habiliades para este nivel'), end='\n\n')
        print(t('¿Que desea hacer?'))
        op = v.subselector(t('Opción'), opciones)
        print()
        if op == 0:  # Maximizar/actualizar habilidades
            if t('Nada más') in opciones:
                print('\n' + t(
                    'Ya has repartido todos los rangos de habilidad disponibles.'
                ) + '\n')
            else:
                puntos = PuntHab(s.CLASES, clase, nivel, p.CARS['INT']['Mod'],
                                 p.subtipo, True)
                hab_cla = Claseas(s.CLASES, clase, HABS)
                if nivel == 1:
                    act = maximizar_habs(puntos, p.cla.count(clase), hab_cla,
                                         HABS)
                    hab_rng = act[0]
                    restante = act[1]
                else:
                    act = actualizar_habs_max(hab_rng, p.cla.count(clase),
                                              hab_cla, puntos, HABS)
                    hab_rng = act[0]
                    restante = act[1]

                if restante == 0:
                    opciones.append(t('Nada más'))
                else:
                    print('Se han repatido ' + str(puntos - restante) +
                          ' puntos. Quedan ' + str(restante) + ' puntos.')

        elif op == 1:  # Repartir rango por rango
            if t('Nada más') in opciones:
                print('\n' + t(
                    'Ya has repartido todos los rangos de habilidad disponibles.'
                ) + '\n')
            else:
                hab_cla = Claseas(s.CLASES, clase, s.HABS)
                puntos = PuntHab(lista_de_clases, clase, nivel,
                                 p.CARS['INT']['Mod'], p.subtipo)
                hab_rng = repartir_rangos(puntos, p.cla.count(clase), hab_cla,
                                          HABS, hab_rng)
                if puntos <= 0:
                    opciones.append(t('Nada más'))

        elif op == 2:  # Ver las habilidades que tienen rangos
            lineas = v.a_dos_columnas(HabcR(hab_rng, HABS))
            if len(lineas) == 0:
                print('\n' +
                      t('Ninguna habilidad tiene rangos por el momento'))
            else:
                for i in lineas:
                    print(i)

        elif op == 3:  # Ver las habilidades que no tienen rangos
            for i in v.a_dos_columnas(HabcR(hab_rng, HABS, inverso=True)):
                print(i)

        elif op == 4:  # Ver las habilidades de clase
            for i in v.a_dos_columnas(Claseas(s.CLASES, clase, s.HABS)):
                print(i)

        elif op == 5:  # Ver una lista de todas las habilidades
            habs = [HABS[str(i)]['Nombre'] for i in range(len(s.HABS))]
            for i in v.a_dos_columnas(habs):
                print(i)

        elif op == 6:  ## Nada más ##
            return hab_rng

        op = ''
        input(t('\n[Presione Enter para continuar]\n'))
Esempio n. 5
0
def comprar(dinero, objetos, grupo):

    # crea dos listas, filtrando los objetos que no tienen precio
    nom = [
        objetos[str(i)]['Nombre'] for i in range(len(objetos))
        if 'Precio' in objetos[str(i)]
    ]
    pre = [
        objetos[str(i)]['Precio'] for i in range(len(objetos))
        if 'Precio' in objetos[str(i)]
    ]

    compras = []
    while dinero > 0:
        imprimir_titulo()
        print(barra(p.CARS, s.alins[p.alini]['Abr'], p.raza['Nombre']))
        print('\nTe quedan ' + unificar_precio(convertir_precio(dinero)) +
              ' para gastar')
        op = str(subselector('Objeto', nom, dos_col=True))

        if input('Deseas una versión mágica/de gran calidad de este objeto? '
                 ).lower().startswith('s'):
            if objetos[op]['Tipo'] in ('cc', 'ad'):
                obj = objeto_magico(op, objetos[op]['Tipo'], s.ARMAS, s.OBJMAG)
                precio = calcular_precio(obj, s.ARMAS, s.OBJMAG)
            elif objetos[op]['Tipo'] in ('armd', 'esc'):
                obj = objeto_magico(op, objetos[op]['Tipo'], s.ARMDS, s.OBJMAG)
                precio = calcular_precio(obj, s.ARMDS, s.OBJMAG)
            costo = unificar_precio(convertir_precio(precio))
        else:
            costo = unificar_precio(convertir_precio(pre[int(op)]))
            precio = pre[int(op)]
            if objetos[op]['Tipo'] in ('cc', 'ad'): grupo = 'armas'
            elif objetos[op]['Tipo'] in ('armd', 'esc'): grupo = 'armds'
            obj = {
                'index': op,
                'grupo': grupo,
                'subgrupo': objetos[op]['Tipo'],
                'gc': False,
                'bon': 0,
                'apts': []
            }

        imprimir_titulo()
        print(barra(p.CARS, s.alins[p.alini]['Abr'], p.raza['Nombre']))
        print('\nTe quedan ' + unificar_precio(convertir_precio(dinero)) +
              ' para gastar',
              '\n' + imprimir_nom_objmag(obj, s.OBJMAG, objetos),
              '\nEste objeto cuesta ' + costo + '.',
              sep='\n\n')

        if precio > dinero:
            print('\nNecesitas más riqueza para poder pagarlo.')
        else:
            if input('\nEstas seguro de querer adquirirlo? ').lower(
            ).startswith('s'):
                compras.append(obj)
                dinero -= precio

        if not input('\n¿Deseas continuar comprando? ').lower().startswith(
                's'):
            return compras
Esempio n. 6
0
def objeto_magico(obj, subgrupo, GRUPO, OBJMAG):
    objeto = {}

    objeto['index'] = obj
    objeto['subgrupo'] = subgrupo
    if subgrupo in ('cc', 'ad'):
        objeto['grupo'] = 'armas'
    elif subgrupo in ('armd', 'esc'):
        objeto['grupo'] = 'armds'

    op1 = ['Gran Calidad', 'Mágico']

    while True:
        imprimir_titulo()
        print(barra(p.CARS, s.alins[p.alini]['Abr'], p.raza['Nombre']))
        print(GRUPO[str(obj)]['Nombre'])
        op = subselector('Tipo', op1)
        if op == 0:
            objeto['gc'] = True
            objeto['bon'] = 0
            objeto['apts'] = []
        elif op == 1:
            objeto['gc'] = True
            while True:
                bon = input('\nBonificador de mejora: ')
                try:
                    bon = int(bon)
                except ValueError:
                    print('El bonificador de mejora debe ser numerico')
                finally:
                    bon = int(bon)
                    if bon > 5:
                        print(
                            'No se puede tener un bonificador de mejora mayor a 5'
                        )
                    if bon < 1:
                        print(
                            'El bonificador de mejora debe ser al menos de +1')
                    else:
                        objeto['bon'] = bon
                        break
            if input('\n¿Desea agregar aptitudes especiales a este objeto? '
                     ).lower().startswith('s'):
                os.system(['clear', 'cls'][os.name == 'nt'])
                objeto['apts'] = []
                op2, nom = [], []
                for i in range(len(OBJMAG)):
                    i = str(i)
                    nom.append(OBJMAG[i]['Nombre'])
                    if subgrupo in OBJMAG[i]['Subgrupo']:
                        op2.append(nom[i])
                    copia = op2 * 1

                while bon < 10:
                    print('\nEl bonificador de mejora actual es de +' +
                          str(bon))
                    imprimir_nom_objmag(objeto, OBJMAG, GRUPO)
                    op = subselector('Aptitud', op2, True)
                    for i in range(len(nom)):
                        if op2[op] == nom[i]:
                            sel = i
                    if not OBJMAG[sel]['Precio'].isnumeric():
                        bon += int(OBJMAG[sel]['Precio'].split('+')[1])
                        del op2[op]

                    if 'Sublista' in OBJMAG[sel]:
                        print(OBJMAG[sel]['Intro'])
                        opsel = subselector(OBJMAG[sel]['Sub_sel'],
                                            OBJMAG[sel]['Sublista'], True)
                        objeto['apts'].append(str(sel) + ':' + str(opsel))
                    else:
                        objeto['apts'].append(str(sel))

                    if not input('Desea continuar? ').lower().startswith('s'):
                        break
            else:
                objeto['apts'] = []
            os.system(['clear', 'cls'][os.name == 'nt'])
        return objeto