diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index ae206326377..d66126d692e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -22541,13 +22541,46 @@ void Player::SendInitialPacketsAfterAddToMap() if (HasAuraType(SPELL_AURA_MOD_STUN)) SetMovement(MOVE_ROOT); + WorldPacket setCompoundState(SMSG_MULTIPLE_MOVES, 100); + setCompoundState << uint32(0); // size placeholder + // manual send package (have code in HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true); that must not be re-applied. if (HasAuraType(SPELL_AURA_MOD_ROOT)) { - WorldPacket data2(SMSG_FORCE_MOVE_ROOT, 10); - data2 << GetPackGUID(); - data2 << (uint32)2; - SendMessageToSet(&data2, true); + setCompoundState << uint8(2 + GetPackGUID().size() + 4); + setCompoundState << uint16(SMSG_FORCE_MOVE_ROOT); + setCompoundState << GetPackGUID(); + setCompoundState << uint32(0); //! movement counter + } + + if (HasAuraType(SPELL_AURA_FEATHER_FALL)) + { + setCompoundState << uint8(2 + GetPackGUID().size() + 4); + setCompoundState << uint16(SMSG_MOVE_FEATHER_FALL); + setCompoundState << GetPackGUID(); + setCompoundState << uint32(0); //! movement counter0 + } + + if (HasAuraType(SPELL_AURA_WATER_WALK)) + { + setCompoundState << uint8(2 + GetPackGUID().size() + 4); + setCompoundState << uint16(SMSG_MOVE_WATER_WALK); + setCompoundState << GetPackGUID(); + setCompoundState << uint32(0); //! movement counter0 + } + + if (HasAuraType(SPELL_AURA_HOVER)) + { + setCompoundState << uint8(2 + GetPackGUID().size() + 4); + setCompoundState << uint16(SMSG_MOVE_SET_HOVER); + setCompoundState << GetPackGUID(); + setCompoundState << uint32(0); //! movement counter0 + } + + if (setCompoundState.size() > 4) + { + setCompoundState.put(0, setCompoundState.size() - 4); + SendDirectMessage(&setCompoundState); } SendAurasForTarget(this); @@ -22949,18 +22982,6 @@ void Player::SendAurasForTarget(Unit* target) const if (!target || target->GetVisibleAuras()->empty()) // speedup things return; - /*! Blizz sends certain movement packets sometimes even before CreateObject - These movement packets are usually found in SMSG_COMPRESSED_MOVES - */ - if (target->HasAuraType(SPELL_AURA_FEATHER_FALL)) - target->SetFeatherFall(true, true); - - if (target->HasAuraType(SPELL_AURA_WATER_WALK)) - target->SetWaterWalking(true, true); - - if (target->HasAuraType(SPELL_AURA_HOVER)) - target->SetHover(true, true); - WorldPacket data(SMSG_AURA_UPDATE_ALL); data << target->GetPackGUID(); |