diff options
| author | Shauren <shauren.trinity@gmail.com> | 2016-07-05 22:07:35 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2016-07-05 22:07:35 +0200 |
| commit | f7883bd5251a759da1ca8be3ba6f6cead36723ec (patch) | |
| tree | affce8f9ad4b343ba936ad6effa2127ab7d831b1 /src/server/game/Entities/Object | |
| parent | bc81ae70bc350a3decead610f1b17452bd44eec4 (diff) | |
Core/Transmog: Implemented transmog collection and updated transmog handling
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
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<uint32>& 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) |
