[10717] Revert "[10716][10688] New version of patch for send real diff from last update."

This reverts commit 8398a55fa274471daae115e00c627b299a3fdbbd.
This reverts commit 06e2d6859ba3d7fd47be72c23a64e68ae039701f.
This commit is contained in:
VladimirMangos 2010-11-10 06:14:38 +03:00
parent c1427f7d83
commit 3b0e926788
36 changed files with 145 additions and 180 deletions

View file

@ -117,16 +117,12 @@ class MANGOS_DLL_DECL Grid
return i_container.template remove<SPECIFIC_OBJECT>(obj);
}
uint32 GetLastUpdateTime() const { return m_LastUpdateTime; }
void SetLastUpdateTime(uint32 newtime) { m_LastUpdateTime = newtime; }
private:
TypeMapContainer<GRID_OBJECT_TYPES> i_container;
TypeMapContainer<WORLD_OBJECT_TYPES> i_objects;
typedef std::set<void*> ActiveGridObjects;
ActiveGridObjects m_activeGridObjects;
uint32 m_LastUpdateTime; // last time when Update call has been or current started, used and set Map::Update
};
#endif

View file

@ -406,7 +406,7 @@ uint32 Creature::ChooseDisplayId(const CreatureInfo *cinfo, const CreatureData *
return display_id;
}
void Creature::Update(uint32 update_diff, uint32 tick_diff)
void Creature::Update(uint32 diff)
{
if (m_needNotify)
{
@ -467,7 +467,7 @@ void Creature::Update(uint32 update_diff, uint32 tick_diff)
if (m_isDeadByDefault)
break;
if (m_corpseDecayTimer <= update_diff)
if (m_corpseDecayTimer <= 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 update_diff, uint32 tick_diff)
}
else
{
m_corpseDecayTimer -= update_diff;
m_corpseDecayTimer -= diff;
if (m_groupLootId)
{
if(update_diff < m_groupLootTimer)
m_groupLootTimer -= update_diff;
if(diff < m_groupLootTimer)
m_groupLootTimer -= diff;
else
StopGroupLoot();
}
@ -498,7 +498,7 @@ void Creature::Update(uint32 update_diff, uint32 tick_diff)
{
if (m_isDeadByDefault)
{
if (m_corpseDecayTimer <= update_diff)
if (m_corpseDecayTimer <= 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 update_diff, uint32 tick_diff)
}
else
{
m_corpseDecayTimer -= update_diff;
m_corpseDecayTimer -= diff;
}
}
Unit::Update(update_diff, tick_diff);
Unit::Update( 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 update_diff, uint32 tick_diff)
{
// do not allow the AI to be changed during update
m_AI_locked = true;
i_AI->UpdateAI(tick_diff); // AI not react good at real update delays (while freeze in non-active part of map)
i_AI->UpdateAI(diff);
m_AI_locked = false;
}
@ -541,10 +541,10 @@ void Creature::Update(uint32 update_diff, uint32 tick_diff)
break;
if(m_regenTimer > 0)
{
if(update_diff >= m_regenTimer)
if(diff >= m_regenTimer)
m_regenTimer = 0;
else
m_regenTimer -= update_diff;
m_regenTimer -= diff;
}
if (m_regenTimer != 0)
break;

View file

@ -402,7 +402,7 @@ class MANGOS_DLL_SPEC Creature : public Unit
uint32 GetDBTableGUIDLow() const { return m_DBTableGuid; }
char const* GetSubName() const { return GetCreatureInfo()->SubName; }
void Update(uint32 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
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; }

View file

@ -106,7 +106,7 @@ Unit* DynamicObject::GetCaster() const
return ObjectAccessor::GetUnit(*this, GetCasterGUID());
}
void DynamicObject::Update(uint32 update_diff, uint32 /*tick_diff*/)
void DynamicObject::Update(uint32 p_time)
{
// 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 update_diff, uint32 /*tick_diff*/)
bool deleteThis = false;
if(m_aliveDuration > int32(update_diff))
m_aliveDuration -= update_diff;
if(m_aliveDuration > int32(p_time))
m_aliveDuration -= p_time;
else
deleteThis = true;

View file

@ -35,7 +35,7 @@ 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 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
void Update(uint32 p_time);
void Delete();
uint32 GetSpellId() const { return m_spellId; }
SpellEffectIndex GetEffIndex() const { return m_effIndex; }

View file

@ -159,7 +159,7 @@ bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, uint32 phaseMa
return true;
}
void GameObject::Update(uint32 /*update_diff*/, uint32 /*tick_diff*/)
void GameObject::Update(uint32 /*p_time*/)
{
if (GetObjectGuid().IsMOTransport())
{

View file

@ -588,7 +588,7 @@ 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 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
void Update(uint32 p_time);
GameObjectInfo const* GetGOInfo() const;
bool IsTransport() const;

View file

@ -187,7 +187,9 @@ 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_realdiff, i_diff);
{
iter->getSource()->Update(i_timeDiff);
}
}
bool CannibalizeObjectCheck::operator()(Corpse* u)

View file

@ -117,9 +117,8 @@ namespace MaNGOS
struct MANGOS_DLL_DECL ObjectUpdater
{
uint32 i_realdiff; // time from last update in msecs
uint32 i_diff; // current tick time diff in msecs
explicit ObjectUpdater(uint32 realdiff, uint32 diff) : i_realdiff(realdiff), i_diff(diff) {}
uint32 i_timeDiff;
explicit ObjectUpdater(const uint32 &diff) : i_timeDiff(diff) {}
template<class T> void Visit(GridRefManager<T> &m);
void Visit(PlayerMapType &) {}
void Visit(CorpseMapType &) {}

View file

@ -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_realdiff, i_diff);
iter->getSource()->Update(i_timeDiff);
}
inline void PlayerCreatureRelocationWorker(Player* pl, WorldObject const* viewPoint, Creature* c)

