From f7883bd5251a759da1ca8be3ba6f6cead36723ec Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 5 Jul 2016 22:07:35 +0200 Subject: Core/Transmog: Implemented transmog collection and updated transmog handling --- src/server/game/Entities/Object/Object.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'src/server/game/Entities/Object') diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index b1a915e474e..028f954744f 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -813,7 +813,7 @@ void Object::BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer* data, Player arrayMask.SetCount(values.size()); for (std::size_t v = 0; v < values.size(); ++v) { - if (updateType != UPDATETYPE_VALUES || _dynamicChangesArrayMask[index].GetBit(v)) + if (updateType == UPDATETYPE_VALUES ? _dynamicChangesArrayMask[index].GetBit(v) : values[v]) { arrayMask.SetBit(v); buffer << uint32(values[v]); @@ -1382,10 +1382,23 @@ void Object::AddDynamicValue(uint16 index, uint32 value) AddToObjectUpdateIfNeeded(); } -void Object::RemoveDynamicValue(uint16 index, uint32 /*value*/) +void Object::RemoveDynamicValue(uint16 index, uint32 value) { ASSERT(index < _dynamicValuesCount || PrintIndexError(index, false)); - /// TODO: Research if this is actually needed + + // TODO: Research if this is blizzlike to just set value to 0 + std::vector& values = _dynamicValues[index]; + for (std::size_t i = 0; i < values.size(); ++i) + { + if (values[i] == value) + { + values[i] = 0; + _dynamicChangesMask.SetBit(index); + _dynamicChangesArrayMask[index].SetBit(i); + + AddToObjectUpdateIfNeeded(); + } + } } void Object::ClearDynamicValue(uint16 index) -- cgit v1.2.3