void Group::UpdateAllOutOfRangePlayersFor(Player * pPlayer) { WorldPacket data(150); WorldPacket data2(150); /* tell the other players about us */ UpdateOutOfRangePlayer(pPlayer, GROUP_UPDATE_TYPE_FULL_CREATE, true, &data2); /* tell us any other players we don't know about */ Player * plr; for(uint32 i = 0; i < m_SubGroupCount; ++i) { for(GroupMembersSet::iterator itr = m_SubGroups[i]->GetGroupMembersBegin(); itr != m_SubGroups[i]->GetGroupMembersEnd(); ++itr) { plr = *itr; if(plr == pPlayer) continue; if(!plr->IsVisible(pPlayer)) { UpdateOutOfRangePlayer(plr, GROUP_UPDATE_TYPE_FULL_CREATE, false, &data); pPlayer->GetSession()->SendPacket(&data); } } } }
void Group::HandleUpdateFieldChange(uint32 Index, Player * pPlayer) { uint32 Flags = 0; switch(Index) { case UNIT_FIELD_HEALTH: Flags = GROUP_UPDATE_FLAG_HEALTH; break; case UNIT_FIELD_MAXHEALTH: Flags = GROUP_UPDATE_FLAG_MAXHEALTH; break; case UNIT_FIELD_POWER1: case UNIT_FIELD_POWER2: case UNIT_FIELD_POWER3: case UNIT_FIELD_POWER4: Flags = GROUP_UPDATE_FLAG_POWER; break; case UNIT_FIELD_MAXPOWER1: case UNIT_FIELD_MAXPOWER2: case UNIT_FIELD_MAXPOWER3: case UNIT_FIELD_MAXPOWER4: Flags = GROUP_UPDATE_FLAG_MAXPOWER; break; case UNIT_FIELD_LEVEL: Flags = GROUP_UPDATE_FLAG_LEVEL; break; } if(Flags) UpdateOutOfRangePlayer(pPlayer, Flags, true, 0); }
void Group::HandlePartialChange(uint32 Type, Player * pPlayer) { uint32 Flags = 0; switch(Type) { case PARTY_UPDATE_FLAG_POSITION: Flags = GROUP_UPDATE_FLAG_POSITION; break; case PARTY_UPDATE_FLAG_ZONEID: Flags = GROUP_UPDATE_FLAG_ZONEID; break; } if(Flags) UpdateOutOfRangePlayer(pPlayer, Flags, true, 0); }
void Group::HandleUpdateFieldChange(uint32 Index, Player* pPlayer) { uint32 Flags = 0; switch(Index) { case UNIT_FIELD_HEALTH: Flags = GROUP_UPDATE_FLAG_HEALTH; break; case UNIT_FIELD_MAXHEALTH: Flags = GROUP_UPDATE_FLAG_MAXHEALTH; break; case UNIT_FIELD_POWER1: case UNIT_FIELD_POWER2: case UNIT_FIELD_POWER3: case UNIT_FIELD_POWER4: case UNIT_FIELD_POWER7: Flags = GROUP_UPDATE_FLAG_POWER; break; case UNIT_FIELD_MAXPOWER1: case UNIT_FIELD_MAXPOWER2: case UNIT_FIELD_MAXPOWER3: case UNIT_FIELD_MAXPOWER4: case UNIT_FIELD_MAXPOWER7: Flags = GROUP_UPDATE_FLAG_MAXPOWER; break; case UNIT_FIELD_LEVEL: Flags = GROUP_UPDATE_FLAG_LEVEL; break; default: break; } if(Flags != 0) { m_groupLock.Acquire(); UpdateOutOfRangePlayer(pPlayer, Flags, true, 0); m_groupLock.Release(); } }
void Group::UpdateAllOutOfRangePlayersFor(Player * pPlayer) { WorldPacket data(150); WorldPacket data2(150); if(m_SubGroupCount>8) return; /* tell the other players about us */ UpdateOutOfRangePlayer(pPlayer, GROUP_UPDATE_TYPE_FULL_CREATE, true, &data2); /* tell us any other players we don't know about */ Player * plr; bool u1, u2; UpdateMask myMask; myMask.SetCount(PLAYER_END); UpdateMask hisMask; hisMask.SetCount(PLAYER_END); m_groupLock.Acquire(); for(uint32 i = 0; i < m_SubGroupCount; ++i) { if(m_SubGroups[i]== NULL) continue; for(GroupMembersSet::iterator itr = m_SubGroups[i]->GetGroupMembersBegin(); itr != m_SubGroups[i]->GetGroupMembersEnd(); ++itr) { plr = (*itr)->m_loggedInPlayer; if(!plr || plr == pPlayer) continue; if(!plr->IsVisible(pPlayer->GetGUID())) { UpdateOutOfRangePlayer(plr, GROUP_UPDATE_TYPE_FULL_CREATE, false, &data); pPlayer->GetSession()->SendPacket(&data); } else { if(pPlayer->GetSubGroup() == plr->GetSubGroup()) { /* distribute quest fields to other players */ hisMask.Clear(); myMask.Clear(); u1 = u2 = false; for(uint32 j = PLAYER_QUEST_LOG_1_1; j <= PLAYER_QUEST_LOG_25_5; ++j) { if(plr->GetUInt32Value(j)) { hisMask.SetBit(j); u1 = true; } if(pPlayer->GetUInt32Value(j)) { u2 = true; myMask.SetBit(j); } } if(u1) { data.clear(); plr->BuildValuesUpdateBlockForPlayer(&data, &hisMask); pPlayer->PushUpdateData(&data, 1); } if(u2) { data.clear(); pPlayer->BuildValuesUpdateBlockForPlayer(&data, &myMask); plr->PushUpdateData(&data, 1); } } } } } m_groupLock.Release(); }