mirror of
https://github.com/mangosfour/server.git
synced 2025-12-12 19:37:03 +00:00
[10677] Send to creature/etc Update call real diff from last update and use it.
Now in case when creature/etc some tices not updates in result stay in not active (no near players or active objects) cell some important timers (corpse decay, summon timers, group loot expire, aura durations, etc) will updates at real diff time from last prev. update call. Signed-off-by: VladimirMangos <vladimir@getmangos.com> For some systems added exclude use real diff time because current limitations like move generators. So its stay use last tick diff and considered freeze and skip all time while creature in not active map part.
This commit is contained in:
parent
62c0963f37
commit
555c1a9094
35 changed files with 162 additions and 149 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -401,7 +401,6 @@ class MANGOS_DLL_SPEC Creature : public Unit
|
|||
uint32 GetDBTableGUIDLow() const { return m_DBTableGuid; }
|
||||
char const* GetSubName() const { return GetCreatureInfo()->SubName; }
|
||||
|
||||
void Update(uint32 time); // overwrite Unit::Update
|
||||
void GetRespawnCoord(float &x, float &y, float &z, float* ori = NULL, float* dist =NULL) const;
|
||||
uint32 GetEquipmentId() const { return m_equipmentId; }
|
||||
|
||||
|
|
@ -637,6 +636,7 @@ class MANGOS_DLL_SPEC Creature : public Unit
|
|||
void SendAreaSpiritHealerQueryOpcode(Player *pl);
|
||||
|
||||
protected:
|
||||
void Update(uint32 update_diff, uint32 tick_diff); // overwrite Unit::Update
|
||||
bool CreateFromProto(uint32 guidlow,uint32 Entry,uint32 team, const CreatureData *data = NULL);
|
||||
bool InitEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData* data=NULL);
|
||||
void RelocationNotify();
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ Unit* DynamicObject::GetCaster() const
|
|||
return ObjectAccessor::GetUnit(*this, GetCasterGUID());
|
||||
}
|
||||
|
||||
void DynamicObject::Update(uint32 p_time)
|
||||
void DynamicObject::Update(uint32 update_diff, uint32 /*tick_diff*/)
|
||||
{
|
||||
// caster can be not in world at time dynamic object update, but dynamic object not yet deleted in Unit destructor
|
||||
Unit* caster = GetCaster();
|
||||
|
|
@ -118,8 +118,8 @@ void DynamicObject::Update(uint32 p_time)
|
|||
|
||||
bool deleteThis = false;
|
||||
|
||||
if(m_aliveDuration > int32(p_time))
|
||||
m_aliveDuration -= p_time;
|
||||
if(m_aliveDuration > int32(update_diff))
|
||||
m_aliveDuration -= update_diff;
|
||||
else
|
||||
deleteThis = true;
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@ class DynamicObject : public WorldObject
|
|||
void RemoveFromWorld();
|
||||
|
||||
bool Create(uint32 guidlow, Unit *caster, uint32 spellId, SpellEffectIndex effIndex, float x, float y, float z, int32 duration, float radius);
|
||||
void Update(uint32 p_time);
|
||||
void Delete();
|
||||
uint32 GetSpellId() const { return m_spellId; }
|
||||
SpellEffectIndex GetEffIndex() const { return m_effIndex; }
|
||||
|
|
@ -67,6 +66,8 @@ class DynamicObject : public WorldObject
|
|||
GridReference<DynamicObject> &GetGridRef() { return m_gridRef; }
|
||||
|
||||
protected:
|
||||
void Update(uint32 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
|
||||
|
||||
uint32 m_spellId;
|
||||
SpellEffectIndex m_effIndex;
|
||||
int32 m_aliveDuration;
|
||||
|
|
|
|||
|
|
@ -159,7 +159,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, uint32 phaseMa
|
|||
return true;
|
||||
}
|
||||
|
||||
void GameObject::Update(uint32 /*p_time*/)
|
||||
void GameObject::Update(uint32 /*update_diff*/, uint32 /*tick_diff*/)
|
||||
{
|
||||
if (GetObjectGuid().IsMOTransport())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -588,7 +588,6 @@ class MANGOS_DLL_SPEC GameObject : public WorldObject
|
|||
void RemoveFromWorld();
|
||||
|
||||
bool Create(uint32 guidlow, uint32 name_id, Map *map, uint32 phaseMask, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint8 animprogress, GOState go_state);
|
||||
void Update(uint32 p_time);
|
||||
GameObjectInfo const* GetGOInfo() const;
|
||||
|
||||
bool IsTransport() const;
|
||||
|
|
@ -711,6 +710,8 @@ class MANGOS_DLL_SPEC GameObject : public WorldObject
|
|||
|
||||
uint64 GetRotation() const { return m_rotation; }
|
||||
protected:
|
||||
void Update(uint32 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
|
||||
|
||||
uint32 m_spellId;
|
||||
time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()),
|
||||
uint32 m_respawnDelayTime; // (secs) if 0 then current GO state no dependent from timer
|
||||
|
|
|
|||
|
|
@ -187,9 +187,7 @@ template<class T> void
|
|||
ObjectUpdater::Visit(GridRefManager<T> &m)
|
||||
{
|
||||
for(typename GridRefManager<T>::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
{
|
||||
iter->getSource()->Update(i_timeDiff);
|
||||
}
|
||||
iter->getSource()->UpdateCall(i_time, i_diff);
|
||||
}
|
||||
|
||||
bool CannibalizeObjectCheck::operator()(Corpse* u)
|
||||
|
|
|
|||
|
|
@ -61,13 +61,14 @@ namespace MaNGOS
|
|||
struct MANGOS_DLL_DECL GridUpdater
|
||||
{
|
||||
GridType &i_grid;
|
||||
uint32 i_time;
|
||||
uint32 i_timeDiff;
|
||||
GridUpdater(GridType &grid, uint32 diff) : i_grid(grid), i_timeDiff(diff) {}
|
||||
GridUpdater(GridType &grid, uint32 time_, uint32 diff) : i_grid(grid), i_time(time_), i_timeDiff(diff) {}
|
||||
|
||||
template<class T> void updateObjects(GridRefManager<T> &m)
|
||||
{
|
||||
for(typename GridRefManager<T>::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
iter->getSource()->Update(i_timeDiff);
|
||||
iter->getSource()->UpdateCall(i_time, i_timeDiff);
|
||||
}
|
||||
|
||||
void Visit(PlayerMapType &m) { updateObjects<Player>(m); }
|
||||
|
|
@ -136,8 +137,9 @@ namespace MaNGOS
|
|||
|
||||
struct MANGOS_DLL_DECL ObjectUpdater
|
||||
{
|
||||
uint32 i_timeDiff;
|
||||
explicit ObjectUpdater(const uint32 &diff) : i_timeDiff(diff) {}
|
||||
uint32 i_time; // current tick time in msecs
|
||||
uint32 i_diff; // current tick time diff in msecs
|
||||
explicit ObjectUpdater(uint32 time_, uint32 diff) : i_time(time_), i_diff(diff) {}
|
||||
template<class T> void Visit(GridRefManager<T> &m);
|
||||
void Visit(PlayerMapType &) {}
|
||||
void Visit(CorpseMapType &) {}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ inline void MaNGOS::VisibleNotifier::Visit(GridRefManager<T> &m)
|
|||
inline void MaNGOS::ObjectUpdater::Visit(CreatureMapType &m)
|
||||
{
|
||||
for(CreatureMapType::iterator iter = m.begin(); iter != m.end(); ++iter)
|
||||
iter->getSource()->Update(i_timeDiff);
|
||||
iter->getSource()->UpdateCall(i_time, i_diff);
|
||||
}
|
||||
|
||||
inline void PlayerCreatureRelocationWorker(Player* pl, WorldObject const* viewPoint, Creature* c)
|
||||
|
|
|
|||
|
|
@ -514,20 +514,18 @@ bool Map::loaded(const GridPair &p) const
|
|||
return ( getNGrid(p.x_coord, p.y_coord) && isGridObjectDataLoaded(p.x_coord, p.y_coord) );
|
||||
}
|
||||
|
||||
void Map::Update(const uint32 &t_diff)
|
||||
void Map::Update(uint32 time_, uint32 diff)
|
||||
{
|
||||
/// update players at tick
|
||||
for(m_mapRefIter = m_mapRefManager.begin(); m_mapRefIter != m_mapRefManager.end(); ++m_mapRefIter)
|
||||
{
|
||||
Player* plr = m_mapRefIter->getSource();
|
||||
if(plr && plr->IsInWorld())
|
||||
plr->Update(t_diff);
|
||||
}
|
||||
if (Player* plr = m_mapRefIter->getSource())
|
||||
if (plr->IsInWorld())
|
||||
plr->UpdateCall(time_, diff);
|
||||
|
||||
/// update active cells around players and active objects
|
||||
resetMarkedCells();
|
||||
|
||||
MaNGOS::ObjectUpdater updater(t_diff);
|
||||
MaNGOS::ObjectUpdater updater(time_, diff);
|
||||
// for creature
|
||||
TypeContainerVisitor<MaNGOS::ObjectUpdater, GridTypeMapContainer > grid_object_update(updater);
|
||||
// for pets
|
||||
|
|
@ -638,7 +636,7 @@ void Map::Update(const uint32 &t_diff)
|
|||
GridInfo *info = i->getSource()->getGridInfoRef();
|
||||
++i; // The update might delete the map and we need the next map before the iterator gets invalid
|
||||
MANGOS_ASSERT(grid->GetGridState() >= 0 && grid->GetGridState() < MAX_GRID_STATE);
|
||||
sMapMgr.UpdateGridState(grid->GetGridState(), *this, *grid, *info, grid->getX(), grid->getY(), t_diff);
|
||||
sMapMgr.UpdateGridState(grid->GetGridState(), *this, *grid, *info, grid->getX(), grid->getY(), diff);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1849,17 +1847,17 @@ bool InstanceMap::Add(Player *player)
|
|||
return true;
|
||||
}
|
||||
|
||||
void InstanceMap::Update(const uint32& t_diff)
|
||||
void InstanceMap::Update(uint32 time_, uint32 diff)
|
||||
{
|
||||
Map::Update(t_diff);
|
||||
Map::Update(time_, diff);
|
||||
|
||||
if(i_data)
|
||||
i_data->Update(t_diff);
|
||||
i_data->Update(diff);
|
||||
}
|
||||
|
||||
void BattleGroundMap::Update(const uint32& diff)
|
||||
void BattleGroundMap::Update(uint32 time_, uint32 diff)
|
||||
{
|
||||
Map::Update(diff);
|
||||
Map::Update(time_, diff);
|
||||
|
||||
GetBG()->Update(diff);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>, public MaNGOS::Obj
|
|||
template<class T> void Add(T *);
|
||||
template<class T> void Remove(T *, bool);
|
||||
|
||||
virtual void Update(const uint32&);
|
||||
virtual void Update(uint32 time_, uint32 diff);
|
||||
|
||||
void MessageBroadcast(Player *, WorldPacket *, bool to_self);
|
||||
void MessageBroadcast(WorldObject *, WorldPacket *);
|
||||
|
|
@ -382,7 +382,7 @@ class MANGOS_DLL_SPEC InstanceMap : public Map
|
|||
~InstanceMap();
|
||||
bool Add(Player *);
|
||||
void Remove(Player *, bool);
|
||||
void Update(const uint32&);
|
||||
void Update(uint32 time_, uint32 diff);
|
||||
void CreateInstanceData(bool load);
|
||||
bool Reset(uint8 method);
|
||||
uint32 GetScriptId() { return i_script_id; }
|
||||
|
|
@ -407,7 +407,7 @@ class MANGOS_DLL_SPEC BattleGroundMap : public Map
|
|||
BattleGroundMap(uint32 id, time_t, uint32 InstanceId, Map* _parent, uint8 spawnMode);
|
||||
~BattleGroundMap();
|
||||
|
||||
void Update(const uint32&);
|
||||
void Update(uint32 time_, uint32 diff);
|
||||
bool Add(Player *);
|
||||
void Remove(Player *, bool);
|
||||
bool CanEnter(Player* player);
|
||||
|
|
|
|||
|
|
@ -43,24 +43,24 @@ void MapInstanced::InitVisibilityDistance()
|
|||
}
|
||||
}
|
||||
|
||||
void MapInstanced::Update(const uint32& t)
|
||||
void MapInstanced::Update(uint32 time_, uint32 diff)
|
||||
{
|
||||
// take care of loaded GridMaps (when unused, unload it!)
|
||||
Map::Update(t);
|
||||
Map::Update(time_, diff);
|
||||
|
||||
// update the instanced maps
|
||||
InstancedMaps::iterator i = m_InstancedMaps.begin();
|
||||
|
||||
while (i != m_InstancedMaps.end())
|
||||
{
|
||||
if(i->second->CanUnload(t))
|
||||
if(i->second->CanUnload(diff))
|
||||
{
|
||||
DestroyInstance(i); // iterator incremented
|
||||
}
|
||||
else
|
||||
{
|
||||
// update only here, because it may schedule some bad things before delete
|
||||
i->second->Update(t);
|
||||
i->second->Update(time_, diff);
|
||||
++i;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ class MANGOS_DLL_DECL MapInstanced : public Map
|
|||
~MapInstanced() {}
|
||||
|
||||
// functions overwrite Map versions
|
||||
void Update(const uint32&);
|
||||
void Update(uint32 time_, uint32 diff);
|
||||
void RemoveAllObjectsInRemoveList();
|
||||
void UnloadAll(bool pForce);
|
||||
|
||||
|
|
|
|||
|
|
@ -239,17 +239,17 @@ void MapManager::DeleteInstance(uint32 mapid, uint32 instanceId)
|
|||
}
|
||||
|
||||
void
|
||||
MapManager::Update(uint32 diff)
|
||||
MapManager::Update(const uint32 time_, const uint32 diff)
|
||||
{
|
||||
i_timer.Update(diff);
|
||||
if( !i_timer.Passed() )
|
||||
return;
|
||||
|
||||
for(MapMapType::iterator iter=i_maps.begin(); iter != i_maps.end(); ++iter)
|
||||
iter->second->Update((uint32)i_timer.GetCurrent());
|
||||
iter->second->Update(time_, (uint32)i_timer.GetCurrent());
|
||||
|
||||
for (TransportSet::iterator iter = m_Transports.begin(); iter != m_Transports.end(); ++iter)
|
||||
(*iter)->Update((uint32)i_timer.GetCurrent());
|
||||
(*iter)->UpdateCall(time_, (uint32)i_timer.GetCurrent());
|
||||
|
||||
i_timer.SetCurrent(0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ class MANGOS_DLL_DECL MapManager : public MaNGOS::Singleton<MapManager, MaNGOS::
|
|||
}
|
||||
|
||||
void Initialize(void);
|
||||
void Update(uint32);
|
||||
void Update(const uint32 time, const uint32 diff);
|
||||
|
||||
void SetGridCleanUpDelay(uint32 t)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -103,6 +103,16 @@ void Object::_Create(uint32 guidlow, uint32 entry, HighGuid guidhigh)
|
|||
m_PackGUID.Set(guid);
|
||||
}
|
||||
|
||||
void WorldObject::UpdateCall(uint32 newtime, uint32 diff)
|
||||
{
|
||||
// use real time diff from last object update call
|
||||
// this can have big diff from tick diff time for object returning to active zone)
|
||||
uint32 realDiff = getMSTimeDiff(m_lastUpdateTime, newtime);
|
||||
m_lastUpdateTime = newtime;
|
||||
|
||||
Update(realDiff, diff);
|
||||
}
|
||||
|
||||
void Object::SetObjectScale(float newScale)
|
||||
{
|
||||
SetFloatValue(OBJECT_FIELD_SCALE_X, newScale);
|
||||
|
|
@ -1121,7 +1131,7 @@ void Object::BuildUpdateData( UpdateDataMapType& /*update_players */)
|
|||
|
||||
WorldObject::WorldObject()
|
||||
: m_isActiveObject(false), m_currMap(NULL), m_mapId(0), m_InstanceId(0), m_phaseMask(PHASEMASK_NORMAL),
|
||||
m_positionX(0.0f), m_positionY(0.0f), m_positionZ(0.0f), m_orientation(0.0f)
|
||||
m_positionX(0.0f), m_positionY(0.0f), m_positionZ(0.0f), m_orientation(0.0f), m_lastUpdateTime(getMSTime())
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -342,7 +342,7 @@ class MANGOS_DLL_SPEC WorldObject : public Object
|
|||
public:
|
||||
virtual ~WorldObject ( ) {}
|
||||
|
||||
virtual void Update ( uint32 /*time_diff*/ ) { }
|
||||
void UpdateCall(uint32 newtime, uint32 diff); // tick time and tick diff in msecs, must be called instead direct call Update
|
||||
|
||||
void _Create( uint32 guidlow, HighGuid guidhigh, uint32 phaseMask);
|
||||
|
||||
|
|
@ -492,9 +492,12 @@ class MANGOS_DLL_SPEC WorldObject : public Object
|
|||
bool isActiveObject() const { return m_isActiveObject || m_viewPoint.hasViewers(); }
|
||||
|
||||
ViewPoint& GetViewPoint() { return m_viewPoint; }
|
||||
|
||||
protected:
|
||||
explicit WorldObject();
|
||||
|
||||
virtual void Update(uint32 /*update_diff*/, uint32 /*tick_diff*/) { }
|
||||
|
||||
//these functions are used mostly for Relocate() and Corpse/Player specific stuff...
|
||||
//use them ONLY in LoadFromDB()/Create() funcs and nowhere else!
|
||||
//mapId/instanceId should be set in SetMap() function!
|
||||
|
|
@ -517,6 +520,8 @@ class MANGOS_DLL_SPEC WorldObject : public Object
|
|||
float m_orientation;
|
||||
|
||||
ViewPoint m_viewPoint;
|
||||
|
||||
uint32 m_lastUpdateTime;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -482,7 +482,7 @@ void Pet::SetDeathState(DeathState s) // overwrite virtual
|
|||
}
|
||||
}
|
||||
|
||||
void Pet::Update(uint32 diff)
|
||||
void Pet::Update(uint32 update_diff, uint32 tick_diff)
|
||||
{
|
||||
if(m_removed) // pet already removed, just wait in remove queue, no updates
|
||||
return;
|
||||
|
|
@ -491,7 +491,7 @@ void Pet::Update(uint32 diff)
|
|||
{
|
||||
case CORPSE:
|
||||
{
|
||||
if (m_corpseDecayTimer <= diff)
|
||||
if (m_corpseDecayTimer <= update_diff)
|
||||
{
|
||||
MANGOS_ASSERT(getPetType()!=SUMMON_PET && "Must be already removed.");
|
||||
Remove(PET_SAVE_NOT_IN_SLOT); //hunters' pets never get removed because of death, NEVER!
|
||||
|
|
@ -520,8 +520,8 @@ void Pet::Update(uint32 diff)
|
|||
|
||||
if (m_duration > 0)
|
||||
{
|
||||
if(m_duration > (int32)diff)
|
||||
m_duration -= (int32)diff;
|
||||
if (m_duration > (int32)update_diff)
|
||||
m_duration -= (int32)update_diff;
|
||||
else
|
||||
{
|
||||
Remove(getPetType() != SUMMON_PET ? PET_SAVE_AS_DELETED:PET_SAVE_NOT_IN_SLOT);
|
||||
|
|
@ -530,7 +530,7 @@ void Pet::Update(uint32 diff)
|
|||
}
|
||||
|
||||
//regenerate focus for hunter pets or energy for deathknight's ghoul
|
||||
if(m_regenTimer <= diff)
|
||||
if (m_regenTimer <= update_diff)
|
||||
{
|
||||
switch (getPowerType())
|
||||
{
|
||||
|
|
@ -544,25 +544,25 @@ void Pet::Update(uint32 diff)
|
|||
m_regenTimer = 4000;
|
||||
}
|
||||
else
|
||||
m_regenTimer -= diff;
|
||||
m_regenTimer -= update_diff;
|
||||
|
||||
if (getPetType() != HUNTER_PET)
|
||||
break;
|
||||
|
||||
if(m_happinessTimer <= diff)
|
||||
if (m_happinessTimer <= update_diff)
|
||||
{
|
||||
LooseHappiness();
|
||||
m_happinessTimer = 7500;
|
||||
}
|
||||
else
|
||||
m_happinessTimer -= diff;
|
||||
m_happinessTimer -= update_diff;
|
||||
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
Creature::Update(diff);
|
||||
Creature::Update(update_diff, tick_diff);
|
||||
}
|
||||
|
||||
void Pet::Regenerate(Powers power)
|
||||
|
|
|
|||
|
|
@ -157,7 +157,6 @@ class Pet : public Creature
|
|||
static void DeleteFromDB(uint32 guidlow);
|
||||
|
||||
void SetDeathState(DeathState s); // overwrite virtual Creature::SetDeathState and Unit::SetDeathState
|
||||
void Update(uint32 diff); // overwrite virtual Creature::Update and Unit::Update
|
||||
|
||||
uint8 GetPetAutoSpellSize() const { return m_autospells.size(); }
|
||||
uint32 GetPetAutoSpellOnPos(uint8 pos) const
|
||||
|
|
@ -248,6 +247,8 @@ class Pet : public Creature
|
|||
|
||||
bool m_removed; // prevent overwrite pet state in DB at next Pet::Update if pet already removed(saved)
|
||||
protected:
|
||||
void Update(uint32 update_diff, uint32 tick_diff); // overwrite virtual Creature::Update and Unit::Update
|
||||
|
||||
uint32 m_happinessTimer;
|
||||
PetType m_petType;
|
||||
int32 m_duration; // time until unsummon (used mostly for summoned guardians and not used for controlled pets)
|
||||
|
|
|
|||
|
|
@ -1175,7 +1175,7 @@ void Player::SetDrunkValue(uint16 newDrunkenValue, uint32 itemId)
|
|||
SendMessageToSet(&data, true);
|
||||
}
|
||||
|
||||
void Player::Update( uint32 p_time )
|
||||
void Player::Update(uint32 update_diff, uint32 tick_diff)
|
||||
{
|
||||
if(!IsInWorld())
|
||||
return;
|
||||
|
|
@ -1195,25 +1195,21 @@ void Player::Update( uint32 p_time )
|
|||
|
||||
//used to implement delayed far teleports
|
||||
SetCanDelayTeleport(true);
|
||||
Unit::Update( p_time );
|
||||
Unit::Update(update_diff, tick_diff);
|
||||
SetCanDelayTeleport(false);
|
||||
|
||||
// update player only attacks
|
||||
if (uint32 ranged_att = getAttackTimer(RANGED_ATTACK))
|
||||
{
|
||||
setAttackTimer(RANGED_ATTACK, (p_time >= ranged_att ? 0 : ranged_att - p_time) );
|
||||
}
|
||||
setAttackTimer(RANGED_ATTACK, (update_diff >= ranged_att ? 0 : ranged_att - update_diff) );
|
||||
|
||||
if (uint32 off_att = getAttackTimer(OFF_ATTACK))
|
||||
{
|
||||
setAttackTimer(OFF_ATTACK, (p_time >= off_att ? 0 : off_att - p_time) );
|
||||
}
|
||||
setAttackTimer(OFF_ATTACK, (update_diff >= off_att ? 0 : off_att - update_diff) );
|
||||
|
||||
time_t now = time (NULL);
|
||||
|
||||
UpdatePvPFlag(now);
|
||||
|
||||
UpdateContestedPvP(p_time);
|
||||
UpdateContestedPvP(update_diff);
|
||||
|
||||
UpdateDuelFlag(now);
|
||||
|
||||
|
|
@ -1231,7 +1227,7 @@ void Player::Update( uint32 p_time )
|
|||
while (iter != m_timedquests.end())
|
||||
{
|
||||
QuestStatusData& q_status = mQuestStatus[*iter];
|
||||
if( q_status.m_timer <= p_time )
|
||||
if (q_status.m_timer <= update_diff)
|
||||
{
|
||||
uint32 quest_id = *iter;
|
||||
++iter; // current iter will be removed in FailQuest
|
||||
|
|
@ -1239,7 +1235,7 @@ void Player::Update( uint32 p_time )
|
|||
}
|
||||
else
|
||||
{
|
||||
q_status.m_timer -= p_time;
|
||||
q_status.m_timer -= update_diff;
|
||||
if (q_status.uState != QUEST_NEW) q_status.uState = QUEST_CHANGED;
|
||||
++iter;
|
||||
}
|
||||
|
|
@ -1342,23 +1338,23 @@ void Player::Update( uint32 p_time )
|
|||
|
||||
if (m_regenTimer)
|
||||
{
|
||||
if(p_time >= m_regenTimer)
|
||||
if (update_diff >= m_regenTimer)
|
||||
m_regenTimer = 0;
|
||||
else
|
||||
m_regenTimer -= p_time;
|
||||
m_regenTimer -= update_diff;
|
||||
}
|
||||
|
||||
if (m_weaponChangeTimer > 0)
|
||||
{
|
||||
if(p_time >= m_weaponChangeTimer)
|
||||
if (update_diff >= m_weaponChangeTimer)
|
||||
m_weaponChangeTimer = 0;
|
||||
else
|
||||
m_weaponChangeTimer -= p_time;
|
||||
m_weaponChangeTimer -= update_diff;
|
||||
}
|
||||
|
||||
if (m_zoneUpdateTimer > 0)
|
||||
{
|
||||
if(p_time >= m_zoneUpdateTimer)
|
||||
if (update_diff >= m_zoneUpdateTimer)
|
||||
{
|
||||
uint32 newzone, newarea;
|
||||
GetZoneAndAreaId(newzone,newarea);
|
||||
|
|
@ -1376,15 +1372,15 @@ void Player::Update( uint32 p_time )
|
|||
}
|
||||
}
|
||||
else
|
||||
m_zoneUpdateTimer -= p_time;
|
||||
m_zoneUpdateTimer -= update_diff;
|
||||
}
|
||||
|
||||
if (m_timeSyncTimer > 0)
|
||||
{
|
||||
if(p_time >= m_timeSyncTimer)
|
||||
if (update_diff >= m_timeSyncTimer)
|
||||
SendTimeSync();
|
||||
else
|
||||
m_timeSyncTimer -= p_time;
|
||||
m_timeSyncTimer -= update_diff;
|
||||
}
|
||||
|
||||
if (isAlive())
|
||||
|
|
@ -1402,29 +1398,29 @@ void Player::Update( uint32 p_time )
|
|||
|
||||
if (m_nextSave > 0)
|
||||
{
|
||||
if(p_time >= m_nextSave)
|
||||
if (update_diff >= m_nextSave)
|
||||
{
|
||||
// m_nextSave reseted in SaveToDB call
|
||||
SaveToDB();
|
||||
DETAIL_LOG("Player '%s' (GUID: %u) saved", GetName(), GetGUIDLow());
|
||||
}
|
||||
else
|
||||
m_nextSave -= p_time;
|
||||
m_nextSave -= update_diff;
|
||||
}
|
||||
|
||||
//Handle Water/drowning
|
||||
HandleDrowning(p_time);
|
||||
HandleDrowning(update_diff);
|
||||
|
||||
//Handle detect stealth players
|
||||
if (m_DetectInvTimer > 0)
|
||||
{
|
||||
if (p_time >= m_DetectInvTimer)
|
||||
if (update_diff >= m_DetectInvTimer)
|
||||
{
|
||||
HandleStealthedUnitsDetection();
|
||||
m_DetectInvTimer = 3000;
|
||||
}
|
||||
else
|
||||
m_DetectInvTimer -= p_time;
|
||||
m_DetectInvTimer -= update_diff;
|
||||
}
|
||||
|
||||
// Played time
|
||||
|
|
@ -1438,7 +1434,7 @@ void Player::Update( uint32 p_time )
|
|||
|
||||
if (m_drunk)
|
||||
{
|
||||
m_drunkTimer += p_time;
|
||||
m_drunkTimer += update_diff;
|
||||
|
||||
if (m_drunkTimer > 10*IN_MILLISECONDS)
|
||||
HandleSobering();
|
||||
|
|
@ -1447,18 +1443,18 @@ void Player::Update( uint32 p_time )
|
|||
// not auto-free ghost from body in instances
|
||||
if (m_deathTimer > 0 && !GetBaseMap()->Instanceable())
|
||||
{
|
||||
if(p_time >= m_deathTimer)
|
||||
if(update_diff >= m_deathTimer)
|
||||
{
|
||||
m_deathTimer = 0;
|
||||
BuildPlayerRepop();
|
||||
RepopAtGraveyard();
|
||||
}
|
||||
else
|
||||
m_deathTimer -= p_time;
|
||||
m_deathTimer -= update_diff;
|
||||
}
|
||||
|
||||
UpdateEnchantTime(p_time);
|
||||
UpdateHomebindTime(p_time);
|
||||
UpdateEnchantTime(update_diff);
|
||||
UpdateHomebindTime(update_diff);
|
||||
|
||||
// group update
|
||||
SendUpdateToOutOfRangeGroupMembers();
|
||||
|
|
|
|||
|
|
@ -1123,8 +1123,6 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
|
||||
bool Create( uint32 guidlow, const std::string& name, uint8 race, uint8 class_, uint8 gender, uint8 skin, uint8 face, uint8 hairStyle, uint8 hairColor, uint8 facialHair, uint8 outfitId );
|
||||
|
||||
void Update( uint32 time );
|
||||
|
||||
static bool BuildEnumData( QueryResult * result, WorldPacket * p_data );
|
||||
|
||||
void SetInWater(bool apply);
|
||||
|
|
@ -2403,6 +2401,7 @@ class MANGOS_DLL_SPEC Player : public Unit
|
|||
|
||||
bool canSeeSpellClickOn(Creature const* creature) const;
|
||||
protected:
|
||||
void Update(uint32 update_diff, uint32 tick_diff); // overwrite Unit::Update
|
||||
|
||||
uint32 m_contestedPvPTimer;
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ Creature(CREATURE_SUBTYPE_TEMPORARY_SUMMON), m_type(TEMPSUMMON_TIMED_OR_CORPSE_D
|
|||
{
|
||||
}
|
||||
|
||||
void TemporarySummon::Update( uint32 diff )
|
||||
void TemporarySummon::Update(uint32 update_diff, uint32 tick_diff)
|
||||
{
|
||||
switch(m_type)
|
||||
{
|
||||
|
|
@ -34,26 +34,26 @@ void TemporarySummon::Update( uint32 diff )
|
|||
break;
|
||||
case TEMPSUMMON_TIMED_DESPAWN:
|
||||
{
|
||||
if (m_timer <= diff)
|
||||
if (m_timer <= update_diff)
|
||||
{
|
||||
UnSummon();
|
||||
return;
|
||||
}
|
||||
|
||||
m_timer -= diff;
|
||||
m_timer -= update_diff;
|
||||
break;
|
||||
}
|
||||
case TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT:
|
||||
{
|
||||
if (!isInCombat())
|
||||
{
|
||||
if (m_timer <= diff)
|
||||
if (m_timer <= update_diff)
|
||||
{
|
||||
UnSummon();
|
||||
return;
|
||||
}
|
||||
|
||||
m_timer -= diff;
|
||||
m_timer -= update_diff;
|
||||
}
|
||||
else if (m_timer != m_lifetime)
|
||||
m_timer = m_lifetime;
|
||||
|
|
@ -65,13 +65,13 @@ void TemporarySummon::Update( uint32 diff )
|
|||
{
|
||||
if (m_deathState == CORPSE)
|
||||
{
|
||||
if (m_timer <= diff)
|
||||
if (m_timer <= update_diff)
|
||||
{
|
||||
UnSummon();
|
||||
return;
|
||||
}
|
||||
|
||||
m_timer -= diff;
|
||||
m_timer -= update_diff;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -106,13 +106,13 @@ void TemporarySummon::Update( uint32 diff )
|
|||
|
||||
if (!isInCombat())
|
||||
{
|
||||
if (m_timer <= diff)
|
||||
if (m_timer <= update_diff)
|
||||
{
|
||||
UnSummon();
|
||||
return;
|
||||
}
|
||||
else
|
||||
m_timer -= diff;
|
||||
m_timer -= update_diff;
|
||||
}
|
||||
else if (m_timer != m_lifetime)
|
||||
m_timer = m_lifetime;
|
||||
|
|
@ -129,13 +129,13 @@ void TemporarySummon::Update( uint32 diff )
|
|||
|
||||
if (!isInCombat() && isAlive() )
|
||||
{
|
||||
if (m_timer <= diff)
|
||||
if (m_timer <= update_diff)
|
||||
{
|
||||
UnSummon();
|
||||
return;
|
||||
}
|
||||
else
|
||||
m_timer -= diff;
|
||||
m_timer -= update_diff;
|
||||
}
|
||||
else if (m_timer != m_lifetime)
|
||||
m_timer = m_lifetime;
|
||||
|
|
@ -147,7 +147,7 @@ void TemporarySummon::Update( uint32 diff )
|
|||
break;
|
||||
}
|
||||
|
||||
Creature::Update( diff );
|
||||
Creature::Update(update_diff, tick_diff);
|
||||
}
|
||||
|
||||
void TemporarySummon::Summon(TempSummonType type, uint32 lifetime)
|
||||
|
|
|
|||
|
|
@ -27,12 +27,13 @@ class TemporarySummon : public Creature
|
|||
public:
|
||||
explicit TemporarySummon(ObjectGuid summoner = ObjectGuid());
|
||||
virtual ~TemporarySummon(){};
|
||||
void Update(uint32 time);
|
||||
void Summon(TempSummonType type, uint32 lifetime);
|
||||
void MANGOS_DLL_SPEC UnSummon();
|
||||
void SaveToDB();
|
||||
ObjectGuid const& GetSummonerGuid() const { return m_summoner ; }
|
||||
Unit* GetSummoner() const { return ObjectAccessor::GetUnit(*this, m_summoner); }
|
||||
protected:
|
||||
void Update(uint32 update_diff, uint32 tick_diff); // overwrite Creature::Update
|
||||
private:
|
||||
TempSummonType m_type;
|
||||
uint32 m_timer;
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ Totem::Totem() : Creature(CREATURE_SUBTYPE_TOTEM)
|
|||
m_type = TOTEM_PASSIVE;
|
||||
}
|
||||
|
||||
void Totem::Update( uint32 time )
|
||||
void Totem::Update(uint32 update_diff, uint32 tick_diff)
|
||||
{
|
||||
Unit *owner = GetOwner();
|
||||
if (!owner || !owner->isAlive() || !isAlive())
|
||||
|
|
@ -40,15 +40,15 @@ void Totem::Update( uint32 time )
|
|||
return;
|
||||
}
|
||||
|
||||
if (m_duration <= time)
|
||||
if (m_duration <= update_diff)
|
||||
{
|
||||
UnSummon(); // remove self
|
||||
return;
|
||||
}
|
||||
else
|
||||
m_duration -= time;
|
||||
m_duration -= update_diff;
|
||||
|
||||
Creature::Update( time );
|
||||
Creature::Update(update_diff, tick_diff);
|
||||
}
|
||||
|
||||
void Totem::Summon(Unit* owner)
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ class Totem : public Creature
|
|||
public:
|
||||
explicit Totem();
|
||||
virtual ~Totem(){};
|
||||
void Update( uint32 time );
|
||||
void Summon(Unit* owner);
|
||||
void UnSummon();
|
||||
uint32 GetSpell() const { return m_spells[0]; }
|
||||
|
|
@ -56,6 +55,8 @@ class Totem : public Creature
|
|||
bool IsImmuneToSpellEffect(SpellEntry const* spellInfo, SpellEffectIndex index) const;
|
||||
|
||||
protected:
|
||||
void Update(uint32 update_diff, uint32 tick_diff); // overwrite Creature::Update
|
||||
|
||||
TotemType m_type;
|
||||
uint32 m_duration;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -487,7 +487,7 @@ bool Transport::RemovePassenger(Player* passenger)
|
|||
return true;
|
||||
}
|
||||
|
||||
void Transport::Update(uint32 /*p_time*/)
|
||||
void Transport::Update(uint32 /*update_diff*/, uint32 /*tick_diff*/)
|
||||
{
|
||||
if (m_WayPoints.size() <= 1)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -32,13 +32,15 @@ class Transport : public GameObject
|
|||
|
||||
bool Create(uint32 guidlow, uint32 mapid, float x, float y, float z, float ang, uint8 animprogress, uint16 dynamicHighValue);
|
||||
bool GenerateWaypoints(uint32 pathid, std::set<uint32> &mapids);
|
||||
void Update(uint32 p_time);
|
||||
bool AddPassenger(Player* passenger);
|
||||
bool RemovePassenger(Player* passenger);
|
||||
|
||||
typedef std::set<Player*> PlayerSet;
|
||||
PlayerSet const& GetPassengers() const { return m_passengers; }
|
||||
|
||||
protected:
|
||||
void Update(uint32 update_diff, uint32 tick_diff);
|
||||
|
||||
private:
|
||||
struct WayPoint
|
||||
{
|
||||
|
|
|
|||
|
|
@ -291,7 +291,7 @@ Unit::~Unit()
|
|||
MANGOS_ASSERT(m_deletedHolders.size() == 0);
|
||||
}
|
||||
|
||||
void Unit::Update( uint32 p_time )
|
||||
void Unit::Update(uint32 update_diff, uint32 tick_diff)
|
||||
{
|
||||
if(!IsInWorld())
|
||||
return;
|
||||
|
|
@ -306,21 +306,21 @@ void Unit::Update( uint32 p_time )
|
|||
// WARNING! Order of execution here is important, do not change.
|
||||
// Spells must be processed with event system BEFORE they go to _UpdateSpells.
|
||||
// Or else we may have some SPELL_STATE_FINISHED spells stalled in pointers, that is bad.
|
||||
m_Events.Update( p_time );
|
||||
_UpdateSpells( p_time );
|
||||
m_Events.Update(update_diff);
|
||||
_UpdateSpells(update_diff);
|
||||
|
||||
CleanupDeletedAuras();
|
||||
|
||||
if (m_lastManaUseTimer)
|
||||
{
|
||||
if (p_time >= m_lastManaUseTimer)
|
||||
if (update_diff >= m_lastManaUseTimer)
|
||||
m_lastManaUseTimer = 0;
|
||||
else
|
||||
m_lastManaUseTimer -= p_time;
|
||||
m_lastManaUseTimer -= update_diff;
|
||||
}
|
||||
|
||||
if (CanHaveThreatList())
|
||||
getThreatManager().UpdateForClient(p_time);
|
||||
getThreatManager().UpdateForClient(update_diff);
|
||||
|
||||
// update combat timer only for players and pets
|
||||
if (isInCombat() && (GetTypeId() == TYPEID_PLAYER || ((Creature*)this)->IsPet() || ((Creature*)this)->isCharmed()))
|
||||
|
|
@ -331,26 +331,24 @@ void Unit::Update( uint32 p_time )
|
|||
if (m_HostileRefManager.isEmpty())
|
||||
{
|
||||
// m_CombatTimer set at aura start and it will be freeze until aura removing
|
||||
if (m_CombatTimer <= p_time)
|
||||
if (m_CombatTimer <= update_diff)
|
||||
CombatStop();
|
||||
else
|
||||
m_CombatTimer -= p_time;
|
||||
m_CombatTimer -= update_diff;
|
||||
}
|
||||
}
|
||||
|
||||
if (uint32 base_att = getAttackTimer(BASE_ATTACK))
|
||||
{
|
||||
setAttackTimer(BASE_ATTACK, (p_time >= base_att ? 0 : base_att - p_time) );
|
||||
}
|
||||
setAttackTimer(BASE_ATTACK, (update_diff >= base_att ? 0 : base_att - update_diff) );
|
||||
|
||||
// update abilities available only for fraction of time
|
||||
UpdateReactives( p_time );
|
||||
UpdateReactives(update_diff);
|
||||
|
||||
ModifyAuraState(AURA_STATE_HEALTHLESS_20_PERCENT, GetHealth() < GetMaxHealth()*0.20f);
|
||||
ModifyAuraState(AURA_STATE_HEALTHLESS_35_PERCENT, GetHealth() < GetMaxHealth()*0.35f);
|
||||
ModifyAuraState(AURA_STATE_HEALTH_ABOVE_75_PERCENT, GetHealth() > GetMaxHealth()*0.75f);
|
||||
|
||||
i_motionMaster.UpdateMotion(p_time);
|
||||
i_motionMaster.UpdateMotion(tick_diff); // movegens expected non freeze time diff
|
||||
}
|
||||
|
||||
bool Unit::haveOffhandWeapon() const
|
||||
|
|
|
|||
|
|
@ -1168,8 +1168,6 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
|||
void ApplyDiminishingAura(DiminishingGroup group, bool apply);
|
||||
void ClearDiminishings() { m_Diminishing.clear(); }
|
||||
|
||||
virtual void Update( uint32 time );
|
||||
|
||||
void setAttackTimer(WeaponAttackType type, uint32 time) { m_attackTimer[type] = time; }
|
||||
void resetAttackTimer(WeaponAttackType type = BASE_ATTACK);
|
||||
uint32 getAttackTimer(WeaponAttackType type) const { return m_attackTimer[type]; }
|
||||
|
|
@ -1929,6 +1927,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
|
|||
protected:
|
||||
explicit Unit ();
|
||||
|
||||
void Update(uint32 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
|
||||
void _UpdateSpells(uint32 time);
|
||||
void _UpdateAutoRepeatSpell();
|
||||
|
||||
|
|
|
|||
|
|
@ -56,9 +56,9 @@ void Vehicle::SetDeathState(DeathState s) // overwrite vir
|
|||
Creature::SetDeathState(s);
|
||||
}
|
||||
|
||||
void Vehicle::Update(uint32 diff)
|
||||
void Vehicle::Update(uint32 update_diff, uint32 tick_diff)
|
||||
{
|
||||
Creature::Update(diff);
|
||||
Creature::Update(update_diff, tick_diff);
|
||||
}
|
||||
|
||||
bool Vehicle::Create(uint32 guidlow, Map *map, uint32 Entry, uint32 vehicleId, uint32 team)
|
||||
|
|
|
|||
|
|
@ -36,7 +36,6 @@ class Vehicle : public Creature
|
|||
bool Create (uint32 guidlow, Map *map, uint32 Entry, uint32 vehicleId, uint32 team);
|
||||
|
||||
void SetDeathState(DeathState s); // overwrite virtual Creature::SetDeathState and Unit::SetDeathState
|
||||
void Update(uint32 diff); // overwrite virtual Creature::Update and Unit::Update
|
||||
|
||||
uint32 GetVehicleId() { return m_vehicleId; }
|
||||
void SetVehicleId(uint32 vehicleid) { m_vehicleId = vehicleid; }
|
||||
|
|
@ -44,6 +43,8 @@ class Vehicle : public Creature
|
|||
void Dismiss();
|
||||
|
||||
protected:
|
||||
void Update(uint32 update_diff, uint32 tick_diff); // overwrite virtual Creature::Update and Unit::Update
|
||||
|
||||
uint32 m_vehicleId;
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -1376,7 +1376,7 @@ void World::DetectDBCLang()
|
|||
}
|
||||
|
||||
/// Update the World !
|
||||
void World::Update(uint32 diff)
|
||||
void World::Update(uint32 time_, uint32 diff)
|
||||
{
|
||||
///- Update the different timers
|
||||
for(int i = 0; i < WUPDATE_COUNT; ++i)
|
||||
|
|
@ -1463,7 +1463,7 @@ void World::Update(uint32 diff)
|
|||
{
|
||||
m_timers[WUPDATE_OBJECTS].Reset();
|
||||
///- Update objects when the timer has passed (maps, transport, creatures,...)
|
||||
sMapMgr.Update(diff); // As interval = 0
|
||||
sMapMgr.Update(time_, diff); // As interval = 0
|
||||
|
||||
sBattleGroundMgr.Update(diff);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -509,7 +509,7 @@ class World
|
|||
static void StopNow(uint8 exitcode) { m_stopEvent = true; m_ExitCode = exitcode; }
|
||||
static bool IsStopped() { return m_stopEvent; }
|
||||
|
||||
void Update(uint32 diff);
|
||||
void Update(uint32 time_, uint32 diff);
|
||||
|
||||
void UpdateSessions( uint32 diff );
|
||||
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ void WorldRunnable::run()
|
|||
|
||||
uint32 diff = getMSTimeDiff(realPrevTime,realCurrTime);
|
||||
|
||||
sWorld.Update( diff );
|
||||
sWorld.Update(realCurrTime, diff);
|
||||
realPrevTime = realCurrTime;
|
||||
|
||||
// diff (D0) include time of previous sleep (d0) + tick time (t0)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "10676"
|
||||
#define REVISION_NR "10677"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue