aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp41
-rw-r--r--src/server/game/Entities/Player/Player.h11
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp14
-rw-r--r--src/server/game/Entities/Unit/Unit.h3
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp2
-rw-r--r--src/server/scripts/Commands/cs_cheat.cpp4
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.");
}