diff --git a/README.md b/README.md index 291900050..dd529070c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ CypherCore is an open source server project for World of Warcraft written in C#. -The current support game version is: 9.1.0.40725 +The current support game version is: 9.1.5.40944 ### Prerequisites * Visual Studio 2019 with .NET 5.0 [Download](https://www.visualstudio.com/downloads/) diff --git a/Source/Framework/Constants/AccountConst.cs b/Source/Framework/Constants/AccountConst.cs index af605441a..79cbd09d4 100644 --- a/Source/Framework/Constants/AccountConst.cs +++ b/Source/Framework/Constants/AccountConst.cs @@ -34,6 +34,7 @@ namespace Framework.Constants Max = 12, + AllAccountDataCacheMask = 0xFFF, GlobalCacheMask = 0x515, PerCharacterCacheMask = 0xAEA } diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index 77904d946..2f75f2d15 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -733,6 +733,7 @@ namespace Game pCurrChar.SetVirtualPlayerRealm(Global.WorldMgr.GetVirtualRealmAddress()); + SendAccountDataTimes(ObjectGuid.Empty, AccountDataTypes.GlobalCacheMask); SendTutorialsData(); pCurrChar.GetMotionMaster().Initialize(); @@ -743,15 +744,10 @@ namespace Game loginVerifyWorld.Pos = pCurrChar.GetPosition(); SendPacket(loginVerifyWorld); + // load player specific part before send times LoadAccountData(holder.GetResult(PlayerLoginQueryLoad.AccountData), AccountDataTypes.PerCharacterCacheMask); - AccountDataTimes accountDataTimes = new(); - accountDataTimes.PlayerGuid = playerGuid; - accountDataTimes.ServerTime = (uint)GameTime.GetGameTime(); - for (AccountDataTypes i = 0; i < AccountDataTypes.Max; ++i) - accountDataTimes.AccountTimes[(int)i] = (uint)GetAccountData(i).Time; - - SendPacket(accountDataTimes); + SendAccountDataTimes(playerGuid, AccountDataTypes.AllAccountDataCacheMask); SendFeatureSystemStatus(); diff --git a/Source/Game/Server/WorldSession.cs b/Source/Game/Server/WorldSession.cs index 6a27553f0..4d5409778 100644 --- a/Source/Game/Server/WorldSession.cs +++ b/Source/Game/Server/WorldSession.cs @@ -427,6 +427,18 @@ namespace Game return _registeredAddonPrefixes.Contains(prefix); } + public void SendAccountDataTimes(ObjectGuid playerGuid, AccountDataTypes mask) + { + AccountDataTimes accountDataTimes = new(); + accountDataTimes.PlayerGuid = playerGuid; + accountDataTimes.ServerTime = GameTime.GetGameTime(); + for (int i = 0; i < (int)AccountDataTypes.Max; ++i) + if (((int)mask & (1 << i)) != 0) + accountDataTimes.AccountTimes[i] = GetAccountData((AccountDataTypes)i).Time; + + SendPacket(accountDataTimes); + } + public void LoadTutorialsData(SQLResult result) { if (!result.IsEmpty()) @@ -755,6 +767,7 @@ namespace Game SendFeatureSystemStatusGlueScreen(); SendClientCacheVersion(WorldConfig.GetUIntValue(WorldCfg.ClientCacheVersion)); SendAvailableHotfixes(); + SendAccountDataTimes(ObjectGuid.Empty, AccountDataTypes.GlobalCacheMask); SendTutorialsData(); SQLResult result = holder.GetResult(AccountInfoQueryLoad.GlobalRealmCharacterCounts);