コード例 #1
0
ファイル: DiplomaticCorp.py プロジェクト: zeners/freeorion
 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
コード例 #2
0
ファイル: DiplomaticCorp.py プロジェクト: matthoppe/freeorion
 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)
コード例 #3
0
ファイル: DiplomaticCorp.py プロジェクト: matthoppe/freeorion
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)
コード例 #4
0
 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)
コード例 #5
0
ファイル: DiplomaticCorp.py プロジェクト: zeners/freeorion
 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)
コード例 #6
0
ファイル: DiplomaticCorp.py プロジェクト: matthoppe/freeorion
 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)
コード例 #7
0
 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)
コード例 #8
0
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
コード例 #9
0
ファイル: DiplomaticCorp.py プロジェクト: zeners/freeorion
 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)