Example #1
0
    def use(self, loult_state, server, obj_params):
        # user decides to use it on someone else, meaning throwing it
        if obj_params:
            target_id, target = self._acquire_target(server, obj_params)
            if target is None:
                return

            target_dist = userlist_dist(server.channel_obj,
                                        server.user.user_id, target_id)
            if target_dist > 1:
                return server.send_json(
                    type="notification",
                    msg="Trop loin pour lancer la bouteille dessus!")

            server.channel_obj.broadcast(
                type="notification",
                msg="%s lance une bouteille de whisky sur %s" %
                (server.user.poke_params.fullname,
                 target.poke_params.fullname),
                binary_payload=self._load_byte(self.BOTTLE_FX))
            for client in target.clients:
                client.sendClose(code=4006, reason='Reconnect please')
            self.should_be_destroyed = True
        else:
            if self.remaining_use <= 0:
                return server.send_json(type="notification",
                                        msg="La bouteille est vide!")
            server.channel_obj.broadcast(
                type="notification",
                msg="%s se descend un peu de %s!" %
                (server.user.poke_params.fullname, self.alc_brand),
                binary_payload=self._load_byte(self.GULP_FX))
            for effect_type in self.EFFECTS:
                server.user.state.add_effect(effect_type())
            self.remaining_use -= 1
Example #2
0
    def use(self, loult_state, server, obj_params):
        if not self._check_militia(server):
            return

        try:
            is_aiming = obj_params[0] == "aim"
            if is_aiming:
                obj_params.pop(0)
        except IndexError:
            is_aiming = False

        target_id, target = self._acquire_target(server, obj_params)
        if target is None:
            return

        if is_aiming:
            return server.channel_obj.broadcast(
                type="notification",
                msg="Un point rouge lumineux se ballade sur le front de %s" %
                target.poke_params.fullname)

        if self.remaining_bullets <= 0:
            return server.send_json(type="notification",
                                    msg="Plus de munitions!")
        self.remaining_bullets -= 1
        server.channel_obj.broadcast(
            type="notification",
            msg="%s tire au fusil sniper calibre .50 sur %s" %
            (server.user.poke_params.fullname, target.poke_params.fullname),
            binary_payload=self._load_byte(self.SNIPER_FX))
        server.channel_obj.broadcast(type='antiflood',
                                     event='banned',
                                     flooder_id=target_id,
                                     date=timestamp() * 1000)
        for client in target.clients:
            loult_state.ban_ip(client.ip)
            client.sendClose(code=4006, reason="Reconnect later.")
        splashed_usrs = [
            usr for usr in server.channel_obj.users.values()
            if userlist_dist(server.channel_obj, target_id, usr.user_id) < 2
            and usr is not target
        ]
        splashed_usrs = ", ".join(usr.poke_params.fullname
                                  for usr in splashed_usrs)
        server.channel_obj.broadcast(
            type="notification",
            msg="%s se sont faits éclabousser de sang et de cervelle de %s" %
            (splashed_usrs, target.poke_params.fullname))
Example #3
0
    def use(self, obj_params):
        if self.remaining_bullets <= 0:
            server.send_json(type="notification",
                             msg="Plus de munitions!")
            server.send_binary(self._load_byte(self.EMPTY_FX))
            return

        target_dist = userlist_dist(server.channel_obj, server.user.user_id, target_id)
        if target_dist > 2:
            return server.send_json(type="notification",
                                    msg="Trop loin pour tirer!")

        server.channel_obj.broadcast(type="notification",
                                     msg="%s tire au pistolet sur %s"
                                         % (server.user.poke_params.fullname, target.poke_params.fullname),
                                     binary_payload=self._load_byte(self.GUNSHOT_FX))
        for client in target.clients:
            client.sendClose(code=4006, reason='Reconnect please')
        self.remaining_bullets -= 1
Example #4
0
    def use(self, obj_params):
        if self.empty:
            return server.send_json(type="notification",
                                    msg="Plus de munitions!")

        target_id, target = self._acquire_target(server, obj_params)
        if target is None:
            return

        server.channel_obj.broadcast(type="notification",
                                     msg="%s tire au bazooka sur %s"
                                         % (server.user.poke_params.fullname, target.poke_params.fullname),
                                     binary_payload=self._load_byte(self.RPG_FX))
        hit_usrs = [usr for usr in server.channel_obj.users.values()
                    if userlist_dist(server.channel_obj, target_id, usr.user_id) < 2]
        for user in hit_usrs:
            for client in user.clients:
                client.sendClose(code=4006, reason="Reconnect please")

        self.empty = True
Example #5
0
 def use(self, loult_state, server, obj_params):
     hit_usrs = [
         usr for usr in server.channel_obj.users.values()
         if userlist_dist(server.channel_obj, server.user.user_id,
                          usr.user_id) < 3 and usr is not server.user
     ]
     server.channel_obj.broadcast(
         type="notification",
         msg="%s s'est fait sauter, emportant avec lui %s" %
         (server.user.poke_params.fullname, ", ".join(
             [usr.poke_params.fullname for usr in hit_usrs])),
         binary_payload=self._load_byte(self.EXPLOSION_FX))
     for user in hit_usrs:
         for client in user.clients:
             client.sendClose(code=4006, reason="Reconnect please")
     server.channel_obj.broadcast(type='antiflood',
                                  event='banned',
                                  flooder_id=server.user.user_id,
                                  date=timestamp() * 1000)
     loult_state.ban_cookie(server.user.cookie_hash)
     for client in server.user.clients:
         client.sendClose(code=4006, reason='reconnect later')
     self.should_be_destroyed = True