[Core] Fix SMSG_WHO show players matching given criteria. (c2651)
Used to be total number of players online. Also limit shown players to 49 which is how it used to be on retail.
This commit is contained in:
parent
4edda934a8
commit
0894ff4720
@ -87,8 +87,6 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recv_data)
|
|||||||
DEBUG_LOG("WORLD: Received opcode CMSG_WHO");
|
DEBUG_LOG("WORLD: Received opcode CMSG_WHO");
|
||||||
// recv_data.hexlike();
|
// recv_data.hexlike();
|
||||||
|
|
||||||
uint32 clientcount = 0;
|
|
||||||
|
|
||||||
uint32 level_min, level_max, racemask, classmask, zones_count, str_count;
|
uint32 level_min, level_max, racemask, classmask, zones_count, str_count;
|
||||||
uint32 zoneids[10]; // 10 is client limit
|
uint32 zoneids[10]; // 10 is client limit
|
||||||
std::string player_name, guild_name;
|
std::string player_name, guild_name;
|
||||||
@ -152,9 +150,12 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recv_data)
|
|||||||
bool allowTwoSideWhoList = sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_WHO_LIST);
|
bool allowTwoSideWhoList = sWorld.getConfig(CONFIG_BOOL_ALLOW_TWO_SIDE_WHO_LIST);
|
||||||
AccountTypes gmLevelInWhoList = (AccountTypes)sWorld.getConfig(CONFIG_UINT32_GM_LEVEL_IN_WHO_LIST);
|
AccountTypes gmLevelInWhoList = (AccountTypes)sWorld.getConfig(CONFIG_UINT32_GM_LEVEL_IN_WHO_LIST);
|
||||||
|
|
||||||
|
uint32 matchcount = 0;
|
||||||
|
uint32 displaycount = 0;
|
||||||
|
|
||||||
WorldPacket data(SMSG_WHO, 50); // guess size
|
WorldPacket data(SMSG_WHO, 50); // guess size
|
||||||
data << uint32(clientcount); // clientcount place holder, listed count
|
data << uint32(matchcount); // placeholder, count of players matching criteria
|
||||||
data << uint32(clientcount); // clientcount place holder, online count
|
data << uint32(displaycount); // placeholder, count of players displayed
|
||||||
|
|
||||||
// TODO: Guard Player map
|
// TODO: Guard Player map
|
||||||
HashMapHolder<Player>::MapType& m = sObjectAccessor.GetPlayers();
|
HashMapHolder<Player>::MapType& m = sObjectAccessor.GetPlayers();
|
||||||
@ -252,21 +253,23 @@ void WorldSession::HandleWhoOpcode(WorldPacket& recv_data)
|
|||||||
if (!s_show)
|
if (!s_show)
|
||||||
{ continue; }
|
{ continue; }
|
||||||
|
|
||||||
|
// 49 is maximum player count sent to client
|
||||||
|
++matchcount;
|
||||||
|
if (matchcount > 49)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
++displaycount;
|
||||||
|
|
||||||
data << pname; // player name
|
data << pname; // player name
|
||||||
data << gname; // guild name
|
data << gname; // guild name
|
||||||
data << uint32(lvl); // player level
|
data << uint32(lvl); // player level
|
||||||
data << uint32(class_); // player class
|
data << uint32(class_); // player class
|
||||||
data << uint32(race); // player race
|
data << uint32(race); // player race
|
||||||
data << uint32(pzoneid); // player zone id
|
data << uint32(pzoneid); // player zone id
|
||||||
|
|
||||||
// 50 is maximum player count sent to client
|
|
||||||
if ((++clientcount) == 49)
|
|
||||||
{ break; }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 count = m.size();
|
data.put(0, displaycount); // insert right count, count displayed
|
||||||
data.put(0, clientcount); // insert right count, listed count
|
data.put(4, matchcount); // insert right count, count of matches
|
||||||
data.put(4, count > 49 ? count : clientcount); // insert right count, online count
|
|
||||||
|
|
||||||
SendPacket(&data);
|
SendPacket(&data);
|
||||||
DEBUG_LOG("WORLD: Send SMSG_WHO Message");
|
DEBUG_LOG("WORLD: Send SMSG_WHO Message");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user