diff options
author | Shauren <shauren.trinity@gmail.com> | 2012-07-18 15:00:48 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-09-10 18:25:12 +0200 |
commit | 9800393424962c8b14107710ce25526ac9e6de61 (patch) | |
tree | 7154731885c76f0efd86fe07e464d0eb59d49a7e /src | |
parent | de3414ea0a2475436ae673293583f0265487c636 (diff) |
Core/Units: Some cleanup in movement packet related functions - try to keep only one function handling a packet, not have it scattered all over the place
(cherry picked from commit 075e5d67515bec9650f4f3976880ea5862190b79)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 41 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 11 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 3 | ||||
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_cheat.cpp | 4 |
6 files changed, 24 insertions, 51 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 452d1342ba6..17eb1bb9efa 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4379,24 +4379,6 @@ void Player::DeleteOldCharacters(uint32 keepDays) } } -void Player::SetMovement(PlayerMovementType pType) -{ - WorldPacket data; - switch (pType) - { - case MOVE_ROOT: data.Initialize(SMSG_FORCE_MOVE_ROOT, GetPackGUID().size()+4); break; - case MOVE_UNROOT: data.Initialize(SMSG_FORCE_MOVE_UNROOT, GetPackGUID().size()+4); break; - case MOVE_WATER_WALK: data.Initialize(SMSG_MOVE_WATER_WALK, GetPackGUID().size()+4); break; - case MOVE_LAND_WALK: data.Initialize(SMSG_MOVE_LAND_WALK, GetPackGUID().size()+4); break; - default: - TC_LOG_ERROR("entities.player", "Player::SetMovement: Unsupported move type ({}), data not sent to client.", pType); - return; - } - data << GetPackGUID(); - data << uint32(0); - SendDirectMessage(&data); -} - /* Preconditions: - a resurrectable corpse must not be loaded for the player (only bones) - the player must be in world @@ -4434,9 +4416,9 @@ void Player::BuildPlayerRepop() setDeathState(DEAD); SetHealth(1); - SetMovement(MOVE_WATER_WALK); + SetWaterWalking(true); if (!GetSession()->isLogingOut()) - SetMovement(MOVE_UNROOT); + SetRooted(false); // BG - remove insignia related RemoveUnitFlag(UNIT_FLAG_SKINNABLE); @@ -4475,8 +4457,10 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness) setDeathState(ALIVE); - SetMovement(MOVE_LAND_WALK); - SetMovement(MOVE_UNROOT); + // add the flag to make sure opcode is always sent + AddUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); + SetWaterWalking(false); + SetRooted(false); m_deathTimer = 0; @@ -4545,7 +4529,7 @@ void Player::KillPlayer() if (IsFlying() && !GetTransport()) GetMotionMaster()->MoveFall(); - SetMovement(MOVE_ROOT); + SetRooted(true); StopMirrorTimers(); //disable timers(bars) @@ -22651,7 +22635,7 @@ void Player::SendInitialPacketsAfterAddToMap() } if (HasAuraType(SPELL_AURA_MOD_STUN)) - SetMovement(MOVE_ROOT); + SetRooted(true); WorldPacket setCompoundState(SMSG_MULTIPLE_MOVES, 100); setCompoundState << uint32(0); // size placeholder @@ -26540,6 +26524,15 @@ bool Player::SetFeatherFall(bool apply, bool packetOnly /*= false*/) return true; } +void Player::SendMovementSetCollisionHeight(float height) +{ + WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4); + data << GetPackGUID(); + data << uint32(GetMovementCounterAndInc()); + data << height; + SendDirectMessage(&data); +} + std::string Player::GetMapAreaAndZoneString() const { uint32 areaId = GetAreaId(); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index f8646c2f95e..6a0e544d312 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -306,14 +306,6 @@ struct EnchantDuration typedef std::list<EnchantDuration> EnchantDurationList; typedef std::list<Item*> ItemDurationList; -enum PlayerMovementType -{ - MOVE_ROOT = 1, - MOVE_UNROOT = 2, - MOVE_WATER_WALK = 3, - MOVE_LAND_WALK = 4 -}; - enum DrunkenState { DRUNKEN_SOBER = 0, @@ -1773,8 +1765,6 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void StopMirrorTimers(); bool IsMirrorTimerActive(MirrorTimerType type) const; - void SetMovement(PlayerMovementType pType); - bool CanJoinConstantChannelInZone(ChatChannelsEntry const* channel, AreaTableEntry const* zone) const; void JoinedChannel(Channel* c); @@ -2238,6 +2228,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> bool SetWaterWalking(bool apply, bool packetOnly = false) override; bool SetFeatherFall(bool apply, bool packetOnly = false) override; bool SetHover(bool enable, bool packetOnly = false, bool updateAnimTier = true) override; + void SendMovementSetCollisionHeight(float height); bool CanFly() const override { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); } bool CanEnterWater() const override { return true; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index a2fd2e43799..88df3a10c4d 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -8211,11 +8211,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry) if (charm->GetTypeId() == TYPEID_UNIT) charm->SetUnitFlag(UNIT_FLAG_STUNNED); - WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4); - data << GetPackGUID(); - data << uint32(GameTime::GetGameTime()); // Packet counter - data << player->GetCollisionHeight(); - player->SendDirectMessage(&data); + player->SendMovementSetCollisionHeight(player->GetCollisionHeight()); } RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOUNT); @@ -8230,13 +8226,7 @@ void Unit::Dismount() RemoveUnitFlag(UNIT_FLAG_MOUNT); if (Player* thisPlayer = ToPlayer()) - { - WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4); - data << GetPackGUID(); - data << uint32(GameTime::GetGameTime()); // Packet counter - data << thisPlayer->GetCollisionHeight(); - thisPlayer->SendDirectMessage(&data); - } + thisPlayer->SendMovementSetCollisionHeight(thisPlayer->GetCollisionHeight()); WorldPacket data(SMSG_DISMOUNT, 8); data << GetPackGUID(); diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index a969ee0214f..42e94a53e28 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1932,9 +1932,8 @@ class TC_GAME_API Unit : public WorldObject void SetStunned(bool apply); void SetRooted(bool apply); - uint32 m_rootTimes; - private: + uint32 m_rootTimes; uint32 m_state; // Even derived shouldn't modify uint32 m_lastManaUse; // msecs diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 3431df6ef56..8d9ce0217ae 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -863,7 +863,7 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder) // setting Ghost+speed if dead if (pCurrChar->m_deathState == DEAD) - pCurrChar->SetMovement(MOVE_WATER_WALK); + pCurrChar->SetWaterWalking(true); pCurrChar->ContinueTaxiFlight(); diff --git a/src/server/scripts/Commands/cs_cheat.cpp b/src/server/scripts/Commands/cs_cheat.cpp index ca0066457be..a112169d903 100644 --- a/src/server/scripts/Commands/cs_cheat.cpp +++ b/src/server/scripts/Commands/cs_cheat.cpp @@ -165,13 +165,13 @@ public: if (enable) { handler->GetSession()->GetPlayer()->SetCommandStatusOn(CHEAT_WATERWALK); - handler->GetSession()->GetPlayer()->SetMovement(MOVE_WATER_WALK); // ON + handler->GetSession()->GetPlayer()->SetWaterWalking(true); // ON handler->SendSysMessage("Waterwalking is ON. You can walk on water."); } else { handler->GetSession()->GetPlayer()->SetCommandStatusOff(CHEAT_WATERWALK); - handler->GetSession()->GetPlayer()->SetMovement(MOVE_LAND_WALK); // OFF + handler->GetSession()->GetPlayer()->SetWaterWalking(false); // OFF handler->SendSysMessage("Waterwalking is OFF. You can't walk on water."); } |