aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Unit
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-11-06 23:17:43 +0100
committerShauren <shauren.trinity@gmail.com>2021-11-06 23:17:43 +0100
commit732a8ee26199d7f04c692fa64f96955db13cf69d (patch)
treef47eb9f3aac5af2d6012a575107f1747b8f13284 /src/server/game/Entities/Unit
parent4fd4d283542600fd25a9e4a4a280f33fee6c87d0 (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.cpp15
-rw-r--r--src/server/game/Entities/Unit/Unit.h2
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);