def elegir_alineamiento(Alineamientos): '''Provee un selector de alineamientos.''' imprimir_titulo() print(t('Escoge un alineamiento para este personaje') + '\n') alinis = [] for i in Alineamientos: print(str(i) + ': ' + t(Alineamientos[i]['Nom'])) alinis.append(Alineamientos[i]['Nom']) while True: aling = input('\n' + t('Alineamiento') + ': ') if aling.isnumeric(): aling = int(aling) if aling not in range(len(Alineamientos)): print(t('El numero elegido no representa ningún alineamiento')) else: print(t('Has elegido que este personaje sea ') + Alineamientos[aling]['Nom'] + '.', end=' ') if input(t('¿Estas seguro? ')).lower().startswith(t('s')): return aling else: if aling.capitalize() in alinis: aling = int(alinis.index(aling.capitalize())) print(t('Has elegido que este personaje sea ') + t(Alineamientos[aling]['Nom']) + '.', end=' ') if input(t('¿Estas seguro? ')).lower().startswith(t('s')): return aling
def preferencias(prefs): from func.core.viz import subselector from func.core.lang import t, sel_idioma from func.data.setup import data as d from func.core.intro import imprimir_titulo while True: opciones = [ t('Cambiar idioma'), t('Cambiar las advertencias'), t('Cambiar el método de generación de características'), t('Salir') ] imprimir_titulo() print(t('Menú: Preferencias'), t('Elije una opción'), sep='\n\n') op = subselector(t('Opción'), opciones) if op == 0: global idioma idioma = sel_idioma() prefs['idioma'] = idioma aplicar_idioma(idioma) d.cambiar_idioma(idioma) elif op == 1: global advt advt = not advt prefs['advt'] = advt elif op == 2: global puntgen puntgen = menu_puntuacion() prefs['puntgen'] = puntgen elif op == 3: break guardar_preferencias(prefs)
def header(h, previo = True): imprimir_titulo() print(t('Compra tus puntuaciones de característica')) print('\n'+texto(puntos,'Tienes','Tienes',' para gastar')) paginar_dos_columnas(5,lista) if previo == True: print('\n'+'\n'.join(cars[:h+1]),end = '')
def menu(): while True: opciones = [ t('Crear un nuevo personaje'), t('Avanzar un personaje existente'), t('Editar preferencias'), t('Salir'), '\n' + t('Ver licencia') ] intro.imprimir_titulo() intro.introduccion() print(t('Elije una opción')) op = subselector(t('Opción'), opciones) if op == 0: # Crear un nuevo Pj import func.core.chargen Pj.nuevo_pj() func.core.chargen.go() elif op == 1: # Avanzar un Pj existente import func.core.chargen Pj.cargar_pj(cargar_archivo('Personaje', 'Guardar')) func.core.chargen.go() elif op == 2: # preferencias c.preferencias(c.abrir_json('config.json')) elif op == 3: # exit break elif op == 4: intro.licencia('LICENSE.txt') input(t('\n[Presione Enter para continuar]\n'))
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'))
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
def elegir_aumento_de_caracteristica (nivel,Cars): nom = [Cars[i]['Nom'] for i in range(len(Cars))] while True: imprimir_titulo() print ('\nEn el '+str(nivel)+'º nivel, tienes un aumento de características') print (t('Selecciona la característica que quieres aumentar')) car = subselector('Característica',nom) if car.isnumeric(): Car = Cars[car]['Abr'] else: car = probar_input(Car,nom) if car == '': print (t('La característica es inválida o inexistente')) else: car = nom.index(car) Car = Cars[car]['Abr'] p.aumentar_caracteristicas(Car) print ('El personaje tiene ahora '+d.Cars[car]['Nom']+ ' '+str(p.CARS[Car]['Punt'])+' (+'+str(p.CARS[Car]['M'])+')')
def elegir_dominio(alini, cant, DOMINIOS): '''Provee un selector para los dominios de clérigo''' imprimir_titulo() disponibles = [] for i in DOMINIOS: if 'Req_AL' in DOMINIOS[i]: if alini in DOMINIOS[i]['Req_AL']: disponibles.append(DOMINIOS[i]['Nombre']) else: disponibles.append(DOMINIOS[i]['Nombre']) disponibles.sort() print('Debes elegir ' + str(cant) + ' dominios de entre los siguientes:') elect = v.subselector('Dominio', disponibles, True, cant) keys = [] for i in elect: for key in DOMINIOS: if disponibles[i] == DOMINIOS[key]['Nombre']: keys.append(key) return keys
def menu_puntuacion(): from func.core.intro import imprimir_titulo from func.core.viz import subselector opciones = [ 'Tiradas aleatorias', 'Compra de Puntos', 'Puntuaciones fijas', 'Salir' ] while True: imprimir_titulo() print('Seleccione un método de generación de características') print('\n¿Que desea hacer?') op = subselector('Opción', opciones) if op == 0: ops = [('Tirada estándar', 'A2'), ('Tirada variable con repetición', 'A4'), ('Personaje orgánico', 'A3'), ('Personaje promedio a medida', 'A1'), ('Personaje promedio aleatorio', 'A0'), ('Personaje muy poderoso', 'A5')] while True: imprimir_titulo() print('Seleccione el método aleatorio que desee') op2 = ops[subselector('Opción', [i[0] for i in ops])][1] break elif op == 1: ops = [('Campaña estándar', 'B0'), ('Campaña poco poderosa', 'B1'), ('Campaña desafiante', 'B2'), ('Campaña ardua', 'B3'), ('Campaña muy poderosa', 'B4')] while True: imprimir_titulo() print('Seleccione el tipo de compra de puntos') op2 = ops[subselector('Opción', [i[0] for i in ops])][1] break elif op == 2: ops = [('Puntuaciones de élite', 'C0'), ('Punutaciones corrientes', 'C1'), ('Puntuaciones estándar', 'C2')] while True: imprimir_titulo() print('Seleccione el tipo de puntuación que desea') op2 = ops[subselector('Opción', [i[0] for i in ops])][1] break elif op == 3: break return op2
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()
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'))
def elegir_conjuros(clase, nv_cls, conjuros, CLASES, CONJUROS, ESCUELAS): '''Selección de conjuros.''' def nivel_conjuro(): nv_cnj = '' while nv_cnj == '': nv_cnj = input('\nElija un nivel de conjuros [0 - 9]: ') if not nv_cnj.isnumeric(): print('\nEl nivel de conjuros debe ser numérico.') nv_cnj = '' elif not 0 <= int(nv_cnj) <= 9: print('\nEl nivel de conjuros debe ser un número entre 0 y 9') nv_cnj = '' else: nv_cnj = int(nv_cnj) return nv_cnj opciones = [ 'Elegir nuevos conjuros conocidos', 'Preparar un set de conjuros', 'Ver los conjuros de clase disponibles', 'Ver la información de un conjuro específico', 'Ver los conjuros conocidos', 'Ver todos los conjuros de una escuela de magia' ] op = '' while op == '': imprimir_titulo() print('En este nivel, debe elegir conjuros', end='\n\n') print('¿Que desea hacer?\n') op = v.subselector('Opción', opciones) if op == 0: # Elegir nuevos conjuros conocidos nv_cnj = nivel_conjuro() conjuros += conjuros_conocidos(clase, nv_cls, nv_cnj, conjuros, CLASES, CONJUROS, ESCUELAS) opciones.append('Nada más') op = '' elif op == 1: # Preparar un set de conjuros print('\nEsta opción aún no se encuentra en funcionamiento') elif op == 2: # Ver los conjuros de clase disponibles nv_cnj = nivel_conjuro() v.paginar_dos_columnas( 10, (sort_conj_clase(clase, nv_cnj, conjuros, CONJUROS, ESCUELAS))) elif op == 3: # Ver la información de un conjuro específico print('\n' + info_conjuro(CONJUROS, ESCUELAS)) elif op == 4: # Ver los conjuros conocidos if len(conjuros) == 0: print('\nNo hay conjuros que mostrar aún.') else: lineas = [CONJUROS[i]['Nombre'] for i in conjuros] v.paginar_dos_columnas(10, lineas) elif op == 5: # Ver todos los conjuros de una escuela de magia print('\nElija una escuela de magia') escuelas = [ESCUELAS[i]['Nombre'] for i in range(len(ESCUELAS))] esc = v.subselector('Escuela', escuelas) v.paginar_dos_columnas( 10, (sort_conj_escuela(esc, CONJUROS, ESCUELAS))) op = '' elif op == 6: # Nada más return sorted(conjuros) input('\n[Presione Enter para continuar]')
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
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