diff options
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 43 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 12 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellDefines.h | 2 |
4 files changed, 31 insertions, 28 deletions
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 1f80091cb59..7627a6a82ae 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -7411,7 +7411,7 @@ void VisualAnim::ClearChangesMask() void ForceSetAreaTriggerPositionAndRotation::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const { data << TriggerGUID; - data << Position; + data << Pos; data << float(Rotation.x); data << float(Rotation.y); data << float(Rotation.z); @@ -7421,7 +7421,7 @@ void ForceSetAreaTriggerPositionAndRotation::WriteCreate(ByteBuffer& data, AreaT void ForceSetAreaTriggerPositionAndRotation::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const { data << TriggerGUID; - data << Position; + data << Pos; data << float(Rotation.x); data << float(Rotation.y); data << float(Rotation.z); @@ -7431,7 +7431,7 @@ void ForceSetAreaTriggerPositionAndRotation::WriteUpdate(ByteBuffer& data, bool bool ForceSetAreaTriggerPositionAndRotation::operator==(ForceSetAreaTriggerPositionAndRotation const& right) const { return TriggerGUID == right.TriggerGUID - && Position == right.Position + && Pos == right.Pos && Rotation == right.Rotation; } @@ -8614,6 +8614,7 @@ void DecorStoragePersistedData::WriteCreate(ByteBuffer& data, Object const* owne data << *HouseGUID; data << uint8(Field_20); data.WriteBits(Dyes.has_value(), 1); + data.FlushBits(); if (Dyes.has_value()) { Dyes->WriteCreate(data, owner, receiver); @@ -8626,26 +8627,24 @@ void DecorStoragePersistedData::WriteUpdate(ByteBuffer& data, bool ignoreChanges if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 4); + data.WriteBits(changesMask.GetBlock(0), 3); data.FlushBits(); if (changesMask[0]) { - if (changesMask[1]) - { - data << *HouseGUID; - } - if (changesMask[3]) - { - data << uint8(Field_20); - } - data.WriteBits(Dyes.has_value(), 1); - if (changesMask[2]) + data << *HouseGUID; + } + if (changesMask[2]) + { + data << uint8(Field_20); + } + data.WriteBits(Dyes.has_value(), 1); + data.FlushBits(); + if (changesMask[1]) + { + if (Dyes.has_value()) { - if (Dyes.has_value()) - { - Dyes->WriteUpdate(data, ignoreChangesMask, owner, receiver); - } + Dyes->WriteUpdate(data, ignoreChangesMask, owner, receiver); } } } @@ -8663,8 +8662,9 @@ void HousingDecorData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << *DecorGUID; data << *AttachParentGUID; data << uint8(Flags); - data << *Field_68; + data << *TargetGameObjectGUID; data.WriteBits(PersistedData.has_value(), 1); + data.FlushBits(); if (PersistedData.has_value()) { PersistedData->WriteCreate(data, owner, receiver); @@ -8697,9 +8697,10 @@ void HousingDecorData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[5]) { - data << *Field_68; + data << *TargetGameObjectGUID; } data.WriteBits(PersistedData.has_value(), 1); + data.FlushBits(); if (changesMask[4]) { if (PersistedData.has_value()) @@ -8716,7 +8717,7 @@ void HousingDecorData::ClearChangesMask() Base::ClearChangesMask(AttachParentGUID); Base::ClearChangesMask(Flags); Base::ClearChangesMask(PersistedData); - Base::ClearChangesMask(Field_68); + Base::ClearChangesMask(TargetGameObjectGUID); _changesMask.ResetAll(); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 1ccb5e0fdd7..582473c702c 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -1383,7 +1383,7 @@ struct VisualAnim : public IsUpdateFieldStructureTag, public HasChangesMask<5> struct ForceSetAreaTriggerPositionAndRotation : public IsUpdateFieldStructureTag { ObjectGuid TriggerGUID; - TaggedPosition<Position::XYZ> Position; + TaggedPosition<Position::XYZ> Pos; QuaternionData Rotation; void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const; @@ -1649,11 +1649,11 @@ struct DecorStoragePersistedDataDyes : public IsUpdateFieldStructureTag bool operator!=(DecorStoragePersistedDataDyes const& right) const { return !(*this == right); } }; -struct DecorStoragePersistedData : public IsUpdateFieldStructureTag, public HasChangesMask<4> +struct DecorStoragePersistedData : public IsUpdateFieldStructureTag, public HasChangesMask<3> { - UpdateField<ObjectGuid, 0, 1> HouseGUID; - OptionalUpdateField<UF::DecorStoragePersistedDataDyes, 0, 2> Dyes; - UpdateField<uint8, 0, 3> Field_20; + UpdateField<ObjectGuid, -1, 0> HouseGUID; + OptionalUpdateField<UF::DecorStoragePersistedDataDyes, -1, 1> Dyes; + UpdateField<uint8, -1, 2> Field_20; void WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const; @@ -1666,7 +1666,7 @@ struct HousingDecorData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<ObjectGuid, 0, 2> AttachParentGUID; UpdateField<uint8, 0, 3> Flags; OptionalUpdateField<UF::DecorStoragePersistedData, 0, 4> PersistedData; - UpdateField<ObjectGuid, 0, 5> Field_68; + UpdateField<ObjectGuid, 0, 5> TargetGameObjectGUID; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Object const* owner, Player const* receiver) const; diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 86b4ab48672..49aa00c14e0 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -2256,6 +2256,8 @@ void AuraEffect::HandleAuraTransform(AuraApplication const* aurApp, uint8 mode, if (target->IsMounted()) target->RemoveAurasByType(SPELL_AURA_MOUNTED); } + + target->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags2::Transform); } else { diff --git a/src/server/game/Spells/SpellDefines.h b/src/server/game/Spells/SpellDefines.h index 120f2fa68c1..f5c849c3b32 100644 --- a/src/server/game/Spells/SpellDefines.h +++ b/src/server/game/Spells/SpellDefines.h @@ -122,7 +122,7 @@ enum class SpellAuraInterruptFlags2 : uint32 Swimming = 0x00000002, NotMoving = 0x00000004, // NYI Ground = 0x00000008, - Transform = 0x00000010, // NYI + Transform = 0x00000010, Jump = 0x00000020, ChangeSpec = 0x00000040, AbandonVehicle = 0x00000080, // Implemented in Unit::_ExitVehicle |
