feat(Core/Time): Implement saparated manager for game time (#8630)

This commit is contained in:
Kargatum
2022-01-24 17:55:00 +07:00
committed by GitHub
parent 12da792a90
commit 8b7df23f06
129 changed files with 1147 additions and 817 deletions

View File

@@ -34,6 +34,7 @@
#include "DisableMgr.h"
#include "DynamicVisibility.h"
#include "Formulas.h"
#include "GameTime.h"
#include "GridNotifiersImpl.h"
#include "Group.h"
#include "InstanceSaveMgr.h"
@@ -321,12 +322,12 @@ Unit::Unit(bool isWorldObject) : WorldObject(isWorldObject),
bool GlobalCooldownMgr::HasGlobalCooldown(SpellInfo const* spellInfo) const
{
GlobalCooldownList::const_iterator itr = m_GlobalCooldowns.find(spellInfo->StartRecoveryCategory);
return itr != m_GlobalCooldowns.end() && itr->second.duration && getMSTimeDiff(itr->second.cast_time, World::GetGameTimeMS()) < itr->second.duration;
return itr != m_GlobalCooldowns.end() && itr->second.duration && getMSTimeDiff(itr->second.cast_time, GameTime::GetGameTimeMS().count()) < itr->second.duration;
}
void GlobalCooldownMgr::AddGlobalCooldown(SpellInfo const* spellInfo, uint32 gcd)
{
m_GlobalCooldowns[spellInfo->StartRecoveryCategory] = GlobalCooldown(gcd, World::GetGameTimeMS());
m_GlobalCooldowns[spellInfo->StartRecoveryCategory] = GlobalCooldown(gcd, GameTime::GetGameTimeMS().count());
}
void GlobalCooldownMgr::CancelGlobalCooldown(SpellInfo const* spellInfo)
@@ -499,7 +500,7 @@ void Unit::SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 T
data << uint8(0); // new in 3.1
data << GetPositionX() << GetPositionY() << GetPositionZ();
data << World::GetGameTimeMS();
data << GameTime::GetGameTimeMS().count();
data << uint8(0);
data << uint32(sf);
data << TransitTime; // Time in between points
@@ -995,7 +996,7 @@ uint32 Unit::DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage
{
// Part of Evade mechanics. DoT's and Thorns / Retribution Aura do not contribute to this
if (damagetype != DOT && damage > 0 && !victim->GetOwnerGUID().IsPlayer() && (!spellProto || !spellProto->HasAura(SPELL_AURA_DAMAGE_SHIELD)))
victim->ToCreature()->SetLastDamagedTime(sWorld->GetGameTime() + MAX_AGGRO_RESET_TIME);
victim->ToCreature()->SetLastDamagedTime(GameTime::GetGameTime().count() + MAX_AGGRO_RESET_TIME);
if (attacker)
victim->AddThreat(attacker, float(damage), damageSchoolMask, spellProto);
@@ -5358,7 +5359,7 @@ uint32 Unit::GetDiseasesByCaster(ObjectGuid casterGUID, uint8 mode)
{
Aura* aura = (*i)->GetBase();
if (aura && !aura->IsRemoved() && aura->GetDuration() > 0)
if ((aura->GetApplyTime() + aura->GetMaxDuration() / 1000 + 8) > (time(nullptr) + aura->GetDuration() / 1000))
if ((aura->GetApplyTime() + aura->GetMaxDuration() / 1000 + 8) > (GameTime::GetGameTime().count() + aura->GetDuration() / 1000))
aura->SetDuration(aura->GetDuration() + 3000);
}
}
@@ -7080,7 +7081,7 @@ bool Unit::HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggere
if (AuraEffect* aurEff = victim->GetAuraEffect(SPELL_AURA_PERIODIC_DAMAGE, SPELLFAMILY_ROGUE, 0x100000, 0, 0, GetGUID()))
if (Aura* aur = aurEff->GetBase())
if (!aur->IsRemoved() && aur->GetDuration() > 0)
if ((aur->GetApplyTime() + aur->GetMaxDuration() / 1000 + 5) > (time(nullptr) + aur->GetDuration() / 1000) )
if ((aur->GetApplyTime() + aur->GetMaxDuration() / 1000 + 5) > (GameTime::GetGameTime().count() + aur->GetDuration() / 1000) )
{
aur->SetDuration(aur->GetDuration() + 2000);
return true;
@@ -12800,7 +12801,7 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry)
WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
data << GetPackGUID();
data << uint32(sWorld->GetGameTime()); // Packet counter
data << uint32(GameTime::GetGameTime().count()); // Packet counter
data << player->GetCollisionHeight();
player->GetSession()->SendPacket(&data);
}
@@ -12820,7 +12821,7 @@ void Unit::Dismount()
{
WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4);
data << GetPackGUID();
data << uint32(sWorld->GetGameTime()); // Packet counter
data << uint32(GameTime::GetGameTime().count()); // Packet counter
data << thisPlayer->GetCollisionHeight();
thisPlayer->GetSession()->SendPacket(&data);
}
@@ -14246,7 +14247,7 @@ DiminishingLevels Unit::GetDiminishing(DiminishingGroup group)
return DIMINISHING_LEVEL_1;
// If last spell was casted more than 15 seconds ago - reset the count.
if (i->stack == 0 && getMSTimeDiff(i->hitTime, World::GetGameTimeMS()) > 15000)
if (i->stack == 0 && getMSTimeDiff(i->hitTime, GameTime::GetGameTimeMS().count()) > 15000)
{
i->hitCount = DIMINISHING_LEVEL_1;
return DIMINISHING_LEVEL_1;
@@ -14269,7 +14270,7 @@ void Unit::IncrDiminishing(DiminishingGroup group)
i->hitCount += 1;
return;
}
m_Diminishing.push_back(DiminishingReturn(group, World::GetGameTimeMS(), DIMINISHING_LEVEL_2));
m_Diminishing.push_back(DiminishingReturn(group, GameTime::GetGameTimeMS().count(), DIMINISHING_LEVEL_2));
}
float Unit::ApplyDiminishingToDuration(DiminishingGroup group, int32& duration, Unit* caster, DiminishingLevels Level, int32 limitduration)
@@ -14366,7 +14367,7 @@ void Unit::ApplyDiminishingAura(DiminishingGroup group, bool apply)
i->stack -= 1;
// Remember time after last aura from group removed
if (i->stack == 0)
i->hitTime = World::GetGameTimeMS();
i->hitTime = GameTime::GetGameTimeMS().count();
}
break;
}
@@ -16634,7 +16635,7 @@ float Unit::GetAPMultiplier(WeaponAttackType attType, bool normalized)
bool Unit::IsUnderLastManaUseEffect() const
{
return getMSTimeDiff(m_lastManaUse, World::GetGameTimeMS()) < 5000;
return getMSTimeDiff(m_lastManaUse, GameTime::GetGameTimeMS().count()) < 5000;
}
void Unit::SetContestedPvP(Player* attackedPlayer, bool lookForNearContestedGuards)
@@ -17862,7 +17863,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
SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(time(nullptr))); // cast can't be helped
SetUInt32Value(UNIT_FIELD_PET_NAME_TIMESTAMP, uint32(GameTime::GetGameTime().count())); // cast can't be helped
}
}
GetMotionMaster()->MoveFollow(charmer, PET_FOLLOW_DIST, GetFollowAngle());
@@ -19099,7 +19100,7 @@ void Unit::_ExitVehicle(Position const* exitPosition)
if (player)
{
player->SetFallInformation(time(nullptr), GetPositionZ());
player->SetFallInformation(GameTime::GetGameTime().count(), GetPositionZ());
sScriptMgr->AnticheatSetUnderACKmount(player);
sScriptMgr->AnticheatSetSkipOnePacketForASH(player, true);
@@ -19181,7 +19182,7 @@ void Unit::BuildMovementPacket(ByteBuffer* data) const
{
*data << uint32(GetUnitMovementFlags()); // movement flags
*data << uint16(GetExtraUnitMovementFlags()); // 2.3.0
*data << uint32(World::GetGameTimeMS()); // time / counter
*data << uint32(GameTime::GetGameTimeMS().count()); // time / counter
*data << GetPositionX();
*data << GetPositionY();
*data << GetPositionZ();