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
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))
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
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
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