[10688] New version of patch for send real diff from last update.

In new version last update time stopred for specific Cell that store all world objects
placed in it. All objects of Cell updated (or not updated) in same time.

Original version provided by ciphercom.
This commit is contained in:
VladimirMangos 2010-11-06 19:43:23 +03:00
parent 464908f453
commit e219ee99bb
36 changed files with 183 additions and 151 deletions

View file

@ -406,7 +406,7 @@ uint32 Creature::ChooseDisplayId(const CreatureInfo *cinfo, const CreatureData *
return display_id;
}
void Creature::Update(uint32 diff)
void Creature::Update(uint32 update_diff, uint32 tick_diff)
{
if (m_needNotify)
{
@ -467,7 +467,7 @@ void Creature::Update(uint32 diff)
if (m_isDeadByDefault)
break;
if (m_corpseDecayTimer <= diff)
if (m_corpseDecayTimer <= update_diff)
{
// since pool system can fail to roll unspawned object, this one can remain spawned, so must set respawn nevertheless
uint16 poolid = GetDBTableGUIDLow() ? sPoolMgr.IsPartOfAPool<Creature>(GetDBTableGUIDLow()) : 0;
@ -482,11 +482,11 @@ void Creature::Update(uint32 diff)
}
else
{
m_corpseDecayTimer -= diff;
m_corpseDecayTimer -= update_diff;
if (m_groupLootId)
{
if(diff < m_groupLootTimer)
m_groupLootTimer -= diff;
if(update_diff < m_groupLootTimer)
m_groupLootTimer -= update_diff;
else
StopGroupLoot();
}
@ -498,7 +498,7 @@ void Creature::Update(uint32 diff)
{
if (m_isDeadByDefault)
{
if (m_corpseDecayTimer <= diff)
if (m_corpseDecayTimer <= update_diff)
{
// since pool system can fail to roll unspawned object, this one can remain spawned, so must set respawn nevertheless
uint16 poolid = GetDBTableGUIDLow() ? sPoolMgr.IsPartOfAPool<Creature>(GetDBTableGUIDLow()) : 0;
@ -516,11 +516,11 @@ void Creature::Update(uint32 diff)
}
else
{
m_corpseDecayTimer -= diff;
m_corpseDecayTimer -= update_diff;
}
}
Unit::Update( diff );
Unit::Update(update_diff, tick_diff);
// creature can be dead after Unit::Update call
// CORPSE/DEAD state will processed at next tick (in other case death timer will be updated unexpectedly)
@ -531,7 +531,7 @@ void Creature::Update(uint32 diff)
{
// do not allow the AI to be changed during update
m_AI_locked = true;
i_AI->UpdateAI(diff);
i_AI->UpdateAI(tick_diff); // AI not react good at real update delays (while freeze in non-active part of map)
m_AI_locked = false;
}
@ -541,10 +541,10 @@ void Creature::Update(uint32 diff)
break;
if(m_regenTimer > 0)
{
if(diff >= m_regenTimer)
if(update_diff >= m_regenTimer)
m_regenTimer = 0;
else
m_regenTimer -= diff;
m_regenTimer -= update_diff;
}
if (m_regenTimer != 0)
break;