예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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()
예제 #5
0
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()
예제 #6
0
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()