aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2011-09-30 18:24:12 +0200
committerShauren <shauren.trinity@gmail.com>2011-09-30 18:24:12 +0200
commitda54fb92d51ce650275cd31ae888fe9cbc02e5d1 (patch)
tree1aea1014ca88249fc0727ff7c77bd5a728e2842a
parent18aad847e1d47295c0967bf6a85e9a89283ef958 (diff)
Core/Movement: Fixed knockback visibility for other players (no more "teleport") and knockback strength from creature spells (this does not fix knocking creatures back)
-rwxr-xr-xsrc/server/game/Entities/Object/Object.cpp2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp2
-rwxr-xr-xsrc/server/game/Server/Protocol/Handlers/MovementHandler.cpp18
-rwxr-xr-xsrc/server/game/Spells/SpellEffects.cpp6
4 files changed, 20 insertions, 8 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 7894abd3c59..0b275f833e6 100755
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1488,7 +1488,7 @@ void Position::GetSinCos(const float x, const float y, float &vsin, float &vcos)
float dx = GetPositionX() - x;
float dy = GetPositionY() - y;
- if (dx < 0.001f && dy < 0.001f)
+ if (fabs(dx) < 0.001f && fabs(dy) < 0.001f)
{
float angle = (float)rand_norm()*static_cast<float>(2*M_PI);
vcos = cos(angle);
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 15984477a79..b0c662cb406 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -16510,7 +16510,7 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ)
WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8+4+4+4+4+4));
data.append(GetPackGUID());
- data << uint32(0); // Sequence
+ data << uint32(0); // counter
data << float(vcos); // x direction
data << float(vsin); // y direction
data << float(speedXY); // Horizontal speed
diff --git a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
index 8023f98c93d..62ee55b903b 100755
--- a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
@@ -523,13 +523,29 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket & recv_data)
{
sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_MOVE_KNOCK_BACK_ACK");
- uint64 guid; // guid - unused
+ uint64 guid;
recv_data.readPackGUID(guid);
+ if (_player->m_mover->GetGUID() != guid)
+ return;
+
recv_data.read_skip<uint32>(); // unk
MovementInfo movementInfo;
ReadMovementInfo(recv_data, &movementInfo);
+ _player->m_movementInfo = movementInfo;
+
+ WorldPacket data(MSG_MOVE_KNOCK_BACK, 66);
+ data.appendPackGUID(guid);
+ _player->BuildMovementPacket(&data);
+
+ // knockback specific info
+ data << movementInfo.j_sinAngle;
+ data << movementInfo.j_cosAngle;
+ data << movementInfo.j_xyspeed;
+ data << movementInfo.j_zspeed;
+
+ _player->SendMessageToSet(&data, false);
}
void WorldSession::HandleMoveHoverAck(WorldPacket& recv_data)
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 1a3a5403bb2..540ee7720a1 100755
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -6241,11 +6241,7 @@ void Spell::EffectKnockBack(SpellEffIndex effIndex)
if (unitTarget->IsNonMeleeSpellCasted(true))
unitTarget->InterruptNonMeleeSpells(true);
- float ratio = m_caster->GetCombatReach() / std::max(unitTarget->GetCombatReach(), 1.0f);
- if (ratio < 1.0f)
- ratio = ratio * ratio * ratio * 0.1f; // volume = length^3
- else
- ratio = 0.1f; // dbc value ratio
+ float ratio = 0.1f;
float speedxy = float(m_spellInfo->Effects[effIndex].MiscValue) * ratio;
float speedz = float(damage) * ratio;
if (speedxy < 0.1f && speedz < 0.1f)