View file

@ -131,8 +131,7 @@ Map::Map(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode, Map* _par
i_id(id), i_InstanceId(InstanceId), m_unloadTimer(0),
m_VisibleDistance(DEFAULT_VISIBILITY_DISTANCE), m_instanceSave(NULL),
m_activeNonPlayersIter(m_activeNonPlayers.end()),
i_gridExpiry(expiry), m_parentMap(_parent ? _parent : this),
m_lastUpdateTime(getMSTime()) // expected that next update call will not long after map creating
i_gridExpiry(expiry), m_parentMap(_parent ? _parent : this)
{
for(unsigned int idx=0; idx < MAX_NUMBER_OF_GRIDS; ++idx)
{
@ -511,19 +510,25 @@ 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(uint32 time_, uint32 diff)
void Map::Update(const uint32 &t_diff)
{
m_lastUpdateTime = time_;
/// update players at tick
for(m_mapRefIter = m_mapRefManager.begin(); m_mapRefIter != m_mapRefManager.end(); ++m_mapRefIter)
if (Player* plr = m_mapRefIter->getSource())
if (plr->IsInWorld())
plr->Update(diff, diff);
{
Player* plr = m_mapRefIter->getSource();
if(plr && plr->IsInWorld())
plr->Update(t_diff);
}
/// update active cells around players and active objects
resetMarkedCells();
MaNGOS::ObjectUpdater updater(t_diff);
// for creature
TypeContainerVisitor<MaNGOS::ObjectUpdater, GridTypeMapContainer > grid_object_update(updater);
// for pets
TypeContainerVisitor<MaNGOS::ObjectUpdater, WorldTypeMapContainer > world_object_update(updater);
// the player iterator is stored in the map object
// to make sure calls to Map::Remove don't invalidate it
for(m_mapRefIter = m_mapRefManager.begin(); m_mapRefIter != m_mapRefManager.end(); ++m_mapRefIter)
@ -546,25 +551,9 @@ void Map::Update(uint32 time_, uint32 diff)
if(!isCellMarked(cell_id))
{
markCell(cell_id);
CellPair pair(x,y);
Cell cell(pair);
cell.SetNoCreate();
uint32 realdiff = diff;
if (loaded(cell.gridPair()) )
{
GridType& celldata = (*getNGrid(cell.GridX(), cell.GridY()))(cell.CellX(), cell.CellY());
realdiff = getMSTimeDiff(celldata.GetLastUpdateTime(), time_);
celldata.SetLastUpdateTime(time_);
}
MaNGOS::ObjectUpdater updater(realdiff, diff);
// for creature
TypeContainerVisitor<MaNGOS::ObjectUpdater, GridTypeMapContainer > grid_object_update(updater);
// for pets
TypeContainerVisitor<MaNGOS::ObjectUpdater, WorldTypeMapContainer > world_object_update(updater);
Visit(cell, grid_object_update);
Visit(cell, world_object_update);
}
@ -600,25 +589,9 @@ void Map::Update(uint32 time_, uint32 diff)
if(!isCellMarked(cell_id))
{
markCell(cell_id);
CellPair pair(x,y);
Cell cell(pair);
cell.SetNoCreate();
uint32 realdiff = diff;
if (loaded(cell.gridPair()) )
{
GridType& celldata = (*getNGrid(cell.GridX(), cell.GridY()))(cell.CellX(), cell.CellY());
realdiff = getMSTimeDiff(celldata.GetLastUpdateTime(), time_);
celldata.SetLastUpdateTime(time_);
}
MaNGOS::ObjectUpdater updater(realdiff, diff);
// for creature
TypeContainerVisitor<MaNGOS::ObjectUpdater, GridTypeMapContainer > grid_object_update(updater);
// for pets
TypeContainerVisitor<MaNGOS::ObjectUpdater, WorldTypeMapContainer > world_object_update(updater);
Visit(cell, grid_object_update);
Visit(cell, world_object_update);
}
@ -640,7 +613,7 @@ void Map::Update(uint32 time_, uint32 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(), diff);
sMapMgr.UpdateGridState(grid->GetGridState(), *this, *grid, *info, grid->getX(), grid->getY(), t_diff);
}
}
@ -1852,17 +1825,17 @@ bool InstanceMap::Add(Player *player)
return true;
}
void InstanceMap::Update(uint32 time_, uint32 diff)
void InstanceMap::Update(const uint32& t_diff)
{
Map::Update(time_, diff);
Map::Update(t_diff);
if(i_data)
i_data->Update(diff);
i_data->Update(t_diff);
}
void BattleGroundMap::Update(uint32 time_, uint32 diff)
void BattleGroundMap::Update(const uint32& diff)
{
Map::Update(time_, diff);
Map::Update(diff);
GetBG()->Update(diff);
}

View file

@ -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(uint32 time_, uint32 diff);
virtual void Update(const uint32&);
void MessageBroadcast(Player *, WorldPacket *, bool to_self);
void MessageBroadcast(WorldObject *, WorldPacket *);
@ -270,8 +270,6 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>, public MaNGOS::Obj
uint32 GenerateLocalLowGuid(HighGuid guidhigh);
bool GetAreaInfo(float x, float y, float z, uint32 &mogpflags, int32 &adtId, int32 &rootId, int32 &groupId) const;
bool IsOutdoors(float x, float y, float z) const;
uint32 GetLastUpdateTime() const { return m_lastUpdateTime; }
private:
void LoadMapAndVMap(int gx, int gy);
void LoadVMap(int gx, int gy);
@ -348,8 +346,6 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>, public MaNGOS::Obj
std::set<WorldObject *> i_objectsToRemove;
std::multimap<time_t, ScriptAction> m_scriptSchedule;
uint32 m_lastUpdateTime; // time in past when called Update last time, set to object at adding to Map
// Map local low guid counters
ObjectGuidGenerator<HIGHGUID_DYNAMICOBJECT> m_DynObjectGuids;
ObjectGuidGenerator<HIGHGUID_PET> m_PetGuids;
@ -376,7 +372,7 @@ class MANGOS_DLL_SPEC InstanceMap : public Map
~InstanceMap();
bool Add(Player *);
void Remove(Player *, bool);
void Update(uint32 time_, uint32 diff);
void Update(const uint32&);
void CreateInstanceData(bool load);
bool Reset(InstanceResetMethod method);
uint32 GetScriptId() { return i_script_id; }
@ -401,7 +397,7 @@ class MANGOS_DLL_SPEC BattleGroundMap : public Map
BattleGroundMap(uint32 id, time_t, uint32 InstanceId, Map* _parent, uint8 spawnMode);
~BattleGroundMap();
void Update(uint32 time_, uint32 diff);
void Update(const uint32&);
bool Add(Player *);
void Remove(Player *, bool);
bool CanEnter(Player* player);

View file

@ -43,24 +43,24 @@ void MapInstanced::InitVisibilityDistance()
}
}
void MapInstanced::Update(uint32 time_, uint32 diff)
void MapInstanced::Update(const uint32& t)
{
// take care of loaded GridMaps (when unused, unload it!)
Map::Update(time_, diff);
Map::Update(t);
// update the instanced maps
InstancedMaps::iterator i = m_InstancedMaps.begin();
while (i != m_InstancedMaps.end())
{
if(i->second->CanUnload(diff))
if(i->second->CanUnload(t))
{
DestroyInstance(i); // iterator incremented
}
else
{
// update only here, because it may schedule some bad things before delete
i->second->Update(time_, diff);
i->second->Update(t);
++i;
}
}

View file

@ -34,7 +34,7 @@ class MANGOS_DLL_DECL MapInstanced : public Map
~MapInstanced() {}
// functions overwrite Map versions
void Update(uint32 time_, uint32 diff);
void Update(const uint32&);
void RemoveAllObjectsInRemoveList();
void UnloadAll(bool pForce);

View file

@ -239,17 +239,17 @@ void MapManager::DeleteInstance(uint32 mapid, uint32 instanceId)
}
void
MapManager::Update(const uint32 time_, const uint32 diff)
MapManager::Update(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(time_, i_timer.GetCurrent());
iter->second->Update(i_timer.GetCurrent());
for (TransportSet::iterator iter = m_Transports.begin(); iter != m_Transports.end(); ++iter)
(*iter)->Update(i_timer.GetCurrent(), i_timer.GetCurrent());
(*iter)->Update(i_timer.GetCurrent());
i_timer.SetCurrent(0);
}

