aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2017-12-10 12:39:37 +0100
committerfunjoker <funjoker109@gmail.com>2021-04-15 05:53:27 +0200
commite17e4e6f0700c7d950e1b2654c217ec8b28ae79e (patch)
tree8d78ebf4f2d95c6a18075840f6d02b62b4c6fcad /src/server/game/Entities
parent76b2d37259c8beb3cc1b698eb28fd7e068366724 (diff)
Core/Misc: Replace time(NULL) with GameTime::GetGameTime()
(cherry picked from commit 12701cb0c6c45eb105ad449eb9a56e76d84d691e) Conflicts: src/server/game/Achievements/AchievementMgr.cpp src/server/game/AuctionHouse/AuctionHouseMgr.cpp src/server/game/AuctionHouseBot/AuctionHouseBotBuyer.cpp src/server/game/AuctionHouseBot/AuctionHouseBotSeller.cpp src/server/game/Battlefield/Battlefield.cpp src/server/game/Battlefield/Zones/BattlefieldWG.cpp src/server/game/Battlegrounds/BattlegroundMgr.cpp src/server/game/Calendar/CalendarMgr.h src/server/game/DungeonFinding/LFGQueue.cpp src/server/game/Entities/Corpse/Corpse.cpp src/server/game/Entities/Creature/Creature.cpp src/server/game/Entities/Item/Item.cpp src/server/game/Entities/Pet/Pet.cpp src/server/game/Entities/Player/Player.cpp src/server/game/Entities/Unit/Unit.cpp src/server/game/Globals/ObjectMgr.cpp src/server/game/Grids/ObjectGridLoader.cpp src/server/game/Guilds/Guild.cpp src/server/game/Handlers/AuctionHouseHandler.cpp src/server/game/Handlers/BattlefieldHandler.cpp src/server/game/Handlers/CalendarHandler.cpp src/server/game/Handlers/CharacterHandler.cpp src/server/game/Handlers/ChatHandler.cpp src/server/game/Handlers/LFGHandler.cpp src/server/game/Handlers/MailHandler.cpp src/server/game/Handlers/MiscHandler.cpp src/server/game/Handlers/MovementHandler.cpp src/server/game/Handlers/PetHandler.cpp src/server/game/Handlers/QueryHandler.cpp src/server/game/Handlers/TicketHandler.cpp src/server/game/Instances/InstanceSaveMgr.cpp src/server/game/Server/WorldSession.cpp src/server/game/Server/WorldSocket.cpp src/server/game/Spells/Auras/SpellAuras.cpp src/server/game/Tickets/TicketMgr.cpp src/server/game/Tickets/TicketMgr.h src/server/game/World/World.cpp src/server/scripts/Commands/cs_gobject.cpp src/server/scripts/Commands/cs_instance.cpp src/server/scripts/Commands/cs_list.cpp src/server/scripts/Northrend/zone_wintergrasp.cpp src/server/scripts/Spells/spell_item.cpp
Diffstat (limited to 'src/server/game/Entities')
-rw-r--r--src/server/game/Entities/Corpse/Corpse.cpp8
-rw-r--r--src/server/game/Entities/Corpse/Corpse.h2
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp47
-rw-r--r--src/server/game/Entities/Creature/Creature.h7
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp34
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h17
-rw-r--r--src/server/game/Entities/Item/Item.cpp7
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp8
-rw-r--r--src/server/game/Entities/Player/Player.cpp70
-rw-r--r--src/server/game/Entities/Player/RestMgr.cpp3
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp2
11 files changed, 117 insertions, 88 deletions
diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp
index 77e9bcfa808..5fabe946041 100644
--- a/src/server/game/Entities/Corpse/Corpse.cpp
+++ b/src/server/game/Entities/Corpse/Corpse.cpp
@@ -20,6 +20,7 @@
#include "Corpse.h"
#include "DatabaseEnv.h"
#include "DB2Stores.h"
+#include "GameTime.h"
#include "Log.h"
#include "Map.h"
#include "ObjectAccessor.h"
@@ -36,7 +37,7 @@ Corpse::Corpse(CorpseType type) : WorldObject(type != CORPSE_BONES), m_type(type
m_updateFlag.Stationary = true;
- m_time = time(nullptr);
+ m_time = GameTime::GetGameTime();
lootRecipient = nullptr;
}
@@ -164,6 +165,11 @@ void Corpse::DeleteFromDB(ObjectGuid const& ownerGuid, CharacterDatabaseTransact
CharacterDatabase.ExecuteOrAppend(trans, stmt);
}
+void Corpse::ResetGhostTime()
+{
+ m_time = GameTime::GetGameTime();
+}
+
bool Corpse::LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields)
{
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h
index cbf57781fe1..2135fb3358d 100644
--- a/src/server/game/Entities/Corpse/Corpse.h
+++ b/src/server/game/Entities/Corpse/Corpse.h
@@ -102,7 +102,7 @@ class TC_GAME_API Corpse : public WorldObject, public GridObject<Corpse>
}
time_t const& GetGhostTime() const { return m_time; }
- void ResetGhostTime() { m_time = time(nullptr); }
+ void ResetGhostTime();
CorpseType GetType() const { return m_type; }
CellCoord const& GetCellCoord() const { return _cellCoord; }
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 3763b166890..c7fe527aade 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -56,6 +56,9 @@
#include <G3D/g3dmath.h>
#include <sstream>
+VendorItemCount::VendorItemCount(uint32 _item, uint32 _count)
+ : itemId(_item), count(_count), lastIncrementTime(GameTime::GetGameTime()) { }
+
bool VendorItem::IsGoldRequired(ItemTemplate const* pProto) const
{
return pProto->GetFlags2() & ITEM_FLAG2_DONT_IGNORE_BUY_PRICE || !ExtendedCost;
@@ -410,7 +413,7 @@ void Creature::RemoveCorpse(bool setSpawnTime, bool destroyForNearbyPlayers)
if (m_respawnCompatibilityMode)
{
- m_corpseRemoveTime = time(nullptr);
+ m_corpseRemoveTime = GameTime::GetGameTime();
setDeathState(DEAD);
RemoveAllAuras();
loot.clear();
@@ -423,7 +426,7 @@ void Creature::RemoveCorpse(bool setSpawnTime, bool destroyForNearbyPlayers)
// Should get removed later, just keep "compatibility" with scripts
if (setSpawnTime)
- m_respawnTime = std::max<time_t>(time(nullptr) + respawnDelay, m_respawnTime);
+ m_respawnTime = std::max<time_t>(GameTime::GetGameTime() + respawnDelay, m_respawnTime);
// if corpse was removed during falling, the falling will continue and override relocation to respawn position
if (IsFalling())
@@ -456,7 +459,7 @@ void Creature::RemoveCorpse(bool setSpawnTime, bool destroyForNearbyPlayers)
if (setSpawnTime)
{
uint32 respawnDelay = m_respawnDelay;
- m_respawnTime = std::max<time_t>(time(nullptr) + respawnDelay, m_respawnTime);
+ m_respawnTime = std::max<time_t>(GameTime::GetGameTime() + respawnDelay, m_respawnTime);
SaveRespawnTime(0, false);
}
@@ -695,7 +698,7 @@ void Creature::Update(uint32 diff)
break;
case DEAD:
{
- time_t now = time(nullptr);
+ time_t now = GameTime::GetGameTime();
if (m_respawnTime <= now)
{
// First check if there are any scripts that object to us respawning
@@ -752,7 +755,7 @@ void Creature::Update(uint32 diff)
else
m_groupLootTimer -= diff;
}
- else if (m_corpseRemoveTime <= time(nullptr))
+ else if (m_corpseRemoveTime <= GameTime::GetGameTime())
{
RemoveCorpse(false);
TC_LOG_DEBUG("entities.unit", "Removing corpse... %u ", GetEntry());
@@ -1698,7 +1701,7 @@ bool Creature::LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap,
// Is the creature script objecting to us spawning? If yes, delay by a little bit (then re-check in ::Update)
if (m_respawnCompatibilityMode && !m_respawnTime && !sScriptMgr->CanSpawn(spawnId, GetEntry(), GetCreatureData(), map))
- m_respawnTime = time(nullptr)+urand(4,7);
+ m_respawnTime = GameTime::GetGameTime()+urand(4,7);
if (m_respawnTime) // respawn on Update
{
@@ -1851,7 +1854,7 @@ bool Creature::IsInvisibleDueToDespawn() const
if (Unit::IsInvisibleDueToDespawn())
return true;
- if (IsAlive() || isDying() || m_corpseRemoveTime > time(nullptr))
+ if (IsAlive() || isDying() || m_corpseRemoveTime > GameTime::GetGameTime())
return false;
return true;
@@ -1976,7 +1979,7 @@ void Creature::setDeathState(DeathState s)
if (s == JUST_DIED)
{
- m_corpseRemoveTime = time(nullptr) + m_corpseDelay;
+ m_corpseRemoveTime = GameTime::GetGameTime() + m_corpseDelay;
uint32 respawnDelay = m_respawnDelay;
if (uint32 scalingMode = sWorld->getIntConfig(CONFIG_RESPAWN_DYNAMICMODE))
@@ -1987,14 +1990,14 @@ void Creature::setDeathState(DeathState s)
if (IsDungeonBoss() && !m_respawnDelay)
m_respawnTime = std::numeric_limits<time_t>::max(); // never respawn in this instance
else
- m_respawnTime = time(nullptr) + respawnDelay + m_corpseDelay;
+ m_respawnTime = GameTime::GetGameTime() + respawnDelay + m_corpseDelay;
}
else
{
if (IsDungeonBoss() && !m_respawnDelay)
m_respawnTime = std::numeric_limits<time_t>::max(); // never respawn in this instance
else
- m_respawnTime = time(nullptr) + respawnDelay;
+ m_respawnTime = GameTime::GetGameTime() + respawnDelay;
}
// always save boss respawn time at death to prevent crash cheating
@@ -2184,7 +2187,7 @@ void Creature::ForcedDespawn(uint32 timeMSToDespawn, Seconds const& forceRespawn
uint32 respawnDelay = m_respawnDelay;
if (uint32 scalingMode = sWorld->getIntConfig(CONFIG_RESPAWN_DYNAMICMODE))
GetMap()->ApplyDynamicModeRespawnScaling(this, m_spawnId, respawnDelay, scalingMode);
- m_respawnTime = time(nullptr) + respawnDelay;
+ m_respawnTime = GameTime::GetGameTime() + respawnDelay;
SaveRespawnTime();
}
@@ -2468,7 +2471,7 @@ void Creature::SaveRespawnTime(uint32 forceDelay, bool savetodb)
return;
}
- time_t thisRespawnTime = forceDelay ? time(nullptr) + forceDelay : m_respawnTime;
+ time_t thisRespawnTime = forceDelay ? GameTime::GetGameTime() + forceDelay : m_respawnTime;
GetMap()->SaveRespawnTime(SPAWN_TYPE_CREATURE, m_spawnId, GetEntry(), thisRespawnTime, GetMap()->GetZoneId(GetPhaseShift(), GetHomePosition()), Trinity::ComputeGridCoord(GetHomePosition().GetPositionX(), GetHomePosition().GetPositionY()).GetId(), savetodb && m_creatureData && m_creatureData->dbData);
}
@@ -2670,13 +2673,18 @@ bool Creature::HasSpell(uint32 spellID) const
time_t Creature::GetRespawnTimeEx() const
{
- time_t now = time(nullptr);
+ time_t now = GameTime::GetGameTime();
if (m_respawnTime > now)
return m_respawnTime;
else
return now;
}
+void Creature::SetRespawnTime(uint32 respawn)
+{
+ m_respawnTime = respawn ? GameTime::GetGameTime() + respawn : 0;
+}
+
void Creature::GetRespawnPosition(float &x, float &y, float &z, float* ori, float* dist) const
{
if (m_creatureData)
@@ -2707,7 +2715,7 @@ void Creature::AllLootRemovedFromCorpse()
if (LootTemplates_Skinning.HaveLootFor(GetCreatureTemplate()->SkinLootId))
AddUnitFlag(UNIT_FLAG_SKINNABLE);
- time_t now = time(nullptr);
+ time_t now = GameTime::GetGameTime();
// Do not reset corpse remove time if corpse is already removed
if (m_corpseRemoveTime <= now)
return;
@@ -2867,7 +2875,7 @@ uint32 Creature::GetVendorItemCurrentCount(VendorItem const* vItem)
VendorItemCount* vCount = &*itr;
- time_t ptime = time(nullptr);
+ time_t ptime = GameTime::GetGameTime();
if (time_t(vCount->lastIncrementTime + vItem->incrtime) <= ptime)
if (ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(vItem->item))
@@ -2905,7 +2913,7 @@ uint32 Creature::UpdateVendorItemCurrentCount(VendorItem const* vItem, uint32 us
VendorItemCount* vCount = &*itr;
- time_t ptime = time(nullptr);
+ time_t ptime = GameTime::GetGameTime();
if (time_t(vCount->lastIncrementTime + vItem->incrtime) <= ptime)
if (ItemTemplate const* pProto = sObjectMgr->GetItemTemplate(vItem->item))
@@ -3235,7 +3243,12 @@ bool Creature::IsMovementPreventedByCasting() const
void Creature::StartPickPocketRefillTimer()
{
- _pickpocketLootRestore = time(nullptr) + sWorld->getIntConfig(CONFIG_CREATURE_PICKPOCKET_REFILL);
+ _pickpocketLootRestore = GameTime::GetGameTime() + sWorld->getIntConfig(CONFIG_CREATURE_PICKPOCKET_REFILL);
+}
+
+bool Creature::CanGeneratePickPocketLoot() const
+{
+ return _pickpocketLootRestore <= GameTime::GetGameTime();
}
void Creature::SetTextRepeatId(uint8 textGroup, uint8 id)
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index 3fb716d85d8..6c8ebd2db22 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -40,8 +40,7 @@ enum MovementGeneratorType : uint8;
struct VendorItemCount
{
- VendorItemCount(uint32 _item, uint32 _count)
- : itemId(_item), count(_count), lastIncrementTime(time(nullptr)) { }
+ VendorItemCount(uint32 _item, uint32 _count);
uint32 itemId;
uint32 count;
@@ -192,7 +191,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
Loot loot;
void StartPickPocketRefillTimer();
void ResetPickPocketRefillTimer() { _pickpocketLootRestore = 0; }
- bool CanGeneratePickPocketLoot() const { return _pickpocketLootRestore <= time(nullptr); }
+ bool CanGeneratePickPocketLoot() const;
ObjectGuid GetLootRecipientGUID() const { return m_lootRecipient; }
Player* GetLootRecipient() const;
Group* GetLootRecipientGroup() const;
@@ -240,7 +239,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
time_t const& GetRespawnTime() const { return m_respawnTime; }
time_t GetRespawnTimeEx() const;
- void SetRespawnTime(uint32 respawn) { m_respawnTime = respawn ? time(nullptr) + respawn : 0; }
+ void SetRespawnTime(uint32 respawn);
void Respawn(bool force = false);
void SaveRespawnTime(uint32 forceDelay = 0, bool savetodb = true) override;
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index a91ec5c23ff..13ecb688257 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -589,7 +589,7 @@ void GameObject::Update(uint32 diff)
case GAMEOBJECT_TYPE_FISHINGNODE:
{
// fishing code (bobber ready)
- if (time(nullptr) > m_respawnTime - FISHING_BOBBER_READY_TIME)
+ if (GameTime::GetGameTime() > m_respawnTime - FISHING_BOBBER_READY_TIME)
{
// splash bobber (bobber ready now)
Unit* caster = GetOwner();
@@ -623,7 +623,7 @@ void GameObject::Update(uint32 diff)
{
if (m_respawnTime > 0) // timer on
{
- time_t now = time(nullptr);
+ time_t now = GameTime::GetGameTime();
if (m_respawnTime <= now) // timer expired
{
ObjectGuid dbtableHighGuid = ObjectGuid::Create<HighGuid::GameObject>(GetMapId(), GetEntry(), m_spawnId);
@@ -903,7 +903,7 @@ void GameObject::Update(uint32 diff)
uint32 respawnDelay = m_respawnDelayTime;
if (uint32 scalingMode = sWorld->getIntConfig(CONFIG_RESPAWN_DYNAMICMODE))
GetMap()->ApplyDynamicModeRespawnScaling(this, this->m_spawnId, respawnDelay, scalingMode);
- m_respawnTime = time(nullptr) + respawnDelay;
+ m_respawnTime = GameTime::GetGameTime() + respawnDelay;
// if option not set then object will be saved at grid unload
// Otherwise just save respawn time to map object memory
@@ -1139,7 +1139,7 @@ bool GameObject::LoadFromDB(ObjectGuid::LowType spawnId, Map* map, bool addToMap
m_respawnTime = GetMap()->GetGORespawnTime(m_spawnId);
// ready to respawn
- if (m_respawnTime && m_respawnTime <= time(nullptr))
+ if (m_respawnTime && m_respawnTime <= GameTime::GetGameTime())
{
m_respawnTime = 0;
GetMap()->RemoveRespawnTime(SPAWN_TYPE_GAMEOBJECT, m_spawnId);
@@ -1246,7 +1246,7 @@ Unit* GameObject::GetOwner() const
void GameObject::SaveRespawnTime(uint32 forceDelay, bool savetodb)
{
- if (m_goData && m_respawnTime > time(nullptr) && m_spawnedByDefault)
+ if (m_goData && m_respawnTime > GameTime::GetGameTime() && m_spawnedByDefault)
{
if (m_respawnCompatibilityMode)
{
@@ -1254,7 +1254,7 @@ void GameObject::SaveRespawnTime(uint32 forceDelay, bool savetodb)
return;
}
- uint32 thisRespawnTime = forceDelay ? time(nullptr) + forceDelay : m_respawnTime;
+ uint32 thisRespawnTime = forceDelay ? GameTime::GetGameTime() + forceDelay : m_respawnTime;
GetMap()->SaveRespawnTime(SPAWN_TYPE_GAMEOBJECT, m_spawnId, GetEntry(), thisRespawnTime, GetZoneId(), Trinity::ComputeGridCoord(GetPositionX(), GetPositionY()).GetId(), m_goData->dbData ? savetodb : false);
}
}
@@ -1319,11 +1319,26 @@ uint8 GameObject::GetLevelForTarget(WorldObject const* target) const
return 1;
}
+time_t GameObject::GetRespawnTimeEx() const
+{
+ time_t now = GameTime::GetGameTime();
+ if (m_respawnTime > now)
+ return m_respawnTime;
+ else
+ return now;
+}
+
+void GameObject::SetRespawnTime(int32 respawn)
+{
+ m_respawnTime = respawn > 0 ? GameTime::GetGameTime() + respawn : 0;
+ m_respawnDelayTime = respawn > 0 ? respawn : 0;
+}
+
void GameObject::Respawn()
{
if (m_spawnedByDefault && m_respawnTime > 0)
{
- m_respawnTime = time(nullptr);
+ m_respawnTime = GameTime::GetGameTime();
GetMap()->RemoveRespawnTime(SPAWN_TYPE_GAMEOBJECT, m_spawnId, true);
}
}
@@ -2454,6 +2469,11 @@ void GameObject::SetLootState(LootState state, Unit* unit)
}
}
+void GameObject::SetLootGenerationTime()
+{
+ m_lootGenerationTime = GameTime::GetGameTime();
+}
+
void GameObject::SetGoState(GOState state)
{
SetUpdateFieldValue(m_values.ModifyValue(&GameObject::m_gameObjectData).ModifyValue(&UF::GameObjectData::State), state);
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index a0700a24fc5..ea4d55f963d 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -150,20 +150,9 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
uint32 GetSpellId() const { return m_spellId;}
time_t GetRespawnTime() const { return m_respawnTime; }
- time_t GetRespawnTimeEx() const
- {
- time_t now = time(nullptr);
- if (m_respawnTime > now)
- return m_respawnTime;
- else
- return now;
- }
+ time_t GetRespawnTimeEx() const;
- void SetRespawnTime(int32 respawn)
- {
- m_respawnTime = respawn > 0 ? time(nullptr) + respawn : 0;
- m_respawnDelayTime = respawn > 0 ? respawn : 0;
- }
+ void SetRespawnTime(int32 respawn);
void Respawn();
bool isSpawned() const
{
@@ -210,7 +199,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void AddLootMode(uint16 lootMode) { m_LootMode |= lootMode; }
void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
void ResetLootMode() { m_LootMode = LOOT_MODE_DEFAULT; }
- void SetLootGenerationTime() { m_lootGenerationTime = time(nullptr); }
+ void SetLootGenerationTime();
uint32 GetLootGenerationTime() const { return m_lootGenerationTime; }
void AddToSkillupList(ObjectGuid const& PlayerGuidLow) { m_SkillupList.insert(PlayerGuidLow); }
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp
index 89426fd40d2..a955c5904ca 100644
--- a/src/server/game/Entities/Item/Item.cpp
+++ b/src/server/game/Entities/Item/Item.cpp
@@ -27,6 +27,7 @@
#include "DatabaseEnv.h"
#include "DB2Stores.h"
#include "GameTables.h"
+#include "GameTime.h"
#include "ItemEnchantmentMgr.h"
#include "ItemPackets.h"
#include "Log.h"
@@ -432,7 +433,7 @@ Item::Item()
m_container = nullptr;
m_lootGenerated = false;
mb_in_trade = false;
- m_lastPlayedTimeUpdate = time(nullptr);
+ m_lastPlayedTimeUpdate = GameTime::GetGameTime();
m_paidMoney = 0;
m_paidExtendedCost = 0;
@@ -1743,7 +1744,7 @@ void Item::UpdatePlayedTime(Player* owner)
// Get current played time
uint32 current_playtime = m_itemData->CreatePlayedTime;
// Calculate time elapsed since last played time update
- time_t curtime = time(nullptr);
+ time_t curtime = GameTime::GetGameTime();
uint32 elapsed = uint32(curtime - m_lastPlayedTimeUpdate);
uint32 new_playtime = current_playtime + elapsed;
// Check if the refund timer has expired yet
@@ -1764,7 +1765,7 @@ void Item::UpdatePlayedTime(Player* owner)
uint32 Item::GetPlayedTime()
{
- time_t curtime = time(nullptr);
+ time_t curtime = GameTime::GetGameTime();
uint32 elapsed = uint32(curtime - m_lastPlayedTimeUpdate);
return *m_itemData->CreatePlayedTime + elapsed;
}
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index d7aef0df8c4..d66e0b859e6 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -235,7 +235,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
break;
}
- SetPetNameTimestamp(uint32(time(nullptr)));
+ SetPetNameTimestamp(uint32(GameTime::GetGameTime()));
SetCreatorGUID(owner->GetGUID());
InitStatsForLevel(petlevel);
@@ -317,7 +317,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
owner->SetMinion(this, true);
map->AddToMap(ToCreature());
- uint32 timediff = uint32(time(nullptr) - fields[13].GetUInt32());
+ uint32 timediff = uint32(GameTime::GetGameTime() - fields[13].GetUInt32());
_LoadAuras(timediff);
// load action bar, if data broken will fill later by default spells.
@@ -472,7 +472,7 @@ void Pet::SavePetToDB(PetSaveMode mode)
stmt->setString(12, GenerateActionBarData());
- stmt->setUInt32(13, time(nullptr));
+ stmt->setUInt32(13, GameTime::GetGameTime());
stmt->setUInt32(14, m_unitData->CreatedBySpell);
stmt->setUInt8(15, getPetType());
stmt->setUInt16(16, m_petSpecialization);
@@ -556,7 +556,7 @@ void Pet::Update(uint32 diff)
{
case CORPSE:
{
- if (getPetType() != HUNTER_PET || m_corpseRemoveTime <= time(nullptr))
+ if (getPetType() != HUNTER_PET || m_corpseRemoveTime <= GameTime::GetGameTime())
{
Remove(PET_SAVE_NOT_IN_SLOT); //hunters' pets never get removed because of death, NEVER!
return;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 2ee7b488f13..0fbb9ceaa6b 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -230,7 +230,7 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this)
m_bgBattlegroundQueueID[j].joinTime = 0;
}
- m_logintime = time(nullptr);
+ m_logintime = GameTime::GetGameTime();
m_Last_tick = m_logintime;
m_Played_time[PLAYED_TIME_TOTAL] = 0;
m_Played_time[PLAYED_TIME_LEVEL] = 0;
@@ -288,7 +288,7 @@ Player::Player(WorldSession* session) : Unit(true), m_sceneMgr(this)
m_spellPenetrationItemMod = 0;
// Honor System
- m_lastHonorUpdateTime = time(nullptr);
+ m_lastHonorUpdateTime = GameTime::GetGameTime();
m_IsBGRandomWinner = false;
@@ -495,7 +495,7 @@ bool Player::Create(ObjectGuid::LowType guidlow, WorldPackets::Character::Charac
SetCreateCurrency(CURRENCY_TYPE_JUSTICE_POINTS, sWorld->getIntConfig(CONFIG_CURRENCY_START_JUSTICE_POINTS));
// Played time
- m_Last_tick = time(nullptr);
+ m_Last_tick = GameTime::GetGameTime();
m_Played_time[PLAYED_TIME_TOTAL] = 0;
m_Played_time[PLAYED_TIME_LEVEL] = 0;
@@ -911,7 +911,7 @@ void Player::Update(uint32 p_time)
return;
// undelivered mail
- if (m_nextMailDelivereTime && m_nextMailDelivereTime <= time(nullptr))
+ if (m_nextMailDelivereTime && m_nextMailDelivereTime <= GameTime::GetGameTime())
{
SendNewMail();
++unReadMails;
@@ -933,7 +933,7 @@ void Player::Update(uint32 p_time)
Unit::Update(p_time);
SetCanDelayTeleport(false);
- time_t now = time(nullptr);
+ time_t now = GameTime::GetGameTime();
UpdatePvPFlag(now);
@@ -2653,7 +2653,7 @@ void Player::UpdateNextMailTimeAndUnreads()
{
// calculate next delivery time (min. from non-delivered mails
// and recalculate unReadMail
- time_t cTime = time(nullptr);
+ time_t cTime = GameTime::GetGameTime();
m_nextMailDelivereTime = 0;
unReadMails = 0;
for (PlayerMails::iterator itr = m_mail.begin(); itr != m_mail.end(); ++itr)
@@ -2670,7 +2670,7 @@ void Player::UpdateNextMailTimeAndUnreads()
void Player::AddNewMailDeliverTime(time_t deliver_time)
{
- if (deliver_time <= time(nullptr)) // ready now
+ if (deliver_time <= GameTime::GetGameTime()) // ready now
{
++unReadMails;
SendNewMail();
@@ -3458,7 +3458,7 @@ bool Player::ResetTalents(bool noCost)
UpdateCriteria(CRITERIA_TYPE_NUMBER_OF_TALENT_RESETS, 1);
SetTalentResetCost(cost);
- SetTalentResetTime(time(nullptr));
+ SetTalentResetTime(GameTime::GetGameTime());
}
/* when prev line will dropped use next line
@@ -4213,7 +4213,7 @@ void Player::DeleteOldCharacters(uint32 keepDays)
TC_LOG_INFO("entities.player", "Player::DeleteOldCharacters: Deleting all characters which have been deleted %u days before...", keepDays);
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_CHAR_OLD_CHARS);
- stmt->setUInt32(0, uint32(time(nullptr) - time_t(keepDays * DAY)));
+ stmt->setUInt32(0, uint32(GameTime::GetGameTime() - time_t(keepDays * DAY)));
PreparedQueryResult result = CharacterDatabase.Query(stmt);
if (result)
@@ -6451,8 +6451,8 @@ void Player::RewardReputation(Quest const* quest)
void Player::UpdateHonorFields()
{
/// called when rewarding honor and at each save
- time_t now = time_t(time(nullptr));
- time_t today = time_t(time(nullptr) / DAY) * DAY;
+ time_t now = GameTime::GetGameTime();
+ time_t today = GameTime::GetGameTime() / DAY * DAY;
if (m_lastHonorUpdateTime < today)
{
@@ -8739,7 +8739,7 @@ void Player::SendLoot(ObjectGuid guid, LootType loot_type, bool aeLooting/* = fa
// loot was generated and respawntime has passed since then, allow to recreate loot
// to avoid bugs, this rule covers spawned gameobjects only
- if (go->isSpawnedByDefault() && go->getLootState() == GO_ACTIVATED && !go->loot.isLooted() && go->GetLootGenerationTime() + go->GetRespawnDelay() < time(nullptr))
+ if (go->isSpawnedByDefault() && go->getLootState() == GO_ACTIVATED && !go->loot.isLooted() && go->GetLootGenerationTime() + go->GetRespawnDelay() < GameTime::GetGameTime())
go->SetLootState(GO_READY);
if (go->getLootState() == GO_READY)
@@ -9771,7 +9771,7 @@ void Player::SendBattlefieldWorldStates() const
{
SendUpdateWorldState(BATTLEFIELD_WG_WORLD_STATE_ACTIVE, wg->IsWarTime() ? 0 : 1);
uint32 timer = wg->IsWarTime() ? 0 : (wg->GetTimer() / 1000); // 0 - Time to next battle
- SendUpdateWorldState(ClockWorldState[1], uint32(time(nullptr) + timer));
+ SendUpdateWorldState(ClockWorldState[1], uint32(GameTime::GetGameTime() + timer));
}
}
@@ -9781,8 +9781,8 @@ void Player::SendBattlefieldWorldStates() const
{
SendUpdateWorldState(TB_WS_FACTION_CONTROLLING, uint32(tb->GetDefenderTeam() + 1));
uint32 timer = tb->GetTimer() / 1000;
- SendUpdateWorldState(TB_WS_TIME_BATTLE_END, uint32(tb->IsWarTime() ? uint32(time(nullptr) + timer) : 0));
- SendUpdateWorldState(TB_WS_TIME_NEXT_BATTLE, uint32(!tb->IsWarTime() ? uint32(time(nullptr) + timer) : 0));
+ SendUpdateWorldState(TB_WS_TIME_BATTLE_END, uint32(tb->IsWarTime() ? uint32(GameTime::GetGameTime() + timer) : 0));
+ SendUpdateWorldState(TB_WS_TIME_NEXT_BATTLE, uint32(!tb->IsWarTime() ? uint32(GameTime::GetGameTime() + timer) : 0));
}
}
}
@@ -13847,7 +13847,7 @@ void Player::AddItemToBuyBackSlot(Item* pItem)
GetName().c_str(), GetGUID().ToString().c_str(), pItem->GetEntry(), slot);
m_items[slot] = pItem;
- time_t base = time(nullptr);
+ time_t base = GameTime::GetGameTime();
uint32 etime = uint32(base - m_logintime + (30 * 3600));
uint32 eslot = slot - BUYBACK_SLOT_START;
@@ -15585,7 +15585,7 @@ void Player::AddQuest(Quest const* quest, Object* questGiver)
AddTimedQuest(quest_id);
questStatusData.Timer = limittime * IN_MILLISECONDS;
- qtime = static_cast<uint32>(time(nullptr)) + limittime;
+ qtime = static_cast<uint32>(GameTime::GetGameTime()) + limittime;
}
else
questStatusData.Timer = 0;
@@ -18579,8 +18579,8 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder* holder)
SaveRecallPosition();
- time_t now = time(nullptr);
- time_t logoutTime = fields.logout_time;
+ time_t now = GameTime::GetGameTime();
+ time_t logoutTime = time_t(fields.logout_time);
// since last logout (in seconds)
uint32 time_diff = uint32(now - logoutTime); //uint64 is excessive for a time_diff in seconds.. uint32 allows for 136~ year difference.
@@ -20305,7 +20305,7 @@ void Player::SendRaidInfo()
{
WorldPackets::Instance::InstanceInfo instanceInfo;
- time_t now = time(nullptr);
+ time_t now = GameTime::GetGameTime();
for (auto difficultyItr = m_boundInstances.begin(); difficultyItr != m_boundInstances.end(); ++difficultyItr)
{
@@ -20659,7 +20659,7 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_TOTAL]);
stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_LEVEL]);
stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_XP)));
- stmt->setUInt64(index++, time(nullptr));
+ stmt->setUInt64(index++, GameTime::GetGameTime());
stmt->setUInt8(index++, (HasPlayerFlag(PLAYER_FLAGS_RESTING) ? 1 : 0));
//save, far from tavern/city
//save, but in tavern/city
@@ -20801,7 +20801,7 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_TOTAL]);
stmt->setUInt32(index++, m_Played_time[PLAYED_TIME_LEVEL]);
stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_XP)));
- stmt->setUInt64(index++, time(nullptr));
+ stmt->setUInt64(index++, GameTime::GetGameTime());
stmt->setUInt8(index++, (HasPlayerFlag(PLAYER_FLAGS_RESTING) ? 1 : 0));
//save, far from tavern/city
//save, but in tavern/city
@@ -20963,7 +20963,7 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
loginStmt->setUInt32(3, realm.Id.Realm);
loginStmt->setString(4, GetName());
loginStmt->setUInt64(5, GetGUID().GetCounter());
- loginStmt->setUInt32(6, time(nullptr));
+ loginStmt->setUInt32(6, GameTime::GetGameTime());
loginTransaction->Append(loginStmt);
// save pet (hunter pet level and experience and all type pets health/mana).
@@ -21794,7 +21794,7 @@ void Player::UpdateSpeakTime()
if (GetSession()->HasPermission(rbac::RBAC_PERM_SKIP_CHECK_CHAT_SPAM))
return;
- time_t current = time(nullptr);
+ time_t current = GameTime::GetGameTime();
if (m_speakTime > current)
{
uint32 max_count = sWorld->getIntConfig(CONFIG_CHATFLOOD_MESSAGE_COUNT);
@@ -23648,7 +23648,7 @@ void Player::UpdatePvPState(bool onlyFFA)
else // in friendly area
{
if (IsPvP() && !HasPlayerFlag(PLAYER_FLAGS_IN_PVP) && !pvpInfo.EndTimer)
- pvpInfo.EndTimer = time(nullptr); // start toggle-off
+ pvpInfo.EndTimer = GameTime::GetGameTime(); // start toggle-off
}
}
@@ -23668,7 +23668,7 @@ void Player::UpdatePvP(bool state, bool _override)
}
else
{
- pvpInfo.EndTimer = time(nullptr);
+ pvpInfo.EndTimer = GameTime::GetGameTime();
SetPvP(state);
}
}
@@ -25019,13 +25019,13 @@ void Player::SetDailyQuestStatus(uint32 quest_id)
if (!qQuest->IsDFQuest())
{
AddDynamicUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::DailyQuestsCompleted)) = quest_id;
- m_lastDailyQuestTime = time(nullptr); // last daily quest time
+ m_lastDailyQuestTime = GameTime::GetGameTime(); // last daily quest time
m_DailyQuestChanged = true;
}
else
{
m_DFQuests.insert(quest_id);
- m_lastDailyQuestTime = time(nullptr);
+ m_lastDailyQuestTime = GameTime::GetGameTime();
m_DailyQuestChanged = true;
}
}
@@ -25419,7 +25419,7 @@ void Player::UpdateForQuestWorldObjects()
bool Player::HasSummonPending() const
{
- return m_summon_expire >= time(nullptr);
+ return m_summon_expire >= GameTime::GetGameTime();
}
void Player::SendSummonRequestFrom(Unit* summoner)
@@ -25435,7 +25435,7 @@ void Player::SendSummonRequestFrom(Unit* summoner)
if (HasAura(23445))
return;
- m_summon_expire = time(nullptr) + MAX_PLAYER_SUMMON_DELAY;
+ m_summon_expire = GameTime::GetGameTime() + MAX_PLAYER_SUMMON_DELAY;
m_summon_location.WorldRelocate(*summoner);
WorldPackets::Movement::SummonRequest summonRequest;
@@ -25454,7 +25454,7 @@ void Player::SummonIfPossible(bool agree)
}
// expire and auto declined
- if (m_summon_expire < time(nullptr))
+ if (m_summon_expire < GameTime::GetGameTime())
return;
// stop taxi flight at summon
@@ -25895,7 +25895,7 @@ uint32 Player::GetCorpseReclaimDelay(bool pvp) const
else if (!sWorld->getBoolConfig(CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE))
return 0;
- time_t now = time(nullptr);
+ time_t now = GameTime::GetGameTime();
// 0..2 full period
// should be ceil(x)-1 but not floor(x)
uint64 count = (now < m_deathExpireTime - 1) ? (m_deathExpireTime - 1 - now) / DEATH_EXPIRE_STEP : 0;
@@ -25910,7 +25910,7 @@ void Player::UpdateCorpseReclaimDelay()
(!pvp && !sWorld->getBoolConfig(CONFIG_DEATH_CORPSE_RECLAIM_DELAY_PVE)))
return;
- time_t now = time(nullptr);
+ time_t now = GameTime::GetGameTime();
if (now < m_deathExpireTime)
{
@@ -25954,7 +25954,7 @@ int32 Player::CalculateCorpseReclaimDelay(bool load) const
}
time_t expected_time = corpse->GetGhostTime() + copseReclaimDelay[count];
- time_t now = time(nullptr);
+ time_t now = GameTime::GetGameTime();
if (now >= expected_time)
return -1;
@@ -28592,7 +28592,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy
pet->SetPetNextLevelExperience(1000);
pet->SetFullHealth();
pet->SetFullPower(POWER_MANA);
- pet->SetPetNameTimestamp(uint32(time(nullptr)));
+ pet->SetPetNameTimestamp(uint32(GameTime::GetGameTime()));
break;
default:
break;
diff --git a/src/server/game/Entities/Player/RestMgr.cpp b/src/server/game/Entities/Player/RestMgr.cpp
index 13083a0a74a..8d7efea8be9 100644
--- a/src/server/game/Entities/Player/RestMgr.cpp
+++ b/src/server/game/Entities/Player/RestMgr.cpp
@@ -16,6 +16,7 @@
*/
#include "RestMgr.h"
+#include "GameTime.h"
#include "Log.h"
#include "Player.h"
#include "Random.h"
@@ -100,7 +101,7 @@ void RestMgr::SetRestFlag(RestFlag restFlag, uint32 triggerID)
if (!oldRestMask && _restFlagMask) // only set flag/time on the first rest state
{
- _restTime = time(nullptr);
+ _restTime = GameTime::GetGameTime();
_player->AddPlayerFlag(PLAYER_FLAGS_RESTING);
}
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index 2e28c5bef97..e3c088700af 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -12211,7 +12211,7 @@ bool Unit::SetCharmedBy(Unit* charmer, CharmType type, AuraApplication const* au
GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
// if charmed two demons the same session, the 2nd gets the 1st one's name
- SetPetNameTimestamp(uint32(time(nullptr)));
+ SetPetNameTimestamp(uint32(GameTime::GetGameTime()));
}
}
playerCharmer->CharmSpellInitialize();