def build_defense_item(self, defense, planet = None): self.logger.info("building %s %s on planet %s" % (defense[1], defense[0], planet.name)) self.logger.info("Writing data to form") self.br.select_form(name='form') self.br.form.new_control('text','menge',{'value': defense[1]}) self.br.form.fixup() self.br['menge'] = defense[1] self.br.form.new_control('text','type',{'value':defense[0]}) self.br.form.fixup() self.br['type'] = defense[0] self.br.form.new_control('text','modus',{'value':'1'}) self.br.form.fixup() self.br['modus'] = '1' self.logger.info("Submitting build defense request") util.submit_request(self.br)
def send_fleet(self, origin_planet, coordinates, mission, ships, resources = None): """ Missions: 15 - Expedition, 7 - Colonization, 8 - Recycle, 3 - Transport, 4 - Transfer, 6 - Spy, 5 - Defend planet, 1 - Attack, 2 - Alliance attack, 9 - Destroy star """ if resources == None: resources = general.Resources(0, 0) if origin_planet.coordinates == coordinates: self.logger.error("Origin and destination are the same") return FleetResult.WrongParameters url = self.url_provider.get_page_url('fleet', origin_planet) resp = self.browser.open(url) try: self.browser.select_form(name='shipsChosen') except mechanize.FormNotFoundError: self.logger.error('The planet has no available ships') return FleetResult.NoAvailableShips # set ships to send soup = BeautifulSoup(resp.read(), "lxml") for ship, amount in ships.iteritems(): self.logger.info("Adding %d %s to the mission fleet" % (amount, ship.name)) control_name = "am" + str(ship.id) control = self.browser.form.find_control(control_name) # If there is no available ships exit if control.readonly == False: self.browser[control_name] = str(amount) else: self.logger.warning("Not enough %s to send" % ship.name) return FleetResult.NoAvailableShips util.submit_request(self.browser) # set target planet self.browser.select_form(name='details') self.browser["galaxy"] = coordinates.split(':')[0] self.browser["system"] = coordinates.split(':')[1] self.browser["position"] = coordinates.split(':')[2] util.submit_request(self.browser) # set mission and resouces to send self.browser.select_form(name='sendForm') self.browser.form.find_control('mission').readonly = False self.browser["mission"] = str(mission) self.browser["metal"] = str(resources.metal) self.browser["crystal"] = str(resources.crystal) self.browser["deuterium"] = str(resources.deuterium) util.submit_request(self.browser) self.logger.info("Sending %s %s from planet %s to coordinates %s" % (self.get_ships_list(ships), ("carrying %s" % resources) if resources != None else "", origin_planet.name, coordinates)) return FleetResult.Success