From 9bd41d0255ba4b1a0bc217786e1bb4f3234a34ed Mon Sep 17 00:00:00 2001 From: megamage Date: Thu, 30 Jul 2009 10:15:45 +0800 Subject: [8218] Final part of talent 17962 and ranks fixes. Author: VladimirMangos * Correctly show per-caster aura state for cleitns. --HG-- branch : trunk --- src/game/Object.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/game/Object.cpp') diff --git a/src/game/Object.cpp b/src/game/Object.cpp index d565818910e..1ac4c8fa2f0 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -465,6 +465,7 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask return; bool IsActivateToQuest = false; + bool IsPerCasterAuraState = false; if (updatetype == UPDATETYPE_CREATE_OBJECT || updatetype == UPDATETYPE_CREATE_OBJECT2) { if (isType(TYPEMASK_GAMEOBJECT) && !((GameObject*)this)->IsTransport()) @@ -477,6 +478,14 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask if (((GameObject*)this)->GetGoArtKit()) updateMask->SetBit(GAMEOBJECT_BYTES_1); } + else if (isType(TYPEMASK_UNIT)) + { + if( ((Unit*)this)->HasAuraState(AURA_STATE_CONFLAGRATE)) + { + IsPerCasterAuraState = true; + updateMask->SetBit(UNIT_FIELD_AURASTATE); + } + } } else // case UPDATETYPE_VALUES { @@ -489,6 +498,14 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask updateMask->SetBit(GAMEOBJECT_DYNAMIC); updateMask->SetBit(GAMEOBJECT_BYTES_1); } + else if (isType(TYPEMASK_UNIT)) + { + if( ((Unit*)this)->HasAuraState(AURA_STATE_CONFLAGRATE)) + { + IsPerCasterAuraState = true; + updateMask->SetBit(UNIT_FIELD_AURASTATE); + } + } } WPAssert(updateMask && updateMask->GetCount() == m_valuesCount); @@ -513,6 +530,19 @@ void Object::_BuildValuesUpdate(uint8 updatetype, ByteBuffer * data, UpdateMask *data << uint32(appendValue); } + else if (index == UNIT_FIELD_AURASTATE) + { + if(IsPerCasterAuraState) + { + // IsPerCasterAuraState set if related pet caster aura state set already + if (((Unit*)this)->HasAuraState(AURA_STATE_CONFLAGRATE, NULL, target)) + *data << m_uint32Values[ index ]; + else + *data << (m_uint32Values[ index ] & ~(1 << (AURA_STATE_CONFLAGRATE-1))); + } + else + *data << m_uint32Values[ index ]; + } // FIXME: Some values at server stored in float format but must be sent to client in uint32 format else if(index >= UNIT_FIELD_BASEATTACKTIME && index <= UNIT_FIELD_RANGEDATTACKTIME) { -- cgit v1.2.3