View file

@ -67,7 +67,7 @@ class MANGOS_DLL_DECL MapManager : public MaNGOS::Singleton<MapManager, MaNGOS::
}
void Initialize(void);
void Update(const uint32 time, const uint32 diff);
void Update(uint32);
void SetGridCleanUpDelay(uint32 t)
{

View file

@ -342,7 +342,7 @@ class MANGOS_DLL_SPEC WorldObject : public Object
public:
virtual ~WorldObject ( ) {}
virtual void Update(uint32 /*update_diff*/, uint32 /*tick_diff*/) { }
virtual void Update ( uint32 /*time_diff*/ ) { }
void _Create( uint32 guidlow, HighGuid guidhigh, uint32 phaseMask);
@ -492,7 +492,6 @@ class MANGOS_DLL_SPEC WorldObject : public Object
bool isActiveObject() const { return m_isActiveObject || m_viewPoint.hasViewers(); }
ViewPoint& GetViewPoint() { return m_viewPoint; }
protected:
explicit WorldObject();

View file

@ -227,8 +227,6 @@ ObjectGridLoader::Load(GridType &grid)
void ObjectGridLoader::LoadN(void)
{
uint32 updatetime = i_map->GetLastUpdateTime();
i_gameObjects = 0; i_creatures = 0; i_corpses = 0;
i_cell.data.Part.cell_y = 0;
for(unsigned int x=0; x < MAX_NUMBER_OF_CELLS; ++x)
@ -239,9 +237,6 @@ void ObjectGridLoader::LoadN(void)
i_cell.data.Part.cell_y = y;
GridLoader<Player, AllWorldObjectTypes, AllGridObjectTypes> loader;
loader.Load(i_grid(x, y), *this);
// setup last update time for loaded cell
i_grid(x, y).SetLastUpdateTime(updatetime);
}
}
DEBUG_LOG("%u GameObjects, %u Creatures, and %u Corpses/Bones loaded for grid %u on map %u", i_gameObjects, i_creatures, i_corpses,i_grid.GetGridId(), i_map->GetId());

