mirror of
https://github.com/araxiaonline/TrinityCore2.git
synced 2026-06-19 22:39:39 -04:00
now all aura updates are placed into one packet
--HG-- branch : trunk
This commit is contained in:
@@ -204,6 +204,38 @@ void AuraApplication::ClientUpdate(bool remove)
|
||||
m_target->SendMessageToSet(&data, true);
|
||||
}
|
||||
|
||||
void AuraApplication::ConstructAuraInfo(ByteBuffer &data)
|
||||
{
|
||||
m_needClientUpdate = false;
|
||||
|
||||
data << uint8(m_slot);
|
||||
|
||||
if(!m_target->GetVisibleAura(m_slot))
|
||||
{
|
||||
data << uint32(0);
|
||||
sLog.outDebug("Aura %u removed slot %u",GetBase()->GetId(), m_slot);
|
||||
return;
|
||||
}
|
||||
|
||||
Aura const * aura = GetBase();
|
||||
data << uint32(aura->GetId());
|
||||
uint32 flags = m_flags;
|
||||
if (aura->GetMaxDuration() > 0)
|
||||
flags |= AFLAG_DURATION;
|
||||
data << uint8(flags);
|
||||
data << uint8(aura->GetCasterLevel());
|
||||
data << uint8(aura->GetStackAmount() > 1 ? aura->GetStackAmount() : (aura->GetCharges()) ? aura->GetCharges() : 1);
|
||||
|
||||
if(!(flags & AFLAG_CASTER))
|
||||
data.appendPackGUID(aura->GetCasterGUID());
|
||||
|
||||
if(flags & AFLAG_DURATION)
|
||||
{
|
||||
data << uint32(aura->GetMaxDuration());
|
||||
data << uint32(aura->GetDuration());
|
||||
}
|
||||
}
|
||||
|
||||
Aura * Aura::TryCreate(SpellEntry const* spellproto, uint8 tryEffMask, WorldObject * owner, Unit * caster, int32 *baseAmount, Item * castItem, uint64 casterGUID)
|
||||
{
|
||||
assert(spellproto);
|
||||
|
||||
@@ -72,6 +72,7 @@ class AuraApplication
|
||||
void SetNeedClientUpdate() { m_needClientUpdate = true;}
|
||||
bool IsNeedClientUpdate() const { return m_needClientUpdate;}
|
||||
void ClientUpdate(bool remove = false);
|
||||
void ConstructAuraInfo(ByteBuffer &);
|
||||
};
|
||||
|
||||
class TRINITY_DLL_SPEC Aura
|
||||
|
||||
+5
-1
@@ -3242,9 +3242,13 @@ void Unit::_UpdateSpells( uint32 time )
|
||||
++i;
|
||||
}
|
||||
|
||||
WorldPacket data(SMSG_AURA_UPDATE, 50);
|
||||
data.append(GetPackGUID());
|
||||
for (VisibleAuraMap::iterator itr = m_visibleAuras.begin(); itr != m_visibleAuras.end(); ++itr)
|
||||
if (itr->second->IsNeedClientUpdate())
|
||||
itr->second->ClientUpdate();
|
||||
itr->second->ConstructAuraInfo(data);
|
||||
|
||||
SendMessageToSet(&data, true);
|
||||
|
||||
_DeleteRemovedAuras();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user