def splitFleet(fleetID): "splits a fleet into its ships" universe = fo.getUniverse() empireID = fo.empireID() fleet = universe.getFleet(fleetID) newfleets = [] if fleet == None: return [] if not fleet.ownedBy(empireID): return [] if len(list(fleet.shipIDs)) <= 1: # fleet with only one ship cannot be split return [fleetID] shipIDs = list( fleet.shipIDs ) for shipID in shipIDs[1:]: newFleetID = fo.issueNewFleetOrder("Fleet %d"%(shipID), shipID) if newFleetID: newFleet=universe.getFleet(newFleetID) if not newFleet: print "Error: newly split fleet %d not available from universe"%newFleetID fo.issueRenameOrder(newFleetID, "Fleet %5d"%newFleetID) #to ease review of debugging logs fo.issueAggressionOrder(newFleetID, True) role = foAI.foAIstate.getFleetRole(newFleetID) #and mission? foAI.foAIstate.getRating(newFleetID) # newfleets.append(newFleetID) foAI.foAIstate.newlySplitFleets[newFleetID]=True else: print "Error - got no fleet ID back after trying to split a ship from fleet %d"%fleetID foAI.foAIstate.getFleetRole(fleetID, forceNew=True) # foAI.foAIstate.updateFleetRating(fleetID) # foAI.foAIstate.ensureHaveFleetMissions(newfleets) return newfleets
def split_fleet(fleet_id): """Split a fleet into its ships. :param fleet_id: fleet to be split. :type fleet_id: int :return: New fleets. Empty if couldn't split. :rtype: list[int] """ universe = fo.getUniverse() empire_id = fo.empireID() fleet = universe.getFleet(fleet_id) newfleets = [] if fleet is None: return [] if not fleet.ownedBy(empire_id): return [] if len(list( fleet.shipIDs)) <= 1: # fleet with only one ship cannot be split return [] ship_ids = list(fleet.shipIDs) aistate = get_aistate() for ship_id in ship_ids[1:]: new_fleet_id = fo.issueNewFleetOrder("Fleet %4d" % ship_id, ship_id) if new_fleet_id: new_fleet = universe.getFleet(new_fleet_id) if not new_fleet: warn("Newly split fleet %d not available from universe" % new_fleet_id) fo.issueRenameOrder( new_fleet_id, "Fleet %4d" % new_fleet_id) # to ease review of debugging logs fo.issueAggressionOrder(new_fleet_id, True) aistate.update_fleet_rating(new_fleet_id) newfleets.append(new_fleet_id) aistate.newlySplitFleets[new_fleet_id] = True else: if fleet.systemID == INVALID_ID: warn( "Tried to split ship id (%d) from fleet %d when fleet is in starlane" % (ship_id, fleet_id)) else: warn( "Got no fleet ID back after trying to split ship id (%d) from fleet %d" % (ship_id, fleet_id)) aistate.get_fleet_role(fleet_id, force_new=True) aistate.update_fleet_rating(fleet_id) if newfleets: aistate.ensure_have_fleet_missions(newfleets) return newfleets
def startNewGame(aggression=fo.aggression.aggressive): # pylint: disable=invalid-name """Called by client when a new game is started (but not when a game is loaded). Should clear any pre-existing state and set up whatever is needed for AI to generate orders.""" empire = fo.getEmpire() if empire.eliminated: print "This empire has been eliminated. Ignoring new game start message." return turn_timer.start("Server Processing") print "New game started, AI Aggression level %d" % aggression # initialize AIstate global foAIstate foAIstate = AIstate.AIstate(aggression=aggression) foAIstate.session_start_cleanup() print "Initialized foAIstate class" planet_id = PlanetUtilsAI.get_capital() universe = fo.getUniverse() if planet_id is not None and planet_id != -1: planet = universe.getPlanet(planet_id) new_name = " ".join([random.choice(_capitals.get(aggression, []) or [" "]).strip(), planet.name]) print "Capitol City Names are: ", _capitals print "This Capitol New name is ", new_name res = fo.issueRenameOrder(planet_id, new_name) print "Capitol Rename attempt result: %d; planet now named %s" % (res, planet.name) diplomatic_corp_configs = {fo.aggression.beginner: DiplomaticCorp.BeginnerDiplomaticCorp, fo.aggression.maniacal: DiplomaticCorp.ManiacalDiplomaticCorp} global diplomatic_corp diplomatic_corp = diplomatic_corp_configs.get(aggression, DiplomaticCorp.DiplomaticCorp)()
def startNewGame(aggression_input=fo.aggression.aggressive): # pylint: disable=invalid-name """Called by client when a new game is started (but not when a game is loaded). Should clear any pre-existing state and set up whatever is needed for AI to generate orders.""" empire = fo.getEmpire() if empire is None: fatal("This client has no empire. Ignoring new game start message.") return if empire.eliminated: info( "This empire has been eliminated. Ignoring new game start message." ) return # initialize AIstate debug("Initializing AI state...") create_new_aistate(aggression_input) aistate = get_aistate() aggression_trait = aistate.character.get_trait(Aggression) debug("New game started, AI Aggression level %d (%s)" % (aggression_trait.key, get_trait_name_aggression(aistate.character))) aistate.session_start_cleanup() debug("Initialization of AI state complete!") debug("Trying to rename our homeworld...") planet_id = PlanetUtilsAI.get_capital() universe = fo.getUniverse() if planet_id is not None and planet_id != INVALID_ID: planet = universe.getPlanet(planet_id) new_name = " ".join([ random.choice(possible_capitals(aistate.character)).strip(), planet.name ]) debug(" Renaming to %s..." % new_name) res = fo.issueRenameOrder(planet_id, new_name) debug(" Result: %d; Planet is now named %s" % (res, planet.name)) _pre_game_start(empire.empireID, aistate)
def startNewGame(aggression_input=fo.aggression.aggressive): # pylint: disable=invalid-name """Called by client when a new game is started (but not when a game is loaded). Should clear any pre-existing state and set up whatever is needed for AI to generate orders.""" empire = fo.getEmpire() if empire.eliminated: print "This empire has been eliminated. Ignoring new game start message." return turn_timer.start("Server Processing") # initialize AIstate global foAIstate print "Initializing foAIstate..." foAIstate = AIstate.AIstate(aggression_input) aggression_trait = foAIstate.character.get_trait(Aggression) print "New game started, AI Aggression level %d (%s)" % ( aggression_trait.key, get_trait_name_aggression(foAIstate.character)) foAIstate.session_start_cleanup() print "Initialization of foAIstate complete!" print "Trying to rename our homeworld..." planet_id = PlanetUtilsAI.get_capital() universe = fo.getUniverse() if planet_id is not None and planet_id != INVALID_ID: planet = universe.getPlanet(planet_id) new_name = " ".join([random.choice(possible_capitals(foAIstate.character)).strip(), planet.name]) print " Renaming to %s..." % new_name res = fo.issueRenameOrder(planet_id, new_name) print " Result: %d; Planet is now named %s" % (res, planet.name) diplomatic_corp_configs = {fo.aggression.beginner: DiplomaticCorp.BeginnerDiplomaticCorp, fo.aggression.maniacal: DiplomaticCorp.ManiacalDiplomaticCorp} global diplomatic_corp diplomatic_corp = diplomatic_corp_configs.get(aggression_trait.key, DiplomaticCorp.DiplomaticCorp)() TechsListsAI.test_tech_integrity()
def startNewGame(aggression=fo.aggression.aggressive): # pylint: disable=invalid-name """Called by client when a new game is started (but not when a game is loaded). Should clear any pre-existing state and set up whatever is needed for AI to generate orders.""" empire = fo.getEmpire() if empire.eliminated: print "This empire has been eliminated. Ignoring new game start message." return turn_timer.start("Server Processing") print "New game started, AI Aggression level %d (%s)" % (aggression, UserString(_aggression_names[aggression])) # initialize AIstate global foAIstate print "Initializing foAIstate..." foAIstate = AIstate.AIstate(aggression) foAIstate.session_start_cleanup() print "Initialization of foAIstate complete!" print "Trying to rename our homeworld..." planet_id = PlanetUtilsAI.get_capital() universe = fo.getUniverse() if planet_id is not None and planet_id != -1: planet = universe.getPlanet(planet_id) new_name = " ".join([random.choice(_capitals.get(aggression, []) or [" "]).strip(), planet.name]) print " Renaming to %s..." % new_name res = fo.issueRenameOrder(planet_id, new_name) print " Result: %d; Planet is now named %s" % (res, planet.name) diplomatic_corp_configs = {fo.aggression.beginner: DiplomaticCorp.BeginnerDiplomaticCorp, fo.aggression.maniacal: DiplomaticCorp.ManiacalDiplomaticCorp} global diplomatic_corp diplomatic_corp = diplomatic_corp_configs.get(aggression, DiplomaticCorp.DiplomaticCorp)() TechsListsAI.test_tech_integrity()
def split_fleet(fleet_id): """Split a fleet into its ships. :param fleet_id: fleet to be split. :type fleet_id: int :return: New fleets. Empty if couldn't split. :rtype: list[int] """ universe = fo.getUniverse() empire_id = fo.empireID() fleet = universe.getFleet(fleet_id) newfleets = [] if fleet is None: return [] if not fleet.ownedBy(empire_id): return [] if len(list(fleet.shipIDs)) <= 1: # fleet with only one ship cannot be split return [] ship_ids = list(fleet.shipIDs) aistate = get_aistate() for ship_id in ship_ids[1:]: new_fleet_id = fo.issueNewFleetOrder("Fleet %4d" % ship_id, ship_id) if new_fleet_id: new_fleet = universe.getFleet(new_fleet_id) if not new_fleet: warn("Newly split fleet %d not available from universe" % new_fleet_id) fo.issueRenameOrder(new_fleet_id, "Fleet %4d" % new_fleet_id) # to ease review of debugging logs fo.issueAggressionOrder(new_fleet_id, True) aistate.update_fleet_rating(new_fleet_id) newfleets.append(new_fleet_id) aistate.newlySplitFleets[new_fleet_id] = True else: if fleet.systemID == INVALID_ID: warn("Tried to split ship id (%d) from fleet %d when fleet is in starlane" % ( ship_id, fleet_id)) else: warn("Got no fleet ID back after trying to split ship id (%d) from fleet %d" % ( ship_id, fleet_id)) aistate.get_fleet_role(fleet_id, force_new=True) aistate.update_fleet_rating(fleet_id) if newfleets: aistate.ensure_have_fleet_missions(newfleets) return newfleets
def split_ship_from_fleet(fleet_id, ship_id) -> int: """Try to split a ship from the fleet, creating a new fleet. :return: ID of the newly created fleet or INVALID_ID if failed """ universe = fo.getUniverse() fleet = universe.getFleet(fleet_id) if assertion_fails(fleet is not None): return INVALID_ID if assertion_fails(ship_id in fleet.shipIDs): return INVALID_ID if assertion_fails(fleet.numShips > 1, "Can't split last ship from fleet"): return INVALID_ID new_fleet_id = fo.issueNewFleetOrder("Fleet %4d" % ship_id, ship_id) if new_fleet_id != INVALID_ID: aistate = get_aistate() new_fleet = universe.getFleet(new_fleet_id) if not new_fleet: warning("Newly split fleet %d not available from universe" % new_fleet_id) debug("Successfully split ship %d from fleet %d into new fleet %d", ship_id, fleet_id, new_fleet_id) fo.issueRenameOrder(new_fleet_id, "Fleet %4d" % new_fleet_id) # to ease review of debugging logs fo.issueAggressionOrder(new_fleet_id, True) aistate.update_fleet_rating(new_fleet_id) aistate.newlySplitFleets[new_fleet_id] = True # register the new fleets so AI logic is aware of them sys_status = aistate.systemStatus.setdefault(fleet.systemID, {}) sys_status["myfleets"].append(new_fleet_id) sys_status["myFleetsAccessible"].append(new_fleet_id) else: if fleet.systemID == INVALID_ID: warning( "Tried to split ship id (%d) from fleet %d when fleet is in starlane" % (ship_id, fleet_id)) else: warning( "Got no fleet ID back after trying to split ship id (%d) from fleet %d" % (ship_id, fleet_id)) return new_fleet_id
def split_fleet(fleet_id): """Splits a fleet into its ships.""" universe = fo.getUniverse() empire_id = fo.empireID() fleet = universe.getFleet(fleet_id) newfleets = [] if fleet is None: return [] if not fleet.ownedBy(empire_id): return [] if len(list( fleet.shipIDs)) <= 1: # fleet with only one ship cannot be split return [] ship_ids = list(fleet.shipIDs) for ship_id in ship_ids[1:]: new_fleet_id = fo.issueNewFleetOrder("Fleet %4d" % ship_id, ship_id) if new_fleet_id: new_fleet = universe.getFleet(new_fleet_id) if not new_fleet: print "Error: newly split fleet %d not available from universe" % new_fleet_id fo.issueRenameOrder( new_fleet_id, "Fleet %4d" % new_fleet_id) # to ease review of debugging logs fo.issueAggressionOrder(new_fleet_id, True) foAI.foAIstate.get_rating(new_fleet_id) newfleets.append(new_fleet_id) foAI.foAIstate.newlySplitFleets[new_fleet_id] = True else: if fleet.systemID == -1: print "Error - tried to split ship id (%d) from fleet %d when fleet is in starlane" % ( ship_id, fleet_id) else: print "Error - got no fleet ID back after trying to split ship id (%d) from fleet %d" % ( ship_id, fleet_id) foAI.foAIstate.get_fleet_role(fleet_id, force_new=True) foAI.foAIstate.update_fleet_rating(fleet_id) if newfleets: foAI.foAIstate.ensure_have_fleet_missions(newfleets) return newfleets
def startNewGame(aggression=fo.aggression.aggressive): global __timerFile, lastTurnTimestamp, __timerBucketFile print "New game started, AI Agression level %d"%aggression # initialize AIstate global foAIstate foAIstate = AIstate.AIstate(aggression=aggression) foAIstate.sessionStartCleanup() print "Initialized foAIstate class" planetID = PlanetUtilsAI.getCapital() planet=None universe=fo.getUniverse() if planetID is not None: planet = universe.getPlanet(planetID) fo.issueRenameOrder(planetID, capitols.get(aggression, "")+planet.name) if __timerFile: __timerFile.close() if ResourcesAI.resourceTimerFile: ResourcesAI.resourceTimerFile.close() empireID = fo.getEmpire().empireID try: if os.path.exists("timers") and os.path.isdir("timers"): timerpath="timers"+os.path.sep+"timer_%02d.dat"%(empireID-1) __timerFile = open(timerpath, 'w') __timerFile.write("Turn\t" + "\t".join(__timerEntries) +'\n') timerBucketpath="timers"+os.path.sep+"timer_bucket_%02d.dat"%(empireID-1) __timerBucketFile = open(timerBucketpath, 'w') __timerBucketFile.write("Turn\t" + "\t".join(__timerBucketEntries) +'\n') lastTurnTimestamp = time() if ResourcesAI.doResourceTiming: ResourcesAI.resourceTimerFile = open("timers"+os.path.sep+"resourceTimer_%2d.dat"%(empireID-1), 'w') ResourcesAI.resourceTimerFile.write("Turn\t"+ "\t".join(ResourcesAI.__timerEntries)+"\n") print "timer file saved at "+timerpath except: __timerFile=None ResourcesAI.resourceTimerFile =None ResourcesAI.doResourceTiming = False print "Error: exception caught starting timing: ", traceback.format_exc() print "won't record timing info"
def split_fleet(fleetID): """splits a fleet into its ships""" universe = fo.getUniverse() empireID = fo.empireID() fleet = universe.getFleet(fleetID) newfleets = [] if fleet is None: return [] if not fleet.ownedBy(empireID): return [] if len(list(fleet.shipIDs)) <= 1: # fleet with only one ship cannot be split return [] shipIDs = list( fleet.shipIDs ) for shipID in shipIDs[1:]: newFleetID = fo.issueNewFleetOrder("Fleet %d"% shipID, shipID) if newFleetID: newFleet=universe.getFleet(newFleetID) if not newFleet: print "Error: newly split fleet %d not available from universe"%newFleetID fo.issueRenameOrder(newFleetID, "Fleet %5d"%newFleetID) #to ease review of debugging logs fo.issueAggressionOrder(newFleetID, True) role = foAI.foAIstate.get_fleet_role(newFleetID) #and mission? foAI.foAIstate.get_rating(newFleetID) # newfleets.append(newFleetID) foAI.foAIstate.newlySplitFleets[newFleetID]=True else: if fleet.systemID==-1: print "Error - tried to split ship id (%d) from fleet %d when fleet is in starlane"%(shipID, fleetID) else: print "Error - got no fleet ID back after trying to split ship id (%d) from fleet %d"%(shipID, fleetID) foAI.foAIstate.get_fleet_role(fleetID, forceNew=True) # foAI.foAIstate.update_fleet_rating(fleetID) # if newfleets: foAI.foAIstate.ensure_have_fleet_missions(newfleets) return newfleets
def split_ship_from_fleet(fleet_id, ship_id): universe = fo.getUniverse() fleet = universe.getFleet(fleet_id) if assertion_fails(fleet is not None): return if assertion_fails(ship_id in fleet.shipIDs): return if assertion_fails(fleet.numShips > 1, "Can't split last ship from fleet"): return new_fleet_id = fo.issueNewFleetOrder("Fleet %4d" % ship_id, ship_id) if new_fleet_id: aistate = get_aistate() new_fleet = universe.getFleet(new_fleet_id) if not new_fleet: warn("Newly split fleet %d not available from universe" % new_fleet_id) debug("Successfully split ship %d from fleet %d into new fleet %d", ship_id, fleet_id, new_fleet_id) fo.issueRenameOrder(new_fleet_id, "Fleet %4d" % new_fleet_id) # to ease review of debugging logs fo.issueAggressionOrder(new_fleet_id, True) aistate.update_fleet_rating(new_fleet_id) aistate.newlySplitFleets[new_fleet_id] = True else: if fleet.systemID == INVALID_ID: warn( "Tried to split ship id (%d) from fleet %d when fleet is in starlane" % (ship_id, fleet_id)) else: warn( "Got no fleet ID back after trying to split ship id (%d) from fleet %d" % (ship_id, fleet_id)) return new_fleet_id
def startNewGame(aggression_input=fo.aggression.aggressive): # pylint: disable=invalid-name """Called by client when a new game is started (but not when a game is loaded). Should clear any pre-existing state and set up whatever is needed for AI to generate orders.""" empire = fo.getEmpire() if empire is None: print "This client has no empire. Ignoring new game start message." return if empire.eliminated: info( "This empire has been eliminated. Ignoring new game start message." ) return turn_timer.start("Server Processing") # initialize AIstate global foAIstate debug("Initializing foAIstate...") foAIstate = AIstate.AIstate(aggression_input) aggression_trait = foAIstate.character.get_trait(Aggression) debug( "New game started, AI Aggression level %d (%s)" % (aggression_trait.key, get_trait_name_aggression(foAIstate.character))) foAIstate.session_start_cleanup() debug("Initialization of foAIstate complete!") debug("Trying to rename our homeworld...") planet_id = PlanetUtilsAI.get_capital() universe = fo.getUniverse() if planet_id is not None and planet_id != INVALID_ID: planet = universe.getPlanet(planet_id) new_name = " ".join([ random.choice(possible_capitals(foAIstate.character)).strip(), planet.name ]) debug(" Renaming to %s..." % new_name) res = fo.issueRenameOrder(planet_id, new_name) debug(" Result: %d; Planet is now named %s" % (res, planet.name)) diplomatic_corp_configs = { fo.aggression.beginner: DiplomaticCorp.BeginnerDiplomaticCorp, fo.aggression.maniacal: DiplomaticCorp.ManiacalDiplomaticCorp } global diplomatic_corp diplomatic_corp = diplomatic_corp_configs.get( aggression_trait.key, DiplomaticCorp.DiplomaticCorp)() TechsListsAI.test_tech_integrity()
def startNewGame(aggression=fo.aggression.aggressive): # pylint: disable=invalid-name "called by client at start of new game" global _timerFile, _lastTurnTimestamp, _timerBucketFile print "New game started, AI Agression level %d"% aggression # initialize AIstate global foAIstate foAIstate = AIstate.AIstate(aggression = aggression) foAIstate.sessionStartCleanup() print "Initialized foAIstate class" planet_id = PlanetUtilsAI.getCapital() planet = None universe = fo.getUniverse() if planet_id is not None and planet_id != -1: planet = universe.getPlanet(planet_id) new_name = random.choice(_capitols.get(aggression, [""]).split('\n')).strip() + " " + planet.name print "Capitol City Names are: ", _capitols print "This Capitol New name is ", new_name res = fo.issueRenameOrder(planet_id, new_name) print "Capitol Rename attempt result: %d; planet now named %s"% (res, planet.name) if _timerFile: _timerFile.close() if ResourcesAI.resourceTimerFile: ResourcesAI.resourceTimerFile.close() empire_id = fo.getEmpire().empireID try: if os.path.exists("timers") and os.path.isdir("timers"): timerpath = "timers"+os.path.sep+"timer_%02d.dat"% (empire_id-1) _timerFile = open(timerpath, 'w') _timerFile.write("Turn\t" + "\t".join(timerEntries ) +'\n') timerbucketpath = "timers"+os.path.sep+"timer_bucket_%02d.dat"% (empire_id-1) _timerBucketFile = open(timerbucketpath, 'w') _timerBucketFile.write("Turn\t" + "\t".join(_timerBucketEntries) +'\n') _lastTurnTimestamp = time() if ResourcesAI.doResourceTiming: ResourcesAI.resourceTimerFile = open("timers"+os.path.sep+"resourceTimer_%2d.dat"%(empire_id-1), 'w') ResourcesAI.resourceTimerFile.write("Turn\t"+ "\t".join(ResourcesAI.timer_entries)+"\n") print "timer file saved at " + timerpath except: _timerFile = None ResourcesAI.resourceTimerFile = None ResourcesAI.doResourceTiming = False print "Error: exception caught starting timing: ", traceback.format_exc() print "won't record timing info"
def startNewGame(aggression=fo.aggression.aggressive): # pylint: disable=invalid-name """Called by client when a new game is started (but not when a game is loaded). Should clear any pre-existing state and set up whatever is needed for AI to generate orders.""" turn_timer.start("Server Processing") print "New game started, AI Aggression level %d" % aggression # initialize AIstate global foAIstate foAIstate = AIstate.AIstate(aggression=aggression) foAIstate.session_start_cleanup() print "Initialized foAIstate class" planet_id = PlanetUtilsAI.get_capital() universe = fo.getUniverse() if planet_id is not None and planet_id != -1: planet = universe.getPlanet(planet_id) new_name = random.choice(_capitols.get(aggression, "").split('\n')).strip() + " " + planet.name print "Capitol City Names are: ", _capitols print "This Capitol New name is ", new_name res = fo.issueRenameOrder(planet_id, new_name) print "Capitol Rename attempt result: %d; planet now named %s" % (res, planet.name)
def startNewGame(aggression=fo.aggression.aggressive): # pylint: disable=invalid-name """Called by client when a new game is started (but not when a game is loaded). Should clear any pre-existing state and set up whatever is needed for AI to generate orders.""" turn_timer.start("Server Processing") print "New game started, AI Aggression level %d" % aggression # initialize AIstate global foAIstate foAIstate = AIstate.AIstate(aggression=aggression) foAIstate.session_start_cleanup() print "Initialized foAIstate class" planet_id = PlanetUtilsAI.get_capital() universe = fo.getUniverse() if planet_id is not None and planet_id != -1: planet = universe.getPlanet(planet_id) new_name = random.choice(_capitols.get( aggression, "").split('\n')).strip() + " " + planet.name print "Capitol City Names are: ", _capitols print "This Capitol New name is ", new_name res = fo.issueRenameOrder(planet_id, new_name) print "Capitol Rename attempt result: %d; planet now named %s" % ( res, planet.name)