diff --git a/src/game/BattleGround.cpp b/src/game/BattleGround.cpp index f30d223a8cb..7bc403df5d8 100644 --- a/src/game/BattleGround.cpp +++ b/src/game/BattleGround.cpp @@ -201,7 +201,7 @@ template void BattleGround::BroadcastWorker(Do& _do) { for(BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr) - if (Player *plr = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER))) + if (Player *plr = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first))) _do(plr); } diff --git a/src/game/GameEventMgr.cpp b/src/game/GameEventMgr.cpp index 0d58740aec6..2efaa085323 100644 --- a/src/game/GameEventMgr.cpp +++ b/src/game/GameEventMgr.cpp @@ -594,7 +594,7 @@ void GameEventMgr::GameEventUnspawn(int16 event_id) { sObjectMgr.RemoveCreatureFromGrid(*itr, data); - if( Creature* pCreature = ObjectAccessor::GetCreatureInWorld(MAKE_NEW_GUID(*itr, data->id, HIGHGUID_UNIT)) ) + if (Creature* pCreature = ObjectAccessor::GetCreatureInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, *itr))) pCreature->AddObjectToRemoveList(); } } @@ -612,7 +612,7 @@ void GameEventMgr::GameEventUnspawn(int16 event_id) { sObjectMgr.RemoveGameobjectFromGrid(*itr, data); - if( GameObject* pGameobject = ObjectAccessor::GetGameObjectInWorld(MAKE_NEW_GUID(*itr, data->id, HIGHGUID_GAMEOBJECT)) ) + if( GameObject* pGameobject = ObjectAccessor::GetGameObjectInWorld(ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, *itr)) ) pGameobject->AddObjectToRemoveList(); } } @@ -638,8 +638,7 @@ void GameEventMgr::ChangeEquipOrModel(int16 event_id, bool activate) continue; // Update if spawned - Creature* pCreature = ObjectAccessor::GetCreatureInWorld(MAKE_NEW_GUID(itr->first, data->id,HIGHGUID_UNIT)); - if (pCreature) + if (Creature* pCreature = ObjectAccessor::GetCreatureInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, itr->first))) { if (activate) { diff --git a/src/game/Guild.cpp b/src/game/Guild.cpp index 7df4a49fec5..9a06194fee7 100644 --- a/src/game/Guild.cpp +++ b/src/game/Guild.cpp @@ -551,7 +551,7 @@ void Guild::BroadcastToGuild(WorldSession *session, const std::string& msg, uint for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { - Player *pl = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); + Player *pl = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first)); if (pl && pl->GetSession() && HasRankRight(pl->GetRank(),GR_RIGHT_GCHATLISTEN) && !pl->GetSocial()->HasIgnore(session->GetPlayer()->GetGUIDLow()) ) pl->GetSession()->SendPacket(&data); @@ -568,7 +568,7 @@ void Guild::BroadcastToOfficers(WorldSession *session, const std::string& msg, u WorldPacket data; ChatHandler::FillMessageData(&data, session, CHAT_MSG_OFFICER, language, NULL, 0, msg.c_str(), NULL); - Player *pl = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); + Player *pl = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first)); if (pl && pl->GetSession() && HasRankRight(pl->GetRank(),GR_RIGHT_OFFCHATLISTEN) && !pl->GetSocial()->HasIgnore(session->GetPlayer()->GetGUIDLow())) pl->GetSession()->SendPacket(&data); @@ -580,7 +580,7 @@ void Guild::BroadcastPacket(WorldPacket *packet) { for(MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { - Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); + Player *player = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first)); if (player) player->GetSession()->SendPacket(packet); } @@ -592,7 +592,7 @@ void Guild::BroadcastPacketToRank(WorldPacket *packet, uint32 rankId) { if (itr->second.RankId == rankId) { - Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); + Player *player = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first)); if (player) player->GetSession()->SendPacket(packet); } @@ -731,7 +731,7 @@ void Guild::Roster(WorldSession *session /*= NULL*/) } for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { - if (Player *pl = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER))) + if (Player *pl = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first))) { data << uint64(pl->GetGUID()); data << uint8(1); @@ -746,7 +746,7 @@ void Guild::Roster(WorldSession *session /*= NULL*/) } else { - data << uint64(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); + data << uint64(ObjectGuid(HIGHGUID_PLAYER, itr->first).GetRawValue()); data << uint8(0); data << itr->second.Name; data << uint32(itr->second.RankId); @@ -976,7 +976,7 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, int32 slot1, int32 slot2) for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { - Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); + Player *player = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first)); if (!player) continue; @@ -1011,7 +1011,7 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, GuildItemPosCountVec cons for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr) { - Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); + Player *player = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first)); if (!player) continue; diff --git a/src/game/Guild.h b/src/game/Guild.h index 25dc1ac9f4d..f3d4184b9d7 100644 --- a/src/game/Guild.h +++ b/src/game/Guild.h @@ -343,7 +343,7 @@ class Guild void BroadcastWorker(Do& _do, Player* except = NULL) { for(MemberList::iterator itr = members.begin(); itr != members.end(); ++itr) - if(Player *player = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER))) + if(Player *player = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first))) if(player != except) _do(player); } diff --git a/src/game/Level1.cpp b/src/game/Level1.cpp index 97dd213b55a..51d30c00294 100644 --- a/src/game/Level1.cpp +++ b/src/game/Level1.cpp @@ -261,7 +261,7 @@ bool ChatHandler::HandleGPSCommand(const char* args) { uint64 guid = extractGuidFromLink((char*)args); if(guid) - obj = (WorldObject*)ObjectAccessor::GetObjectByTypeMask(*m_session->GetPlayer(),guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); + obj = (WorldObject*)m_session->GetPlayer()->GetObjectByTypeMask(guid, TYPEMASK_CREATURE_OR_GAMEOBJECT); if(!obj) { diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp index e8a3d18c247..91400aede42 100644 --- a/src/game/Level3.cpp +++ b/src/game/Level3.cpp @@ -3407,7 +3407,7 @@ bool ChatHandler::HandleGetDistanceCommand(const char* args) { uint64 guid = extractGuidFromLink((char*)args); if(guid) - obj = (WorldObject*)ObjectAccessor::GetObjectByTypeMask(*m_session->GetPlayer(),guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); + obj = (WorldObject*)m_session->GetPlayer()->GetObjectByTypeMask(guid, TYPEMASK_CREATURE_OR_GAMEOBJECT); if(!obj) { diff --git a/src/game/LootHandler.cpp b/src/game/LootHandler.cpp index df258edc339..ef0666e8536 100644 --- a/src/game/LootHandler.cpp +++ b/src/game/LootHandler.cpp @@ -453,7 +453,7 @@ void WorldSession::HandleLootMasterGiveOpcode( WorldPacket & recv_data ) return; } - Player *target = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(target_playerguid, 0, HIGHGUID_PLAYER)); + Player *target = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, target_playerguid)); if(!target) return; diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 081c771344b..c8b0b92a2ff 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -3497,22 +3497,22 @@ void Map::ScriptsProcess() return; } -Creature* Map::GetCreature(uint64 guid) +Creature* Map::GetCreature(ObjectGuid guid) { - return m_objectsStore.find(guid, (Creature*)NULL); + return m_objectsStore.find(guid.GetRawValue(), (Creature*)NULL); } -Vehicle* Map::GetVehicle(uint64 guid) +Vehicle* Map::GetVehicle(ObjectGuid guid) { - return m_objectsStore.find(guid, (Vehicle*)NULL); + return m_objectsStore.find(guid.GetRawValue(), (Vehicle*)NULL); } -Pet* Map::GetPet(uint64 guid) +Pet* Map::GetPet(ObjectGuid guid) { - return m_objectsStore.find(guid, (Pet*)NULL); + return m_objectsStore.find(guid.GetRawValue(), (Pet*)NULL); } -Corpse* Map::GetCorpse(uint64 guid) +Corpse* Map::GetCorpse(ObjectGuid guid) { Corpse * ret = ObjectAccessor::GetCorpseInMap(guid,GetId()); if (!ret) @@ -3522,33 +3522,32 @@ Corpse* Map::GetCorpse(uint64 guid) return ret; } -Creature* Map::GetCreatureOrPetOrVehicle(uint64 guid) +Creature* Map::GetCreatureOrPetOrVehicle(ObjectGuid guid) { - if (IS_PLAYER_GUID(guid)) - return NULL; - - if (IS_PET_GUID(guid)) - return GetPet(guid); - - if (IS_VEHICLE_GUID(guid)) - return GetVehicle(guid); + switch(guid.GetHigh()) + { + case HIGHGUID_UNIT: return GetCreature(guid); + case HIGHGUID_PET: return GetPet(guid); + case HIGHGUID_VEHICLE: return GetVehicle(guid); + default: break; + } - return GetCreature(guid); + return NULL; } -GameObject* Map::GetGameObject(uint64 guid) +GameObject* Map::GetGameObject(ObjectGuid guid) { - return m_objectsStore.find(guid, (GameObject*)NULL); + return m_objectsStore.find(guid.GetRawValue(), (GameObject*)NULL); } -DynamicObject* Map::GetDynamicObject(uint64 guid) +DynamicObject* Map::GetDynamicObject(ObjectGuid guid) { - return m_objectsStore.find(guid, (DynamicObject*)NULL); + return m_objectsStore.find(guid.GetRawValue(), (DynamicObject*)NULL); } -WorldObject* Map::GetWorldObject(uint64 guid) +WorldObject* Map::GetWorldObject(ObjectGuid guid) { - switch(GUID_HIPART(guid)) + switch(guid.GetHigh()) { case HIGHGUID_PLAYER: return ObjectAccessor::FindPlayer(guid); case HIGHGUID_GAMEOBJECT: return GetGameObject(guid); diff --git a/src/game/Map.h b/src/game/Map.h index 71c997977e0..bd6c0c95283 100644 --- a/src/game/Map.h +++ b/src/game/Map.h @@ -396,14 +396,14 @@ class MANGOS_DLL_SPEC Map : public GridRefManager, public MaNGOS::Obj void RemoveFromActive(Creature* obj); - Creature* GetCreature(uint64 guid); - Vehicle* GetVehicle(uint64 guid); - Pet* GetPet(uint64 guid); - Creature* GetCreatureOrPetOrVehicle(uint64 guid); - GameObject* GetGameObject(uint64 guid); - DynamicObject* GetDynamicObject(uint64 guid); - Corpse* GetCorpse(uint64 guid); - WorldObject* GetWorldObject(uint64 guid); + Creature* GetCreature(ObjectGuid guid); + Vehicle* GetVehicle(ObjectGuid guid); + Pet* GetPet(ObjectGuid guid); + Creature* GetCreatureOrPetOrVehicle(ObjectGuid guid); + GameObject* GetGameObject(ObjectGuid guid); + DynamicObject* GetDynamicObject(ObjectGuid guid); + Corpse* GetCorpse(ObjectGuid guid); + WorldObject* GetWorldObject(ObjectGuid guid); TypeUnorderedMapContainer& GetObjectsStore() { return m_objectsStore; } diff --git a/src/game/ObjectAccessor.cpp b/src/game/ObjectAccessor.cpp index df80b8130da..d2330fc789d 100644 --- a/src/game/ObjectAccessor.cpp +++ b/src/game/ObjectAccessor.cpp @@ -54,12 +54,12 @@ ObjectAccessor::~ObjectAccessor() } Unit* -ObjectAccessor::GetUnit(WorldObject const &u, uint64 guid) +ObjectAccessor::GetUnit(WorldObject const &u, ObjectGuid guid) { - if(!guid) + if(guid.IsEmpty()) return NULL; - if(IS_PLAYER_GUID(guid)) + if(guid.IsPlayer()) return FindPlayer(guid); if (!u.IsInWorld()) @@ -68,7 +68,7 @@ ObjectAccessor::GetUnit(WorldObject const &u, uint64 guid) return u.GetMap()->GetCreatureOrPetOrVehicle(guid); } -Corpse* ObjectAccessor::GetCorpseInMap( uint64 guid, uint32 mapid ) +Corpse* ObjectAccessor::GetCorpseInMap(ObjectGuid guid, uint32 mapid) { Corpse * ret = HashMapHolder::Find(guid); if(!ret) @@ -79,49 +79,8 @@ Corpse* ObjectAccessor::GetCorpseInMap( uint64 guid, uint32 mapid ) return ret; } -Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const &p, uint64 guid, uint32 typemask) -{ - switch(GUID_HIPART(guid)) - { - case HIGHGUID_ITEM: - if(typemask & TYPEMASK_ITEM && p.GetTypeId() == TYPEID_PLAYER) - return ((Player const &)p).GetItemByGuid( guid ); - break; - case HIGHGUID_PLAYER: - if(typemask & TYPEMASK_PLAYER) - return FindPlayer(guid); - break; - case HIGHGUID_GAMEOBJECT: - if(typemask & TYPEMASK_GAMEOBJECT) - return p.GetMap()->GetGameObject(guid); - break; - case HIGHGUID_UNIT: - if(typemask & TYPEMASK_UNIT) - return p.GetMap()->GetCreature(guid); - break; - case HIGHGUID_PET: - if(typemask & TYPEMASK_UNIT) - return p.GetMap()->GetPet(guid); - break; - case HIGHGUID_VEHICLE: - if(typemask & TYPEMASK_UNIT) - return p.GetMap()->GetVehicle(guid); - break; - case HIGHGUID_DYNAMICOBJECT: - if(typemask & TYPEMASK_DYNAMICOBJECT) - return p.GetMap()->GetDynamicObject(guid); - break; - case HIGHGUID_TRANSPORT: - case HIGHGUID_CORPSE: - case HIGHGUID_MO_TRANSPORT: - break; - } - - return NULL; -} - Player* -ObjectAccessor::FindPlayer(uint64 guid) +ObjectAccessor::FindPlayer(ObjectGuid guid) { Player * plr = HashMapHolder::Find(guid);; if(!plr || !plr->IsInWorld()) @@ -163,11 +122,11 @@ void ObjectAccessor::KickPlayer(uint64 guid) } Corpse* -ObjectAccessor::GetCorpseForPlayerGUID(uint64 guid) +ObjectAccessor::GetCorpseForPlayerGUID(ObjectGuid guid) { Guard guard(i_corpseGuard); - Player2CorpsesMapType::iterator iter = i_player2corpse.find(guid); + Player2CorpsesMapType::iterator iter = i_player2corpse.find(guid.GetRawValue()); if( iter == i_player2corpse.end() ) return NULL; assert(iter->second->GetType() != CORPSE_BONES); @@ -234,7 +193,7 @@ ObjectAccessor::AddCorpsesToGrid(GridPair const& gridpair,GridType& grid,Map* ma } Corpse* -ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia) +ObjectAccessor::ConvertCorpseForPlayer(ObjectGuid player_guid, bool insignia) { Corpse *corpse = GetCorpseForPlayerGUID(player_guid); if(!corpse) diff --git a/src/game/ObjectAccessor.h b/src/game/ObjectAccessor.h index d704045b3e9..e704f10fe39 100644 --- a/src/game/ObjectAccessor.h +++ b/src/game/ObjectAccessor.h @@ -58,9 +58,9 @@ class HashMapHolder m_objectMap.erase(o->GetGUID()); } - static T* Find(uint64 guid) + static T* Find(ObjectGuid guid) { - typename MapType::iterator itr = m_objectMap.find(guid); + typename MapType::iterator itr = m_objectMap.find(guid.GetRawValue()); return (itr != m_objectMap.end()) ? itr->second : NULL; } @@ -89,18 +89,17 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton Player2CorpsesMapType; // global (obj used for map only location local guid objects (pets currently) - static Unit* GetUnitInWorld(WorldObject const& obj, uint64 guid); + static Unit* GetUnitInWorld(WorldObject const& obj, ObjectGuid guid); // FIXME: map local object with global search - static Creature* GetCreatureInWorld(uint64 guid) { return FindHelper(guid); } - static GameObject* GetGameObjectInWorld(uint64 guid) { return FindHelper(guid); } + static Creature* GetCreatureInWorld(ObjectGuid guid) { return FindHelper(guid); } + static GameObject* GetGameObjectInWorld(ObjectGuid guid) { return FindHelper(guid); } // possible local search for specific object map - static Object* GetObjectByTypeMask(WorldObject const &, uint64, uint32 typemask); - static Unit* GetUnit(WorldObject const &, uint64); + static Unit* GetUnit(WorldObject const &, ObjectGuid guid); // Player access - static Player* FindPlayer(uint64 guid); + static Player* FindPlayer(ObjectGuid guid); static Player* FindPlayerByName(const char *name); static void KickPlayer(uint64 guid); @@ -112,12 +111,12 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton::Insert(object); } @@ -132,11 +131,11 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton static OBJECT* FindHelper(uint64 guid) + template static OBJECT* FindHelper(ObjectGuid guid) { for (std::list::const_iterator i = i_mapList.begin() ; i != i_mapList.end(); ++i) { - if (OBJECT* ret = (*i)->GetObjectsStore().find(guid, (OBJECT*)NULL)) + if (OBJECT* ret = (*i)->GetObjectsStore().find(guid.GetRawValue(), (OBJECT*)NULL)) return ret; } @@ -154,15 +153,15 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::SingletonGetPet(guid) : NULL; return GetCreatureInWorld(guid); diff --git a/src/game/ObjectGuid.h b/src/game/ObjectGuid.h index 7be0cf31f52..fdbe0f6420f 100644 --- a/src/game/ObjectGuid.h +++ b/src/game/ObjectGuid.h @@ -41,11 +41,16 @@ enum TypeMask TYPEMASK_OBJECT = 0x0001, TYPEMASK_ITEM = 0x0002, TYPEMASK_CONTAINER = 0x0006, // TYPEMASK_ITEM | 0x0004 - TYPEMASK_UNIT = 0x0008, + TYPEMASK_UNIT = 0x0008, // players also have it TYPEMASK_PLAYER = 0x0010, TYPEMASK_GAMEOBJECT = 0x0020, TYPEMASK_DYNAMICOBJECT = 0x0040, - TYPEMASK_CORPSE = 0x0080 + TYPEMASK_CORPSE = 0x0080, + + // used combinations in Player::GetObjectByTypeMask (TYPEMASK_UNIT case ignore players in call) + TYPEMASK_CREATURE_OR_GAMEOBJECT = TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT, + TYPEMASK_CREATURE_GAMEOBJECT_OR_ITEM = TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT | TYPEMASK_ITEM, + TYPEMASK_CREATURE_GAMEOBJECT_PLAYER_OR_ITEM = TYPEMASK_UNIT | TYPEMASK_GAMEOBJECT | TYPEMASK_ITEM | TYPEMASK_PLAYER, }; enum HighGuid @@ -128,6 +133,7 @@ class ObjectGuid ObjectGuid() : m_guid(0) {} ObjectGuid(uint64 const& guid) : m_guid(guid) {} // NOTE: must be explicit in future for more strict control type conversions ObjectGuid(HighGuid hi, uint32 entry, uint32 counter) : m_guid(uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48)) {} + ObjectGuid(HighGuid hi, uint32 counter) : m_guid(uint64(counter) | (uint64(hi) << 48)) {} public: // modifiers PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); } diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 994d669391d..ea3f1e15ca2 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -21674,4 +21674,45 @@ void Player::SetHomebindToLocation(WorldLocation const& loc, uint32 area_id) m_homebindMapId, m_homebindAreaId, m_homebindX, m_homebindY, m_homebindZ, GetGUIDLow()); } +Object* Player::GetObjectByTypeMask(ObjectGuid guid, TypeMask typemask) +{ + switch(guid.GetHigh()) + { + case HIGHGUID_ITEM: + if (typemask & TYPEMASK_ITEM) + return GetItemByGuid(guid.GetRawValue()); + break; + case HIGHGUID_PLAYER: + if (GetGUID()==guid.GetRawValue()) + return this; + if ((typemask & TYPEMASK_PLAYER) && IsInWorld()) + return ObjectAccessor::FindPlayer(guid.GetRawValue()); + break; + case HIGHGUID_GAMEOBJECT: + if ((typemask & TYPEMASK_GAMEOBJECT) && IsInWorld()) + return GetMap()->GetGameObject(guid); + break; + case HIGHGUID_UNIT: + if ((typemask & TYPEMASK_UNIT) && IsInWorld()) + return GetMap()->GetCreature(guid); + break; + case HIGHGUID_PET: + if ((typemask & TYPEMASK_UNIT) && IsInWorld()) + return GetMap()->GetPet(guid); + break; + case HIGHGUID_VEHICLE: + if ((typemask & TYPEMASK_UNIT) && IsInWorld()) + return GetMap()->GetVehicle(guid); + break; + case HIGHGUID_DYNAMICOBJECT: + if ((typemask & TYPEMASK_DYNAMICOBJECT) && IsInWorld()) + return GetMap()->GetDynamicObject(guid); + break; + case HIGHGUID_TRANSPORT: + case HIGHGUID_CORPSE: + case HIGHGUID_MO_TRANSPORT: + break; + } + return NULL; +} diff --git a/src/game/Player.h b/src/game/Player.h index 75ab41367ee..613e22b0b23 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -2175,6 +2175,8 @@ class MANGOS_DLL_SPEC Player : public Unit void RelocateToHomebind() { SetLocationMapId(m_homebindMapId); Relocate(m_homebindX, m_homebindY, m_homebindZ); } bool TeleportToHomebind(uint32 options = 0) { return TeleportTo(m_homebindMapId, m_homebindX, m_homebindY, m_homebindZ, GetOrientation(), options); } + Object* GetObjectByTypeMask(ObjectGuid guid, TypeMask typemask); + // currently visible objects at player client typedef std::set ClientGUIDs; ClientGUIDs m_clientGUIDs; diff --git a/src/game/PoolManager.cpp b/src/game/PoolManager.cpp index bf6068494a9..1efbdf2a956 100644 --- a/src/game/PoolManager.cpp +++ b/src/game/PoolManager.cpp @@ -206,7 +206,7 @@ void PoolGroup::Despawn1Object(uint32 guid) { sObjectMgr.RemoveCreatureFromGrid(guid, data); - if (Creature* pCreature = ObjectAccessor::GetCreatureInWorld(MAKE_NEW_GUID(guid, data->id, HIGHGUID_UNIT))) + if (Creature* pCreature = ObjectAccessor::GetCreatureInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, guid))) pCreature->AddObjectToRemoveList(); } } @@ -219,7 +219,7 @@ void PoolGroup::Despawn1Object(uint32 guid) { sObjectMgr.RemoveGameobjectFromGrid(guid, data); - if (GameObject* pGameobject = ObjectAccessor::GetGameObjectInWorld(MAKE_NEW_GUID(guid, data->id, HIGHGUID_GAMEOBJECT))) + if (GameObject* pGameobject = ObjectAccessor::GetGameObjectInWorld(ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, guid))) pGameobject->AddObjectToRemoveList(); } } @@ -403,7 +403,7 @@ template <> void PoolGroup::ReSpawn1Object(PoolObject* obj) { if (GameObjectData const* data = sObjectMgr.GetGOData(obj->guid)) - if (GameObject* pGameobject = ObjectAccessor::GetGameObjectInWorld(MAKE_NEW_GUID(obj->guid, data->id, HIGHGUID_GAMEOBJECT))) + if (GameObject* pGameobject = ObjectAccessor::GetGameObjectInWorld(ObjectGuid(HIGHGUID_GAMEOBJECT, data->id, obj->guid))) pGameobject->GetMap()->Add(pGameobject); } diff --git a/src/game/QuestHandler.cpp b/src/game/QuestHandler.cpp index fdac5cbf4a3..07cecb34f09 100644 --- a/src/game/QuestHandler.cpp +++ b/src/game/QuestHandler.cpp @@ -37,7 +37,7 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode( WorldPacket & recv_data ) uint8 questStatus = DIALOG_STATUS_NONE; uint8 defstatus = DIALOG_STATUS_NONE; - Object* questgiver = ObjectAccessor::GetObjectByTypeMask(*_player, guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); + Object* questgiver = _player->GetObjectByTypeMask(guid, TYPEMASK_CREATURE_OR_GAMEOBJECT); if(!questgiver) { sLog.outDetail("Error in CMSG_QUESTGIVER_STATUS_QUERY, called for not found questgiver (Typeid: %u GUID: %u)",GuidHigh2TypeId(GUID_HIPART(guid)),GUID_LOPART(guid)); @@ -118,7 +118,7 @@ void WorldSession::HandleQuestgiverAcceptQuestOpcode( WorldPacket & recv_data ) sLog.outDebug( "WORLD: Received CMSG_QUESTGIVER_ACCEPT_QUEST npc = %u, quest = %u, unk1 = %u", uint32(GUID_LOPART(guid)), quest, unk1 ); - Object* pObject = ObjectAccessor::GetObjectByTypeMask(*_player, guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT|TYPEMASK_ITEM|TYPEMASK_PLAYER); + Object* pObject = _player->GetObjectByTypeMask(guid, TYPEMASK_CREATURE_GAMEOBJECT_PLAYER_OR_ITEM); // no or incorrect quest giver if(!pObject @@ -234,7 +234,7 @@ void WorldSession::HandleQuestgiverQueryQuestOpcode( WorldPacket & recv_data ) sLog.outDebug( "WORLD: Received CMSG_QUESTGIVER_QUERY_QUEST npc = %u, quest = %u, unk1 = %u", uint32(GUID_LOPART(guid)), quest, unk1 ); // Verify that the guid is valid and is a questgiver or involved in the requested quest - Object* pObject = ObjectAccessor::GetObjectByTypeMask(*_player, guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT|TYPEMASK_ITEM); + Object* pObject = _player->GetObjectByTypeMask(guid, TYPEMASK_CREATURE_GAMEOBJECT_OR_ITEM); if(!pObject||!pObject->hasQuest(quest) && !pObject->hasInvolvedQuest(quest)) { _player->PlayerTalkClass->CloseGossip(); @@ -278,7 +278,7 @@ void WorldSession::HandleQuestgiverChooseRewardOpcode( WorldPacket & recv_data ) sLog.outDebug( "WORLD: Received CMSG_QUESTGIVER_CHOOSE_REWARD npc = %u, quest = %u, reward = %u",uint32(GUID_LOPART(guid)),quest,reward ); - Object* pObject = ObjectAccessor::GetObjectByTypeMask(*_player, guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); + Object* pObject = _player->GetObjectByTypeMask(guid, TYPEMASK_CREATURE_OR_GAMEOBJECT); if(!pObject) return; @@ -328,7 +328,7 @@ void WorldSession::HandleQuestgiverRequestRewardOpcode( WorldPacket & recv_data sLog.outDebug( "WORLD: Received CMSG_QUESTGIVER_REQUEST_REWARD npc = %u, quest = %u",uint32(GUID_LOPART(guid)),quest ); - Object* pObject = ObjectAccessor::GetObjectByTypeMask(*_player, guid,TYPEMASK_UNIT|TYPEMASK_GAMEOBJECT); + Object* pObject = _player->GetObjectByTypeMask(guid, TYPEMASK_CREATURE_OR_GAMEOBJECT); if(!pObject||!pObject->hasInvolvedQuest(quest)) return; diff --git a/src/game/SocialMgr.cpp b/src/game/SocialMgr.cpp index 17c1f940000..0d358df92ca 100644 --- a/src/game/SocialMgr.cpp +++ b/src/game/SocialMgr.cpp @@ -281,7 +281,7 @@ void SocialMgr::BroadcastToFriendListers(Player *player, WorldPacket *packet) PlayerSocialMap::const_iterator itr2 = itr->second.m_playerSocialMap.find(guid); if(itr2 != itr->second.m_playerSocialMap.end() && (itr2->second.Flags & SOCIAL_FLAG_FRIEND)) { - Player *pFriend = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER)); + Player *pFriend = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, itr->first)); // PLAYER see his team only and PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters // MODERATOR, GAME MASTER, ADMINISTRATOR can see all diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 34eac18ee0b..aaab945fce4 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "9574" + #define REVISION_NR "9575" #endif // __REVISION_NR_H__