aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Player.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 7cd9661388b..6687968a147 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -17722,8 +17722,43 @@ void Player::UpdateVisibilityOf(T* target, UpdateData& data, UpdateDataMapType&
}
}
+template<>
+void Player::UpdateVisibilityOf<Creature>(Creature* target, UpdateData& data, UpdateDataMapType& data_updates, std::set<WorldObject*>& visibleNow)
+{
+ if(HaveAtClient(target))
+ {
+ if(!target->isVisibleForInState(this,true))
+ {
+ target->DestroyForPlayer(this);
+ target->BuildOutOfRangeUpdateBlock(&data);
+ m_clientGUIDs.erase(target->GetGUID());
+
+ #ifdef TRINITY_DEBUG
+ if((sLog.getLogFilter() & LOG_FILTER_VISIBILITY_CHANGES)==0)
+ sLog.outDebug("Object %u (Type: %u, Entry: %u) is out of range for player %u. Distance = %f",target->GetGUIDLow(),target->GetTypeId(),target->GetEntry(),GetGUIDLow(),GetDistance(target));
+ #endif
+ }
+ }
+ else
+ {
+ if(target->isVisibleForInState(this,false))
+ {
+ visibleNow.insert(target);
+ target->BuildUpdate(data_updates);
+ target->SendUpdateToPlayer(this);
+ target->SendMonsterMoveWithSpeedToCurrentDestination(this);
+ UpdateVisibilityOf_helper(m_clientGUIDs,target);
+
+ #ifdef TRINITY_DEBUG
+ if((sLog.getLogFilter() & LOG_FILTER_VISIBILITY_CHANGES)==0)
+ sLog.outDebug("Object %u (Type: %u, Entry: %u) is visible now for player %u. Distance = %f",target->GetGUIDLow(),target->GetTypeId(),target->GetEntry(),GetGUIDLow(),GetDistance(target));
+ #endif
+ }
+ }
+}
+
template void Player::UpdateVisibilityOf(Player* target, UpdateData& data, UpdateDataMapType& data_updates, std::set<WorldObject*>& visibleNow);
-template void Player::UpdateVisibilityOf(Creature* target, UpdateData& data, UpdateDataMapType& data_updates, std::set<WorldObject*>& visibleNow);
+//template void Player::UpdateVisibilityOf(Creature* target, UpdateData& data, UpdateDataMapType& data_updates, std::set<WorldObject*>& visibleNow);
template void Player::UpdateVisibilityOf(Corpse* target, UpdateData& data, UpdateDataMapType& data_updates, std::set<WorldObject*>& visibleNow);
template void Player::UpdateVisibilityOf(GameObject* target, UpdateData& data, UpdateDataMapType& data_updates, std::set<WorldObject*>& visibleNow);
template void Player::UpdateVisibilityOf(DynamicObject* target, UpdateData& data, UpdateDataMapType& data_updates, std::set<WorldObject*>& visibleNow);