aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp5
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Maps/Map.cpp13
3 files changed, 15 insertions, 5 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 444f00206fd..a6d7c7334c4 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -22814,7 +22814,6 @@ void Player::SendInitialPacketsAfterAddToMap()
SendDirectMessage(&setCompoundState);
}
- SendAurasForTarget(this);
SendEnchantmentDurations(); // must be after add to map
SendItemDurations(); // must be after add to map
SendQuestGiverStatusMultiple();
@@ -23208,9 +23207,9 @@ void Player::LearnSkillRewardedSpells(uint32 skillId, uint32 skillValue)
}
}
-void Player::SendAurasForTarget(Unit* target) const
+void Player::SendAurasForTarget(Unit* target, bool force /*= false*/) const
{
- if (!target || target->GetVisibleAuras().empty()) // speedup things
+ if (!target || (!force && target->GetVisibleAuras().empty())) // speedup things
return;
WorldPacket data(SMSG_AURA_UPDATE_ALL);
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index 673374441ca..a7d6a5551fc 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -1895,7 +1895,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>
void SendBGWeekendWorldStates() const;
void SendBattlefieldWorldStates() const;
- void SendAurasForTarget(Unit* target) const;
+ void SendAurasForTarget(Unit* target, bool force = false) const;
PlayerMenu* PlayerTalkClass;
std::vector<ItemSetEffect*> ItemSetEff;
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 58dcc7e6607..1fc947a43c2 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -2939,6 +2939,7 @@ void Map::SendInitSelf(Player* player)
{
TC_LOG_DEBUG("maps", "Creating player data for himself %s", player->GetGUID().ToString().c_str());
+ WorldPacket packet;
UpdateData data;
// attach to player data current transport data
@@ -2950,13 +2951,23 @@ void Map::SendInitSelf(Player* player)
// build data for self presence in world at own client (one time for map)
player->BuildCreateUpdateBlockForPlayer(&data, player);
+ // build and send self update packet before sending to player his own auras
+ data.BuildPacket(&packet);
+ player->SendDirectMessage(&packet);
+
+ // send to player his own auras (this is needed here for timely initialization of some fields on client)
+ player->SendAurasForTarget(player, true);
+
+ // clean buffers for further work
+ packet.clear();
+ data.Clear();
+
// build other passengers at transport also (they always visible and marked as visible and will not send at visibility update at add to map
if (Transport* transport = player->GetTransport())
for (Transport::PassengerSet::const_iterator itr = transport->GetPassengers().begin(); itr != transport->GetPassengers().end(); ++itr)
if (player != (*itr) && player->HaveAtClient(*itr))
(*itr)->BuildCreateUpdateBlockForPlayer(&data, player);
- WorldPacket packet;
data.BuildPacket(&packet);
player->SendDirectMessage(&packet);
}