now all aura updates are placed into one packet

--HG--
branch : trunk
This commit is contained in:
silver1ce
2010-01-10 13:52:13 +02:00
parent e3ff6145ee
commit eea50de960
3 changed files with 38 additions and 1 deletions
+32
View File
@@ -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);
+1
View File
@@ -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
View File
@@ -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();