View file

@ -482,7 +482,7 @@ void Pet::SetDeathState(DeathState s) // overwrite virtual
}
}
void Pet::Update(uint32 update_diff, uint32 tick_diff)
void Pet::Update(uint32 diff)
{
if(m_removed) // pet already removed, just wait in remove queue, no updates
return;
@ -491,7 +491,7 @@ void Pet::Update(uint32 update_diff, uint32 tick_diff)
{
case CORPSE:
{
if (m_corpseDecayTimer <= update_diff)
if (m_corpseDecayTimer <= 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 update_diff, uint32 tick_diff)
if (m_duration > 0)
{
if (m_duration > (int32)update_diff)
m_duration -= (int32)update_diff;
if(m_duration > (int32)diff)
m_duration -= (int32)diff;
else
{
Remove(getPetType() != SUMMON_PET ? PET_SAVE_AS_DELETED:PET_SAVE_NOT_IN_SLOT);
@ -530,7 +530,7 @@ void Pet::Update(uint32 update_diff, uint32 tick_diff)
}
//regenerate focus for hunter pets or energy for deathknight's ghoul
if (m_regenTimer <= update_diff)
if(m_regenTimer <= diff)
{
switch (getPowerType())
{
@ -544,25 +544,25 @@ void Pet::Update(uint32 update_diff, uint32 tick_diff)
m_regenTimer = 4000;
}
else
m_regenTimer -= update_diff;
m_regenTimer -= diff;
if (getPetType() != HUNTER_PET)
if(getPetType() != HUNTER_PET)
break;
if (m_happinessTimer <= update_diff)
if(m_happinessTimer <= diff)
{
LooseHappiness();
m_happinessTimer = 7500;
}
else
m_happinessTimer -= update_diff;
m_happinessTimer -= diff;
break;
}
default:
break;
}
Creature::Update(update_diff, tick_diff);
Creature::Update(diff);
}
void Pet::Regenerate(Powers power)

View file

@ -157,8 +157,7 @@ class Pet : public Creature
static void DeleteFromDB(uint32 guidlow);
void SetDeathState(DeathState s); // overwrite virtual Creature::SetDeathState and Unit::SetDeathState
void Update(uint32 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
void Update(uint32 diff); // overwrite virtual Creature::Update and Unit::Update
uint8 GetPetAutoSpellSize() const { return m_autospells.size(); }
uint32 GetPetAutoSpellOnPos(uint8 pos) const

View file

@ -1175,7 +1175,7 @@ void Player::SetDrunkValue(uint16 newDrunkenValue, uint32 itemId)
SendMessageToSet(&data, true);
}
void Player::Update(uint32 update_diff, uint32 tick_diff)
void Player::Update( uint32 p_time )
{
if(!IsInWorld())
return;
@ -1195,21 +1195,25 @@ void Player::Update(uint32 update_diff, uint32 tick_diff)
//used to implement delayed far teleports
SetCanDelayTeleport(true);
Unit::Update(update_diff, tick_diff);
Unit::Update( p_time );
SetCanDelayTeleport(false);
// update player only attacks
if (uint32 ranged_att = getAttackTimer(RANGED_ATTACK))
setAttackTimer(RANGED_ATTACK, (update_diff >= ranged_att ? 0 : ranged_att - update_diff) );
if(uint32 ranged_att = getAttackTimer(RANGED_ATTACK))
{
setAttackTimer(RANGED_ATTACK, (p_time >= ranged_att ? 0 : ranged_att - p_time) );
}
if (uint32 off_att = getAttackTimer(OFF_ATTACK))
setAttackTimer(OFF_ATTACK, (update_diff >= off_att ? 0 : off_att - update_diff) );
if(uint32 off_att = getAttackTimer(OFF_ATTACK))
{
setAttackTimer(OFF_ATTACK, (p_time >= off_att ? 0 : off_att - p_time) );
}
time_t now = time (NULL);
UpdatePvPFlag(now);
UpdateContestedPvP(update_diff);
UpdateContestedPvP(p_time);
UpdateDuelFlag(now);
@ -1227,7 +1231,7 @@ void Player::Update(uint32 update_diff, uint32 tick_diff)
while (iter != m_timedquests.end())
{
QuestStatusData& q_status = mQuestStatus[*iter];
if (q_status.m_timer <= update_diff)
if( q_status.m_timer <= p_time )
{
uint32 quest_id = *iter;
++iter; // current iter will be removed in FailQuest
@ -1235,7 +1239,7 @@ void Player::Update(uint32 update_diff, uint32 tick_diff)
}
else
{
q_status.m_timer -= update_diff;
q_status.m_timer -= p_time;
if (q_status.uState != QUEST_NEW) q_status.uState = QUEST_CHANGED;
++iter;
}
@ -1338,49 +1342,49 @@ void Player::Update(uint32 update_diff, uint32 tick_diff)
if (m_regenTimer)
{
if (update_diff >= m_regenTimer)
if(p_time >= m_regenTimer)
m_regenTimer = 0;
else
m_regenTimer -= update_diff;
m_regenTimer -= p_time;
}
if (m_weaponChangeTimer > 0)
{
if (update_diff >= m_weaponChangeTimer)
if(p_time >= m_weaponChangeTimer)
m_weaponChangeTimer = 0;
else
m_weaponChangeTimer -= update_diff;
m_weaponChangeTimer -= p_time;
}
if (m_zoneUpdateTimer > 0)
{
if (update_diff >= m_zoneUpdateTimer)
if(p_time >= m_zoneUpdateTimer)
{
uint32 newzone, newarea;
GetZoneAndAreaId(newzone,newarea);
if (m_zoneUpdateId != newzone)
if( m_zoneUpdateId != newzone )
UpdateZone(newzone,newarea); // also update area
else
{
// use area updates as well
// needed for free far all arenas for example
if (m_areaUpdateId != newarea)
if( m_areaUpdateId != newarea )
UpdateArea(newarea);
m_zoneUpdateTimer = ZONE_UPDATE_INTERVAL;
}
}
else
m_zoneUpdateTimer -= update_diff;
m_zoneUpdateTimer -= p_time;
}
if (m_timeSyncTimer > 0)
{
if (update_diff >= m_timeSyncTimer)
if(p_time >= m_timeSyncTimer)
SendTimeSync();
else
m_timeSyncTimer -= update_diff;
m_timeSyncTimer -= p_time;
}
if (isAlive())
@ -1396,31 +1400,31 @@ void Player::Update(uint32 update_diff, uint32 tick_diff)
if (m_deathState == JUST_DIED)
KillPlayer();
if (m_nextSave > 0)
if(m_nextSave > 0)
{
if (update_diff >= m_nextSave)
if(p_time >= m_nextSave)
{
// m_nextSave reseted in SaveToDB call
SaveToDB();
DETAIL_LOG("Player '%s' (GUID: %u) saved", GetName(), GetGUIDLow());
}
else
m_nextSave -= update_diff;
m_nextSave -= p_time;
}
//Handle Water/drowning
HandleDrowning(update_diff);
HandleDrowning(p_time);
//Handle detect stealth players
if (m_DetectInvTimer > 0)
{
if (update_diff >= m_DetectInvTimer)
if (p_time >= m_DetectInvTimer)
{
HandleStealthedUnitsDetection();
m_DetectInvTimer = 3000;
}
else
m_DetectInvTimer -= update_diff;
m_DetectInvTimer -= p_time;
}
// Played time
@ -1434,27 +1438,27 @@ void Player::Update(uint32 update_diff, uint32 tick_diff)
if (m_drunk)
{
m_drunkTimer += update_diff;
m_drunkTimer += p_time;
if (m_drunkTimer > 10*IN_MILLISECONDS)
HandleSobering();
}
// not auto-free ghost from body in instances
if (m_deathTimer > 0 && !GetBaseMap()->Instanceable())
if(m_deathTimer > 0 && !GetBaseMap()->Instanceable())
{
if(update_diff >= m_deathTimer)
if(p_time >= m_deathTimer)
{
m_deathTimer = 0;
BuildPlayerRepop();
RepopAtGraveyard();
}
else
m_deathTimer -= update_diff;
m_deathTimer -= p_time;
}
UpdateEnchantTime(update_diff);
UpdateHomebindTime(update_diff);
UpdateEnchantTime(p_time);
UpdateHomebindTime(p_time);
// group update
SendUpdateToOutOfRangeGroupMembers();

View file

@ -1124,7 +1124,7 @@ 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 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
void Update( uint32 time );
static bool BuildEnumData( QueryResult * result, WorldPacket * p_data );

View file

@ -26,7 +26,7 @@ Creature(CREATURE_SUBTYPE_TEMPORARY_SUMMON), m_type(TEMPSUMMON_TIMED_OR_CORPSE_D
{
}
void TemporarySummon::Update(uint32 update_diff, uint32 tick_diff)
void TemporarySummon::Update( uint32 diff )
{
switch(m_type)
{
@ -34,26 +34,26 @@ void TemporarySummon::Update(uint32 update_diff, uint32 tick_diff)
break;
case TEMPSUMMON_TIMED_DESPAWN:
{
if (m_timer <= update_diff)
if (m_timer <= diff)
{
UnSummon();
return;
}
m_timer -= update_diff;
m_timer -= diff;
break;
}
case TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT:
{
if (!isInCombat())
{
if (m_timer <= update_diff)
if (m_timer <= diff)
{
UnSummon();
return;
}
m_timer -= update_diff;
m_timer -= diff;
}
else if (m_timer != m_lifetime)
m_timer = m_lifetime;
@ -65,13 +65,13 @@ void TemporarySummon::Update(uint32 update_diff, uint32 tick_diff)
{
if (IsCorpse())
{
if (m_timer <= update_diff)
if (m_timer <= diff)
{
UnSummon();
return;
}
m_timer -= update_diff;
m_timer -= diff;
}
break;
}
@ -106,13 +106,13 @@ void TemporarySummon::Update(uint32 update_diff, uint32 tick_diff)
if (!isInCombat())
{
if (m_timer <= update_diff)
if (m_timer <= diff)
{
UnSummon();
return;
}
else
m_timer -= update_diff;
m_timer -= diff;
}
else if (m_timer != m_lifetime)
m_timer = m_lifetime;
@ -129,13 +129,13 @@ void TemporarySummon::Update(uint32 update_diff, uint32 tick_diff)
if (!isInCombat() && isAlive() )
{
if (m_timer <= update_diff)
if (m_timer <= diff)
{
UnSummon();
return;
}
else
m_timer -= update_diff;
m_timer -= diff;
}
else if (m_timer != m_lifetime)
m_timer = m_lifetime;
@ -147,7 +147,7 @@ void TemporarySummon::Update(uint32 update_diff, uint32 tick_diff)
break;
}
Creature::Update(update_diff, tick_diff);
Creature::Update( diff );
}
void TemporarySummon::Summon(TempSummonType type, uint32 lifetime)

View file

@ -27,7 +27,7 @@ class TemporarySummon : public Creature
public:
explicit TemporarySummon(ObjectGuid summoner = ObjectGuid());
virtual ~TemporarySummon(){};
void Update(uint32 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
void Update(uint32 time);
void Summon(TempSummonType type, uint32 lifetime);
void MANGOS_DLL_SPEC UnSummon();
void SaveToDB();

View file

@ -31,7 +31,7 @@ Totem::Totem() : Creature(CREATURE_SUBTYPE_TOTEM)
m_type = TOTEM_PASSIVE;
}
void Totem::Update(uint32 update_diff, uint32 tick_diff)
void Totem::Update( uint32 time )
{
Unit *owner = GetOwner();
if (!owner || !owner->isAlive() || !isAlive())
@ -40,15 +40,15 @@ void Totem::Update(uint32 update_diff, uint32 tick_diff)
return;
}
if (m_duration <= update_diff)
if (m_duration <= time)
{
UnSummon(); // remove self
return;
}
else
m_duration -= update_diff;
m_duration -= time;
Creature::Update(update_diff, tick_diff);
Creature::Update( time );
}
void Totem::Summon(Unit* owner)

View file

@ -33,7 +33,7 @@ class Totem : public Creature
public:
explicit Totem();
virtual ~Totem(){};
void Update(uint32 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
void Update( uint32 time );
void Summon(Unit* owner);
void UnSummon();
uint32 GetSpell() const { return m_spells[0]; }

View file

@ -487,7 +487,7 @@ bool Transport::RemovePassenger(Player* passenger)
return true;
}
void Transport::Update(uint32 /*update_diff*/, uint32 /*tick_diff*/)
void Transport::Update(uint32 /*p_time*/)
{
if (m_WayPoints.size() <= 1)
return;

View file

@ -32,7 +32,7 @@ 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 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
void Update(uint32 p_time);
bool AddPassenger(Player* passenger);
bool RemovePassenger(Player* passenger);

View file

@ -291,7 +291,7 @@ Unit::~Unit()
MANGOS_ASSERT(m_deletedHolders.size() == 0);
}
void Unit::Update(uint32 update_diff, uint32 tick_diff)
void Unit::Update( uint32 p_time )
{
if(!IsInWorld())
return;
@ -306,21 +306,21 @@ void Unit::Update(uint32 update_diff, uint32 tick_diff)
// 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(update_diff);
_UpdateSpells(update_diff);
m_Events.Update( p_time );
_UpdateSpells( p_time );
CleanupDeletedAuras();
if (m_lastManaUseTimer)
{
if (update_diff >= m_lastManaUseTimer)
if (p_time >= m_lastManaUseTimer)
m_lastManaUseTimer = 0;
else
m_lastManaUseTimer -= update_diff;
m_lastManaUseTimer -= p_time;
}
if (CanHaveThreatList())
getThreatManager().UpdateForClient(update_diff);
getThreatManager().UpdateForClient(p_time);
// update combat timer only for players and pets
if (isInCombat() && (GetTypeId() == TYPEID_PLAYER || ((Creature*)this)->IsPet() || ((Creature*)this)->isCharmed()))
@ -331,24 +331,26 @@ void Unit::Update(uint32 update_diff, uint32 tick_diff)
if (m_HostileRefManager.isEmpty())
{
// m_CombatTimer set at aura start and it will be freeze until aura removing
if (m_CombatTimer <= update_diff)
if (m_CombatTimer <= p_time)
CombatStop();
else
m_CombatTimer -= update_diff;
m_CombatTimer -= p_time;
}
}
if (uint32 base_att = getAttackTimer(BASE_ATTACK))
setAttackTimer(BASE_ATTACK, (update_diff >= base_att ? 0 : base_att - update_diff) );
{
setAttackTimer(BASE_ATTACK, (p_time >= base_att ? 0 : base_att - p_time) );
}
// update abilities available only for fraction of time
UpdateReactives(update_diff);
UpdateReactives( p_time );
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(tick_diff); // movegens expected non freeze time diff
i_motionMaster.UpdateMotion(p_time);
}
bool Unit::haveOffhandWeapon() const

View file

@ -1168,7 +1168,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
void ApplyDiminishingAura(DiminishingGroup group, bool apply);
void ClearDiminishings() { m_Diminishing.clear(); }
void Update(uint32 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
virtual void Update( uint32 time );
void setAttackTimer(WeaponAttackType type, uint32 time) { m_attackTimer[type] = time; }
void resetAttackTimer(WeaponAttackType type = BASE_ATTACK);

View file

@ -56,9 +56,9 @@ void Vehicle::SetDeathState(DeathState s) // overwrite vir
Creature::SetDeathState(s);
}
void Vehicle::Update(uint32 update_diff, uint32 tick_diff)
void Vehicle::Update(uint32 diff)
{
Creature::Update(update_diff, tick_diff);
Creature::Update(diff);
}
bool Vehicle::Create(uint32 guidlow, Map *map, uint32 Entry, uint32 vehicleId, uint32 team)

View file

@ -36,7 +36,7 @@ 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 update_diff, uint32 tick_diff); // overwrite WorldObject::Update
void Update(uint32 diff); // overwrite virtual Creature::Update and Unit::Update
uint32 GetVehicleId() { return m_vehicleId; }
void SetVehicleId(uint32 vehicleid) { m_vehicleId = vehicleid; }

View file

@ -1381,7 +1381,7 @@ void World::DetectDBCLang()
}
/// Update the World !
void World::Update(uint32 time_, uint32 diff)
void World::Update(uint32 diff)
{
///- Update the different timers
for(int i = 0; i < WUPDATE_COUNT; ++i)
@ -1461,7 +1461,7 @@ void World::Update(uint32 time_, uint32 diff)
{
m_timers[WUPDATE_OBJECTS].Reset();
///- Update objects when the timer has passed (maps, transport, creatures,...)
sMapMgr.Update(time_, diff); // As interval = 0
sMapMgr.Update(diff); // As interval = 0
sBattleGroundMgr.Update(diff);
}

View file

@ -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 time_, uint32 diff);
void Update(uint32 diff);
void UpdateSessions( uint32 diff );

View file

@ -57,7 +57,7 @@ void WorldRunnable::run()
uint32 diff = getMSTimeDiff(realPrevTime,realCurrTime);
sWorld.Update(realCurrTime, diff);
sWorld.Update( diff );
realPrevTime = realCurrTime;
// diff (D0) include time of previous sleep (d0) + tick time (t0)

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "10716"
#define REVISION_NR "10717"
#endif // __REVISION_NR_H__