refactor(Core/World): Create WorldSessionMgr to split session logic out of World (#21400)

This commit is contained in:
Takenbacon
2025-02-12 22:04:38 -08:00
committed by GitHub
parent 0f0b341d9d
commit edcfaeb845
32 changed files with 713 additions and 686 deletions

View File

@@ -32,6 +32,7 @@ EndScriptData */
#include "Player.h"
#include "World.h"
#include "WorldSession.h"
#include "WorldSessionMgr.h"
using namespace Acore::ChatCommands;
@@ -87,7 +88,7 @@ public:
if (message.empty())
return false;
sWorld->SendServerMessage(SERVER_MSG_STRING, Acore::StringFormat(handler->GetAcoreString(LANG_SYSTEMMESSAGE), message.data()));
sWorldSessionMgr->SendServerMessage(SERVER_MSG_STRING, Acore::StringFormat(handler->GetAcoreString(LANG_SYSTEMMESSAGE), message.data()));
return true;
}
@@ -112,7 +113,7 @@ public:
WorldPacket data(SMSG_NOTIFICATION, (str.size() + 1));
data << str;
sWorld->SendGlobalMessage(&data);
sWorldSessionMgr->SendGlobalMessage(&data);
return true;
}
@@ -128,7 +129,7 @@ public:
WorldPacket data(SMSG_NOTIFICATION, (str.size() + 1));
data << str;
sWorld->SendGlobalGMMessage(&data);
sWorldSessionMgr->SendGlobalGMMessage(&data);
return true;
}

View File

@@ -45,6 +45,7 @@
#include "TargetedMovementGenerator.h"
#include "Tokenize.h"
#include "WeatherMgr.h"
#include "WorldSessionMgr.h"
/// @todo: this import is not necessary for compilation and marked as unused by the IDE
// however, for some reasons removing it would cause a damn linking issue
@@ -2451,7 +2452,7 @@ public:
// find only player from same account if any
if (!target)
if (WorldSession* session = sWorld->FindSession(accountId))
if (WorldSession* session = sWorldSessionMgr->FindSession(accountId))
{
target = session->GetPlayer();
}
@@ -2557,7 +2558,7 @@ public:
// find only player from same account if any
if (!playerTarget)
{
if (WorldSession* session = sWorld->FindSession(accountId))
if (WorldSession* session = sWorldSessionMgr->FindSession(accountId))
{
playerTarget = session->GetPlayer();
}
@@ -2946,7 +2947,7 @@ public:
return false;
}
sWorld->SendGlobalMessage(WorldPackets::Misc::Playsound(soundId).Write());
sWorldSessionMgr->SendGlobalMessage(WorldPackets::Misc::Playsound(soundId).Write());
handler->PSendSysMessage(LANG_COMMAND_PLAYED_TO_ALL, soundId);
return true;

View File

@@ -29,6 +29,7 @@ EndScriptData */
#include "Pet.h"
#include "Player.h"
#include "ScriptMgr.h"
#include "WorldSessionMgr.h"
using namespace Acore::ChatCommands;
@@ -302,7 +303,7 @@ public:
stmt->SetData(0, uint16(atLogin));
CharacterDatabase.Execute(stmt);
sWorld->DoForAllOnlinePlayers([&] (Player* player){
sWorldSessionMgr->DoForAllOnlinePlayers([&] (Player* player){
player->SetAtLoginFlag(atLogin);
});

View File

@@ -36,6 +36,7 @@
#include "UpdateTime.h"
#include "VMapFactory.h"
#include "VMapMgr2.h"
#include "WorldSessionMgr.h"
#include <boost/version.hpp>
#include <filesystem>
#include <numeric>
@@ -259,10 +260,10 @@ public:
static bool HandleServerInfoCommand(ChatHandler* handler)
{
std::string realmName = sWorld->GetRealmName();
uint32 playerCount = sWorld->GetPlayerCount();
uint32 activeSessionCount = sWorld->GetActiveSessionCount();
uint32 queuedSessionCount = sWorld->GetQueuedSessionCount();
uint32 connPeak = sWorld->GetMaxActiveSessionCount();
uint32 playerCount = sWorldSessionMgr->GetPlayerCount();
uint32 activeSessionCount = sWorldSessionMgr->GetActiveSessionCount();
uint32 queuedSessionCount = sWorldSessionMgr->GetQueuedSessionCount();
uint32 connPeak = sWorldSessionMgr->GetMaxActiveSessionCount();
handler->PSendSysMessage("{}", GitRevision::GetFullVersion());
if (!queuedSessionCount)