Core/OutdoorPvP: Remove manual spawn management functions from OutdoorPvP

This commit is contained in:
Shauren authored and Ovahlord committed 2022-12-26 12:18:54 +01:00
1 parent c5cccebf64
commit 51363865bc
2 files changed
+2 -182

No files matched your search

+2 -156
View File
@@ -88,56 +88,6 @@ void OPvPCapturePoint::SendChangePhase()
SendUpdateWorldState(m_capturePoint->GetGOInfo()->capturePoint.worldstate3, m_neutralValuePct);
}
void OPvPCapturePoint::AddGO(uint32 type, ObjectGuid::LowType guid, uint32 entry)
{
if (!entry)
{
GameObjectData const* data = sObjectMgr->GetGameObjectData(guid);
if (!data)
return;
entry = data->id;
}
m_Objects[type] = guid;
m_ObjectTypes[m_Objects[type]] = type;
}
void OPvPCapturePoint::AddCre(uint32 type, ObjectGuid::LowType guid, uint32 entry)
{
if (!entry)
{
CreatureData const* data = sObjectMgr->GetCreatureData(guid);
if (!data)
return;
entry = data->id;
}
m_Creatures[type] = guid;
m_CreatureTypes[m_Creatures[type]] = type;
}
bool OPvPCapturePoint::AddObject(uint32 type, uint32 entry, uint32 map, Position const& pos, QuaternionData const& rot)
{
if (ObjectGuid::LowType guid = sObjectMgr->AddGameObjectData(entry, map, pos, rot, 0))
{
AddGO(type, guid, entry);
return true;
}
return false;
}
bool OPvPCapturePoint::AddCreature(uint32 type, uint32 entry, uint32 map, Position const& pos, TeamId /*teamId = TEAM_NEUTRAL*/, uint32 spawntimedelay /*= 0*/)
{
if (ObjectGuid::LowType guid = sObjectMgr->AddCreatureData(entry, map, pos, spawntimedelay))
{
AddCre(type, guid, entry);
return true;
}
return false;
}
bool OPvPCapturePoint::SetCapturePointData(uint32 entry)
{
TC_LOG_DEBUG("outdoorpvp", "Creating capture point %u", entry);
@@ -158,109 +108,9 @@ bool OPvPCapturePoint::SetCapturePointData(uint32 entry)
return true;;
}
bool OPvPCapturePoint::SetCapturePointData(uint32 entry, uint32 map, Position const& pos, QuaternionData const& rot)
{
TC_LOG_DEBUG("outdoorpvp", "Creating capture point %u", entry);
// check info existence
GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(entry);
if (!goinfo || goinfo->type != GAMEOBJECT_TYPE_CAPTURE_POINT)
{
TC_LOG_ERROR("outdoorpvp", "OutdoorPvP: GO %u is not capture point!", entry);
return false;
}
m_capturePointSpawnId = sObjectMgr->AddGameObjectData(entry, map, pos, rot, 0);
if (!m_capturePointSpawnId)
return false;
SetCapturePointData(entry);
return true;
}
bool OPvPCapturePoint::DelCreature(uint32 type)
{
ObjectGuid::LowType spawnId = m_Creatures[type];
if (!spawnId)
{
TC_LOG_DEBUG("outdoorpvp", "opvp creature type %u was already deleted", type);
return false;
}
TC_LOG_DEBUG("outdoorpvp", "deleting opvp creature type %u", type);
m_CreatureTypes[m_Creatures[type]] = 0;
m_Creatures[type] = 0;
return Creature::DeleteFromDB(spawnId);
}
bool OPvPCapturePoint::DelObject(uint32 type)
{
uint32 spawnId = m_Objects[type];
if (!spawnId)
return false;
sObjectMgr->DeleteGameObjectData(spawnId);
m_ObjectTypes[m_Objects[type]] = 0;
m_Objects[type] = 0;
return GameObject::DeleteFromDB(spawnId);
}
bool OPvPCapturePoint::DelCapturePoint()
{
sObjectMgr->DeleteGameObjectData(m_capturePointSpawnId);
m_capturePointSpawnId = 0;
if (m_capturePoint)
{
m_capturePoint->SetRespawnTime(0); // not save respawn time
m_capturePoint->Delete();
}
return true;
}
void OPvPCapturePoint::DeleteSpawns()
{
for (std::map<uint32, ObjectGuid::LowType>::iterator i = m_Objects.begin(); i != m_Objects.end(); ++i)
DelObject(i->first);
for (std::map<uint32, ObjectGuid::LowType>::iterator i = m_Creatures.begin(); i != m_Creatures.end(); ++i)
DelCreature(i->first);
DelCapturePoint();
}
void OutdoorPvP::DeleteSpawns()
{
// Remove script from any registered gameobjects/creatures
for (auto itr = m_GoScriptStore.begin(); itr != m_GoScriptStore.end(); ++itr)
{
if (GameObject* go = itr->second)
go->ClearZoneScript();
}
m_GoScriptStore.clear();
for (auto itr = m_CreatureScriptStore.begin(); itr != m_CreatureScriptStore.end(); ++itr)
{
if (Creature* creature = itr->second)
creature->ClearZoneScript();
}
m_CreatureScriptStore.clear();
for (OPvPCapturePointMap::iterator itr = m_capturePoints.begin(); itr != m_capturePoints.end(); ++itr)
{
itr->second->DeleteSpawns();
delete itr->second;
}
m_capturePoints.clear();
}
OutdoorPvP::OutdoorPvP() : m_TypeId(0), m_map(nullptr) { }
OutdoorPvP::~OutdoorPvP()
{
DeleteSpawns();
}
OutdoorPvP::~OutdoorPvP() = default;
void OutdoorPvP::HandlePlayerEnterZone(Player* player, uint32 /*zone*/)
{
@@ -567,12 +417,8 @@ bool OPvPCapturePoint::HandleDropFlag(Player* /*player*/, uint32 /*id*/)
return false;
}
int32 OPvPCapturePoint::HandleOpenGo(Player* /*player*/, GameObject* go)
int32 OPvPCapturePoint::HandleOpenGo(Player* /*player*/, GameObject* /*go*/)
{
std::map<ObjectGuid::LowType, uint32>::iterator itr = m_ObjectTypes.find(go->GetSpawnId());
if (itr != m_ObjectTypes.end())
return itr->second;
return -1;
}
-26
View File
@@ -122,27 +122,11 @@ class TC_GAME_API OPvPCapturePoint
virtual bool HandleDropFlag(Player* player, uint32 spellId);
virtual void DeleteSpawns();
ObjectGuid::LowType m_capturePointSpawnId;
GameObject* m_capturePoint;
void AddGO(uint32 type, ObjectGuid::LowType guid, uint32 entry = 0);
void AddCre(uint32 type, ObjectGuid::LowType guid, uint32 entry = 0);
bool SetCapturePointData(uint32 entry);
bool SetCapturePointData(uint32 entry, uint32 map, Position const& pos, QuaternionData const& rot);
protected:
bool AddObject(uint32 type, uint32 entry, uint32 map, Position const& pos, QuaternionData const& rot);
bool AddCreature(uint32 type, uint32 entry, uint32 map, Position const& pos, TeamId teamId = TEAM_NEUTRAL, uint32 spawntimedelay = 0);
bool DelObject(uint32 type);
bool DelCreature(uint32 type);
bool DelCapturePoint();
protected:
@@ -170,13 +154,6 @@ class TC_GAME_API OPvPCapturePoint
// pointer to the OutdoorPvP this objective belongs to
OutdoorPvP* m_PvP;
// map to store the various gameobjects and creatures spawned by the objective
// type, guid
std::map<uint32, ObjectGuid::LowType> m_Objects;
std::map<uint32, ObjectGuid::LowType> m_Creatures;
std::map<ObjectGuid::LowType, uint32> m_ObjectTypes;
std::map<ObjectGuid::LowType, uint32> m_CreatureTypes;
};
// base class for specific outdoor pvp handlers
@@ -192,9 +169,6 @@ class TC_GAME_API OutdoorPvP : public ZoneScript
// dtor
virtual ~OutdoorPvP();
// deletes all gos/creatures spawned by the pvp
void DeleteSpawns();
typedef std::map<ObjectGuid::LowType/*spawnId*/, OPvPCapturePoint*> OPvPCapturePointMap;
typedef std::pair<ObjectGuid::LowType, GameObject*> GoScriptPair;
typedef std::pair<ObjectGuid::LowType, Creature*> CreatureScriptPair;