diff options
| author | Subv <s.v.h21@hotmail.com> | 2012-08-09 19:18:31 -0500 |
|---|---|---|
| committer | Subv <s.v.h21@hotmail.com> | 2012-08-09 19:18:31 -0500 |
| commit | ab771aef1fd290dbf5010ea5dce85f5fe3553e09 (patch) | |
| tree | 8970e68d810426f7078473d6fcc18a3de57cd35d /src/server/game/Entities/Unit | |
| parent | 99d4a1093b712d8e6a1c82b2170b921f4f66b571 (diff) | |
Core/PacketIO: Fixed a few more opcodes
Diffstat (limited to 'src/server/game/Entities/Unit')
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 101 | ||||
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.h | 1 |
2 files changed, 40 insertions, 62 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 7e19a97ac5b..7daeb97f5d9 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -17129,11 +17129,47 @@ void Unit::UpdateObjectVisibility(bool forced) } } +void Unit::SendMoveKnockBack(Player* player, float speedXY, float speedZ, float vcos, float vsin) +{ + ObjectGuid guid = GetGUID(); + WorldPacket data(SMSG_MOVE_KNOCK_BACK, (1+8+4+4+4+4+4)); + data.WriteBit(guid[0]); + data.WriteBit(guid[3]); + data.WriteBit(guid[6]); + data.WriteBit(guid[7]); + data.WriteBit(guid[2]); + data.WriteBit(guid[5]); + data.WriteBit(guid[1]); + data.WriteBit(guid[4]); + + data.WriteByteSeq(guid[1]); + + data << float(vsin); + data << uint32(0); + + data.WriteByteSeq(bytes[6]); + data.WriteByteSeq(bytes[7]); + + data << float(speedXY); + + data.WriteByteSeq(bytes[4]); + data.WriteByteSeq(bytes[5]); + data.WriteByteSeq(bytes[3]); + + data << float(speedZ); + data << float(vcos); + + data.WriteByteSeq(bytes[2]); + data.WriteByteSeq(bytes[0]); + + player->GetSession()->SendPacket(&data); +} + void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) { Player* player = NULL; if (GetTypeId() == TYPEID_PLAYER) - player = (Player*)this; + player = ToPlayer(); else if (Unit* charmer = GetCharmer()) { player = charmer->ToPlayer(); @@ -17142,43 +17178,12 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) } if (!player) - { GetMotionMaster()->MoveKnockbackFrom(x, y, speedXY, speedZ); - } else { float vcos, vsin; GetSinCos(x, y, vsin, vcos); - - WorldPacket data(SMSG_MOVE_KNOCK_BACK, (1+8+4+4+4+4+4)); - uint64 guid = GetGUID(); - uint8* bytes = (uint8*)&guid; - - data.WriteBit(bytes[5]); - data.WriteBit(bytes[2]); - data.WriteBit(bytes[6]); - data.WriteBit(bytes[3]); - data.WriteBit(bytes[1]); - data.WriteBit(bytes[4]); - data.WriteBit(bytes[0]); - data.WriteBit(bytes[7]); - - data.WriteByteSeq(bytes[0]); - data << float(speedXY); - data << uint32(0); - data << float(-speedZ); - data.WriteByteSeq(bytes[6]); - data << float(vcos); - data << float(vsin); - data.WriteByteSeq(bytes[3]); - data.WriteByteSeq(bytes[1]); - data.WriteByteSeq(bytes[2]); - data.WriteByteSeq(bytes[4]); - data.WriteByteSeq(bytes[7]); - data.WriteByteSeq(bytes[5]); - data.WriteByteSeq(bytes[5]); - - player->GetSession()->SendPacket(&data); + SendMoveKnockBack(player, speedXY, -speedZ, vcos, vsin); } } @@ -17489,35 +17494,7 @@ void Unit::JumpTo(float speedXY, float speedZ, bool forward) { float vcos = cos(angle+GetOrientation()); float vsin = sin(angle+GetOrientation()); - - WorldPacket data(SMSG_MOVE_KNOCK_BACK, (1+8+4+4+4+4+4)); - uint64 guid = GetGUID(); - uint8* bytes = (uint8*)&guid; - - data.WriteBit(bytes[5]); - data.WriteBit(bytes[2]); - data.WriteBit(bytes[6]); - data.WriteBit(bytes[3]); - data.WriteBit(bytes[1]); - data.WriteBit(bytes[4]); - data.WriteBit(bytes[0]); - data.WriteBit(bytes[7]); - - data.WriteByteSeq(bytes[0]); - data << float(speedXY); - data << uint32(0); - data << float(-speedZ); - data.WriteByteSeq(bytes[6]); - data << float(vcos); - data << float(vsin); - data.WriteByteSeq(bytes[3]); - data.WriteByteSeq(bytes[1]); - data.WriteByteSeq(bytes[2]); - data.WriteByteSeq(bytes[4]); - data.WriteByteSeq(bytes[7]); - data.WriteByteSeq(bytes[5]); - - ToPlayer()->GetSession()->SendPacket(&data); + SendMoveKnockBack(ToPlayer(), speedXY, -speedZ, vcos, vsin); } } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index cf2f25898b6..de95b7d9842 100755 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1594,6 +1594,7 @@ class Unit : public WorldObject void UpdateOrientation(float orientation); 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); void JumpTo(float speedXY, float speedZ, bool forward = true); void JumpTo(WorldObject* obj, float speedZ); |
