def handle_midgame_chat(self, sender_player_id, message_txt): debug("Midgame chat received from player %d, message: %s" % (sender_player_id, message_txt)) if fo.playerIsAI(sender_player_id) or not self.be_chatty: return if "BE QUIET" in message_txt.upper(): possible_acknowledgments = UserStringList( "AI_BE_QUIET_ACKNOWLEDGEMENTS__LIST") acknowledgement = random.choice(possible_acknowledgments) debug( "Acknowledging 'Be Quiet' chat request with initial message (from %d choices): '%s'" % (len(possible_acknowledgments), acknowledgement)) fo.sendChatMessage(sender_player_id, acknowledgement) self.be_chatty = False return if random.random() > 0.25: return possible_acknowledgments = UserStringList( "AI_MIDGAME_ACKNOWLEDGEMENTS__LIST") acknowledgement = random.choice(possible_acknowledgments) debug( "Acknowledging midgame chat with initial message (from %d choices): '%s'" % (len(possible_acknowledgments), acknowledgement)) fo.sendChatMessage(sender_player_id, acknowledgement) self.be_chatty = False
def get_first_turn_greet_message(): greet_lists = { fo.aggression.beginner: "BEGINNER", fo.aggression.turtle: "TURTLE", fo.aggression.cautious: "CAUTIOUS", fo.aggression.typical: "TYPICAL", fo.aggression.aggressive: "AGGRESSIVE", fo.aggression.maniacal: "MANIACAL", } key = "AI_FIRST_TURN_GREETING_LIST_%s" % greet_lists[foAI.foAIstate.aggression] greets = UserStringList(key) # no such entry if len(greets) == 1 and greets[0] == 'ERROR: %s' % key: greets = UserStringList("AI_FIRST_TURN_GREETING_BEGINNER") return random.choice(greets)
def handle_pregame_chat(sender_player_id, message_txt): if fo.playerIsAI(sender_player_id): return possible_acknowledgments = UserStringList("AI_PREGAME_ACKNOWLEDGEMENTS__LIST") acknowledgement = random.choice(possible_acknowledgments) print "Acknowledging pregame chat with initial message (from %d choices): '%s'" % ( len(possible_acknowledgments), acknowledgement) fo.sendChatMessage(sender_player_id, acknowledgement)
def handle_midgame_chat(self, sender_player_id, message_txt): print "Midgame chat received from player %d, message: %s" % (sender_player_id, message_txt) if fo.playerIsAI(sender_player_id): return possible_acknowledgments = UserStringList("AI_MIDGAME_ACKNOWLEDGEMENTS__LIST") acknowledgement = random.choice(possible_acknowledgments) print "Acknowledging midgame chat with initial message (from %d choices): '%s'" % ( len(possible_acknowledgments), acknowledgement) fo.sendChatMessage(sender_player_id, acknowledgement)
def handle_diplomatic_message(self, message): """Handle a diplomatic message update from the server, such as if another player declares war, accepts peace, or cancels a proposed peace treaty. :param message: message.recipient and message.sender are respective empire IDs :return: """ debug("Received diplomatic %s message from %s to %s." % (message.type, fo.getEmpire( message.sender), 'me' if message.recipient == fo.empireID() else fo.getEmpire(message.recipient))) # TODO: remove the following early return once proper support for third party diplomatic history is added if message.recipient != fo.empireID(): return aistate = get_aistate() if message.type == fo.diplomaticMessageType.peaceProposal: aistate.log_peace_request(message.sender, message.recipient) proposal_sender_player = fo.empirePlayerID(message.sender) attitude = aistate.character.attitude_to_empire( message.sender, aistate.diplomatic_logs) possible_acknowledgments = [] aggression = aistate.character.get_trait(Aggression) if aggression.key <= fo.aggression.typical: possible_acknowledgments = UserStringList( "AI_PEACE_PROPOSAL_ACKNOWLEDGEMENTS_MILD_LIST") if attitude > 0: possible_replies = UserStringList( "AI_PEACE_PROPOSAL_RESPONSES_YES_MILD_LIST") else: possible_replies = UserStringList( "AI_PEACE_PROPOSAL_RESPONSES_NO_MILD_LIST") else: possible_acknowledgments = UserStringList( "AI_PEACE_PROPOSAL_ACKNOWLEDGEMENTS_HARSH_LIST") if attitude > 0: possible_replies = UserStringList( "AI_PEACE_PROPOSAL_RESPONSES_YES_HARSH_LIST") else: possible_replies = UserStringList( "AI_PEACE_PROPOSAL_RESPONSES_NO_HARSH_LIST") acknowledgement = random.choice(possible_acknowledgments) reply_text = random.choice(possible_replies) debug( "Acknowledging proposal with initial message (from %d choices): '%s'" % (len(possible_acknowledgments), acknowledgement)) fo.sendChatMessage(proposal_sender_player, acknowledgement) if attitude > 0: diplo_reply = fo.diplomaticMessage( message.recipient, message.sender, fo.diplomaticMessageType.acceptPeaceProposal) debug("Sending diplomatic message to empire %s of type %s" % (message.sender, diplo_reply.type)) fo.sendDiplomaticMessage(diplo_reply) debug( "sending chat to player %d of empire %d, message body: '%s'" % (proposal_sender_player, message.sender, reply_text)) fo.sendChatMessage(proposal_sender_player, reply_text) elif message.type == fo.diplomaticMessageType.warDeclaration: # note: apparently this is currently (normally?) sent not as a warDeclaration, # but as a simple diplomatic_status_update to war aistate.log_war_declaration(message.sender, message.recipient)
def handle_diplomatic_message(self, message): """Handle a diplomatic message update from the server, such as if another player declares war, accepts peace, or cancels a proposed peace treaty. :param message: message.recipient and message.sender are respective empire IDs :return: """ print "Received diplomatic %s message from %s to %s." % ( message.type, fo.getEmpire(message.sender), 'me' if message.recipient == fo.empireID() else fo.getEmpire(message.recipient)) # TODO: remove the following early return once proper support for third party diplomatic history is added if message.recipient != fo.empireID(): return if message.type == fo.diplomaticMessageType.peaceProposal: foAI.foAIstate.log_peace_request(message.sender, message.recipient) proposal_sender_player = fo.empirePlayerID(message.sender) suffix = "MILD" if foAI.foAIstate.aggression <= fo.aggression.typical else "HARSH" possible_acknowledgments = UserStringList("AI_PEACE_PROPOSAL_ACKNOWLEDGEMENTS_" + suffix + "_LIST") acknowledgement = random.choice(possible_acknowledgments) print "Acknowledging proposal with initial message (from %d choices): '%s'" % ( len(possible_acknowledgments), acknowledgement) fo.sendChatMessage(proposal_sender_player, acknowledgement) attitude = self.evaluate_diplomatic_attitude(message.sender) if attitude > 0: reply_text = random.choice(UserStringList("AI_PEACE_PROPOSAL_RESPONSES_YES_" + suffix + "_LIST")) diplo_reply = fo.diplomaticMessage(message.recipient, message.sender, fo.diplomaticMessageType.acceptProposal) print "Sending diplomatic message to empire %s of type %s" % (message.sender, diplo_reply.type) fo.sendDiplomaticMessage(diplo_reply) else: reply_text = random.choice(UserStringList("AI_PEACE_PROPOSAL_RESPONSES_NO_" + suffix + "_LIST")) print "sending chat to player %d of empire %d, message body: '%s'" % ( proposal_sender_player, message.sender, reply_text) fo.sendChatMessage(proposal_sender_player, reply_text) elif message.type == fo.diplomaticMessageType.warDeclaration: # note: apparently this is currently (normally?) sent not as a warDeclaration, # but as a simple diplomatic_status_update to war foAI.foAIstate.log_war_declaration(message.sender, message.recipient)
def get_first_turn_greet_message(): greet_lists = { fo.aggression.beginner: UserStringList("AI_FIRST_TURN_GREETING_LIST_BEGINNER"), fo.aggression.turtle: UserStringList("AI_FIRST_TURN_GREETING_LIST_TURTLE"), fo.aggression.cautious: UserStringList("AI_FIRST_TURN_GREETING_LIST_CAUTIOUS"), fo.aggression.typical: UserStringList("AI_FIRST_TURN_GREETING_LIST_TYPICAL"), fo.aggression.aggressive: UserStringList("AI_FIRST_TURN_GREETING_LIST_AGGRESSIVE"), fo.aggression.maniacal: UserStringList("AI_FIRST_TURN_GREETING_LIST_MANIACAL"), } greets = greet_lists.get( foAI.foAIstate.aggression, UserStringList("AI_FIRST_TURN_GREETING_LIST_BEGINNER")) # no such entry if len(greets) == 1 and greets[0] == 'ERROR: %s' % key: greets = UserStringList("AI_FIRST_TURN_GREETING_LIST_BEGINNER") return random.choice(greets)
from freeorion_tools import UserStringList, chat_on_error, print_error from freeorion_debug import Timer main_timer = Timer('timer', write_log=True) turn_timer = Timer('bucket', write_log=True) using_statprof = False try: import statprof # statprof.start() # using_statprof = True except: pass _capitals = {fo.aggression.beginner: UserStringList("AI_CAPITOL_NAMES_BEGINNER"), fo.aggression.turtle: UserStringList("AI_CAPITOL_NAMES_TURTLE"), fo.aggression.cautious: UserStringList("AI_CAPITOL_NAMES_CAUTIOUS"), fo.aggression.typical: UserStringList("AI_CAPITOL_NAMES_TYPICAL"), fo.aggression.aggressive: UserStringList("AI_CAPITOL_NAMES_AGGRESSIVE"), fo.aggression.maniacal: UserStringList("AI_CAPITOL_NAMES_MANIACAL")} # AIstate foAIstate = None diplomatic_corp = None def initFreeOrionAI(): # pylint: disable=invalid-name """Called by client when Python AI starts, before any game new game starts or saved game is resumed.""" ai_config = fo.getAIConfigStr() print "Initialized FreeOrion Python AI with ai_config string '%s'" % ai_config
def get_first_turn_greet_message(): greets = possible_greetings(get_aistate().character) # no such entry if len(greets) == 1 and greets[0] == '?': greets = UserStringList("AI_FIRST_TURN_GREETING_BEGINNER") return random.choice(greets)