mirror of
https://github.com/mangosfour/server.git
synced 2025-12-18 01:37:01 +00:00
Phase system development continue.
* Use WorldObject phase mask field instead explicit aura scan. This allow have phase for any world objects. * Add phase checks to packet broadcasters/object searchers. This let correctly work say/yell/area and multi/random target spells/aggro assistance in phased areas or target selection. * In GM-mode character presense (see and visible) in all phases except normal visibility efects including GM-visibility. TODO: summoned objects phase set base at owner phase, load phase mask for creatures/gameobjects from DB, in game commands.
This commit is contained in:
parent
0c43a425e8
commit
b5da610388
16 changed files with 223 additions and 121 deletions
|
|
@ -99,8 +99,10 @@ namespace MaNGOS
|
|||
|
||||
struct MANGOS_DLL_DECL ObjectMessageDeliverer
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
WorldPacket *i_message;
|
||||
explicit ObjectMessageDeliverer(WorldPacket *msg) : i_message(msg) {}
|
||||
explicit ObjectMessageDeliverer(WorldObject& obj, WorldPacket *msg)
|
||||
: i_phaseMask(obj.GetPhaseMask()), i_message(msg) {}
|
||||
void Visit(PlayerMapType &m);
|
||||
template<class SKIP> void Visit(GridRefManager<SKIP> &) {}
|
||||
};
|
||||
|
|
@ -211,10 +213,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL WorldObjectSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
WorldObject* &i_object;
|
||||
Check &i_check;
|
||||
|
||||
WorldObjectSearcher(WorldObject* & result, Check& check) : i_object(result),i_check(check) {}
|
||||
WorldObjectSearcher(WorldObject const* searcher, WorldObject* & result, Check& check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {}
|
||||
|
||||
void Visit(GameObjectMapType &m);
|
||||
void Visit(PlayerMapType &m);
|
||||
|
|
@ -228,10 +232,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL WorldObjectListSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
std::list<WorldObject*> &i_objects;
|
||||
Check& i_check;
|
||||
|
||||
WorldObjectListSearcher(std::list<WorldObject*> &objects, Check & check) : i_objects(objects),i_check(check) {}
|
||||
WorldObjectListSearcher(WorldObject const* searcher, std::list<WorldObject*> &objects, Check & check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_objects(objects),i_check(check) {}
|
||||
|
||||
void Visit(PlayerMapType &m);
|
||||
void Visit(CreatureMapType &m);
|
||||
|
|
@ -245,37 +251,44 @@ namespace MaNGOS
|
|||
template<class Do>
|
||||
struct MANGOS_DLL_DECL WorldObjectWorker
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Do const& i_do;
|
||||
|
||||
explicit WorldObjectWorker(Do const& _do) : i_do(_do) {}
|
||||
WorldObjectWorker(WorldObject const* searcher, Do const& _do)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_do(_do) {}
|
||||
|
||||
void Visit(GameObjectMapType &m)
|
||||
{
|
||||
for(GameObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
|
||||
i_do(itr->getSource());
|
||||
if(itr->getSource()->InSamePhase(i_phaseMask))
|
||||
i_do(itr->getSource());
|
||||
}
|
||||
|
||||
void Visit(PlayerMapType &m)
|
||||
{
|
||||
for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
|
||||
i_do(itr->getSource());
|
||||
if(itr->getSource()->InSamePhase(i_phaseMask))
|
||||
i_do(itr->getSource());
|
||||
}
|
||||
void Visit(CreatureMapType &m)
|
||||
{
|
||||
for(CreatureMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
|
||||
i_do(itr->getSource());
|
||||
if(itr->getSource()->InSamePhase(i_phaseMask))
|
||||
i_do(itr->getSource());
|
||||
}
|
||||
|
||||
void Visit(CorpseMapType &m)
|
||||
{
|
||||
for(CorpseMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
|
||||
i_do(itr->getSource());
|
||||
if(itr->getSource()->InSamePhase(i_phaseMask))
|
||||
i_do(itr->getSource());
|
||||
}
|
||||
|
||||
void Visit(DynamicObjectMapType &m)
|
||||
{
|
||||
for(DynamicObjectMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
|
||||
i_do(itr->getSource());
|
||||
if(itr->getSource()->InSamePhase(i_phaseMask))
|
||||
i_do(itr->getSource());
|
||||
}
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) {}
|
||||
|
|
@ -286,10 +299,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL GameObjectSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
GameObject* &i_object;
|
||||
Check &i_check;
|
||||
|
||||
GameObjectSearcher(GameObject* & result, Check& check) : i_object(result),i_check(check) {}
|
||||
GameObjectSearcher(WorldObject const* searcher, GameObject* & result, Check& check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {}
|
||||
|
||||
void Visit(GameObjectMapType &m);
|
||||
|
||||
|
|
@ -300,10 +315,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL GameObjectLastSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
GameObject* &i_object;
|
||||
Check& i_check;
|
||||
|
||||
GameObjectLastSearcher(GameObject* & result, Check& check) : i_object(result),i_check(check) {}
|
||||
GameObjectLastSearcher(WorldObject const* searcher, GameObject* & result, Check& check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_object(result), i_check(check) {}
|
||||
|
||||
void Visit(GameObjectMapType &m);
|
||||
|
||||
|
|
@ -313,10 +330,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL GameObjectListSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
std::list<GameObject*> &i_objects;
|
||||
Check& i_check;
|
||||
|
||||
GameObjectListSearcher(std::list<GameObject*> &objects, Check & check) : i_objects(objects),i_check(check) {}
|
||||
GameObjectListSearcher(WorldObject const* searcher, std::list<GameObject*> &objects, Check & check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_objects(objects), i_check(check) {}
|
||||
|
||||
void Visit(GameObjectMapType &m);
|
||||
|
||||
|
|
@ -329,10 +348,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL UnitSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Unit* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
UnitSearcher(Unit* & result, Check & check) : i_object(result),i_check(check) {}
|
||||
UnitSearcher(WorldObject const* searcher, Unit* & result, Check & check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {}
|
||||
|
||||
void Visit(CreatureMapType &m);
|
||||
void Visit(PlayerMapType &m);
|
||||
|
|
@ -344,10 +365,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL UnitLastSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Unit* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
UnitLastSearcher(Unit* & result, Check & check) : i_object(result),i_check(check) {}
|
||||
UnitLastSearcher(WorldObject const* searcher, Unit* & result, Check & check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {}
|
||||
|
||||
void Visit(CreatureMapType &m);
|
||||
void Visit(PlayerMapType &m);
|
||||
|
|
@ -359,10 +382,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL UnitListSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
std::list<Unit*> &i_objects;
|
||||
Check& i_check;
|
||||
|
||||
UnitListSearcher(std::list<Unit*> &objects, Check & check) : i_objects(objects),i_check(check) {}
|
||||
UnitListSearcher(WorldObject const* searcher, std::list<Unit*> &objects, Check & check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_objects(objects),i_check(check) {}
|
||||
|
||||
void Visit(PlayerMapType &m);
|
||||
void Visit(CreatureMapType &m);
|
||||
|
|
@ -375,10 +400,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL CreatureSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Creature* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
CreatureSearcher(Creature* & result, Check & check) : i_object(result),i_check(check) {}
|
||||
CreatureSearcher(WorldObject const* searcher, Creature* & result, Check & check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {}
|
||||
|
||||
void Visit(CreatureMapType &m);
|
||||
|
||||
|
|
@ -389,10 +416,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL CreatureLastSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Creature* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
CreatureLastSearcher(Creature* & result, Check & check) : i_object(result),i_check(check) {}
|
||||
CreatureLastSearcher(WorldObject const* searcher, Creature* & result, Check & check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {}
|
||||
|
||||
void Visit(CreatureMapType &m);
|
||||
|
||||
|
|
@ -402,10 +431,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL CreatureListSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
std::list<Creature*> &i_objects;
|
||||
Check& i_check;
|
||||
|
||||
CreatureListSearcher(std::list<Creature*> &objects, Check & check) : i_objects(objects),i_check(check) {}
|
||||
CreatureListSearcher(WorldObject const* searcher, std::list<Creature*> &objects, Check & check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_objects(objects),i_check(check) {}
|
||||
|
||||
void Visit(CreatureMapType &m);
|
||||
|
||||
|
|
@ -417,10 +448,12 @@ namespace MaNGOS
|
|||
template<class Check>
|
||||
struct MANGOS_DLL_DECL PlayerSearcher
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Player* &i_object;
|
||||
Check & i_check;
|
||||
|
||||
PlayerSearcher(Player* & result, Check & check) : i_object(result),i_check(check) {}
|
||||
PlayerSearcher(WorldObject const* searcher, Player* & result, Check & check)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_object(result),i_check(check) {}
|
||||
|
||||
void Visit(PlayerMapType &m);
|
||||
|
||||
|
|
@ -430,14 +463,17 @@ namespace MaNGOS
|
|||
template<class Do>
|
||||
struct MANGOS_DLL_DECL PlayerWorker
|
||||
{
|
||||
uint32 i_phaseMask;
|
||||
Do& i_do;
|
||||
|
||||
explicit PlayerWorker(Do& _do) : i_do(_do) {}
|
||||
PlayerWorker(WorldObject const* searcher, Do& _do)
|
||||
: i_phaseMask(searcher->GetPhaseMask()), i_do(_do) {}
|
||||
|
||||
void Visit(PlayerMapType &m)
|
||||
{
|
||||
for(PlayerMapType::iterator itr=m.begin(); itr != m.end(); ++itr)
|
||||
i_do(itr->getSource());
|
||||
if(itr->getSource()->InSamePhase(i_phaseMask))
|
||||
i_do(itr->getSource());
|
||||
}
|
||||
|
||||
template<class NOT_INTERESTED> void Visit(GridRefManager<NOT_INTERESTED> &) {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue