def send_packet_to_members(self, packet, ignore=None, source=None, use_ignore=False, exclude=None, surrounding_only=False): if surrounding_only and source: surrounding_players = MapManager.get_surrounding_players( source).values() members = [ self.members[player.guid] for player in surrounding_players if player.guid in self.members ] else: members = self.members.values() for member in members: if exclude and member.guid == exclude.guid: continue player_mgr = WorldSessionStateHandler.find_player_by_guid( member.guid) if not player_mgr or not player_mgr.online: continue if ignore and player_mgr.guid in ignore: continue if use_ignore and source and player_mgr.friends_manager.has_ignore( source.guid): continue player_mgr.enqueue_packet(packet)
def reward_group_xp(self, player, creature, is_elite): surrounding_players = MapManager.get_surrounding_players(player).values() surrounding_members = [player for player in surrounding_players if player.guid in self.members] surrounding_members.sort(key=lambda players: players.level, reverse=True) # Highest level on top sum_levels = sum(player.level for player in surrounding_members) base_xp = Formulas.CreatureFormulas.xp_reward(creature.level, surrounding_members[0].level, is_elite) for member in surrounding_members: member.give_xp([base_xp * member.level / sum_levels], creature)
def reward_group_creature_or_go(self, player, creature): surrounding_players = MapManager.get_surrounding_players(player).values() surrounding_members = [player for player in surrounding_players if player.guid in self.members] # Party kill log packet, not sure how to display on client but, it is handled. data = pack('<2Q', player.guid, creature.guid) # Player with killing blow and victim guid. kill_log_packet = PacketWriter.get_packet(OpCode.SMSG_PARTYKILLLOG, data) for member in surrounding_members: member.enqueue_packet(kill_log_packet) member.quest_manager.reward_creature_or_go(creature)
def reward_group_creature_or_go(self, player, creature): surrounding_players = MapManager.get_surrounding_players( player).values() surrounding_members = [ player for player in surrounding_players if player.guid in self.members ] for member in surrounding_members: member.quest_manager.reward_creature_or_go(creature) member.send_update_self()
def get_surrounding_members(self, player): return [ m for m in MapManager.get_surrounding_players(player).values() if m.guid in self.members ]