def planearAbastecimiento(s, destino, origenes, faltantes): rutas = [] html = s.get(urlCiudad + destino) ciudadD = getCiudad(html) for i in range(5): faltante = faltantes[i] if faltante <= 0: continue for origen in origenes[i]: if faltante == 0: break html = s.get(urlCiudad + origen) ciudadO = getCiudad(html) disp = getRecursosDisponibles(html, num=True)[i] mandar = disp if disp < faltante else faltante faltante -= mandar if i == 0: ruta = (ciudadO, ciudadD, ciudadD['islandId'], mandar, 0, 0, 0, 0) elif i == 1: ruta = (ciudadO, ciudadD, ciudadD['islandId'], 0, mandar, 0, 0, 0) elif i == 2: ruta = (ciudadO, ciudadD, ciudadD['islandId'], 0, 0, mandar, 0, 0) elif i == 3: ruta = (ciudadO, ciudadD, ciudadD['islandId'], 0, 0, 0, mandar, 0) else: ruta = (ciudadO, ciudadD, ciudadD['islandId'], 0, 0, 0, 0, mandar) rutas.append(ruta) planearViajes(s, rutas)
def do_it(s, idsCiudades, ciudades_dict): for idCiudad in idsCiudades: html = s.get(urlCiudad + idCiudad) ciudad = getCiudad(html) ciudades_dict[idCiudad]['isla'] = ciudad['islandId'] while True: for idCiudad in idsCiudades: html = s.get(urlCiudad + idCiudad) madera = getRecursosDisponibles(html)[0] idIsla = ciudades_dict[idCiudad]['isla'] tipo = ciudades_dict[idCiudad]['tipo'] if tipo: s.post(payloadPost={'islandId': idIsla, 'type': tipo, 'action': 'IslandScreen', 'function': 'donate', 'donation': madera, 'backgroundView': 'island', 'templateView': 'resource', 'actionRequest': s.token(), 'ajax': '1'}) msg = _('Doné automaticamente.') sendToBotDebug(msg, debugON_botDonador) time.sleep(24*60*60)
def planearEntrenamientos(s, ciudad, entrenamientos): while True: total = 0 for entrenamiento in entrenamientos: for tropa in entrenamiento: total += tropa['cantidad'] if total == 0: return for entrenamiento in entrenamientos: esperarEntrenamiento(s, ciudad) html = s.get(urlCiudad + ciudad['id']) ciudadanosDisp = getCiudadanosDisponibles(html) recursos = getRecursosDisponibles(html, num=True) maderaDisp = recursos[0] vinoDisp = recursos[1] marmolDisp = recursos[2] cristalDisp = recursos[3] azufreDisp = recursos[4] for tropa in entrenamiento: tropa['entrenar'] = tropa['cantidad'] if 'wood' in tropa['costs']: limitante = maderaDisp // tropa['costs']['wood'] if limitante < tropa['entrenar']: tropa['entrenar'] = limitante if 'wine' in tropa['costs']: limitante = vinoDisp // tropa['costs']['wine'] if limitante < tropa['entrenar']: tropa['entrenar'] = limitante if 'marble' in ['costs']: limitante = marmolDisp // tropa['costs']['marble'] if limitante < tropa['entrenar']: tropa['entrenar'] = limitante if 'cristal' in ['costs']: limitante = cristalDisp // tropa['costs']['cristal'] if limitante < tropa['entrenar']: tropa['entrenar'] = limitante if 'sulfur' in tropa['costs']: limitante = azufreDisp // tropa['costs']['sulfur'] if limitante < tropa['entrenar']: tropa['entrenar'] = limitante if 'citizens' in tropa['costs']: limitante = ciudadanosDisp // tropa['costs']['citizens'] if limitante < tropa['entrenar']: tropa['entrenar'] = limitante if 'wood' in tropa['costs']: maderaDisp -= tropa['costs']['wood'] * tropa['entrenar'] if 'wine' in tropa['costs']: vinoDisp -= tropa['costs']['wine'] * tropa['entrenar'] if 'marble' in tropa['costs']: marmolDisp -= tropa['costs']['marble'] * tropa['entrenar'] if 'cristal' in ['costs']: cristalDisp -= tropa['costs']['cristal'] * tropa['entrenar'] if 'sulfur' in tropa['costs']: azufreDisp -= tropa['costs']['sulfur'] * tropa['entrenar'] if 'citizens' in tropa['costs']: ciudadanosDisp -= tropa['costs']['citizens'] * tropa[ 'entrenar'] tropa['cantidad'] -= tropa['entrenar'] total = 0 for tropa in entrenamiento: total += tropa['entrenar'] if total == 0: msg = _( 'No se pudo terminar de entrenar tropas por falta de recursos.' ) sendToBot(msg) return entrenar(s, ciudad, entrenamiento)
def entrenarTropas(s): banner() print(_('¿En qué ciudad quiere entrenar las tropas?')) ciudad = elegirCiudad(s) banner() for i in range(len(ciudad['position'])): if ciudad['position'][i]['building'] == 'barracks': ciudad['pos'] = str(i) break data = getCuartelInfo(s, ciudad) unidades_info = data[2][1] unidades = generateTroops(unidades_info) maxSize = 0 for unidad in unidades: if maxSize < len(unidad['local_name']): maxSize = len(unidad['local_name']) entrenamientos = [] while True: unidades = generateTroops(unidades_info) print(_('Entrenar:')) for unidad in unidades: cantidad = read(msg='{}{}:'.format( ' ' * (maxSize - len(unidad['local_name'])), unidad['local_name']), min=0, empty=True) if cantidad == '': cantidad = 0 unidad['cantidad'] = cantidad print(_('\nCosto total:')) costo = { 'madera': 0, 'vino': 0, 'marmol': 0, 'cristal': 0, 'azufre': 0, 'ciudadanos': 0, 'manuntencion': 0, 'tiempo': 0 } for unidad in unidades: if 'wood' in unidad['costs']: costo['madera'] += unidad['costs']['wood'] * unidad['cantidad'] if 'wine' in unidad['costs']: costo['vino'] += unidad['costs']['wine'] * unidad['cantidad'] if 'marble' in unidad['costs']: costo[ 'marmol'] += unidad['costs']['marble'] * unidad['cantidad'] if 'cristal' in unidad['costs']: costo['cristal'] += unidad['costs']['cristal'] * unidad[ 'cantidad'] if 'sulfur' in unidad['costs']: costo[ 'azufre'] += unidad['costs']['sulfur'] * unidad['cantidad'] if 'citizens' in unidad['costs']: costo['ciudadanos'] += unidad['costs']['citizens'] * unidad[ 'cantidad'] if 'upkeep' in unidad['costs']: costo['manuntencion'] += unidad['costs']['upkeep'] * unidad[ 'cantidad'] if 'completiontime' in unidad['costs']: costo['tiempo'] += unidad['costs']['completiontime'] * unidad[ 'cantidad'] if costo['madera']: print(_(' Madera: {}').format(addPuntos(costo['madera']))) if costo['vino']: print(_(' Vino: {}').format(addPuntos(costo['vino']))) if costo['marmol']: print(_(' Marmol: {}').format(addPuntos(costo['marmol']))) if costo['cristal']: print(_(' Cristal: {}').format(addPuntos(costo['cristal']))) if costo['azufre']: print(_(' Azufre: {}').format(addPuntos(costo['azufre']))) if costo['ciudadanos']: print(_(' Ciudadanos: {}').format(addPuntos(costo['ciudadanos']))) if costo['manuntencion']: print( _('Manutención: {}').format(addPuntos(costo['manuntencion']))) if costo['tiempo']: print( _(' Duración: {}').format( diasHorasMinutos(int(costo['tiempo'])))) print(_('\nProceder? [Y/n]')) rta = read(values=['y', 'Y', 'n', 'N', '']) if rta.lower() == 'n': return entrenamientos.append(unidades) print(_('\n¿Quiere entrenar más tropas al terminar? [y/N]')) rta = read(values=['y', 'Y', 'n', 'N', '']) if rta.lower() == 'y': banner() continue else: break recursos = getRecursosDisponibles(ciudad['html'], num=True) ciudadanos = getCiudadanosDisponibles(ciudad['html']) sobrante = {} sobrante['madera'] = recursos[0] sobrante['vino'] = recursos[1] sobrante['marmol'] = recursos[2] sobrante['cristal'] = recursos[3] sobrante['azufre'] = recursos[4] sobrante['ciudadanos'] = ciudadanos for entrenamiento in entrenamientos: for unidad in entrenamiento: if 'wood' in unidad['costs']: sobrante[ 'madera'] -= unidad['costs']['wood'] * unidad['cantidad'] if 'wine' in unidad['costs']: sobrante[ 'vino'] -= unidad['costs']['wine'] * unidad['cantidad'] if 'marble' in unidad['costs']: sobrante[ 'marmol'] -= unidad['costs']['marble'] * unidad['cantidad'] if 'cristal' in unidad['costs']: sobrante['cristal'] -= unidad['costs']['cristal'] * unidad[ 'cantidad'] if 'sulfur' in unidad['costs']: sobrante[ 'azufre'] -= unidad['costs']['sulfur'] * unidad['cantidad'] if 'citizens' in unidad['costs']: sobrante['ciudadanos'] -= unidad['costs']['citizens'] * unidad[ 'cantidad'] falta = [elem for elem in sobrante if sobrante[elem] < 0] != [] if falta: print(_('\nNo hay suficientes recursos:')) if sobrante['madera'] < 0: print( _(' Madera:{}').format(addPuntos(sobrante['madera'] * -1))) if sobrante['vino'] < 0: print(_(' Vino:{}').format(addPuntos(sobrante['vino'] * -1))) if sobrante['marmol'] < 0: print( _(' Marmol:{}').format(addPuntos(sobrante['marmol'] * -1))) if sobrante['cristal'] < 0: print( _(' Cristal:{}').format(addPuntos(sobrante['cristal'] * -1))) if sobrante['azufre'] < 0: print( _(' Azufre:{}').format(addPuntos(sobrante['azufre'] * -1))) if sobrante['ciudadanos'] < 0: print( _('Ciudadanos:{}').format( addPuntos(sobrante['ciudadanos'] * -1))) print(_('\n¿Proceder de todos modos? [Y/n]')) rta = read(values=['y', 'Y', 'n', 'N', '']) if rta.lower() == 'n': return print(_('\nSe entrenarán las tropas seleccionadas.')) enter() forkear(s) if s.padre is True: return info = _('\nEntreno tropas en {}\n').format(ciudad['cityName']) setInfoSignal(s, info) try: planearEntrenamientos(s, ciudad, entrenamientos) except: msg = _('Error en:\n{}\nCausa:\n{}').format(info, traceback.format_exc()) sendToBot(msg) finally: s.logout()
def subirEdificios(s): banner() ciudad = elegirCiudad(s) idCiudad = ciudad['id'] edificios = getEdificios(s, idCiudad) if edificios == []: return posEdificio = edificios[0] niveles = len(edificios) html = s.get(urlCiudad + idCiudad) ciudad = getCiudad(html) edificio = ciudad['position'][posEdificio] desde = int(edificio['level']) if edificio['isBusy']: desde += 1 hasta = desde + niveles try: (madera, vino, marmol, cristal, azufre) = recursosNecesarios(s, ciudad, edificio, desde, hasta) assert madera != 0 html = s.get(urlCiudad + idCiudad) (maderaDisp, vinoDisp, marmolDisp, cristalDisp, azufreDisp) = getRecursosDisponibles(html, num=True) if maderaDisp < madera or vinoDisp < vino or marmolDisp < marmol or cristalDisp < cristal or azufreDisp < azufre: print('\nFalta:') if maderaDisp < madera: print('{} de madera'.format(addPuntos(madera - maderaDisp))) if vinoDisp < vino: print('{} de vino'.format(addPuntos(vino - vinoDisp))) if marmolDisp < marmol: print('{} de marmol'.format(addPuntos(marmol - marmolDisp))) if cristalDisp < cristal: print('{} de cristal'.format(addPuntos(cristal - cristalDisp))) if azufreDisp < azufre: print('{} de azufre'.format(addPuntos(azufre - azufreDisp))) print('¿Proceder de todos modos? [Y/n]') rta = read(values=['y', 'Y', 'n', 'N', '']) if rta.lower() == 'n': return else: print('\nTiene materiales suficientes') print('¿Proceder? [Y/n]') rta = read(values=['y', 'Y', 'n', 'N', '']) if rta.lower() == 'n': return except AssertionError: pass forkear(s) if s.padre is True: return info = '\nSubir edificio\n' info = info + 'Ciudad: {}\nEdificio: {}.Desde {:d}, hasta {:d}'.format( ciudad['cityName'], edificio['name'], desde, hasta) setInfoSignal(s, info) try: subirEdificio(s, idCiudad, posEdificio, niveles) except: msg = 'Error en:\n{}\nCausa:\n{}'.format(info, traceback.format_exc()) sendToBot(msg) finally: s.logout()
def enviarVino(s): banner() vinoTotal = 0 dict_idVino_diponible = {} (idsCiudades, ciudades) = getIdsDeCiudades(s) ciudadesVino = {} for idCiudad in idsCiudades: esVino = ciudades[idCiudad]['tradegood'] == '1' if esVino: html = s.get(urlCiudad + idCiudad) ciudad = getCiudad(html) recursos = getRecursosDisponibles(html) disponible = int(recursos[1]) - 1000 # dejo 1000 por las dudas ciudad['disponible'] = disponible if disponible > 0 else 0 vinoTotal += ciudad['disponible'] ciudadesVino[idCiudad] = ciudad aEnviar = len(ciudades) - len(ciudadesVino) vinoXciudad = int(vinoTotal / aEnviar) maximo = addPuntos(vinoXciudad) if vinoXciudad > 100000: maximo = maximo[:-6] + '00.000' elif vinoXciudad > 10000: maximo = maximo[:-5] + '0.000' elif vinoXciudad > 1000: maximo = maximo[:-3] + '000' elif vinoXciudad > 100: maximo = maximo[:-2] + '00' elif vinoXciudad > 10: maximo = maximo[:-1] + '0' print('Se puede enviar como máximo {} a cada ciudad'.format(maximo)) cantidad = read(msg='¿Cuanto vino enviar a cada ciudad?:', min=0, max=vinoXciudad) print('\nPor enviar {} de vino a cada ciudad'.format(addPuntos(cantidad))) print('¿Proceder? [Y/n]') rta = read(values=['y', 'Y', 'n', 'N', '']) if rta.lower() == 'n': return forkear(s) if s.padre is True: return rutas = [] for idCiudadDestino in idsCiudades: if idCiudadDestino not in ciudadesVino: htmlD = s.get(urlCiudad + idCiudadDestino) ciudadD = getCiudad(htmlD) idIsla = ciudadD['islandId'] faltante = cantidad for idCiudadOrigen in ciudadesVino: if faltante == 0: break ciudadO = ciudadesVino[idCiudadOrigen] vinoDisponible = ciudadO['disponible'] for ruta in rutas: (origen, _, _, _, vn, _, _, _) = ruta if origen['id'] == idCiudadOrigen: vinoDisponible -= vn enviar = faltante if vinoDisponible > faltante else vinoDisponible faltante -= enviar ruta = (ciudadO, ciudadD, idIsla, 0, enviar, 0, 0, 0) rutas.append(ruta) info = '\nEnviar vino\n' for ruta in rutas: (ciudadO, ciudadD, idIsla, md, vn, mr, cr, az) = ruta info = info + '{} -> {}\nVino: {}\n'.format( ciudadO['cityName'], ciudadD['cityName'], addPuntos(vn)) setInfoSignal(s, info) try: planearViajes(s, rutas) except: msg = 'Error en:\n{}\nCausa:\n{}'.format(info, traceback.format_exc()) sendToBot(msg) finally: s.logout()