*Try to fix the bug of visibility update.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-01-08 22:12:09 -06:00
parent 2377f49ea8
commit ea0421919a
4 changed files with 25 additions and 21 deletions
+3
View File
@@ -1735,6 +1735,9 @@ bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientati
ResetContestedPvP(); ResetContestedPvP();
DestroyForNearbyPlayers();
m_clientGUIDs.clear();
// remove player from battleground on far teleport (when changing maps) // remove player from battleground on far teleport (when changing maps)
if(BattleGround const* bg = GetBattleGround()) if(BattleGround const* bg = GetBattleGround())
{ {
+12 -14
View File
@@ -9967,15 +9967,11 @@ bool Unit::canDetectStealthOf(Unit const* target, float distance) const
return distance < visibleDistance; return distance < visibleDistance;
} }
void Unit::SetVisibility(UnitVisibility x) void Unit::DestroyForNearbyPlayers()
{ {
m_Visibility = x; if(!IsInWorld())
return;
if(IsInWorld())
SetToNotify();
if(x == VISIBILITY_GROUP_STEALTH)
{
std::list<Unit*> targets; std::list<Unit*> targets;
Trinity::AnyUnitInObjectRangeCheck check(this, World::GetMaxVisibleDistance()); Trinity::AnyUnitInObjectRangeCheck check(this, World::GetMaxVisibleDistance());
Trinity::UnitListSearcher<Trinity::AnyUnitInObjectRangeCheck> searcher(targets, check); Trinity::UnitListSearcher<Trinity::AnyUnitInObjectRangeCheck> searcher(targets, check);
@@ -9988,14 +9984,16 @@ void Unit::SetVisibility(UnitVisibility x)
((Player*)(*iter))->m_clientGUIDs.erase(GetGUID()); ((Player*)(*iter))->m_clientGUIDs.erase(GetGUID());
} }
} }
/*{
Map *m = GetMap();
if(GetTypeId()==TYPEID_PLAYER) void Unit::SetVisibility(UnitVisibility x)
m->PlayerRelocation((Player*)this,GetPositionX(),GetPositionY(),GetPositionZ(),GetOrientation()); {
else m_Visibility = x;
m->CreatureRelocation((Creature*)this,GetPositionX(),GetPositionY(),GetPositionZ(),GetOrientation());
}*/ if(IsInWorld())
SetToNotify();
if(x == VISIBILITY_GROUP_STEALTH)
DestroyForNearbyPlayers();
} }
void Unit::UpdateSpeed(UnitMoveType mtype, bool forced) void Unit::UpdateSpeed(UnitMoveType mtype, bool forced)
+1
View File
@@ -1214,6 +1214,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
// Visibility system // Visibility system
UnitVisibility GetVisibility() const { return m_Visibility; } UnitVisibility GetVisibility() const { return m_Visibility; }
void SetVisibility(UnitVisibility x); void SetVisibility(UnitVisibility x);
void DestroyForNearbyPlayers();
// common function for visibility checks for player/creatures with detection code // common function for visibility checks for player/creatures with detection code
virtual bool canSeeOrDetect(Unit const* u, bool detect, bool inVisibleList = false, bool is3dDistance = true) const; virtual bool canSeeOrDetect(Unit const* u, bool detect, bool inVisibleList = false, bool is3dDistance = true) const;
+2
View File
@@ -255,6 +255,8 @@ void WorldSession::LogoutPlayer(bool Save)
// Remove any possession of this player on logout // Remove any possession of this player on logout
_player->RemoveCharmedOrPossessedBy(NULL); _player->RemoveCharmedOrPossessedBy(NULL);
_player->DestroyForNearbyPlayers();
if (uint64 lguid = GetPlayer()->GetLootGUID()) if (uint64 lguid = GetPlayer()->GetLootGUID())
DoLootRelease(lguid); DoLootRelease(lguid);