mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-06 00:48:39 +01:00
*Merge.
--HG-- branch : trunk
This commit is contained in:
@@ -42,7 +42,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
|
||||
|
||||
@@ -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,15 +46,25 @@ 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
|
||||
template<> inline void Visit(PlayerMapType &);
|
||||
template<> inline void Visit(CreatureMapType &);
|
||||
#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
|
||||
|
||||
void Notify(void);
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL CreatureRelocationNotifier
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -733,11 +733,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();
|
||||
}
|
||||
@@ -747,7 +745,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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user