mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
call OnObjectDBLoad(Creature/GameObject) for battleground at object-loading
this is a virtual function and can be used to move gameobjects and creatures from battlegroundcode to database for this i also had to add a BattleGround-pointer to the map so i renamed CreateBattleGround(instanceid) to CreateBattleGroundMap(instanceid, Battleground*)
This commit is contained in:
parent
1665077dc4
commit
bd87209498
5 changed files with 17 additions and 5 deletions
|
|
@ -477,6 +477,9 @@ class BattleGround
|
||||||
virtual void RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPacket);
|
virtual void RemovePlayerAtLeave(uint64 guid, bool Transport, bool SendPacket);
|
||||||
// can be extended in in BG subclass
|
// can be extended in in BG subclass
|
||||||
|
|
||||||
|
virtual void OnObjectDBLoad(Creature* /*creature*/);
|
||||||
|
virtual void OnObjectDBLoad(GameObject* /*obj*/);
|
||||||
|
|
||||||
void HandleTriggerBuff(uint64 const& go_guid);
|
void HandleTriggerBuff(uint64 const& go_guid);
|
||||||
|
|
||||||
// TODO: make this protected:
|
// TODO: make this protected:
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,7 @@ class Group;
|
||||||
class InstanceSave;
|
class InstanceSave;
|
||||||
struct ScriptInfo;
|
struct ScriptInfo;
|
||||||
struct ScriptAction;
|
struct ScriptAction;
|
||||||
|
class BattleGround;
|
||||||
|
|
||||||
|
|
||||||
typedef ACE_RW_Thread_Mutex GridRWLock;
|
typedef ACE_RW_Thread_Mutex GridRWLock;
|
||||||
|
|
@ -585,6 +586,10 @@ class MANGOS_DLL_SPEC BattleGroundMap : public Map
|
||||||
void UnloadAll(bool pForce);
|
void UnloadAll(bool pForce);
|
||||||
|
|
||||||
virtual void InitVisibilityDistance();
|
virtual void InitVisibilityDistance();
|
||||||
|
BattleGround* GetBG() { return m_bg; }
|
||||||
|
void SetBG(BattleGround* bg) { m_bg = bg; }
|
||||||
|
private:
|
||||||
|
BattleGround* m_bg;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*inline
|
/*inline
|
||||||
|
|
|
||||||
|
|
@ -135,7 +135,7 @@ Map* MapInstanced::CreateInstance(const uint32 mapId, Player * player)
|
||||||
ASSERT(NewInstanceId);
|
ASSERT(NewInstanceId);
|
||||||
map = _FindMap(NewInstanceId);
|
map = _FindMap(NewInstanceId);
|
||||||
if(!map)
|
if(!map)
|
||||||
map = CreateBattleGround(NewInstanceId);
|
map = CreateBattleGroundMap(NewInstanceId, player->GetBattleGround());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -208,15 +208,16 @@ InstanceMap* MapInstanced::CreateInstance(uint32 InstanceId, InstanceSave *save,
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
BattleGroundMap* MapInstanced::CreateBattleGround(uint32 InstanceId)
|
BattleGroundMap* MapInstanced::CreateBattleGroundMap(uint32 InstanceId, BattleGround* bg)
|
||||||
{
|
{
|
||||||
// load/create a map
|
// load/create a map
|
||||||
Guard guard(*this);
|
Guard guard(*this);
|
||||||
|
|
||||||
sLog.outDebug("MapInstanced::CreateBattleGround: map bg %d for %d created.", InstanceId, GetId());
|
sLog.outDebug("MapInstanced::CreateBattleGroundMap: instance:%d for map:%d and bgType:%d created.", InstanceId, GetId(), bg->GetTypeID());
|
||||||
|
|
||||||
BattleGroundMap *map = new BattleGroundMap(GetId(), GetGridExpiry(), InstanceId, this);
|
BattleGroundMap *map = new BattleGroundMap(GetId(), GetGridExpiry(), InstanceId, this);
|
||||||
ASSERT(map->IsBattleGroundOrArena());
|
ASSERT(map->IsBattleGroundOrArena());
|
||||||
|
map->SetBG(bg);
|
||||||
|
|
||||||
m_InstancedMaps[InstanceId] = map;
|
m_InstancedMaps[InstanceId] = map;
|
||||||
return map;
|
return map;
|
||||||
|
|
|
||||||
|
|
@ -62,7 +62,7 @@ class MANGOS_DLL_DECL MapInstanced : public Map
|
||||||
private:
|
private:
|
||||||
|
|
||||||
InstanceMap* CreateInstance(uint32 InstanceId, InstanceSave *save, uint8 difficulty);
|
InstanceMap* CreateInstance(uint32 InstanceId, InstanceSave *save, uint8 difficulty);
|
||||||
BattleGroundMap* CreateBattleGround(uint32 InstanceId);
|
BattleGroundMap* CreateBattleGroundMap(uint32 InstanceId, BattleGround* bg);
|
||||||
|
|
||||||
InstancedMaps m_InstancedMaps;
|
InstancedMaps m_InstancedMaps;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -109,6 +109,8 @@ template<> void addUnitState(Creature *obj, CellPair const& cell_pair)
|
||||||
template <class T>
|
template <class T>
|
||||||
void LoadHelper(CellGuidSet const& guid_set, CellPair &cell, GridRefManager<T> &m, uint32 &count, Map* map)
|
void LoadHelper(CellGuidSet const& guid_set, CellPair &cell, GridRefManager<T> &m, uint32 &count, Map* map)
|
||||||
{
|
{
|
||||||
|
BattleGround* bg = map->IsBattleGroundOrArena() ? ((BattleGroundMap*)map)->GetBG() : NULL;
|
||||||
|
|
||||||
for(CellGuidSet::const_iterator i_guid = guid_set.begin(); i_guid != guid_set.end(); ++i_guid)
|
for(CellGuidSet::const_iterator i_guid = guid_set.begin(); i_guid != guid_set.end(); ++i_guid)
|
||||||
{
|
{
|
||||||
T* obj = new T;
|
T* obj = new T;
|
||||||
|
|
@ -127,9 +129,10 @@ void LoadHelper(CellGuidSet const& guid_set, CellPair &cell, GridRefManager<T> &
|
||||||
obj->AddToWorld();
|
obj->AddToWorld();
|
||||||
if(obj->isActiveObject())
|
if(obj->isActiveObject())
|
||||||
map->AddToActive(obj);
|
map->AddToActive(obj);
|
||||||
|
if (bg)
|
||||||
|
bg->OnObjectDBLoad(obj);
|
||||||
|
|
||||||
++count;
|
++count;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue