diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-11-06 23:17:43 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-11-06 23:17:43 +0100 |
| commit | 732a8ee26199d7f04c692fa64f96955db13cf69d (patch) | |
| tree | f47eb9f3aac5af2d6012a575107f1747b8f13284 /src/server/game/Entities/Unit | |
| parent | 4fd4d283542600fd25a9e4a4a280f33fee6c87d0 (diff) | |
Core/Movement: Corrected values sent in knockback packet when speedXY < 0
Co-authored-by: Seyden <saiifii@live.de>
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 15 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 2 |
2 files changed, 12 insertions, 5 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index ef3e30948f1..3659f304091 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -11526,7 +11526,7 @@ void Unit::SendMoveKnockBack(Player* player, float speedXY, float speedZ, float player->GetSession()->SendPacket(moveKnockBack.Write()); } -void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ, Movement::SpellEffectExtraData const* spellEffectExtraData /*= nullptr*/) +void Unit::KnockbackFrom(Position const& origin, float speedXY, float speedZ, Movement::SpellEffectExtraData const* spellEffectExtraData /*= nullptr*/) { Player* player = ToPlayer(); if (!player) @@ -11540,11 +11540,18 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ, Movement } if (!player) - GetMotionMaster()->MoveKnockbackFrom(x, y, speedXY, speedZ, spellEffectExtraData); + GetMotionMaster()->MoveKnockbackFrom(origin, speedXY, speedZ, spellEffectExtraData); else { - float vcos, vsin; - GetSinCos(x, y, vsin, vcos); + float o = GetPosition() == origin ? GetOrientation() + M_PI : origin.GetRelativeAngle(this); + if (speedXY < 0) + { + speedXY = -speedXY; + o = o - M_PI; + } + + float vcos = std::cos(o); + float vsin = std::sin(o); SendMoveKnockBack(player, speedXY, -speedZ, vcos, vsin); } } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index b05419ead5f..71bd838afd2 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1185,7 +1185,7 @@ class TC_GAME_API Unit : public WorldObject void UpdateHeight(float newZ); void SendMoveKnockBack(Player* player, float speedXY, float speedZ, float vcos, float vsin); - void KnockbackFrom(float x, float y, float speedXY, float speedZ, Movement::SpellEffectExtraData const* spellEffectExtraData = nullptr); + void KnockbackFrom(Position const& origin, float speedXY, float speedZ, Movement::SpellEffectExtraData const* spellEffectExtraData = nullptr); void JumpTo(float speedXY, float speedZ, bool forward = true); void JumpTo(WorldObject* obj, float speedZ, bool withOrientation = false); |
