aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTreeston <treeston.mmoc@gmail.com>2016-03-30 00:10:23 +0200
committerTreeston <treeston.mmoc@gmail.com>2016-03-30 00:10:23 +0200
commit8a050c574f95da180d2c2c507c2ab11a7fbe45d3 (patch)
treebf06c972b3e802165e8b14ac584f4cf86dd76682 /src
parent396498b01417e6b94a6d33752c7f56c5d181527b (diff)
parentc136af84635bdd88b8e5ce019859f66067859825 (diff)
Merge pull request #16839 from chaodhib/spell_facing_fix
Adjustments to spell facing
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp18
-rw-r--r--src/server/game/Entities/Object/Object.cpp5
-rw-r--r--src/server/game/Entities/Player/Player.cpp2
-rw-r--r--src/server/game/Entities/Player/Player.h2
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;