aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-08-18 18:59:58 +0200
committerOvahlord <dreadkiller@gmx.de>2024-08-18 20:39:21 +0200
commit25ffdbc5ef0859aeaadfa132329a498e86827e68 (patch)
treed7df51da8cdc3e3df7c50e5058803f9324715ee4 /src/server/game
parent0c98004896cb91ef2d22baa5569ff0e0d6cd15ee (diff)
Core/Realms: Realmlist refactors
* Removed global realm variable from World and use RealmList everywhere * Match auth build key with client version * Restored allowedSecurityLevel checks for realmlist packet building * Restored updating population field, mysteriously removed 15 years ago in f20b25d1c90f608deab28c9957b3b376ab2a0d50 (cherry picked from commit c4b710446d62c95eb8124175203fa5f394912594) # Conflicts: # sql/base/auth_database.sql
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Accounts/AccountMgr.cpp5
-rw-r--r--src/server/game/Achievements/CriteriaHandler.cpp7
-rw-r--r--src/server/game/BattlePets/BattlePetMgr.cpp11
-rw-r--r--src/server/game/BlackMarket/BlackMarketMgr.cpp4
-rw-r--r--src/server/game/Chat/Channels/ChannelMgr.cpp9
-rw-r--r--src/server/game/Chat/Chat.cpp4
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp6
-rw-r--r--src/server/game/Entities/Object/ObjectGuid.cpp4
-rw-r--r--src/server/game/Entities/Player/Player.cpp26
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp7
-rw-r--r--src/server/game/Handlers/AuthHandler.cpp9
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp4
-rw-r--r--src/server/game/Handlers/HotfixHandler.cpp2
-rw-r--r--src/server/game/Handlers/QueryHandler.cpp5
-rw-r--r--src/server/game/Handlers/SocialHandler.cpp5
-rw-r--r--src/server/game/Server/Packets/PartyPackets.cpp6
-rw-r--r--src/server/game/Server/Protocol/PacketLog.cpp8
-rw-r--r--src/server/game/Server/WorldSession.cpp23
-rw-r--r--src/server/game/Server/WorldSession.h4
-rw-r--r--src/server/game/Server/WorldSocket.cpp51
-rw-r--r--src/server/game/Services/ClubUtils.cpp5
-rw-r--r--src/server/game/Services/WorldserverGameUtilitiesService.cpp8
-rw-r--r--src/server/game/World/World.cpp35
-rw-r--r--src/server/game/World/World.h3
24 files changed, 135 insertions, 116 deletions
diff --git a/src/server/game/Accounts/AccountMgr.cpp b/src/server/game/Accounts/AccountMgr.cpp
index 113e81153ba..2055bf437c6 100644
--- a/src/server/game/Accounts/AccountMgr.cpp
+++ b/src/server/game/Accounts/AccountMgr.cpp
@@ -22,11 +22,10 @@
#include "Log.h"
#include "ObjectAccessor.h"
#include "Player.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "ScriptMgr.h"
#include "SRP6.h"
#include "Util.h"
-#include "World.h"
#include "WorldSession.h"
using AccountSRP6 = Trinity::Crypto::SRP::GruntSRP6;
@@ -503,7 +502,7 @@ void AccountMgr::LoadRBAC()
while (result->NextRow());
TC_LOG_DEBUG("rbac", "AccountMgr::LoadRBAC: Loading default permissions");
- result = LoginDatabase.PQuery("SELECT secId, permissionId FROM rbac_default_permissions WHERE (realmId = {} OR realmId = -1) ORDER BY secId ASC", realm.Id.Realm);
+ result = LoginDatabase.PQuery("SELECT secId, permissionId FROM rbac_default_permissions WHERE (realmId = {} OR realmId = -1) ORDER BY secId ASC", sRealmList->GetCurrentRealmId().Realm);
if (!result)
{
TC_LOG_INFO("server.loading", ">> Loaded 0 default permission definitions. DB table `rbac_default_permissions` is empty.");
diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp
index 4f70a7986e0..97d43ac2140 100644
--- a/src/server/game/Achievements/CriteriaHandler.cpp
+++ b/src/server/game/Achievements/CriteriaHandler.cpp
@@ -1880,9 +1880,14 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6
return false;
break;
case ModifierTreeType::ClientVersionEqualOrLessThan: // 33
- if (reqValue < sRealmList->GetMinorMajorBugfixVersionForBuild(realm.Build))
+ {
+ std::shared_ptr<Realm const> currentRealm = sRealmList->GetCurrentRealm();
+ if (!currentRealm)
+ return false;
+ if (reqValue < sRealmList->GetMinorMajorBugfixVersionForBuild(currentRealm->Build))
return false;
break;
+ }
case ModifierTreeType::BattlePetTeamLevel: // 34
for (WorldPackets::BattlePet::BattlePetSlot const& slot : referencePlayer->GetSession()->GetBattlePetMgr()->GetSlots())
if (slot.Pet.Level < reqValue)
diff --git a/src/server/game/BattlePets/BattlePetMgr.cpp b/src/server/game/BattlePets/BattlePetMgr.cpp
index f153f7d4138..d42a668b12f 100644
--- a/src/server/game/BattlePets/BattlePetMgr.cpp
+++ b/src/server/game/BattlePets/BattlePetMgr.cpp
@@ -27,7 +27,7 @@
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
#include "Player.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "Util.h"
#include "World.h"
#include "WorldSession.h"
@@ -290,18 +290,19 @@ void BattlePetMgr::LoadFromDB(PreparedQueryResult pets, PreparedQueryResult slot
pet.NameTimestamp = fields[10].GetInt64();
pet.PacketInfo.CreatureID = speciesEntry->CreatureID;
- if (!fields[12].IsNull())
+ if (!fields[13].IsNull())
{
pet.DeclinedName = std::make_unique<DeclinedName>();
for (uint8 i = 0; i < MAX_DECLINED_NAME_CASES; ++i)
- pet.DeclinedName->name[i] = fields[12 + i].GetString();
+ pet.DeclinedName->name[i] = fields[13 + i].GetString();
}
if (!ownerGuid.IsEmpty())
{
pet.PacketInfo.OwnerInfo.emplace();
pet.PacketInfo.OwnerInfo->Guid = ownerGuid;
- pet.PacketInfo.OwnerInfo->PlayerVirtualRealm = pet.PacketInfo.OwnerInfo->PlayerNativeRealm = GetVirtualRealmAddress();
+ if (std::shared_ptr<Realm const> ownerRealm = sRealmList->GetRealm(fields[12].GetInt32()))
+ pet.PacketInfo.OwnerInfo->PlayerVirtualRealm = pet.PacketInfo.OwnerInfo->PlayerNativeRealm = ownerRealm->Id.GetAddress();
}
pet.SaveInfo = BATTLE_PET_UNCHANGED;
@@ -353,7 +354,7 @@ void BattlePetMgr::SaveToDB(LoginDatabaseTransaction trans)
if (itr->second.PacketInfo.OwnerInfo)
{
stmt->setInt64(12, itr->second.PacketInfo.OwnerInfo->Guid.GetCounter());
- stmt->setInt32(13, realm.Id.Realm);
+ stmt->setInt32(13, sRealmList->GetCurrentRealmId().Realm);
}
else
{
diff --git a/src/server/game/BlackMarket/BlackMarketMgr.cpp b/src/server/game/BlackMarket/BlackMarketMgr.cpp
index 59ebe4555d3..7a782558180 100644
--- a/src/server/game/BlackMarket/BlackMarketMgr.cpp
+++ b/src/server/game/BlackMarket/BlackMarketMgr.cpp
@@ -29,7 +29,7 @@
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
#include "Player.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "StringConvert.h"
#include "World.h"
#include "WorldSession.h"
@@ -285,7 +285,7 @@ void BlackMarketMgr::SendAuctionWonMail(BlackMarketEntry* entry, CharacterDataba
if (!bidderAccId) // Account exists
return;
- logGmTrade = AccountMgr::HasPermission(bidderAccId, rbac::RBAC_PERM_LOG_GM_TRADE, realm.Id.Realm);
+ logGmTrade = AccountMgr::HasPermission(bidderAccId, rbac::RBAC_PERM_LOG_GM_TRADE, sRealmList->GetCurrentRealmId().Realm);
if (logGmTrade && !sCharacterCache->GetCharacterNameByGuid(bidderGuid, bidderName))
bidderName = sObjectMgr->GetTrinityStringForDBCLocale(LANG_UNKNOWN);
diff --git a/src/server/game/Chat/Channels/ChannelMgr.cpp b/src/server/game/Chat/Channels/ChannelMgr.cpp
index 7b05b344f65..ea06221f36d 100644
--- a/src/server/game/Chat/Channels/ChannelMgr.cpp
+++ b/src/server/game/Chat/Channels/ChannelMgr.cpp
@@ -22,7 +22,7 @@
#include "DB2Stores.h"
#include "Log.h"
#include "Player.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "World.h"
#include "WorldSession.h"
@@ -286,9 +286,10 @@ ObjectGuid ChannelMgr::CreateBuiltinChannelGuid(uint32 channelId, AreaTableEntry
zoneId = zoneEntry->ID;
if (channelEntry->GetFlags().HasFlag(ChatChannelFlags::GlobalForTournament))
- if (Cfg_CategoriesEntry const* category = sCfgCategoriesStore.LookupEntry(realm.Timezone))
- if (category->GetFlags().HasFlag(CfgCategoriesFlags::Tournament))
- zoneId = 0;
+ if (std::shared_ptr<Realm const> currentRealm = sRealmList->GetCurrentRealm())
+ if (Cfg_CategoriesEntry const* category = sCfgCategoriesStore.LookupEntry(currentRealm->Timezone))
+ if (category->GetFlags().HasFlag(CfgCategoriesFlags::Tournament))
+ zoneId = 0;
return ObjectGuid::Create<HighGuid::ChatChannel>(true, channelEntry->GetFlags().HasFlag(ChatChannelFlags::LinkedChannel), zoneId, _team == ALLIANCE ? 3 : 5, channelId);
}
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp
index 832d14631bc..4255cc1daad 100644
--- a/src/server/game/Chat/Chat.cpp
+++ b/src/server/game/Chat/Chat.cpp
@@ -29,7 +29,7 @@
#include "ObjectMgr.h"
#include "Optional.h"
#include "Player.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "StringConvert.h"
#include "World.h"
#include "WorldSession.h"
@@ -95,7 +95,7 @@ bool ChatHandler::HasLowerSecurityAccount(WorldSession* target, uint32 target_ac
if (target)
target_sec = target->GetSecurity();
else if (target_account)
- target_sec = AccountMgr::GetSecurity(target_account, realm.Id.Realm);
+ target_sec = AccountMgr::GetSecurity(target_account, sRealmList->GetCurrentRealmId().Realm);
else
return true; // caller must report error for (target == nullptr && target_account == 0)
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index 710bfec570c..357e0be46e4 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -43,7 +43,7 @@
#include "PhasingHandler.h"
#include "Player.h"
#include "RaceMask.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "ReputationMgr.h"
#include "ScriptMgr.h"
#include "Spell.h"
@@ -3328,7 +3328,7 @@ static int32(* const WorldStateExpressionFunctions[WSE_FUNCTION_MAX])(Map const*
// WSE_FUNCTION_REGION
[](Map const* /*map*/, uint32 /*arg1*/, uint32 /*arg2*/) -> int32
{
- return realm.Id.Region;
+ return sRealmList->GetCurrentRealmId().Region;
},
// WSE_FUNCTION_CLOCK_HOUR
@@ -3376,7 +3376,7 @@ static int32(* const WorldStateExpressionFunctions[WSE_FUNCTION_MAX])(Map const*
{
time_t now = GameTime::GetGameTime();
uint32 raidOrigin = 1135695600;
- if (Cfg_RegionsEntry const* region = sCfgRegionsStore.LookupEntry(realm.Id.Region))
+ if (Cfg_RegionsEntry const* region = sCfgRegionsStore.LookupEntry(sRealmList->GetCurrentRealmId().Region))
raidOrigin = region->Raidorigin;
return (now - raidOrigin) / WEEK;
diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp
index 4b3c661ccaa..0c59aa0fe52 100644
--- a/src/server/game/Entities/Object/ObjectGuid.cpp
+++ b/src/server/game/Entities/Object/ObjectGuid.cpp
@@ -20,7 +20,7 @@
#include "Errors.h"
#include "Hash.h"
#include "Log.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "Util.h"
#include "World.h"
#include <charconv>
@@ -815,7 +815,7 @@ static inline uint32 GetRealmIdForObjectGuid(uint32 realmId)
if (realmId)
return realmId;
- return realm.Id.Realm;
+ return sRealmList->GetCurrentRealmId().Realm;
}
ObjectGuid ObjectGuidFactory::CreateNull()
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index cb5dc78020b..e455efcfb74 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -3913,12 +3913,12 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe
loginStmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_BATTLE_PET_DECLINED_NAME_BY_OWNER);
loginStmt->setInt64(0, guid);
- loginStmt->setInt32(1, realm.Id.Realm);
+ loginStmt->setInt32(1, sRealmList->GetCurrentRealmId().Realm);
loginTransaction->Append(loginStmt);
loginStmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_BATTLE_PETS_BY_OWNER);
loginStmt->setInt64(0, guid);
- loginStmt->setInt32(1, realm.Id.Realm);
+ loginStmt->setInt32(1, sRealmList->GetCurrentRealmId().Realm);
loginTransaction->Append(loginStmt);
Corpse::DeleteFromDB(playerguid, trans);
@@ -19070,7 +19070,10 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
stmt->setString(index++, ss.str());
stmt->setUInt8(index++, m_activePlayerData->MultiActionBars);
- stmt->setUInt32(index++, sRealmList->GetMinorMajorBugfixVersionForBuild(realm.Build));
+ if (std::shared_ptr<Realm const> currentRealm = sRealmList->GetCurrentRealm())
+ stmt->setUInt32(index++, sRealmList->GetMinorMajorBugfixVersionForBuild(currentRealm->Build));
+ else
+ stmt->setUInt32(index++, 0);
}
else
{
@@ -19213,7 +19216,10 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
stmt->setUInt32(index++, GetHonorLevel());
stmt->setUInt8(index++, m_activePlayerData->RestInfo[REST_TYPE_HONOR].StateID);
stmt->setFloat(index++, finiteAlways(_restMgr->GetRestBonus(REST_TYPE_HONOR)));
- stmt->setUInt32(index++, sRealmList->GetMinorMajorBugfixVersionForBuild(realm.Build));
+ if (std::shared_ptr<Realm const> currentRealm = sRealmList->GetCurrentRealm())
+ stmt->setUInt32(index++, sRealmList->GetMinorMajorBugfixVersionForBuild(currentRealm->Build));
+ else
+ stmt->setUInt32(index++, 0);
// Index
stmt->setUInt64(index, GetGUID().GetCounter());
@@ -19273,17 +19279,19 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba
GetSession()->GetCollectionMgr()->SaveAccountItemAppearances(loginTransaction);
GetSession()->GetCollectionMgr()->SaveAccountTransmogIllusions(loginTransaction);
+ Battlenet::RealmHandle currentRealmId = sRealmList->GetCurrentRealmId();
+
LoginDatabasePreparedStatement* loginStmt = LoginDatabase.GetPreparedStatement(LOGIN_DEL_BNET_LAST_PLAYER_CHARACTERS);
loginStmt->setUInt32(0, GetSession()->GetAccountId());
- loginStmt->setUInt8(1, realm.Id.Region);
- loginStmt->setUInt8(2, realm.Id.Site);
+ loginStmt->setUInt8(1, currentRealmId.Region);
+ loginStmt->setUInt8(2, currentRealmId.Site);
loginTransaction->Append(loginStmt);
loginStmt = LoginDatabase.GetPreparedStatement(LOGIN_INS_BNET_LAST_PLAYER_CHARACTERS);
loginStmt->setUInt32(0, GetSession()->GetAccountId());
- loginStmt->setUInt8(1, realm.Id.Region);
- loginStmt->setUInt8(2, realm.Id.Site);
- loginStmt->setUInt32(3, realm.Id.Realm);
+ loginStmt->setUInt8(1, currentRealmId.Region);
+ loginStmt->setUInt8(2, currentRealmId.Site);
+ loginStmt->setUInt32(3, currentRealmId.Realm);
loginStmt->setString(4, GetName());
loginStmt->setUInt64(5, GetGUID().GetCounter());
loginStmt->setUInt32(6, GameTime::GetGameTime());
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index ed782815fd3..d13f4ace139 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -52,7 +52,7 @@
#include "QueryPackets.h"
#include "QuestDef.h"
#include "Random.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "ReputationMgr.h"
#include "ScriptMgr.h"
#include "ScriptReloadMgr.h"
@@ -8728,8 +8728,9 @@ bool ObjectMgr::IsReservedName(std::string_view name) const
static EnumFlag<CfgCategoriesCharsets> GetRealmLanguageType(bool create)
{
- if (Cfg_CategoriesEntry const* category = sCfgCategoriesStore.LookupEntry(realm.Timezone))
- return create ? category->GetCreateCharsetMask() : category->GetExistingCharsetMask();
+ if (std::shared_ptr<Realm const> currentRealm = sRealmList->GetCurrentRealm())
+ if (Cfg_CategoriesEntry const* category = sCfgCategoriesStore.LookupEntry(currentRealm->Timezone))
+ return create ? category->GetCreateCharsetMask() : category->GetExistingCharsetMask();
return create ? CfgCategoriesCharsets::English : CfgCategoriesCharsets::Any; // basic-Latin at create, any at login
}
diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp
index 13db0718450..7af2a1e46fa 100644
--- a/src/server/game/Handlers/AuthHandler.cpp
+++ b/src/server/game/Handlers/AuthHandler.cpp
@@ -24,7 +24,7 @@
#include "GameTime.h"
#include "ObjectMgr.h"
#include "RBAC.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "SystemPackets.h"
#include "Timezone.h"
#include "World.h"
@@ -40,11 +40,14 @@ void WorldSession::SendAuthResponse(uint32 code, bool queued, uint32 queuePos)
response.SuccessInfo->ActiveExpansionLevel = GetExpansion();
response.SuccessInfo->AccountExpansionLevel = GetAccountExpansion();
- response.SuccessInfo->VirtualRealmAddress = realm.Id.GetAddress();
response.SuccessInfo->Time = int32(GameTime::GetGameTime());
// Send current home realm. Also there is no need to send it later in realm queries.
- response.SuccessInfo->VirtualRealms.emplace_back(realm.Id.GetAddress(), true, false, realm.Name, realm.NormalizedName);
+ if (std::shared_ptr<Realm const> currentRealm = sRealmList->GetCurrentRealm())
+ {
+ response.SuccessInfo->VirtualRealmAddress = currentRealm->Id.GetAddress();
+ response.SuccessInfo->VirtualRealms.emplace_back(currentRealm->Id.GetAddress(), true, false, currentRealm->Name, currentRealm->NormalizedName);
+ }
if (HasPermission(rbac::RBAC_PERM_USE_CHARACTER_TEMPLATES))
for (auto&& templ : sCharacterTemplateDataStore->GetCharacterTemplates())
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 55be2545110..17dcbefcc86 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -55,7 +55,7 @@
#include "PlayerDump.h"
#include "QueryHolder.h"
#include "QueryPackets.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "ReputationMgr.h"
#include "ScriptMgr.h"
#include "SocialMgr.h"
@@ -901,7 +901,7 @@ void WorldSession::HandleCharCreateOpcode(WorldPackets::Character::CreateCharact
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_REP_REALM_CHARACTERS);
stmt->setUInt32(0, createInfo->CharCount);
stmt->setUInt32(1, GetAccountId());
- stmt->setUInt32(2, realm.Id.Realm);
+ stmt->setUInt32(2, sRealmList->GetCurrentRealmId().Realm);
trans->Append(stmt);
LoginDatabase.CommitTransaction(trans);
diff --git a/src/server/game/Handlers/HotfixHandler.cpp b/src/server/game/Handlers/HotfixHandler.cpp
index 54e70d3884e..82c741f40bc 100644
--- a/src/server/game/Handlers/HotfixHandler.cpp
+++ b/src/server/game/Handlers/HotfixHandler.cpp
@@ -61,7 +61,7 @@ void WorldSession::HandleDBQueryBulk(WorldPackets::Hotfix::DBQueryBulk& dbQuery)
void WorldSession::SendAvailableHotfixes()
{
WorldPackets::Hotfix::AvailableHotfixes availableHotfixes;
- availableHotfixes.VirtualRealmAddress = realm.Id.GetAddress();
+ availableHotfixes.VirtualRealmAddress = GetVirtualRealmAddress();
for (auto const& [pushId, push] : sDB2Manager.GetHotfixData())
{
diff --git a/src/server/game/Handlers/QueryHandler.cpp b/src/server/game/Handlers/QueryHandler.cpp
index 4bcab4d2074..c848cc67c7d 100644
--- a/src/server/game/Handlers/QueryHandler.cpp
+++ b/src/server/game/Handlers/QueryHandler.cpp
@@ -321,12 +321,13 @@ void WorldSession::HandleQueryRealmName(WorldPackets::Query::QueryRealmName& que
WorldPackets::Query::RealmQueryResponse realmQueryResponse;
realmQueryResponse.VirtualRealmAddress = queryRealmName.VirtualRealmAddress;
- Battlenet::RealmHandle realmHandle(queryRealmName.VirtualRealmAddress);
- if (sRealmList->GetRealmNames(realmHandle, &realmQueryResponse.NameInfo.RealmNameActual, &realmQueryResponse.NameInfo.RealmNameNormalized))
+ if (std::shared_ptr<Realm const> realm = sRealmList->GetRealm(queryRealmName.VirtualRealmAddress))
{
realmQueryResponse.LookupState = RESPONSE_SUCCESS;
realmQueryResponse.NameInfo.IsInternalRealm = false;
realmQueryResponse.NameInfo.IsLocal = queryRealmName.VirtualRealmAddress == GetVirtualRealmAddress();
+ realmQueryResponse.NameInfo.RealmNameActual = realm->Name;
+ realmQueryResponse.NameInfo.RealmNameNormalized = realm->NormalizedName;
}
else
realmQueryResponse.LookupState = RESPONSE_FAILURE;
diff --git a/src/server/game/Handlers/SocialHandler.cpp b/src/server/game/Handlers/SocialHandler.cpp
index 02e381e2be6..16dc1421da4 100644
--- a/src/server/game/Handlers/SocialHandler.cpp
+++ b/src/server/game/Handlers/SocialHandler.cpp
@@ -25,10 +25,9 @@
#include "Player.h"
#include "QueryCallback.h"
#include "RBAC.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "SocialMgr.h"
#include "SocialPackets.h"
-#include "World.h"
void WorldSession::HandleContactListOpcode(WorldPackets::Social::SendContactList& packet)
{
@@ -104,7 +103,7 @@ void WorldSession::HandleAddFriendOpcode(WorldPackets::Social::AddFriend& packet
}
// When not found, consult database
- GetQueryProcessor().AddCallback(AccountMgr::GetSecurityAsync(friendCharacterInfo->AccountId, realm.Id.Realm,
+ GetQueryProcessor().AddCallback(AccountMgr::GetSecurityAsync(friendCharacterInfo->AccountId, sRealmList->GetCurrentRealmId().Realm,
[this, continuation = std::move(processFriendRequest)](uint32 friendSecurity)
{
if (!AccountMgr::IsPlayerAccount(friendSecurity))
diff --git a/src/server/game/Server/Packets/PartyPackets.cpp b/src/server/game/Server/Packets/PartyPackets.cpp
index fc8365dd507..2d9ffc64354 100644
--- a/src/server/game/Server/Packets/PartyPackets.cpp
+++ b/src/server/game/Server/Packets/PartyPackets.cpp
@@ -19,11 +19,10 @@
#include "Pet.h"
#include "PhasingHandler.h"
#include "Player.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "SpellAuraEffects.h"
#include "SpellAuras.h"
#include "Vehicle.h"
-#include "World.h"
#include "WorldSession.h"
WorldPacket const* WorldPackets::Party::PartyCommandResult::Write()
@@ -95,7 +94,8 @@ void WorldPackets::Party::PartyInvite::Initialize(Player const* inviter, int32 p
ProposedRoles = proposedRoles;
- InviterRealm = Auth::VirtualRealmInfo(realm.Id.GetAddress(), true, false, realm.Name, realm.NormalizedName);
+ if (std::shared_ptr<Realm const> realm = sRealmList->GetRealm(*inviter->m_playerData->VirtualPlayerRealm))
+ InviterRealm = Auth::VirtualRealmInfo(realm->Id.GetAddress(), true, false, realm->Name, realm->NormalizedName);
}
void WorldPackets::Party::PartyInviteResponse::Read()
diff --git a/src/server/game/Server/Protocol/PacketLog.cpp b/src/server/game/Server/Protocol/PacketLog.cpp
index 595738330d3..c912114849d 100644
--- a/src/server/game/Server/Protocol/PacketLog.cpp
+++ b/src/server/game/Server/Protocol/PacketLog.cpp
@@ -19,9 +19,8 @@
#include "Config.h"
#include "GameTime.h"
#include "IpAddress.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "Timer.h"
-#include "World.h"
#include "WorldPacket.h"
#pragma pack(push, 1)
@@ -98,7 +97,10 @@ void PacketLog::Initialize()
header.Signature[0] = 'P'; header.Signature[1] = 'K'; header.Signature[2] = 'T';
header.FormatVersion = 0x0301;
header.SnifferId = 'T';
- header.Build = realm.Build;
+ if (std::shared_ptr<Realm const> currentRealm = sRealmList->GetCurrentRealm())
+ header.Build = currentRealm->Build;
+ else
+ header.Build = 0;
header.Locale[0] = 'e'; header.Locale[1] = 'n'; header.Locale[2] = 'U'; header.Locale[3] = 'S';
std::memset(header.SessionKey, 0, sizeof(header.SessionKey));
header.SniffStartUnixtime = GameTime::GetGameTime();
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
index d8c4d2839c9..ba3bb98d958 100644
--- a/src/server/game/Server/WorldSession.cpp
+++ b/src/server/game/Server/WorldSession.cpp
@@ -47,7 +47,7 @@
#include "QueryHolder.h"
#include "Random.h"
#include "RBAC.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "ScriptMgr.h"
#include "SocialMgr.h"
#include "WardenWin.h"
@@ -106,7 +106,7 @@ bool WorldSessionFilter::Process(WorldPacket* packet)
/// WorldSession constructor
WorldSession::WorldSession(uint32 id, std::string&& name, uint32 battlenetAccountId, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time,
- std::string os, Minutes timezoneOffset, LocaleConstant locale, uint32 recruiter, bool isARecruiter):
+ std::string os, Minutes timezoneOffset, uint32 build, LocaleConstant locale, uint32 recruiter, bool isARecruiter):
m_muteTime(mute_time),
m_timeOutTime(0),
AntiDOS(this),
@@ -119,6 +119,7 @@ WorldSession::WorldSession(uint32 id, std::string&& name, uint32 battlenetAccoun
m_accountExpansion(expansion),
m_expansion(std::min<uint8>(expansion, sWorld->getIntConfig(CONFIG_EXPANSION))),
_os(std::move(os)),
+ _clientBuild(build),
_battlenetRequestToken(0),
_logoutTime(0),
m_inQueue(false),
@@ -797,7 +798,9 @@ void WorldSession::Handle_EarlyProccess(WorldPackets::Null& null)
void WorldSession::SendConnectToInstance(WorldPackets::Auth::ConnectToSerial serial)
{
boost::system::error_code ignored_error;
- boost::asio::ip::address instanceAddress = realm.GetAddressForClient(Trinity::Net::make_address(GetRemoteAddress(), ignored_error));
+ boost::asio::ip::address instanceAddress;
+ if (std::shared_ptr<Realm const> currentRealm = sRealmList->GetCurrentRealm())
+ instanceAddress = currentRealm->GetAddressForClient(Trinity::Net::make_address(GetRemoteAddress(), ignored_error));
_instanceConnectKey.Fields.AccountId = GetAccountId();
_instanceConnectKey.Fields.ConnectionType = CONNECTION_TYPE_INSTANCE;
@@ -1020,9 +1023,9 @@ void WorldSession::LoadPermissions()
uint8 secLevel = GetSecurity();
TC_LOG_DEBUG("rbac", "WorldSession::LoadPermissions [AccountId: {}, Name: {}, realmId: {}, secLevel: {}]",
- id, _accountName, realm.Id.Realm, secLevel);
+ id, _accountName, sRealmList->GetCurrentRealmId().Realm, secLevel);
- _RBACData = new rbac::RBACData(id, _accountName, realm.Id.Realm, secLevel);
+ _RBACData = new rbac::RBACData(id, _accountName, sRealmList->GetCurrentRealmId().Realm, secLevel);
_RBACData->LoadFromDB();
}
@@ -1032,9 +1035,9 @@ QueryCallback WorldSession::LoadPermissionsAsync()
uint8 secLevel = GetSecurity();
TC_LOG_DEBUG("rbac", "WorldSession::LoadPermissions [AccountId: {}, Name: {}, realmId: {}, secLevel: {}]",
- id, _accountName, realm.Id.Realm, secLevel);
+ id, _accountName, sRealmList->GetCurrentRealmId().Realm, secLevel);
- _RBACData = new rbac::RBACData(id, _accountName, realm.Id.Realm, secLevel);
+ _RBACData = new rbac::RBACData(id, _accountName, sRealmList->GetCurrentRealmId().Realm, secLevel);
return _RBACData->LoadFromDBAsync();
}
@@ -1097,7 +1100,7 @@ public:
stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BATTLE_PETS);
stmt->setUInt32(0, battlenetAccountId);
- stmt->setInt32(1, realm.Id.Realm);
+ stmt->setInt32(1, sRealmList->GetCurrentRealmId().Realm);
ok = SetPreparedQuery(BATTLE_PETS, stmt) && ok;
stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_BATTLE_PET_SLOTS);
@@ -1226,7 +1229,7 @@ bool WorldSession::HasPermission(uint32 permission)
bool hasPermission = _RBACData->HasPermission(permission);
TC_LOG_DEBUG("rbac", "WorldSession::HasPermission [AccountId: {}, Name: {}, realmId: {}]",
- _RBACData->GetId(), _RBACData->GetName(), realm.Id.Realm);
+ _RBACData->GetId(), _RBACData->GetName(), sRealmList->GetCurrentRealmId().Realm);
return hasPermission;
}
@@ -1234,7 +1237,7 @@ bool WorldSession::HasPermission(uint32 permission)
void WorldSession::InvalidateRBACData()
{
TC_LOG_DEBUG("rbac", "WorldSession::Invalidaterbac::RBACData [AccountId: {}, Name: {}, realmId: {}]",
- _RBACData->GetId(), _RBACData->GetName(), realm.Id.Realm);
+ _RBACData->GetId(), _RBACData->GetName(), sRealmList->GetCurrentRealmId().Realm);
delete _RBACData;
_RBACData = nullptr;
}
diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
index b2f1b06868c..49cc7721504 100644
--- a/src/server/game/Server/WorldSession.h
+++ b/src/server/game/Server/WorldSession.h
@@ -938,7 +938,7 @@ class TC_GAME_API WorldSession
{
public:
WorldSession(uint32 id, std::string&& name, uint32 battlenetAccountId, std::shared_ptr<WorldSocket> sock, AccountTypes sec, uint8 expansion, time_t mute_time,
- std::string os, Minutes timezoneOffset, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
+ std::string os, Minutes timezoneOffset, uint32 build, LocaleConstant locale, uint32 recruiter, bool isARecruiter);
~WorldSession();
bool PlayerLoading() const { return !m_playerLoading.IsEmpty(); }
@@ -987,6 +987,7 @@ class TC_GAME_API WorldSession
uint8 GetAccountExpansion() const { return m_accountExpansion; }
uint8 GetExpansion() const { return m_expansion; }
std::string const& GetOS() const { return _os; }
+ uint32 GetClientBuild() const { return _clientBuild; }
bool CanAccessAlliedRaces() const;
Warden* GetWarden() { return _warden.get(); }
@@ -1884,6 +1885,7 @@ class TC_GAME_API WorldSession
uint8 m_accountExpansion;
uint8 m_expansion;
std::string _os;
+ uint32 _clientBuild;
std::array<uint8, 32> _realmListSecret;
std::unordered_map<uint32 /*realmAddress*/, uint8> _realmCharacterCounts;
diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
index 688c8c5aed0..68783a321ae 100644
--- a/src/server/game/Server/WorldSocket.cpp
+++ b/src/server/game/Server/WorldSocket.cpp
@@ -616,9 +616,7 @@ struct AccountInfo
bool IsLockedToIP;
std::string LastIP;
std::string LockCountry;
- LocaleConstant Locale;
bool IsBanned;
-
} BattleNet;
struct
@@ -627,6 +625,8 @@ struct AccountInfo
std::array<uint8, 64> KeyData;
uint8 Expansion;
int64 MuteTime;
+ uint32 Build;
+ LocaleConstant Locale;
uint32 Recruiter;
std::string OS;
Minutes TimezoneOffset;
@@ -639,9 +639,9 @@ struct AccountInfo
explicit AccountInfo(Field const* fields)
{
- // 0 1 2 3 4 5 6 7 8 9 10 11 12
- // SELECT a.id, a.session_key, ba.last_ip, ba.locked, ba.lock_country, a.expansion, a.mutetime, ba.locale, a.recruiter, a.os, a.timezone_offset, ba.id, aa.SecurityLevel,
- // 13 14 15
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13
+ // SELECT a.id, a.session_key, ba.last_ip, ba.locked, ba.lock_country, a.expansion, a.mutetime, a.client_build, a.locale, a.recruiter, a.os, a.timezone_offset, ba.id, aa.SecurityLevel,
+ // 14 15 16
// bab.unbandate > UNIX_TIMESTAMP() OR bab.unbandate = bab.bandate, ab.unbandate > UNIX_TIMESTAMP() OR ab.unbandate = ab.bandate, r.id
// FROM account a LEFT JOIN battlenet_accounts ba ON a.battlenet_account = ba.id LEFT JOIN account_access aa ON a.id = aa.AccountID AND aa.RealmID IN (-1, ?)
// LEFT JOIN battlenet_account_bans bab ON ba.id = bab.id LEFT JOIN account_banned ab ON a.id = ab.id LEFT JOIN account r ON a.id = r.recruiter
@@ -653,18 +653,19 @@ struct AccountInfo
BattleNet.LockCountry = fields[4].GetString();
Game.Expansion = fields[5].GetUInt8();
Game.MuteTime = fields[6].GetInt64();
- BattleNet.Locale = LocaleConstant(fields[7].GetUInt8());
- Game.Recruiter = fields[8].GetUInt32();
- Game.OS = fields[9].GetString();
- Game.TimezoneOffset = Minutes(fields[10].GetInt16());
- BattleNet.Id = fields[11].GetUInt32();
- Game.Security = AccountTypes(fields[12].GetUInt8());
- BattleNet.IsBanned = fields[13].GetUInt32() != 0;
- Game.IsBanned = fields[14].GetUInt32() != 0;
- Game.IsRectuiter = fields[15].GetUInt32() != 0;
-
- if (BattleNet.Locale >= TOTAL_LOCALES)
- BattleNet.Locale = LOCALE_enUS;
+ Game.Build = fields[7].GetUInt32();
+ Game.Locale = LocaleConstant(fields[8].GetUInt8());
+ Game.Recruiter = fields[9].GetUInt32();
+ Game.OS = fields[10].GetString();
+ Game.TimezoneOffset = Minutes(fields[11].GetInt16());
+ BattleNet.Id = fields[12].GetUInt32();
+ Game.Security = AccountTypes(fields[13].GetUInt8());
+ BattleNet.IsBanned = fields[14].GetUInt32() != 0;
+ Game.IsBanned = fields[15].GetUInt32() != 0;
+ Game.IsRectuiter = fields[16].GetUInt32() != 0;
+
+ if (Game.Locale >= TOTAL_LOCALES)
+ Game.Locale = LOCALE_enUS;
}
};
@@ -672,7 +673,7 @@ void WorldSocket::HandleAuthSession(std::shared_ptr<WorldPackets::Auth::AuthSess
{
// Get the account information from the auth database
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_INFO_BY_NAME);
- stmt->setInt32(0, int32(realm.Id.Realm));
+ stmt->setInt32(0, int32(sRealmList->GetCurrentRealmId().Realm));
stmt->setString(1, authSession->RealmJoinTicket);
_queryProcessor.AddCallback(LoginDatabase.AsyncQuery(stmt).WithPreparedCallback([this, authSession = std::move(authSession)](PreparedQueryResult result) mutable
@@ -692,17 +693,17 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<WorldPackets::Auth::
return;
}
- RealmBuildInfo const* buildInfo = sRealmList->GetBuildInfo(realm.Build);
+ AccountInfo account(result->Fetch());
+
+ RealmBuildInfo const* buildInfo = sRealmList->GetBuildInfo(account.Game.Build);
if (!buildInfo)
{
SendAuthResponseError(ERROR_BAD_VERSION);
- TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Missing auth seed for realm build {} ({}).", realm.Build, GetRemoteIpAddress().to_string());
+ TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Missing auth seed for realm build {} ({}).", account.Game.Build, GetRemoteIpAddress().to_string());
DelayedCloseSocket();
return;
}
- AccountInfo account(result->Fetch());
-
// For hook purposes, we get Remoteaddress at this point.
std::string address = GetRemoteIpAddress().to_string();
@@ -778,11 +779,11 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<WorldPackets::Auth::
return;
}
- if (authSession->RealmID != realm.Id.Realm)
+ if (authSession->RealmID != sRealmList->GetCurrentRealmId().Realm)
{
SendAuthResponseError(ERROR_DENIED);
TC_LOG_ERROR("network", "WorldSocket::HandleAuthSession: Client {} requested connecting with realm id {} but this realm has id {} set in config.",
- GetRemoteIpAddress().to_string(), authSession->RealmID, realm.Id.Realm);
+ GetRemoteIpAddress().to_string(), authSession->RealmID, sRealmList->GetCurrentRealmId().Realm);
DelayedCloseSocket();
return;
}
@@ -877,7 +878,7 @@ void WorldSocket::HandleAuthSessionCallback(std::shared_ptr<WorldPackets::Auth::
_authed = true;
_worldSession = new WorldSession(account.Game.Id, std::move(authSession->RealmJoinTicket), account.BattleNet.Id, shared_from_this(), account.Game.Security,
- account.Game.Expansion, mutetime, account.Game.OS, account.Game.TimezoneOffset, account.BattleNet.Locale, account.Game.Recruiter, account.Game.IsRectuiter);
+ account.Game.Expansion, mutetime, account.Game.OS, account.Game.TimezoneOffset, account.Game.Build, account.Game.Locale, account.Game.Recruiter, account.Game.IsRectuiter);
// Initialize Warden system only if it is enabled by config
if (wardenActive)
diff --git a/src/server/game/Services/ClubUtils.cpp b/src/server/game/Services/ClubUtils.cpp
index 7147b2367b1..ec85e4a4a7c 100644
--- a/src/server/game/Services/ClubUtils.cpp
+++ b/src/server/game/Services/ClubUtils.cpp
@@ -16,10 +16,9 @@
*/
#include "ClubUtils.h"
-#include "Realm.h"
-#include "World.h"
+#include "RealmList.h"
uint64 Battlenet::Services::Clubs::CreateClubMemberId(ObjectGuid guid)
{
- return guid.GetCounter() | (uint64(realm.Id.Realm & 0xFFF) << 48);
+ return guid.GetCounter() | (uint64(sRealmList->GetCurrentRealmId().Realm & 0xFFF) << 48);
}
diff --git a/src/server/game/Services/WorldserverGameUtilitiesService.cpp b/src/server/game/Services/WorldserverGameUtilitiesService.cpp
index 63c8223c72f..94a41a8a24f 100644
--- a/src/server/game/Services/WorldserverGameUtilitiesService.cpp
+++ b/src/server/game/Services/WorldserverGameUtilitiesService.cpp
@@ -20,10 +20,8 @@
#include "IpAddress.h"
#include "Log.h"
#include "ProtobufJSON.h"
-#include "Realm.h"
#include "RealmList.h"
#include "RealmList.pb.h"
-#include "World.h"
#include <zlib.h>
std::unordered_map<std::string, Battlenet::Services::GameUtilitiesService::ClientRequestHandler> const Battlenet::Services::GameUtilitiesService::ClientRequestHandlers =
@@ -89,7 +87,7 @@ uint32 Battlenet::Services::GameUtilitiesService::HandleRealmListRequest(std::un
if (Variant const* subRegion = GetParam(params, "Command_RealmListRequest_v1"))
subRegionId = subRegion->string_value();
- std::vector<uint8> compressed = sRealmList->GetRealmList(realm.Build, subRegionId);
+ std::vector<uint8> compressed = sRealmList->GetRealmList(_session->GetClientBuild(), _session->GetSecurity(), subRegionId);
if (compressed.empty())
return ERROR_UTIL_SERVER_FAILED_TO_SERIALIZE_RESPONSE;
@@ -125,8 +123,8 @@ uint32 Battlenet::Services::GameUtilitiesService::HandleRealmListRequest(std::un
uint32 Battlenet::Services::GameUtilitiesService::HandleRealmJoinRequest(std::unordered_map<std::string, Variant const*> const& params, game_utilities::v1::ClientResponse* response)
{
if (Variant const* realmAddress = GetParam(params, "Param_RealmAddress"))
- return sRealmList->JoinRealm(uint32(realmAddress->uint_value()), realm.Build, Trinity::Net::make_address(_session->GetRemoteAddress()), _session->GetRealmListSecret(),
- _session->GetSessionDbcLocale(), _session->GetOS(), _session->GetTimezoneOffset(), _session->GetAccountName(), response);
+ return sRealmList->JoinRealm(uint32(realmAddress->uint_value()), _session->GetClientBuild(), Trinity::Net::make_address(_session->GetRemoteAddress()), _session->GetRealmListSecret(),
+ _session->GetSessionDbcLocale(), _session->GetOS(), _session->GetTimezoneOffset(), _session->GetAccountName(), _session->GetSecurity(), response);
return ERROR_WOW_SERVICES_INVALID_JOIN_TICKET;
}
diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp
index f492880fb65..cd4986d2c32 100644
--- a/src/server/game/World/World.cpp
+++ b/src/server/game/World/World.cpp
@@ -81,7 +81,7 @@
#include "PlayerDump.h"
#include "PoolMgr.h"
#include "QuestPools.h"
-#include "Realm.h"
+#include "RealmList.h"
#include "ScenarioMgr.h"
#include "ScriptMgr.h"
#include "ScriptReloadMgr.h"
@@ -244,12 +244,8 @@ void World::SetClosed(bool val)
void World::LoadDBAllowedSecurityLevel()
{
- LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_REALMLIST_SECURITY_LEVEL);
- stmt->setInt32(0, int32(realm.Id.Realm));
- PreparedQueryResult result = LoginDatabase.Query(stmt);
-
- if (result)
- SetPlayerSecurityLimit(AccountTypes(result->Fetch()->GetUInt8()));
+ if (std::shared_ptr<Realm const> currentRealm = sRealmList->GetCurrentRealm())
+ SetPlayerSecurityLimit(currentRealm->AllowedSecurityLevel);
}
void World::SetPlayerSecurityLimit(AccountTypes _sec)
@@ -429,7 +425,12 @@ void World::AddSession_(WorldSession* s)
{
float popu = (float)GetActiveSessionCount(); // updated number of users on the server
popu /= pLimit;
- popu *= 2;
+
+ LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_UPD_REALM_POPULATION);
+ stmt->setFloat(0, popu);
+ stmt->setUInt32(1, sRealmList->GetCurrentRealmId().Realm);
+ LoginDatabase.Execute(stmt);
+
TC_LOG_INFO("misc", "Server Population ({}).", popu);
}
}
@@ -1734,7 +1735,7 @@ void World::LoadConfigSettings(bool reload)
/// Initialize the World
bool World::SetInitialWorldSettings()
{
- sLog->SetRealmId(realm.Id.Realm);
+ sLog->SetRealmId(sRealmList->GetCurrentRealmId().Realm);
///- Server startup begin
uint32 startupBegin = getMSTime();
@@ -1793,7 +1794,7 @@ bool World::SetInitialWorldSettings()
uint32 server_type = IsFFAPvPRealm() ? uint32(REALM_TYPE_PVP) : getIntConfig(CONFIG_GAME_TYPE);
uint32 realm_zone = getIntConfig(CONFIG_REALM_ZONE);
- LoginDatabase.PExecute("UPDATE realmlist SET icon = {}, timezone = {} WHERE id = '{}'", server_type, realm_zone, realm.Id.Realm); // One-time query
+ LoginDatabase.PExecute("UPDATE realmlist SET icon = {}, timezone = {} WHERE id = '{}'", server_type, realm_zone, sRealmList->GetCurrentRealmId().Realm); // One-time query
TC_LOG_INFO("server.loading", "Initialize data stores...");
///- Load DB2s
@@ -2422,7 +2423,7 @@ bool World::SetInitialWorldSettings()
GameTime::UpdateGameTimers();
LoginDatabase.PExecute("INSERT INTO uptime (realmid, starttime, uptime, revision) VALUES({}, {}, 0, '{}')",
- realm.Id.Realm, uint32(GameTime::GetStartTime()), GitRevision::GetFullVersion()); // One-time query
+ sRealmList->GetCurrentRealmId().Realm, uint32(GameTime::GetStartTime()), GitRevision::GetFullVersion()); // One-time query
m_timers[WUPDATE_AUCTIONS].SetInterval(MINUTE*IN_MILLISECONDS);
m_timers[WUPDATE_AUCTIONS_PENDING].SetInterval(250);
@@ -2574,7 +2575,7 @@ void World::LoadAutobroadcasts()
m_Autobroadcasts.clear();
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_AUTOBROADCAST);
- stmt->setInt32(0, realm.Id.Realm);
+ stmt->setInt32(0, sRealmList->GetCurrentRealmId().Realm);
PreparedQueryResult result = LoginDatabase.Query(stmt);
if (!result)
@@ -2753,7 +2754,7 @@ void World::Update(uint32 diff)
stmt->setUInt32(0, tmpDiff);
stmt->setUInt16(1, uint16(maxOnlinePlayers));
- stmt->setUInt32(2, realm.Id.Realm);
+ stmt->setUInt32(2, sRealmList->GetCurrentRealmId().Realm);
stmt->setUInt32(3, uint32(GameTime::GetStartTime()));
LoginDatabase.Execute(stmt);
@@ -2771,7 +2772,7 @@ void World::Update(uint32 diff)
stmt->setUInt32(0, getIntConfig(CONFIG_LOGDB_CLEARTIME));
stmt->setUInt32(1, uint32(GameTime::GetGameTime()));
- stmt->setUInt32(2, realm.Id.Realm);
+ stmt->setUInt32(2, sRealmList->GetCurrentRealmId().Realm);
LoginDatabase.Execute(stmt);
}
@@ -3535,7 +3536,7 @@ void World::_UpdateRealmCharCount(PreparedQueryResult resultCharCount)
LoginDatabasePreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_REP_REALM_CHARACTERS);
stmt->setUInt8(0, charCount);
stmt->setUInt32(1, accountId);
- stmt->setUInt32(2, realm.Id.Realm);
+ stmt->setUInt32(2, sRealmList->GetCurrentRealmId().Realm);
trans->Append(stmt);
LoginDatabase.CommitTransaction(trans);
@@ -3989,11 +3990,9 @@ void World::UpdateWarModeRewardValues()
sWorldStateMgr->SetValueAndSaveInDb(WS_WAR_MODE_ALLIANCE_BUFF_VALUE, 10 + (dominantFaction == TEAM_HORDE ? outnumberedFactionReward : 0), false, nullptr);
}
-Realm realm;
-
uint32 GetVirtualRealmAddress()
{
- return realm.Id.GetAddress();
+ return sRealmList->GetCurrentRealmId().GetAddress();
}
CliCommandHolder::CliCommandHolder(void* callbackArg, char const* command, Print zprint, CommandFinished commandFinished)
diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h
index 4d6ef2211f5..56892b85884 100644
--- a/src/server/game/World/World.h
+++ b/src/server/game/World/World.h
@@ -42,7 +42,6 @@ class Player;
class WorldPacket;
class WorldSession;
class WorldSocket;
-struct Realm;
// ServerMessages.dbc
enum ServerMessageType
@@ -925,8 +924,6 @@ class TC_GAME_API World
friend class debug_commandscript;
};
-TC_GAME_API extern Realm realm;
-
TC_GAME_API uint32 GetVirtualRealmAddress();
#define sWorld World::instance()