def elegir_raza(RAZAS): '''Provee un selector de razas.''' razas = [RAZAS[str(i)]['Nombre'] for i in range(len(RAZAS))] print('\n' + t('Seleccione Raza')) for i in range(len(RAZAS)): if (i + 1) % 4 == 0: print(str(i + 1) + ': ' + razas[i], end='\n') else: print(str(i + 1) + ': ' + razas[i], end=' ') raza = '' while raza == '': r = input('\n\n' + t('Raza: ')) if r.isnumeric(): r = int(r) if not 1 <= r <= len(RAZAS): print(t('Raza inválida, intente nuevamente')) continue else: r -= 1 else: r = probar_input(r, razas) if r == '': print( t('Raza inválida o error ortográfico, intente nuevamente')) continue else: r = razas.index(r) print(t('Has elegido que este personaje sea') + ' ' + t('un ' + razas[r]) + '.', end=' ') if input(t('¿Estas seguro? ')).lower().startswith(t('s')): return str(r)
def SelDot(DOTES, posibles): nom = [DOTES[str(i)]['Nombre'] for i in range(len(DOTES))] des = [DOTES[str(i)]['Descripcion'] for i in range(len(DOTES))] mec = [DOTES[str(i)]['Tipo'] for i in range(len(DOTES))] pre = [] for i in range(len(DOTES)): if 'PreReq' in DOTES[str(i)]: pre.append(DOTES[str(i)]['PreReq']) else: pre.append('') dote = '' dt = '' while dote == '': dt = input(t('\nDote') + ': ').strip().capitalize() dt = probar_input(dt, nom) if dt == '': print(t('Escriba el nombre de una dote') + '\n') else: if nom.index(dt) not in posibles: print(t( 'Actualmente el personaje no cumple con los prerrequisitos para la dote seleccionada' ), t('Elija otra'), sep='\n') elif ':' in mec[nom.index(dt)]: sub = mec[nom.index(dt)].split(':')[1] if sub == 'w': dote = u_w(dt, p.competencias['Armas'], p.dotes, s.ARMAS, nom, pre, des, DOTES) elif sub == 'w?': dote = u_w2(dt, nom, pre, des, DOTES) elif sub == 'm': dote = u_m(dt, p.competencias['Armas'], p.dotes, nom, pre, des, s.ARMAS, DOTES) elif sub == 'e': dote = u_e(dt, p.dotes, s.ESCUELAS, nom, pre, des, DOTES) elif sub == 'e?': dote = u_e2(dt, nom, pre, des, DOTES, s.ESCUELAS) elif sub == 'c': dote = u_c(dt, p.CARS['INT']['Mod'], p.conjuros, s.CONJUROS, nom, pre, des, DOTES) elif sub == 'h': dote = u_h(dt, s.HABS, nom, pre, des, DOTES) else: dote = str(nom.index(dt)) prinfo(dt, nom, pre, des) if dote != '': if not input('\n' + t('¿Estas seguro? ')).lower().startswith( t('s')): dote = '' return dote
def maximizar_habs(puntos, nv_cls, hab_cla, HABS): rng_max = nv_cls + 3 rng_max_tc = rng_max / 2 nom_hab = [HABS[str(i)]['Nombre'] for i in range(len(HABS))] rng = {} for h in nom_hab: rng[h] = 0 if puntos > 0: print('Escoge ' + str(puntos) + ' habilidades') while puntos > 0: hab = input('\n' + 'Habilidad: ').strip(' ').capitalize() hab = probar_input(hab, nom_hab) if hab == '': print(t('Escriba el nombre de una habilidad')) elif hab not in hab_cla: if rng[hab] == rng_max_tc: print( hab + ' está maximizada. No se pueden agregar más rangos en este nivel' ) else: puntos -= 1 rng[hab] += rng_max_tc - rng[hab] else: if rng[hab] == rng_max: print( hab + ' está maximizada. No se pueden agregar más rangos en este nivel' ) else: puntos -= 1 rng[hab] += rng_max - rng[hab] if hab == 'Hablar un idioma': p.idiomas = nuevos_idiomas(s.IDIOMAS, p.idiomas, round(rng[hab])) rng_hab = [] for i in range(len(nom_hab)): if nom_hab[i] in rng: rng_hab.append(rng[nom_hab[i]]) return rng_hab, puntos
def info_dote(DOTES): '''Devuelve la info completa de una dote por su nombre.''' dotes = [DOTES[str(i)]['Nombre'] for i in range(len(DOTES))] dote = '' while dote == '': dote = input('\nDote: ').capitalize() dote = probar_input(dote, dotes) if dote == '': print('\nDebe ingresar el nombre de una dote') for i in range(len(dotes)): if dotes[i] == dote: i = str(i) if 'PreReq' in DOTES[i]: texto = '\n'.join(('Prerrequisitos: ' + DOTES[i]['PreReq'], DOTES[i]['Descripcion'])) else: texto = DOTES[i]['Descripcion'] return texto
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 repartir_rangos(PH, nv_cls, hab_cla, HABS, rangos): '''Reparte los puntos de habilidad manualmente, uno por uno.''' print('\nTienes ' + str(PH) + ' puntos de habilidad para distribuir en este nivel.\n') print( '\nRecuerda que cualquier habilidad transclásea cuesta dos puntos en lugar de uno.', 'Escribe una habilidad, y luego los puntos de habilidad que desees invertir en', 'ella.', sep='\n') rng = {} for i in range(len(rangos)): rng[HABS[str(i)]['Nombre']] = rangos[i] nom_hab = [HABS[str(i)]['Nombre'] for i in range(len(HABS))] rng_max = nv_cls + 3 rng_max_tc = rng_max / 2 while PH > 0: hab = '' while hab == '': hab = input('\nHabilidad: ').strip(' ').capitalize() hab = probar_input(hab, nom_hab) if hab == '': print('\nDebe elegir una habilidad') if rng[hab] > 0: print(hab + ' ya posee ' + str(rng[hab]) + ' rangos.') puntos = '' while puntos == '': puntos = input('Puntos: ') if not puntos.isnumeric(): print('Los rangos deben ser numéricos') puntos = '' elif int(puntos) > PH: print('No posees tantos puntos de habilidad') puntos = '' else: puntos = int(puntos) if hab not in hab_cla: ## Habilidad Transclásea print(hab + ' es una habilidad transclásea') if rng[hab] == rng_max_tc: print( hab + ' está maximizada. No se pueden agregar más rangos en este nivel' ) else: if rng[hab] + (puntos / 2) >= rng_max_tc: print(hab + ' ha alcanzado el rango máximo (' + str(rng_max_tc) + ').') PH -= (rng_max_tc - rng[hab]) * 2 rng[hab] += rng_max_tc - rng[hab] else: PH -= puntos rng[hab] += puntos / 2 print('\nPuntos restantes: ' + str(int(PH))) else: ## Habilidad Clásea print(hab + ' es una habilidad clásea') if rng[hab] == rng_max: print( hab + ' está maximizada. No se pueden agregar más rangos en este nivel' ) else: if rng[hab] + puntos >= rng_max: print(hab + ' ha alcanzado el rango máximo (' + str(rng_max) + ').') PH -= rng_max - rng[hab] rng[hab] += rng_max - rng[hab] else: PH -= puntos rng[hab] += puntos print('\nPuntos restantes: ' + str(int(PH))) if hab == 'Hablar un idioma': p.idiomas = nuevos_idiomas(s.IDIOMAS, p.idiomas, round(rng[hab])) rng_hab = [] for i in range(len(nom_hab)): if nom_hab[i] in rng: rng_hab.append(rng[nom_hab[i]]) return rng_hab
def subselector(prompt, lista, vueltas=1, dos_col=False): from func.core.config import advt as advertencias items = [] pool = vueltas copia = lista * 1 # copia de trabajo for vuelta in range(vueltas): if vuelta == 0: paginado = [] for i in range(len(copia)): if copia[i][0:1] == '\n': copia[i] = copia[i].strip('\n') paginado.append('\n' + str(i) + ': ' + str(t(copia[i]))) else: paginado.append(str(i) + ': ' + str(t(copia[i]))) if dos_col == False: paginar(10, paginado) else: paginar_dos_columnas(10, paginado) while pool > 0: item = '' while item == '': item = input('\n' + prompt + ': ').capitalize() if item.isnumeric(): item = int(item) if item in items: print( t('Ya ha realizado esa selección, intente nuevamente' )) item = '' elif item not in range(len(copia)): print( t('La selección es incorrecta, intente nuevamente') ) item = '' else: if advertencias == True: print(t('Ha elegido ') + t(copia[item]), end='. ') items.append(item) pool -= 1 else: item = probar_input(item, copia) if item == '': print( t('La selección es incorrecta, intente nuevamente') + '\n') elif copia.index(item) in items: print( t('Ya ha realizado esa selección, intente nuevamente' )) item = '' else: if advertencias == True: print(t('Ha elegido ') + t(item), end='. ') items.append(copia.index(item)) pool -= 1 if advertencias == True: if not input(t('¿Estas seguro? ') + t('[S / N]') + ' ').strip().lower().startswith(t('s')): pool += 1 del items[-1] if vueltas == 1: return items[0] else: return items
def elegir_clase(claseprevia, CLASES, alineamiento): '''Provee un selector de clases.''' # genera dos listas con los nombres y abreviaturas compatibles con el alineamiento nom, abr = [], [] for i in range(len(CLASES)): if alineamiento in CLASES[str(i)]['Alineamientos']: nom.append(CLASES[str(i)]['Nombre']) abr.append(CLASES[str(i)]['Abr']) # genera un string que muestra las clases disponibles numeradas a partir de 0 imprimir = '' for i in range(len(nom)): if (i + 1) % 4 == 0 and nom[i] != nom[-1]: imprimir += str(i) + ': ' + nom[i] + '\n' else: imprimir += str(i) + ': ' + nom[i] + ' ' print(t('Elija una clase para este nivel'), end=' ') if claseprevia != '': # claseprevia es la clase elegida en el nivel anterior. print('[Enter: ' + claseprevia + ']') # presionando enter se autoelige esa clase, acelerando el proceso print('\n\n' + t('Las clases disponibles según el alineamiento son') + ': \n' + imprimir) cla = '?' while True: while cla == '?': cla = input('\n' + 'Clase: ').capitalize() if cla == '': if claseprevia == '': print('\n' + t('Debe seleccionar una clase')) cla = '?' else: # si hubo una clase previa, entonces '' es esa clase. cla = nom.index(claseprevia) elif cla.isnumeric(): cla = int(cla) if not 0 <= cla <= len(nom): print(t('Seleccione una clase válida.')) cla = '?' elif cla in abr: cla = abr.index(cla) else: cla = probar_input() if cla == '': print('\n' + t('Seleccione una clase válida.')) cla = '?' else: cla = nom.index(cla) print(t("Has seleccionado '") + nom[cla] + t("' como clase para este nivel."), end=' ') if not input(t('¿Estas seguro? ')).lower().startswith(t('s')): cla = '?' else: for Clase in CLASES: if nom[cla] == CLASES[Clase]['Nombre']: break break return str(Clase)