def _build_party_member_stats(group_member): player_mgr = WorldSessionStateHandler.find_player_by_guid( group_member.guid) character = None # If player is offline, build stats based on db information. if not player_mgr or not player_mgr.online: player_mgr = None character = RealmDatabaseManager.character_get_by_guid( group_member.guid) data = pack( '<Q2IB6I3f', player_mgr.guid if player_mgr else character.guid, player_mgr.health if player_mgr else 0, player_mgr.max_health if player_mgr else 0, player_mgr.power_type if player_mgr else 0, player_mgr.get_power_type_value() if player_mgr else 0, player_mgr.get_max_power_value() if player_mgr else 0, player_mgr.level if player_mgr else character.level, player_mgr.map_ if player_mgr else character.map, # Client expects an AreaNumber from AreaTable, not a zone id. MapManager.get_area_number_by_zone_id( player_mgr.zone if player_mgr else character.zone), player_mgr.class_ if player_mgr else character.class_, player_mgr.location.x if player_mgr else character.position_x, player_mgr.location.y if player_mgr else character.position_y, player_mgr.location.z if player_mgr else character.position_z, ) return PacketWriter.get_packet(OpCode.SMSG_PARTY_MEMBER_STATS, data)
def handle(world_session, socket, reader: PacketReader) -> int: if world_session.player_mgr.deathbind: area_number = MapManager.get_area_number_by_zone_id( world_session.player_mgr.deathbind.deathbind_zone) data = pack('<2I', world_session.player_mgr.map_, area_number) packet = PacketWriter.get_packet(OpCode.SMSG_BINDZONEREPLY, data) world_session.enqueue_packet(packet) return 0