mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[9575] Use ObjectGuid in Map object stores/world access/search.
This commit is contained in:
parent
b01de55396
commit
a12fecab0d
18 changed files with 131 additions and 126 deletions
|
|
@ -201,7 +201,7 @@ template<class Do>
|
||||||
void BattleGround::BroadcastWorker(Do& _do)
|
void BattleGround::BroadcastWorker(Do& _do)
|
||||||
{
|
{
|
||||||
for(BattleGroundPlayerMap::const_iterator itr = m_Players.begin(); itr != m_Players.end(); ++itr)
|
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);
|
_do(plr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -594,7 +594,7 @@ void GameEventMgr::GameEventUnspawn(int16 event_id)
|
||||||
{
|
{
|
||||||
sObjectMgr.RemoveCreatureFromGrid(*itr, data);
|
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();
|
pCreature->AddObjectToRemoveList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -612,7 +612,7 @@ void GameEventMgr::GameEventUnspawn(int16 event_id)
|
||||||
{
|
{
|
||||||
sObjectMgr.RemoveGameobjectFromGrid(*itr, data);
|
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();
|
pGameobject->AddObjectToRemoveList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -638,8 +638,7 @@ void GameEventMgr::ChangeEquipOrModel(int16 event_id, bool activate)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// Update if spawned
|
// Update if spawned
|
||||||
Creature* pCreature = ObjectAccessor::GetCreatureInWorld(MAKE_NEW_GUID(itr->first, data->id,HIGHGUID_UNIT));
|
if (Creature* pCreature = ObjectAccessor::GetCreatureInWorld(ObjectGuid(HIGHGUID_UNIT, data->id, itr->first)))
|
||||||
if (pCreature)
|
|
||||||
{
|
{
|
||||||
if (activate)
|
if (activate)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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)
|
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()) )
|
if (pl && pl->GetSession() && HasRankRight(pl->GetRank(),GR_RIGHT_GCHATLISTEN) && !pl->GetSocial()->HasIgnore(session->GetPlayer()->GetGUIDLow()) )
|
||||||
pl->GetSession()->SendPacket(&data);
|
pl->GetSession()->SendPacket(&data);
|
||||||
|
|
@ -568,7 +568,7 @@ void Guild::BroadcastToOfficers(WorldSession *session, const std::string& msg, u
|
||||||
WorldPacket data;
|
WorldPacket data;
|
||||||
ChatHandler::FillMessageData(&data, session, CHAT_MSG_OFFICER, language, NULL, 0, msg.c_str(), NULL);
|
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()))
|
if (pl && pl->GetSession() && HasRankRight(pl->GetRank(),GR_RIGHT_OFFCHATLISTEN) && !pl->GetSocial()->HasIgnore(session->GetPlayer()->GetGUIDLow()))
|
||||||
pl->GetSession()->SendPacket(&data);
|
pl->GetSession()->SendPacket(&data);
|
||||||
|
|
@ -580,7 +580,7 @@ void Guild::BroadcastPacket(WorldPacket *packet)
|
||||||
{
|
{
|
||||||
for(MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
|
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)
|
if (player)
|
||||||
player->GetSession()->SendPacket(packet);
|
player->GetSession()->SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
@ -592,7 +592,7 @@ void Guild::BroadcastPacketToRank(WorldPacket *packet, uint32 rankId)
|
||||||
{
|
{
|
||||||
if (itr->second.RankId == 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)
|
if (player)
|
||||||
player->GetSession()->SendPacket(packet);
|
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)
|
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 << uint64(pl->GetGUID());
|
||||||
data << uint8(1);
|
data << uint8(1);
|
||||||
|
|
@ -746,7 +746,7 @@ void Guild::Roster(WorldSession *session /*= NULL*/)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
data << uint64(MAKE_NEW_GUID(itr->first, 0, HIGHGUID_PLAYER));
|
data << uint64(ObjectGuid(HIGHGUID_PLAYER, itr->first).GetRawValue());
|
||||||
data << uint8(0);
|
data << uint8(0);
|
||||||
data << itr->second.Name;
|
data << itr->second.Name;
|
||||||
data << uint32(itr->second.RankId);
|
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)
|
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)
|
if (!player)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
@ -1011,7 +1011,7 @@ void Guild::DisplayGuildBankContentUpdate(uint8 TabId, GuildItemPosCountVec cons
|
||||||
|
|
||||||
for (MemberList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
|
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)
|
if (!player)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -343,7 +343,7 @@ class Guild
|
||||||
void BroadcastWorker(Do& _do, Player* except = NULL)
|
void BroadcastWorker(Do& _do, Player* except = NULL)
|
||||||
{
|
{
|
||||||
for(MemberList::iterator itr = members.begin(); itr != members.end(); ++itr)
|
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)
|
if(player != except)
|
||||||
_do(player);
|
_do(player);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -261,7 +261,7 @@ bool ChatHandler::HandleGPSCommand(const char* args)
|
||||||
{
|
{
|
||||||
uint64 guid = extractGuidFromLink((char*)args);
|
uint64 guid = extractGuidFromLink((char*)args);
|
||||||
if(guid)
|
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)
|
if(!obj)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3407,7 +3407,7 @@ bool ChatHandler::HandleGetDistanceCommand(const char* args)
|
||||||
{
|
{
|
||||||
uint64 guid = extractGuidFromLink((char*)args);
|
uint64 guid = extractGuidFromLink((char*)args);
|
||||||
if(guid)
|
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)
|
if(!obj)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -453,7 +453,7 @@ void WorldSession::HandleLootMasterGiveOpcode( WorldPacket & recv_data )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Player *target = ObjectAccessor::FindPlayer(MAKE_NEW_GUID(target_playerguid, 0, HIGHGUID_PLAYER));
|
Player *target = ObjectAccessor::FindPlayer(ObjectGuid(HIGHGUID_PLAYER, target_playerguid));
|
||||||
if(!target)
|
if(!target)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3497,22 +3497,22 @@ void Map::ScriptsProcess()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Creature* Map::GetCreature(uint64 guid)
|
Creature* Map::GetCreature(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
return m_objectsStore.find<Creature>(guid, (Creature*)NULL);
|
return m_objectsStore.find<Creature>(guid.GetRawValue(), (Creature*)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
Vehicle* Map::GetVehicle(uint64 guid)
|
Vehicle* Map::GetVehicle(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
return m_objectsStore.find<Vehicle>(guid, (Vehicle*)NULL);
|
return m_objectsStore.find<Vehicle>(guid.GetRawValue(), (Vehicle*)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
Pet* Map::GetPet(uint64 guid)
|
Pet* Map::GetPet(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
return m_objectsStore.find<Pet>(guid, (Pet*)NULL);
|
return m_objectsStore.find<Pet>(guid.GetRawValue(), (Pet*)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
Corpse* Map::GetCorpse(uint64 guid)
|
Corpse* Map::GetCorpse(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
Corpse * ret = ObjectAccessor::GetCorpseInMap(guid,GetId());
|
Corpse * ret = ObjectAccessor::GetCorpseInMap(guid,GetId());
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
|
@ -3522,33 +3522,32 @@ Corpse* Map::GetCorpse(uint64 guid)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
Creature* Map::GetCreatureOrPetOrVehicle(uint64 guid)
|
Creature* Map::GetCreatureOrPetOrVehicle(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
if (IS_PLAYER_GUID(guid))
|
switch(guid.GetHigh())
|
||||||
return NULL;
|
{
|
||||||
|
case HIGHGUID_UNIT: return GetCreature(guid);
|
||||||
|
case HIGHGUID_PET: return GetPet(guid);
|
||||||
|
case HIGHGUID_VEHICLE: return GetVehicle(guid);
|
||||||
|
default: break;
|
||||||
|
}
|
||||||
|
|
||||||
if (IS_PET_GUID(guid))
|
return NULL;
|
||||||
return GetPet(guid);
|
|
||||||
|
|
||||||
if (IS_VEHICLE_GUID(guid))
|
|
||||||
return GetVehicle(guid);
|
|
||||||
|
|
||||||
return GetCreature(guid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GameObject* Map::GetGameObject(uint64 guid)
|
GameObject* Map::GetGameObject(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
return m_objectsStore.find<GameObject>(guid, (GameObject*)NULL);
|
return m_objectsStore.find<GameObject>(guid.GetRawValue(), (GameObject*)NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
DynamicObject* Map::GetDynamicObject(uint64 guid)
|
DynamicObject* Map::GetDynamicObject(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
return m_objectsStore.find<DynamicObject>(guid, (DynamicObject*)NULL);
|
return m_objectsStore.find<DynamicObject>(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_PLAYER: return ObjectAccessor::FindPlayer(guid);
|
||||||
case HIGHGUID_GAMEOBJECT: return GetGameObject(guid);
|
case HIGHGUID_GAMEOBJECT: return GetGameObject(guid);
|
||||||
|
|
|
||||||
|
|
@ -396,14 +396,14 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>, public MaNGOS::Obj
|
||||||
|
|
||||||
void RemoveFromActive(Creature* obj);
|
void RemoveFromActive(Creature* obj);
|
||||||
|
|
||||||
Creature* GetCreature(uint64 guid);
|
Creature* GetCreature(ObjectGuid guid);
|
||||||
Vehicle* GetVehicle(uint64 guid);
|
Vehicle* GetVehicle(ObjectGuid guid);
|
||||||
Pet* GetPet(uint64 guid);
|
Pet* GetPet(ObjectGuid guid);
|
||||||
Creature* GetCreatureOrPetOrVehicle(uint64 guid);
|
Creature* GetCreatureOrPetOrVehicle(ObjectGuid guid);
|
||||||
GameObject* GetGameObject(uint64 guid);
|
GameObject* GetGameObject(ObjectGuid guid);
|
||||||
DynamicObject* GetDynamicObject(uint64 guid);
|
DynamicObject* GetDynamicObject(ObjectGuid guid);
|
||||||
Corpse* GetCorpse(uint64 guid);
|
Corpse* GetCorpse(ObjectGuid guid);
|
||||||
WorldObject* GetWorldObject(uint64 guid);
|
WorldObject* GetWorldObject(ObjectGuid guid);
|
||||||
|
|
||||||
TypeUnorderedMapContainer<AllMapStoredObjectTypes>& GetObjectsStore() { return m_objectsStore; }
|
TypeUnorderedMapContainer<AllMapStoredObjectTypes>& GetObjectsStore() { return m_objectsStore; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -54,12 +54,12 @@ ObjectAccessor::~ObjectAccessor()
|
||||||
}
|
}
|
||||||
|
|
||||||
Unit*
|
Unit*
|
||||||
ObjectAccessor::GetUnit(WorldObject const &u, uint64 guid)
|
ObjectAccessor::GetUnit(WorldObject const &u, ObjectGuid guid)
|
||||||
{
|
{
|
||||||
if(!guid)
|
if(guid.IsEmpty())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if(IS_PLAYER_GUID(guid))
|
if(guid.IsPlayer())
|
||||||
return FindPlayer(guid);
|
return FindPlayer(guid);
|
||||||
|
|
||||||
if (!u.IsInWorld())
|
if (!u.IsInWorld())
|
||||||
|
|
@ -68,7 +68,7 @@ ObjectAccessor::GetUnit(WorldObject const &u, uint64 guid)
|
||||||
return u.GetMap()->GetCreatureOrPetOrVehicle(guid);
|
return u.GetMap()->GetCreatureOrPetOrVehicle(guid);
|
||||||
}
|
}
|
||||||
|
|
||||||
Corpse* ObjectAccessor::GetCorpseInMap( uint64 guid, uint32 mapid )
|
Corpse* ObjectAccessor::GetCorpseInMap(ObjectGuid guid, uint32 mapid)
|
||||||
{
|
{
|
||||||
Corpse * ret = HashMapHolder<Corpse>::Find(guid);
|
Corpse * ret = HashMapHolder<Corpse>::Find(guid);
|
||||||
if(!ret)
|
if(!ret)
|
||||||
|
|
@ -79,49 +79,8 @@ Corpse* ObjectAccessor::GetCorpseInMap( uint64 guid, uint32 mapid )
|
||||||
return ret;
|
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*
|
Player*
|
||||||
ObjectAccessor::FindPlayer(uint64 guid)
|
ObjectAccessor::FindPlayer(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
Player * plr = HashMapHolder<Player>::Find(guid);;
|
Player * plr = HashMapHolder<Player>::Find(guid);;
|
||||||
if(!plr || !plr->IsInWorld())
|
if(!plr || !plr->IsInWorld())
|
||||||
|
|
@ -163,11 +122,11 @@ void ObjectAccessor::KickPlayer(uint64 guid)
|
||||||
}
|
}
|
||||||
|
|
||||||
Corpse*
|
Corpse*
|
||||||
ObjectAccessor::GetCorpseForPlayerGUID(uint64 guid)
|
ObjectAccessor::GetCorpseForPlayerGUID(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
Guard guard(i_corpseGuard);
|
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;
|
if( iter == i_player2corpse.end() ) return NULL;
|
||||||
|
|
||||||
assert(iter->second->GetType() != CORPSE_BONES);
|
assert(iter->second->GetType() != CORPSE_BONES);
|
||||||
|
|
@ -234,7 +193,7 @@ ObjectAccessor::AddCorpsesToGrid(GridPair const& gridpair,GridType& grid,Map* ma
|
||||||
}
|
}
|
||||||
|
|
||||||
Corpse*
|
Corpse*
|
||||||
ObjectAccessor::ConvertCorpseForPlayer(uint64 player_guid, bool insignia)
|
ObjectAccessor::ConvertCorpseForPlayer(ObjectGuid player_guid, bool insignia)
|
||||||
{
|
{
|
||||||
Corpse *corpse = GetCorpseForPlayerGUID(player_guid);
|
Corpse *corpse = GetCorpseForPlayerGUID(player_guid);
|
||||||
if(!corpse)
|
if(!corpse)
|
||||||
|
|
|
||||||
|
|
@ -58,9 +58,9 @@ class HashMapHolder
|
||||||
m_objectMap.erase(o->GetGUID());
|
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;
|
return (itr != m_objectMap.end()) ? itr->second : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -89,18 +89,17 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton<ObjectAccessor,
|
||||||
typedef UNORDERED_MAP<uint64, Corpse* > Player2CorpsesMapType;
|
typedef UNORDERED_MAP<uint64, Corpse* > Player2CorpsesMapType;
|
||||||
|
|
||||||
// global (obj used for map only location local guid objects (pets currently)
|
// 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
|
// FIXME: map local object with global search
|
||||||
static Creature* GetCreatureInWorld(uint64 guid) { return FindHelper<Creature>(guid); }
|
static Creature* GetCreatureInWorld(ObjectGuid guid) { return FindHelper<Creature>(guid); }
|
||||||
static GameObject* GetGameObjectInWorld(uint64 guid) { return FindHelper<GameObject>(guid); }
|
static GameObject* GetGameObjectInWorld(ObjectGuid guid) { return FindHelper<GameObject>(guid); }
|
||||||
|
|
||||||
// possible local search for specific object map
|
// possible local search for specific object map
|
||||||
static Object* GetObjectByTypeMask(WorldObject const &, uint64, uint32 typemask);
|
static Unit* GetUnit(WorldObject const &, ObjectGuid guid);
|
||||||
static Unit* GetUnit(WorldObject const &, uint64);
|
|
||||||
|
|
||||||
// Player access
|
// Player access
|
||||||
static Player* FindPlayer(uint64 guid);
|
static Player* FindPlayer(ObjectGuid guid);
|
||||||
static Player* FindPlayerByName(const char *name);
|
static Player* FindPlayerByName(const char *name);
|
||||||
static void KickPlayer(uint64 guid);
|
static void KickPlayer(uint64 guid);
|
||||||
|
|
||||||
|
|
@ -112,12 +111,12 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton<ObjectAccessor,
|
||||||
void SaveAllPlayers();
|
void SaveAllPlayers();
|
||||||
|
|
||||||
// Corpse access
|
// Corpse access
|
||||||
Corpse* GetCorpseForPlayerGUID(uint64 guid);
|
Corpse* GetCorpseForPlayerGUID(ObjectGuid guid);
|
||||||
static Corpse* GetCorpseInMap(uint64 guid, uint32 mapid);
|
static Corpse* GetCorpseInMap(ObjectGuid guid, uint32 mapid);
|
||||||
void RemoveCorpse(Corpse *corpse);
|
void RemoveCorpse(Corpse *corpse);
|
||||||
void AddCorpse(Corpse* corpse);
|
void AddCorpse(Corpse* corpse);
|
||||||
void AddCorpsesToGrid(GridPair const& gridpair,GridType& grid,Map* map);
|
void AddCorpsesToGrid(GridPair const& gridpair,GridType& grid,Map* map);
|
||||||
Corpse* ConvertCorpseForPlayer(uint64 player_guid, bool insignia = false);
|
Corpse* ConvertCorpseForPlayer(ObjectGuid player_guid, bool insignia = false);
|
||||||
|
|
||||||
// For call from Player/Corpse AddToWorld/RemoveFromWorld only
|
// For call from Player/Corpse AddToWorld/RemoveFromWorld only
|
||||||
void AddObject(Corpse *object) { HashMapHolder<Corpse>::Insert(object); }
|
void AddObject(Corpse *object) { HashMapHolder<Corpse>::Insert(object); }
|
||||||
|
|
@ -132,11 +131,11 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton<ObjectAccessor,
|
||||||
// TODO: This methods will need lock in MT environment
|
// TODO: This methods will need lock in MT environment
|
||||||
// Theoreticaly multiple threads can enter and search in this method but
|
// Theoreticaly multiple threads can enter and search in this method but
|
||||||
// in that case linking/delinking other map should be guarded
|
// in that case linking/delinking other map should be guarded
|
||||||
template <class OBJECT> static OBJECT* FindHelper(uint64 guid)
|
template <class OBJECT> static OBJECT* FindHelper(ObjectGuid guid)
|
||||||
{
|
{
|
||||||
for (std::list<Map*>::const_iterator i = i_mapList.begin() ; i != i_mapList.end(); ++i)
|
for (std::list<Map*>::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;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -154,15 +153,15 @@ class MANGOS_DLL_DECL ObjectAccessor : public MaNGOS::Singleton<ObjectAccessor,
|
||||||
LockType i_corpseGuard;
|
LockType i_corpseGuard;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline Unit* ObjectAccessor::GetUnitInWorld(WorldObject const& obj, uint64 guid)
|
inline Unit* ObjectAccessor::GetUnitInWorld(WorldObject const& obj, ObjectGuid guid)
|
||||||
{
|
{
|
||||||
if(!guid)
|
if(guid.IsEmpty())
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (IS_PLAYER_GUID(guid))
|
if (guid.IsPlayer())
|
||||||
return FindPlayer(guid);
|
return FindPlayer(guid);
|
||||||
|
|
||||||
if (IS_PET_GUID(guid))
|
if (guid.IsPet())
|
||||||
return obj.IsInWorld() ? obj.GetMap()->GetPet(guid) : NULL;
|
return obj.IsInWorld() ? obj.GetMap()->GetPet(guid) : NULL;
|
||||||
|
|
||||||
return GetCreatureInWorld(guid);
|
return GetCreatureInWorld(guid);
|
||||||
|
|
|
||||||
|
|
@ -41,11 +41,16 @@ enum TypeMask
|
||||||
TYPEMASK_OBJECT = 0x0001,
|
TYPEMASK_OBJECT = 0x0001,
|
||||||
TYPEMASK_ITEM = 0x0002,
|
TYPEMASK_ITEM = 0x0002,
|
||||||
TYPEMASK_CONTAINER = 0x0006, // TYPEMASK_ITEM | 0x0004
|
TYPEMASK_CONTAINER = 0x0006, // TYPEMASK_ITEM | 0x0004
|
||||||
TYPEMASK_UNIT = 0x0008,
|
TYPEMASK_UNIT = 0x0008, // players also have it
|
||||||
TYPEMASK_PLAYER = 0x0010,
|
TYPEMASK_PLAYER = 0x0010,
|
||||||
TYPEMASK_GAMEOBJECT = 0x0020,
|
TYPEMASK_GAMEOBJECT = 0x0020,
|
||||||
TYPEMASK_DYNAMICOBJECT = 0x0040,
|
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
|
enum HighGuid
|
||||||
|
|
@ -128,6 +133,7 @@ class ObjectGuid
|
||||||
ObjectGuid() : m_guid(0) {}
|
ObjectGuid() : m_guid(0) {}
|
||||||
ObjectGuid(uint64 const& guid) : m_guid(guid) {} // NOTE: must be explicit in future for more strict control type conversions
|
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 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
|
public: // modifiers
|
||||||
PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); }
|
PackedGuidReader ReadAsPacked() { return PackedGuidReader(*this); }
|
||||||
|
|
|
||||||
|
|
@ -21674,4 +21674,45 @@ void Player::SetHomebindToLocation(WorldLocation const& loc, uint32 area_id)
|
||||||
m_homebindMapId, m_homebindAreaId, m_homebindX, m_homebindY, m_homebindZ, GetGUIDLow());
|
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;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -2175,6 +2175,8 @@ class MANGOS_DLL_SPEC Player : public Unit
|
||||||
void RelocateToHomebind() { SetLocationMapId(m_homebindMapId); Relocate(m_homebindX, m_homebindY, m_homebindZ); }
|
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); }
|
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
|
// currently visible objects at player client
|
||||||
typedef std::set<uint64> ClientGUIDs;
|
typedef std::set<uint64> ClientGUIDs;
|
||||||
ClientGUIDs m_clientGUIDs;
|
ClientGUIDs m_clientGUIDs;
|
||||||
|
|
|
||||||
|
|
@ -206,7 +206,7 @@ void PoolGroup<Creature>::Despawn1Object(uint32 guid)
|
||||||
{
|
{
|
||||||
sObjectMgr.RemoveCreatureFromGrid(guid, data);
|
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();
|
pCreature->AddObjectToRemoveList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -219,7 +219,7 @@ void PoolGroup<GameObject>::Despawn1Object(uint32 guid)
|
||||||
{
|
{
|
||||||
sObjectMgr.RemoveGameobjectFromGrid(guid, data);
|
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();
|
pGameobject->AddObjectToRemoveList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -403,7 +403,7 @@ template <>
|
||||||
void PoolGroup<GameObject>::ReSpawn1Object(PoolObject* obj)
|
void PoolGroup<GameObject>::ReSpawn1Object(PoolObject* obj)
|
||||||
{
|
{
|
||||||
if (GameObjectData const* data = sObjectMgr.GetGOData(obj->guid))
|
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);
|
pGameobject->GetMap()->Add(pGameobject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ void WorldSession::HandleQuestgiverStatusQueryOpcode( WorldPacket & recv_data )
|
||||||
uint8 questStatus = DIALOG_STATUS_NONE;
|
uint8 questStatus = DIALOG_STATUS_NONE;
|
||||||
uint8 defstatus = 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)
|
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));
|
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 );
|
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
|
// no or incorrect quest giver
|
||||||
if(!pObject
|
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 );
|
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
|
// 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))
|
if(!pObject||!pObject->hasQuest(quest) && !pObject->hasInvolvedQuest(quest))
|
||||||
{
|
{
|
||||||
_player->PlayerTalkClass->CloseGossip();
|
_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 );
|
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)
|
if(!pObject)
|
||||||
return;
|
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 );
|
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))
|
if(!pObject||!pObject->hasInvolvedQuest(quest))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -281,7 +281,7 @@ void SocialMgr::BroadcastToFriendListers(Player *player, WorldPacket *packet)
|
||||||
PlayerSocialMap::const_iterator itr2 = itr->second.m_playerSocialMap.find(guid);
|
PlayerSocialMap::const_iterator itr2 = itr->second.m_playerSocialMap.find(guid);
|
||||||
if(itr2 != itr->second.m_playerSocialMap.end() && (itr2->second.Flags & SOCIAL_FLAG_FRIEND))
|
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
|
// PLAYER see his team only and PLAYER can't see MODERATOR, GAME MASTER, ADMINISTRATOR characters
|
||||||
// MODERATOR, GAME MASTER, ADMINISTRATOR can see all
|
// MODERATOR, GAME MASTER, ADMINISTRATOR can see all
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "9574"
|
#define REVISION_NR "9575"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue