diff options
author | Treeston <treeston.mmoc@gmail.com> | 2016-03-30 00:10:23 +0200 |
---|---|---|
committer | Treeston <treeston.mmoc@gmail.com> | 2016-03-30 00:10:23 +0200 |
commit | 8a050c574f95da180d2c2c507c2ab11a7fbe45d3 (patch) | |
tree | bf06c972b3e802165e8b14ac584f4cf86dd76682 | |
parent | 396498b01417e6b94a6d33752c7f56c5d181527b (diff) | |
parent | c136af84635bdd88b8e5ce019859f66067859825 (diff) |
Merge pull request #16839 from chaodhib/spell_facing_fix
Adjustments to spell facing
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 18 | ||||
-rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 5 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 |
4 files changed, 15 insertions, 12 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 08f8181c303..19642b498b6 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -2786,17 +2786,17 @@ bool Creature::FocusTarget(Spell const* focusSpell, WorldObject const* target) ) ) { - const MapRefManager& mapPlayers = GetMap()->GetPlayers(); - for (MapRefManager::const_iterator it = mapPlayers.begin(); it != mapPlayers.end(); ++it) - if (Player* player = (*it).GetSource()) + std::list<Player*> playersNearby; + GetPlayerListInGrid(playersNearby, GetVisibilityRange()); + for (Player* player : playersNearby) + { + // only update players that are known to the client (have already been created) + if (player->HaveAtClient(this)) { - // only update players that can both see us, and are actually in combat with us (this is a performance tradeoff) - if (player->CanSeeOrDetect(this, false, true) && IsInCombatWith(player)) - { - SendUpdateToPlayer(player); - shouldDelay = true; - } + SendUpdateToPlayer(player); + shouldDelay = true; } + } if (shouldDelay) shouldDelay = !(focusSpell->IsTriggered() || focusSpell->GetCastTime() || focusSpell->GetSpellInfo()->IsChanneled()); diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 836a041abc3..824f42ad671 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -221,7 +221,10 @@ void Object::SendUpdateToPlayer(Player* player) UpdateData upd; WorldPacket packet; - BuildCreateUpdateBlockForPlayer(&upd, player); + if (player->HaveAtClient(this)) + BuildValuesUpdateBlockForPlayer(&upd, player); + else + BuildCreateUpdateBlockForPlayer(&upd, player); upd.BuildPacket(&packet); player->GetSession()->SendPacket(&packet); } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 13661f80cb2..a3602166edf 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -21942,7 +21942,7 @@ WorldLocation Player::GetStartPosition() const return WorldLocation(mapId, info->positionX, info->positionY, info->positionZ, 0); } -bool Player::HaveAtClient(WorldObject const* u) const +bool Player::HaveAtClient(Object const* u) const { return u == this || m_clientGUIDs.find(u->GetGUID()) != m_clientGUIDs.end(); } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index ced588d295f..91a4a403fab 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2097,7 +2097,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> // currently visible objects at player client GuidUnorderedSet m_clientGUIDs; - bool HaveAtClient(WorldObject const* u) const; + bool HaveAtClient(Object const* u) const; bool IsNeverVisible() const override; |