示例#1
0
 def onMessage(self, conn, msg):
     person = self.registry[msg.getFrom().getResource()]
     if not self.findPerson(person):
         return
     print u"message from %s: %s" % (person, msg.getBody())
     if not self.defeated_commands and self.question and utils.sEq(msg.getBody(), self.question.answer):            
         if person in self.offenders:
             damage = logic.getDamage(person, self.target)
             self.health -= damage
             if not self.defeated():
                 utils.answerConf(conn, msg, u"System damaged: %d, left: %d" % (damage, self.health))
         else:
             return
         self.question = None
         self.next_question = time.time() + random.randint(1, config.nextQuestionMaxTimeout)
     else:
         if not msg.getBody(): return
         parts = [utils.normalize(x) for x in msg.getBody().strip().split(" ")]
         if parts:
             if self.defeated_commands and parts[0] in logic.availableRewards():
                 if parts[0] in self.defeated_commands:
                     print u"reward command: %s" % (parts[0])
                     if not self.reward_person:
                         self.rewardCommand(conn, person, parts[0], parts[1:])
                 else:
                     utils.answerConf(conn, msg, u"Command %s is unsupported by target. Time left: %d" % (parts[0], int(self.defeated_timeout - time.time())))
             else:
                 {"stat": self.printStats, "attack": self.scheduleAttack, "defend": self.doDefend}.get(parts[0], lambda x, y, z: None)(conn, person, parts[1:])
示例#2
0
    def onMessage(self, conn, msg):
        person = self.registry[msg.getFrom().getResource()]
        if not self.findPerson(person):
            return
        if self.question and utils.sEq(msg.getBody(), self.question.answer):            
            if person in self.offenders:
                damage = logic.getDamage(person, self.target)
                self.health -= damage
                if not self.defeated():
                    utils.answerConf(conn, msg, u"Нанесено урона: %d, осталось: %d" % (damage, self.health))
            elif person in self.defenders:
                for p in self.offenders.itervalues():
                    p.damage(conn, self.findPerson(person), logic.getDefenderDamage(person, self.target), self.name)
            else:
                return
            
            self.kickDeads(conn)

            self.question = None
            self.next_question = time.time() + 1
        else:
            parts = [utils.normalize(x) for x in msg.getBody().strip().split(" ")]
            if parts:
                {"stat": self.printStats, "attack": self.scheduleAttack, "defend": self.doDefend}.get(parts[0], lambda x, y, z: None)(conn, person, parts[1:])