Index: src/game/GroupHandler.cpp =================================================================== --- src/game/GroupHandler.cpp (revision 5581) +++ src/game/GroupHandler.cpp (working copy) @@ -802,18 +802,18 @@ data << (uint16) player->GetPositionY(); // GROUP_UPDATE_FLAG_POSITION uint64 auramask = 0; - ByteBuffer buf; + size_t maskPos = data.wpos(); + data << (uint64) auramask; // placeholder for(uint8 i = 0; i < MAX_AURAS; ++i) { if(uint32 aura = player->GetUInt32Value(UNIT_FIELD_AURA + i)) { auramask |= (uint64(1) << i); - buf << (uint16) aura; + data << (uint16) aura; //buf << (uint8) 1; } } - data << (uint64) auramask; // GROUP_UPDATE_FLAG_AURAS - data.append(buf); + data.put(maskPos,auramask); // GROUP_UPDATE_FLAG_AURAS if(pet) { @@ -828,18 +828,18 @@ data << (uint16) pet->GetMaxPower(petpowertype); // GROUP_UPDATE_FLAG_PET_MAX_POWER uint64 petauramask = 0; - ByteBuffer petbuf; + size_t petMaskPos = data.wpos(); + data << (uint64) petauramask; // placeholder for(uint8 i = 0; i < MAX_AURAS; ++i) { if(uint32 petaura = pet->GetUInt32Value(UNIT_FIELD_AURA + i)) { petauramask |= (uint64(1) << i); - petbuf << (uint16) petaura; + data << (uint16) petaura; //petbuf << (uint8) 1; } } - data << (uint64) petauramask; // GROUP_UPDATE_FLAG_PET_AURAS - data.append(petbuf); + data.put(petMaskPos,petauramask); // GROUP_UPDATE_FLAG_PET_AURAS } else { Index: src/game/SpellAuras.cpp =================================================================== --- src/game/SpellAuras.cpp (revision 5581) +++ src/game/SpellAuras.cpp (working copy) @@ -862,27 +862,8 @@ SetAuraFlag(slot, true); SetAuraLevel(slot,caster ? caster->getLevel() : sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL)); - if(m_target->GetTypeId() == TYPEID_PLAYER) - { - if(((Player*)m_target)->GetGroup()) - { - ((Player*)m_target)->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_AURAS); - ((Player*)m_target)->SetAuraUpdateMask(slot); - } - } - - if(m_target->GetTypeId() == TYPEID_UNIT && ((Creature*)m_target)->isPet()) - { - Pet *pet = ((Pet*)m_target); - if(!pet->isControlled()) - return; - Unit *owner = m_target->GetOwner(); - if(owner && (owner->GetTypeId() == TYPEID_PLAYER) && ((Player*)owner)->GetGroup()) - { - ((Player*)owner)->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_AURAS); - pet->SetAuraUpdateMask(slot); - } - } + // update to outofrnage group members + m_target->UpdateAuraForGroup(slot); } SetAuraSlot( slot ); @@ -965,26 +946,8 @@ SetAuraFlag(slot, false); SetAuraLevel(slot,caster ? caster->getLevel() : sWorld.getConfig(CONFIG_MAX_PLAYER_LEVEL)); - if(m_target->GetTypeId() == TYPEID_PLAYER) - { - if(((Player*)m_target)->GetGroup()) - { - ((Player*)m_target)->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_AURAS); - ((Player*)m_target)->SetAuraUpdateMask(slot); - } - } - else if(m_target->GetTypeId() == TYPEID_UNIT && ((Creature*)m_target)->isPet()) - { - Pet *pet = ((Pet*)m_target); - if(!pet->isControlled()) - return; - Unit *owner = m_target->GetOwner(); - if(owner && (owner->GetTypeId() == TYPEID_PLAYER) && ((Player*)owner)->GetGroup()) - { - ((Player*)owner)->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_AURAS); - pet->SetAuraUpdateMask(slot); - } - } + // update for group members + m_target->UpdateAuraForGroup(slot); if( IsSealSpell(GetId()) ) m_target->ModifyAuraState(AURA_STATE_JUDGEMENT,false); Index: src/game/Unit.cpp =================================================================== --- src/game/Unit.cpp (revision 5581) +++ src/game/Unit.cpp (working copy) @@ -9854,3 +9854,29 @@ return CastingTime; } + +void Unit::UpdateAuraForGroup(uint8 slot) +{ + if(GetTypeId() == TYPEID_PLAYER) + { + Player* player = (Player*)this; + if(player->GetGroup()) + { + player->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_AURAS); + player->SetAuraUpdateMask(slot); + } + } + else if(GetTypeId() == TYPEID_UNIT && ((Creature*)this)->isPet()) + { + Pet *pet = ((Pet*)this); + if(pet->isControlled()) + { + Unit *owner = GetOwner(); + if(owner && (owner->GetTypeId() == TYPEID_PLAYER) && ((Player*)owner)->GetGroup()) + { + ((Player*)owner)->SetGroupUpdateFlag(GROUP_UPDATE_FLAG_PET_AURAS); + pet->SetAuraUpdateMask(slot); + } + } + } +} Index: src/game/Unit.h =================================================================== --- src/game/Unit.h (revision 5581) +++ src/game/Unit.h (working copy) @@ -1085,6 +1085,9 @@ void StartReactiveTimer( ReactiveType reactive ) { m_reactiveTimer[reactive] = REACTIVE_TIMER_START;} void UpdateReactives(uint32 p_time); + // group updates + void UpdateAuraForGroup(uint8 slot); + protected: explicit Unit ( WorldObject *instantiator );