aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormegamage <none@none>2009-03-12 08:58:28 -0600
committermegamage <none@none>2009-03-12 08:58:28 -0600
commita9f77d07caf00771bebd37e786873f3188bc9af6 (patch)
treec24c264359b0b9705c3d385954fa8da803e294b2 /src
parent7d617a421b0c38aacbd639a0b0822ea8cdc0633a (diff)
*Try to fix a crash bug.
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/Map.cpp49
1 files changed, 27 insertions, 22 deletions
diff --git a/src/game/Map.cpp b/src/game/Map.cpp
index fbe87986903..cc01013d890 100644
--- a/src/game/Map.cpp
+++ b/src/game/Map.cpp
@@ -717,6 +717,33 @@ void Map::Update(const uint32 &t_diff)
if(!obj->IsInWorld())
continue;
+ // Update bindsight players
+ if(obj->isType(TYPEMASK_UNIT))
+ {
+ if(!((Unit*)obj)->GetSharedVisionList().empty())
+ for(SharedVisionList::const_iterator itr = ((Unit*)obj)->GetSharedVisionList().begin(); itr != ((Unit*)obj)->GetSharedVisionList().end(); ++itr)
+ {
+ if(!*itr)
+ {
+ sLog.outError("unit %u has invalid shared vision player, list size %u", obj->GetEntry(), ((Unit*)obj)->GetSharedVisionList().size());
+ continue;
+ }
+ Trinity::PlayerVisibilityNotifier notifier(**itr);
+ VisitAll(obj->GetPositionX(), obj->GetPositionY(), World::GetMaxVisibleDistance(), notifier);
+ notifier.Notify();
+ }
+ }
+ else if(obj->GetTypeId() == TYPEID_DYNAMICOBJECT)
+ {
+ if(Unit *caster = ((DynamicObject*)obj)->GetCaster())
+ if(caster->GetTypeId() == TYPEID_PLAYER && caster->GetUInt64Value(PLAYER_FARSIGHT) == obj->GetGUID())
+ {
+ Trinity::PlayerVisibilityNotifier notifier(*((Player*)caster));
+ VisitAll(obj->GetPositionX(), obj->GetPositionY(), World::GetMaxVisibleDistance(), notifier);
+ notifier.Notify();
+ }
+ }
+
CellPair standing_cell(Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY()));
// Check for correctness of standing_cell, it also avoids problems with update_cell
@@ -749,28 +776,6 @@ void Map::Update(const uint32 &t_diff)
}
}
}
-
- // Update bindsight players
- if(obj->isType(TYPEMASK_UNIT))
- {
- if(!((Unit*)obj)->GetSharedVisionList().empty())
- for(SharedVisionList::const_iterator itr = ((Unit*)obj)->GetSharedVisionList().begin(); itr != ((Unit*)obj)->GetSharedVisionList().end(); ++itr)
- {
- Trinity::PlayerVisibilityNotifier notifier(**itr);
- VisitAll(obj->GetPositionX(), obj->GetPositionY(), World::GetMaxVisibleDistance(), notifier);
- notifier.Notify();
- }
- }
- else if(obj->GetTypeId() == TYPEID_DYNAMICOBJECT)
- {
- if(Unit *caster = ((DynamicObject*)obj)->GetCaster())
- if(caster->GetTypeId() == TYPEID_PLAYER && caster->GetUInt64Value(PLAYER_FARSIGHT) == obj->GetGUID())
- {
- Trinity::PlayerVisibilityNotifier notifier(*((Player*)caster));
- VisitAll(obj->GetPositionX(), obj->GetPositionY(), World::GetMaxVisibleDistance(), notifier);
- notifier.Notify();
- }
- }
}
}