void ItemHandler::createItemUpdate (NetworkPacket *data, GameClient *pClient, int invcount) { UpdateMask invUpdateMask; invUpdateMask.SetLength (64); Item *tempitem = new Item; invUpdateMask.SetBit (OBJECT_FIELD_GUID); invUpdateMask.SetBit (OBJECT_FIELD_GUID+1); invUpdateMask.SetBit (OBJECT_FIELD_TYPE); invUpdateMask.SetBit (OBJECT_FIELD_ENTRY); invUpdateMask.SetBit (OBJECT_FIELD_SCALE_X); invUpdateMask.SetBit (OBJECT_FIELD_PADDING); invUpdateMask.SetBit (ITEM_FIELD_OWNER); invUpdateMask.SetBit (ITEM_FIELD_CONTAINED); invUpdateMask.SetBit (ITEM_FIELD_OWNER +1); invUpdateMask.SetBit (ITEM_FIELD_CONTAINED +1); invUpdateMask.SetBit (ITEM_FIELD_STACK_COUNT); tempitem->Create(pClient->getCurrentChar()->getGuidBySlot(invcount),pClient->getCurrentChar()->getItemIdBySlot(invcount)); tempitem->setUpdateValue (OBJECT_FIELD_GUID, pClient->getCurrentChar()->getGuidBySlot(invcount), invUpdateMask.data); tempitem->setUpdateValue (OBJECT_FIELD_GUID+1, 0x00000040, invUpdateMask.data); tempitem->setUpdateValue (OBJECT_FIELD_TYPE, 0x00000003, invUpdateMask.data); tempitem->setUpdateValue (OBJECT_FIELD_ENTRY, pClient->getCurrentChar()->getItemIdBySlot(invcount), invUpdateMask.data); tempitem->setUpdateFloatValue (OBJECT_FIELD_SCALE_X, 1.0f, invUpdateMask.data); tempitem->setUpdateValue (OBJECT_FIELD_PADDING, 0xeeeeeeee, invUpdateMask.data); tempitem->setUpdateValue (ITEM_FIELD_OWNER, pClient->getCurrentChar()->GetGUID().sno, invUpdateMask.data); tempitem->setUpdateValue (ITEM_FIELD_CONTAINED, pClient->getCurrentChar()->GetGUID().sno, invUpdateMask.data); tempitem->setUpdateValue (ITEM_FIELD_OWNER + 1, 0, invUpdateMask.data); tempitem->setUpdateValue (ITEM_FIELD_CONTAINED + 1, 0, invUpdateMask.data); tempitem->setUpdateValue (ITEM_FIELD_STACK_COUNT, 1, invUpdateMask.data); tempitem->CreateObject(&invUpdateMask, data, 0); }
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(); }