Core/Group: Fix recent issues with displaying group members on minimap.

Update GroupMemberOnlineStatus enum (creds to TOMRUS)
Also fix reduant GetVehicle() check in BuildPartyMemberStatsChangedPacket
This commit is contained in:
kaelima
2011-10-11 23:09:49 +02:00
parent 11bb9bfdb3
commit 3fd58b7b30
3 changed files with 26 additions and 28 deletions
+16 -16
View File
@@ -1261,11 +1261,12 @@ void Group::UpdatePlayerOutOfRange(Player* player)
WorldPacket data;
player->GetSession()->BuildPartyMemberStatsChangedPacket(player, &data);
Player* member;
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
player = itr->getSource();
if (player && !player->IsWithinDist(player, player->GetSightRange(), false))
player->GetSession()->SendPacket(&data);
member = itr->getSource();
if (member && !member->IsWithinDist(player, member->GetSightRange(), false))
member->GetSession()->SendPacket(&data);
}
}
@@ -1273,12 +1274,12 @@ void Group::BroadcastPacket(WorldPacket* packet, bool ignorePlayersInBGRaid, int
{
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
Player* pl = itr->getSource();
if (!pl || (ignore != 0 && pl->GetGUID() == ignore) || (ignorePlayersInBGRaid && pl->GetGroup() != this))
Player* plr = itr->getSource();
if (!plr || (ignore != 0 && plr->GetGUID() == ignore) || (ignorePlayersInBGRaid && plr->GetGroup() != this))
continue;
if (pl->GetSession() && (group == -1 || itr->getSubGroup() == group))
pl->GetSession()->SendPacket(packet);
if (plr->GetSession() && (group == -1 || itr->getSubGroup() == group))
plr->GetSession()->SendPacket(packet);
}
}
@@ -1286,10 +1287,10 @@ void Group::BroadcastReadyCheck(WorldPacket* packet)
{
for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next())
{
Player* pl = itr->getSource();
if (pl && pl->GetSession())
if (IsLeader(pl->GetGUID()) || IsAssistant(pl->GetGUID()))
pl->GetSession()->SendPacket(packet);
Player* plr = itr->getSource();
if (plr && plr->GetSession())
if (IsLeader(plr->GetGUID()) || IsAssistant(plr->GetGUID()))
plr->GetSession()->SendPacket(packet);
}
}
@@ -1297,8 +1298,8 @@ void Group::OfflineReadyCheck()
{
for (member_citerator citr = m_memberSlots.begin(); citr != m_memberSlots.end(); ++citr)
{
Player* pl = ObjectAccessor::FindPlayer(citr->guid);
if (!pl || !pl->GetSession())
Player* plr = ObjectAccessor::FindPlayer(citr->guid);
if (!plr || !plr->GetSession())
{
WorldPacket data(MSG_RAID_READY_CHECK_CONFIRM, 9);
data << uint64(citr->guid);
@@ -1328,6 +1329,7 @@ bool Group::SameSubGroup(Player const* member1, Player const* member2) const
{
if (!member1 || !member2)
return false;
if (member1->GetGroup() != this || member2->GetGroup() != this)
return false;
else
@@ -1364,10 +1366,8 @@ void Group::ChangeMembersGroup(uint64 guid, uint8 group)
if (!isBGGroup())
CharacterDatabase.PExecute("UPDATE group_member SET subgroup='%u' WHERE memberGuid='%u'", group, GUID_LOPART(guid));
Player* player = ObjectAccessor::FindPlayer(guid);
// In case the moved player is online, update the player object with the new sub group references
if (player)
if (Player* player = ObjectAccessor::FindPlayer(guid))
{
if (player->GetGroup() == this)
player->GetGroupRef().setSubGroup(group);
+8 -8
View File
@@ -57,14 +57,14 @@ enum RollVote
enum GroupMemberOnlineStatus
{
MEMBER_STATUS_OFFLINE = 0x0000,
MEMBER_STATUS_ONLINE = 0x0001,
MEMBER_STATUS_PVP = 0x0002,
MEMBER_STATUS_UNK0 = 0x0004, // dead? (health=0)
MEMBER_STATUS_UNK1 = 0x0008, // ghost? (health=1)
MEMBER_STATUS_UNK2 = 0x0010, // never seen
MEMBER_STATUS_UNK3 = 0x0020, // never seen
MEMBER_STATUS_UNK4 = 0x0040, // appears with dead and ghost flags
MEMBER_STATUS_UNK5 = 0x0080, // never seen
MEMBER_STATUS_ONLINE = 0x0001, // Lua_UnitIsConnected
MEMBER_STATUS_PVP = 0x0002, // Lua_UnitIsPVP
MEMBER_STATUS_DEAD = 0x0004, // Lua_UnitIsDead
MEMBER_STATUS_GHOST = 0x0008, // Lua_UnitIsGhost
MEMBER_STATUS_PVP_FFA = 0x0010, // Lua_UnitIsPVPFreeForAll
MEMBER_STATUS_UNK3 = 0x0020, // used in calls from Lua_GetPlayerMapPosition/Lua_GetBattlefieldFlagPosition
MEMBER_STATUS_AFK = 0x0040, // Lua_UnitIsAFK
MEMBER_STATUS_DND = 0x0080, // Lua_UnitIsDND
};
enum GroupMemberFlags
@@ -850,10 +850,8 @@ void WorldSession::BuildPartyMemberStatsChangedPacket(Player* player, WorldPacke
if (mask & GROUP_UPDATE_FLAG_VEHICLE_SEAT)
{
if (player->GetVehicle()){
Vehicle* vv=player->GetVehicle();
*data << (uint32) vv->GetVehicleInfo()->m_seatID[player->m_movementInfo.t_seat];
}
if (Vehicle* veh = player->GetVehicle())
*data << (uint32) veh->GetVehicleInfo()->m_seatID[player->m_movementInfo.t_seat];
}
if (mask & GROUP_UPDATE_FLAG_PET_AURAS)