def idle(self, conn): if self.allDone(): msg = u"Конец!" if self.defeated(): msg = logic.getReward(self.target, time.time() - self.start_time) background.getUrlBackground("hack_done.php?", {"hackers": ",".join(x.getNode() for x in self.offenders.keys()), "target": self.target}) utils.sendConf(conn, self.name, msg, lambda sess, s: utils.leaveConf(conn, self.name)) return True if not self.offenders: self.revive() for l in [self.defenders, self.offenders]: [p.idle(conn, self.name) for p in l.values()] self.kickDeads(conn) currentTime = time.time() if currentTime > self.next_question: self.question = self.nextQuestion() self.next_question = currentTime + self.question.timeout #utils.sendConf(conn, self.name, u"%s (время: %d)" % (self.question.text, self.question.timeout)) utils.sendConf(conn, self.name, self.question.text) return False
def damage(self, conn, by, amount, conf): self.health -= amount self.attacks_sucessful += 1 print u"damaged %s by %s by %d" % (self, by, amount) utils.sendConf(conn, conf.name, u"%s damages %s by %d" % (by.name, self.name, amount)) if self.isDead() and by: background.getUrlBackground("hack_dead.php?", {"name":str(self.name),"n":str(logic.getHackerTagCount(self.attacks_defended, self.attacks_sucessful))}, conf) utils.sendPrivate(conn, self.name, u"You are terminated by %s" % by.name)
def printStats(self, conn, person, args): now = time.time() if self.stat_cooldown == None or now > self.stat_cooldown: userlist = [] for d in self.defenders.itervalues(): userlist.append("defender\t%s\t%s" % (d.name, d.health)) for o in self.offenders.itervalues(): userlist.append("offender\t%s\t%s" % (o.name, o.health)) msg = u"Conference info:\ntarget\t%s\nhealth\t%s\n\n%s" % (self.target, self.health, "\n".join(userlist)) utils.sendConf(conn, self.name, unicode(msg)) self.stat_cooldown = now + config.statCommandCooldown
def printStats(self, conn, person, args): now = time.time() if self.stat_cooldown == None or now > self.stat_cooldown: userlist = [] for d in self.defenders.itervalues(): userlist.append("defender\t%s\t%s" % (d.name, d.health)) for o in self.offenders.itervalues(): userlist.append("offender\t%s\t%s" % (o.name, o.health)) msg = u"Conference info:\ntarget\t%s\nhealth\t%s\n\n%s" % ( self.target, self.health, "\n".join(userlist)) utils.sendConf(conn, self.name, unicode(msg)) self.stat_cooldown = now + config.statCommandCooldown
def idle(self, conn): while not self.print_queue.empty(): res = self.print_queue.get() logging.info(u"receive result: %s", unicode(res)) # if timeout <= time.time(): utils.sendConf(conn, self.name, res[:MAX_RESULT]) if self.cmd_request_sent: utils.sendConf( conn, self.name, u"Time left: %d sec. Type command." % (int(self.defeated_timeout - time.time())) ) self.cmd_request_sent = None # else: # self.saved_message = (timeout, res) # if self.defeated_timeout: # utils.sendConf(conn, self.name, u"Time left: %d sec" % (int(self.defeated_timeout - time.time()))) if self.defeated(): # if self.saved_message and self.saved_message[0] <= time.time(): # utils.sendConf(conn, self.name, self.saved_message[1]) # self.saved_message = None if not self.defeated_commands: background.getUrlBackground( "hack_done.php?", {"hackers": ",".join(x.getNode() for x in self.offenders.keys()), "target": self.target}, ) rewards, score = logic.getRewardAndScore(self.target, time.time() - self.start_time) self.defeated_timeout = time.time() + score self.defeated_commands = rewards self.reward_person = None self.reward_timeout = None self.cmd_request_sent = None self.kickDefenders(conn) utils.sendConf(conn, self.name, u"Hacking done. Time left: %d sec. Type command." % (score)) logging.info(u"%s Hacking done. Time left: %d sec. Type command.", self.target, score) else: if time.time() > self.defeated_timeout: utils.sendConf( conn, self.name, u"Hacking finished. Connection terminated.", lambda sess, s: utils.leaveConf(conn, self.name), ) logging.info(u"%s Finish", self.target) return True if self.reward_timeout and time.time() > self.reward_timeout and not self.cmd_request_sent: self.cmd_request_sent = True background.getUrlBackground( "hack_cmd.php?", {"target": self.target, "cmd": self.reward_cmd, "args": " ".join(self.reward_args)}, self, ) if not self.offenders: self.revive() self.next_question = None self.start_time = None for l in [self.defenders, self.offenders]: [p.idle(conn, self) for p in l.values()] self.kickDeads(conn) if len(self.offenders) == 0 and len(self.defenders) == 0: return True if not self.defeated(): currentTime = time.time() if not self.next_question: if self.offenders: self.start_time = currentTime self.next_question = currentTime + random.randint(1, config.nextQuestionMaxTimeout) else: if currentTime > self.next_question: if self.question and self.offenders: person = random.choice(self.offenders.values()) person.damage( conn, Person(config.nickname, 0), logic.getSystemDamage(person, self.target, self.question), self, ) if logic.policeNotifyOnDamage(person.name): self.sendPoliceNotify(self.target) self.question = self.nextQuestion() logging.info("%s: new question: %s", self.target, self.question.text) self.next_question = currentTime + self.question.timeout utils.sendConf(conn, self.name, self.question.text) return False
def idle(self, conn): while not self.print_queue.empty(): res = self.print_queue.get() logging.info(u"receive result: %s", unicode(res)) # if timeout <= time.time(): utils.sendConf(conn, self.name, res[:MAX_RESULT]) if self.cmd_request_sent: utils.sendConf( conn, self.name, u"Time left: %d sec. Type command." % (int(self.defeated_timeout - time.time()))) self.cmd_request_sent = None # else: # self.saved_message = (timeout, res) # if self.defeated_timeout: # utils.sendConf(conn, self.name, u"Time left: %d sec" % (int(self.defeated_timeout - time.time()))) if self.defeated(): # if self.saved_message and self.saved_message[0] <= time.time(): # utils.sendConf(conn, self.name, self.saved_message[1]) # self.saved_message = None if not self.defeated_commands: background.getUrlBackground( "hack_done.php?", { "hackers": ",".join(x.getNode() for x in self.offenders.keys()), "target": self.target }) rewards, score = logic.getRewardAndScore( self.target, time.time() - self.start_time) self.defeated_timeout = time.time() + score self.defeated_commands = rewards self.reward_person = None self.reward_timeout = None self.cmd_request_sent = None self.kickDefenders(conn) utils.sendConf( conn, self.name, u"Hacking done. Time left: %d sec. Type command." % (score)) logging.info( u"%s Hacking done. Time left: %d sec. Type command.", self.target, score) else: if time.time() > self.defeated_timeout: utils.sendConf( conn, self.name, u"Hacking finished. Connection terminated.", lambda sess, s: utils.leaveConf(conn, self.name)) logging.info(u"%s Finish", self.target) return True if self.reward_timeout and time.time( ) > self.reward_timeout and not self.cmd_request_sent: self.cmd_request_sent = True background.getUrlBackground( "hack_cmd.php?", { "target": self.target, "cmd": self.reward_cmd, "args": " ".join(self.reward_args) }, self) if not self.offenders: self.revive() self.next_question = None self.start_time = None for l in [self.defenders, self.offenders]: [p.idle(conn, self) for p in l.values()] self.kickDeads(conn) if len(self.offenders) == 0 and len(self.defenders) == 0: return True if not self.defeated(): currentTime = time.time() if not self.next_question: if self.offenders: self.start_time = currentTime self.next_question = currentTime + random.randint( 1, config.nextQuestionMaxTimeout) else: if currentTime > self.next_question: if self.question and self.offenders: person = random.choice(self.offenders.values()) person.damage( conn, Person(config.nickname, 0), logic.getSystemDamage(person, self.target, self.question), self) if logic.policeNotifyOnDamage(person.name): self.sendPoliceNotify(self.target) self.question = self.nextQuestion() logging.info('%s: new question: %s', self.target, self.question.text) self.next_question = currentTime + self.question.timeout utils.sendConf(conn, self.name, self.question.text) return False
def damage(self, conn, by, amount, conf): self.health -= amount print "damaged %s by %s by %d" % (self, by, amount) utils.sendConf(conn, conf, u"%s наносит %s повреждений: %d" % (by.name, self.name, amount)) if self.isDead() and by: utils.sendPrivate(conn, by.name, u"Личный код атакующего %s" % self.name)
def printStats(self, conn, person, args): utils.sendConf(conn, self.name, str(self))
def printStats(self, conn, person, args): utils.sendConf(conn, self.name, unicode(self))
def idle(self, conn): while not self.print_queue.empty(): res, timeout = self.print_queue.get() print u"receive result: %s" % (res) if timeout <= time.time(): utils.sendConf(conn, self.name, res) else: self.saved_message = (timeout, res) # if self.defeated_timeout: # utils.sendConf(conn, self.name, u"Time left: %d sec" % (int(self.defeated_timeout - time.time()))) if self.defeated(): if self.saved_message and self.saved_message[0] <= time.time(): utils.sendConf(conn, self.name, self.saved_message[1]) self.saved_message = None if not self.defeated_commands: background.getUrlBackground("hack_done.php?", {"hackers": ",".join(x.getNode() for x in self.offenders.keys()), "target": self.target}) rewards, score = logic.getRewardAndScore(self.target, time.time() - self.start_time) self.defeated_timeout = time.time() + score self.defeated_commands = rewards print rewards self.reward_person = None self.reward_timeout = None self.kickDefenders(conn) utils.sendConf(conn, self.name, u"Hacking done. Time left: %d sec. Type command." % (score)) else: if time.time() > self.defeated_timeout: utils.sendConf(conn, self.name, u"Hacking finished. Connection terminated.", lambda sess, s: utils.leaveConf(conn, self.name)) return True if self.reward_timeout and time.time() > self.reward_timeout: self.reward_person = None self.reward_timeout = None self.saved_message = None utils.sendConf(conn, self.name, u"Time left: %d sec. Type command." % (int(self.defeated_timeout - time.time()))) return False if not self.offenders: self.revive() self.next_question = None self.start_time = None for l in [self.defenders, self.offenders]: [p.idle(conn, self) for p in l.values()] self.kickDeads(conn) currentTime = time.time() if not self.next_question: if self.offenders: self.start_time = currentTime self.next_question = currentTime + random.randint(1, config.nextQuestionMaxTimeout) else: if currentTime > self.next_question: if self.question and self.offenders: person = random.choice(self.offenders.values()) person.damage(conn, Person(config.nickname, 0), config.systemAttack, self) self.question = self.nextQuestion() self.next_question = currentTime + self.question.timeout utils.sendConf(conn, self.name, self.question.text) return False