diff options
| author | megamage <none@none> | 2009-03-11 11:48:57 -0600 |
|---|---|---|
| committer | megamage <none@none> | 2009-03-11 11:48:57 -0600 |
| commit | 3c5a92dbe0a1f140bbc7e1d9497e9e5d0d09e514 (patch) | |
| tree | 70004281c39a5d4927fb144537b4baad5051b6c1 /src | |
| parent | 234a4d97077113ca8cf04def1687730da22408a8 (diff) | |
*Fix a crash bug.
--HG--
branch : trunk
Diffstat (limited to 'src')
| -rw-r--r-- | src/game/GridNotifiers.cpp | 2 | ||||
| -rw-r--r-- | src/game/GridNotifiers.h | 18 | ||||
| -rw-r--r-- | src/game/GridNotifiersImpl.h | 2 | ||||
| -rw-r--r-- | src/game/Map.cpp | 8 |
4 files changed, 19 insertions, 11 deletions
diff --git a/src/game/GridNotifiers.cpp b/src/game/GridNotifiers.cpp index 13fa66308e5..fcb4e376b26 100644 --- a/src/game/GridNotifiers.cpp +++ b/src/game/GridNotifiers.cpp @@ -43,7 +43,7 @@ VisibleChangesNotifier::Visit(PlayerMapType &m) } void -PlayerRelocationNotifier::Notify() +PlayerVisibilityNotifier::Notify() { // at this moment i_clientGUIDs have guids that not iterate at grid level checks // but exist one case when this possible and object not out of range: transports diff --git a/src/game/GridNotifiers.h b/src/game/GridNotifiers.h index bdd40a3f72f..8e427366f1a 100644 --- a/src/game/GridNotifiers.h +++ b/src/game/GridNotifiers.h @@ -38,7 +38,7 @@ class Player; namespace Trinity { - struct TRINITY_DLL_DECL PlayerRelocationNotifier + struct TRINITY_DLL_DECL PlayerVisibilityNotifier { Player &i_player; UpdateData i_data; @@ -46,17 +46,27 @@ namespace Trinity Player::ClientGUIDs i_clientGUIDs; std::set<WorldObject*> i_visibleNow; - PlayerRelocationNotifier(Player &player) : i_player(player),i_clientGUIDs(player.m_clientGUIDs) {} + PlayerVisibilityNotifier(Player &player) : i_player(player),i_clientGUIDs(player.m_clientGUIDs) {} template<class T> inline void Visit(GridRefManager<T> &); - #ifdef WIN32 + /*#ifdef WIN32 template<> inline void Visit(PlayerMapType &); template<> inline void Visit(CreatureMapType &); - #endif + #endif*/ void Notify(void); }; + struct TRINITY_DLL_DECL PlayerRelocationNotifier : public PlayerVisibilityNotifier + { + PlayerRelocationNotifier(Player &player) : PlayerVisibilityNotifier(player) {} + template<class T> inline void Visit(GridRefManager<T> &m) { PlayerVisibilityNotifier::Visit(m); } + #ifdef WIN32 + template<> inline void Visit(PlayerMapType &); + template<> inline void Visit(CreatureMapType &); + #endif + }; + struct TRINITY_DLL_DECL CreatureRelocationNotifier { Creature &i_creature; diff --git a/src/game/GridNotifiersImpl.h b/src/game/GridNotifiersImpl.h index 7131b6281f4..4fe61076b18 100644 --- a/src/game/GridNotifiersImpl.h +++ b/src/game/GridNotifiersImpl.h @@ -67,7 +67,7 @@ inline void CreatureCreatureRelocationWorker(Creature* c1, Creature* c2) template<class T> inline void -Trinity::PlayerRelocationNotifier::Visit(GridRefManager<T> &m) +Trinity::PlayerVisibilityNotifier::Visit(GridRefManager<T> &m) { for(typename GridRefManager<T>::iterator iter = m.begin(); iter != m.end(); ++iter) { diff --git a/src/game/Map.cpp b/src/game/Map.cpp index 9c2521ca3bd..fbe87986903 100644 --- a/src/game/Map.cpp +++ b/src/game/Map.cpp @@ -754,11 +754,9 @@ void Map::Update(const uint32 &t_diff) if(obj->isType(TYPEMASK_UNIT)) { if(!((Unit*)obj)->GetSharedVisionList().empty()) - for(SharedVisionList::const_iterator itr = ((Unit*)obj)->GetSharedVisionList().begin(); itr != ((Unit*)obj)->GetSharedVisionList().end();) + for(SharedVisionList::const_iterator itr = ((Unit*)obj)->GetSharedVisionList().begin(); itr != ((Unit*)obj)->GetSharedVisionList().end(); ++itr) { - Player *player = *itr; - ++itr; - Trinity::PlayerRelocationNotifier notifier(*player); + Trinity::PlayerVisibilityNotifier notifier(**itr); VisitAll(obj->GetPositionX(), obj->GetPositionY(), World::GetMaxVisibleDistance(), notifier); notifier.Notify(); } @@ -768,7 +766,7 @@ void Map::Update(const uint32 &t_diff) if(Unit *caster = ((DynamicObject*)obj)->GetCaster()) if(caster->GetTypeId() == TYPEID_PLAYER && caster->GetUInt64Value(PLAYER_FARSIGHT) == obj->GetGUID()) { - Trinity::PlayerRelocationNotifier notifier(*((Player*)caster)); + Trinity::PlayerVisibilityNotifier notifier(*((Player*)caster)); VisitAll(obj->GetPositionX(), obj->GetPositionY(), World::GetMaxVisibleDistance(), notifier); notifier.Notify(); } |
