From 471918fd47deaa1c0e9bd252968975675b16d453 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Sat, 18 Feb 2017 04:40:17 +0100 Subject: [PATCH] Core/Misc: Partialy fix one AnimKit crash By Krudor It still crashes at close client updates #112 If anyone have idea i have one sniff comparing the values on retail 4.3.4, without this fix, without animkit and with this fix with animkit. Join https://t.me/joinchat/AAAAAAiEtwpxLaE8MnmdeA --- src/server/game/Entities/Object/Object.cpp | 26 +++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index b6cc9bd4f3..2f5aa506b0 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -352,6 +352,9 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const bool hasPitch = false; bool hasSpline = false; bool hasSplineElevation = false; + bool hasAIAnimKit = false; + bool hasMovementAnimKit = false; + bool hasMeleeAnimKit = false; uint32 stopFrameCount = 0; if (GameObject const* go = ToGameObject()) @@ -474,9 +477,12 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const if (flags & UPDATEFLAG_ANIMKITS) { WorldObject const* self = static_cast(this); - *data << uint16(self->GetAIAnimKitId()); // AiID - *data << uint16(self->GetMovementAnimKitId()); // MovementID - *data << uint16(self->GetMeleeAnimKitId()); // MeleeID + hasAIAnimKit = self->GetAIAnimKitId(); + data->WriteBit(hasAIAnimKit); + hasMovementAnimKit = self->GetMovementAnimKitId(); + data->WriteBit(hasMovementAnimKit); + hasMeleeAnimKit = self->GetMeleeAnimKitId(); + data->WriteBit(hasMeleeAnimKit); } data->FlushBits(); @@ -647,13 +653,13 @@ void Object::BuildMovementUpdate(ByteBuffer* data, uint16 flags) const if (flags & UPDATEFLAG_ANIMKITS) { - Unit const* unit = ToUnit(); - if (unit->GetAIAnimKitId()) - *data << uint16(unit->GetAIAnimKitId()); - if (unit->GetMovementAnimKitId()) - *data << uint16(unit->GetMovementAnimKitId()); - if (unit->GetMeleeAnimKitId()) - *data << uint16(unit->GetMeleeAnimKitId()); + WorldObject const* self = static_cast(this); + if (hasAIAnimKit) + *data << uint16(self->GetAIAnimKitId()); + if (hasMovementAnimKit) + *data << uint16(self->GetMovementAnimKitId()); + if (hasMeleeAnimKit) + *data << uint16(self->GetMeleeAnimKitId()); } if (flags & UPDATEFLAG_TRANSPORT)