Пример #1
0
    def handler(cls, attacker, victim_codename):
        logging.info("SNIPE start.")

        victim = Util.get_victim(victim_codename)

        logging.info("Attacker {}".format(attacker))
        logging.info("Victim {}".format(victim))

        """ validation """
        outgoing = []
        try:
            Kill.validate_kill(attacker, victim)
            if attacker.role != "SNIPER":
                raise MeError("not SNIPER")
        except (TeamError, MeError, TargetError) as message:
            outgoing.append((WEI_HAN, message.message))
            outgoing.append((attacker.key.id(), message.message))
            return outgoing
        except:
            message = "[ERR] Unknown Error in SNIPE"
            outgoing.append((WEI_HAN, message))
            outgoing.append((attacker.key.id(), message))
            return outgoing

        action = Action()
        action.attacker = attacker.key.id()
        action.action = "SNIPE"
        action.victim = victim.key.id()
        action.datetime = datetime.now()
        action_key = action.put()

        attacker = Player.get_by_id(action.attacker)
        attacker.killed.append(str(action_key.id()))
        attacker.put()

        victim.state = "DEAD"
        victim.killed_by = str(action_key.id())
        victim.put()

        message = "{} has been SNIPED.".format(victim_codename)
        outgoing.append((victim.key.id(), "You have been SNIPED. (Ref {}).".\
                format(action_key.id())))
        outgoing.append(("*", message))
        outgoing += Team.push(Team.get_by_id(victim.team))
        return outgoing
Пример #2
0
    def handler(cls, attacker, params):

        if len(params) == 0:
            raise CommandError("Parameter {}".format(params))

        victim = Util.get_victim(params[0])
        Disarm.validate_disarm(attacker, victim)

        action = Action()
        action.attacker = attacker.key.id()
        action.action = "DISARM"
        action.victim = victim.key.id()
        action.datetime = datetime.now()
        action.need_validation = True
        action_key = action.put()

        return [(action.victim, "{} claimed to have disarm you. "
            "[REPLY {}] Y/N.".format(attacker.realname, action_key.id()))]
Пример #3
0
    def handler(cls, attacker, victim_codename):
        logging.info("SNIPE start.")

        victim = Util.get_victim(victim_codename)

        logging.info("Attacker {}".format(attacker))
        logging.info("Victim {}".format(victim))
        """ validation """
        outgoing = []
        try:
            Kill.validate_kill(attacker, victim)
            if attacker.role != "SNIPER":
                raise MeError("not SNIPER")
        except (TeamError, MeError, TargetError) as message:
            outgoing.append((WEI_HAN, message.message))
            outgoing.append((attacker.key.id(), message.message))
            return outgoing
        except:
            message = "[ERR] Unknown Error in SNIPE"
            outgoing.append((WEI_HAN, message))
            outgoing.append((attacker.key.id(), message))
            return outgoing

        action = Action()
        action.attacker = attacker.key.id()
        action.action = "SNIPE"
        action.victim = victim.key.id()
        action.datetime = datetime.now()
        action_key = action.put()

        attacker = Player.get_by_id(action.attacker)
        attacker.killed.append(str(action_key.id()))
        attacker.put()

        victim.state = "DEAD"
        victim.killed_by = str(action_key.id())
        victim.put()

        message = "{} has been SNIPED.".format(victim_codename)
        outgoing.append((victim.key.id(), "You have been SNIPED. (Ref {}).".\
                format(action_key.id())))
        outgoing.append(("*", message))
        outgoing += Team.push(Team.get_by_id(victim.team))
        return outgoing
Пример #4
0
    def handler(cls, attacker, params):
        logging.info("KILL start")

        victim = Util.get_victim(params[0])

        Kill.validate_kill(attacker, victim)

        action = Action()
        action.attacker = attacker.key.id()
        action.action = "KILL"
        action.victim = victim.key.id()
        action.datetime = datetime.now()
        action.need_validation = True
        action_key = action.put()

        logging.info("KILL finish")

        return [(action.victim, "{} claimed to have killed you. "
            "[REPLY {}] Y/N.".format(attacker.realname, action_key.id()))]
Пример #5
0
    def handler(cls, attacker, params):
        logging.info("KILL start")

        victim = Util.get_victim(params[0])

        Kill.validate_kill(attacker, victim)

        action = Action()
        action.attacker = attacker.key.id()
        action.action = "KILL"
        action.victim = victim.key.id()
        action.datetime = datetime.now()
        action.need_validation = True
        action_key = action.put()

        logging.info("KILL finish")

        return [
            (
                action.victim,
                "{} claimed to have killed you. " "[REPLY {}] Y/N.".format(attacker.realname, action_key.id()),
            )
        ]
Пример #6
0
    def handler(cls, attacker, params):
        """ Validation """
        if len(params) != 5:
            raise CommandError("INVUL - {}".format(params))

        if attacker.state == "DEAD":
            raise MeError("DEAD")

        if attacker.role != "MEDIC":
            raise MeError("not MEDIC")

        target_codename = params.pop(0)
        target = Util.get_victim(target_codename)

        if target.team != attacker.team:
            raise TeamError

        if target.state == "DEAD":
            raise TargetError("DEAD")

        chi_start_time = datetime(year=2016, month=int(params[0]),\
                day=int(params[1]), hour=int(params[2]),\
                minute=int(params[3]))
        utc_start_time = Util.chi_to_utc(chi_start_time)
        utc_end_time = utc_start_time + timedelta(hours=8)

        if utc_start_time < datetime.now():
            raise TimeError(chi_start_time, Util.utc_to_chi(datetime.now()))

        if datetime.now() < attacker.can_set_after:
            raise TimeError("invul", Util.utc_to_chi(attacker.can_set_after))

        """ Make new Invul """
        invul = Invul()
        invul.medic = attacker.key.id()
        invul.target = target.key.id()
        invul.start_time = utc_start_time
        invul.end_time = utc_end_time

        """ Invalidate old invul """
        try:
            old_invul = Invul.get_by_id(attacker.item)
            logging.info("INVUL: invalidating old invul with id {}".\
                    format(attacker.item))
            if old_invul.in_effect or old_invul.deprecated:
                raise TimeError("invul" "midnight")
            old_invul.deprecated = True
            old_invul.put()
        except:
            logging.info("INVUL: unable to invalidate old invul")

        invul_key = invul.put()
        attacker.item = invul_key.id()
        attacker.put()

        task = taskqueue.Task(url="/invul", params={"id": invul_key.id()},\
                eta = utc_start_time)
        task.add(queue_name="invul")

        return [(invul.medic, "Invul will been set for {} from {} to {}.".\
                format(target_codename,\
                chi_start_time.strftime("%m-%d %I:%M%p"),
                Util.utc_to_chi(utc_end_time).strftime("%m-%d %I:%M%p")))]