Merge branch 'master' into kinglykrab/adventuremanager-global-to-singleton

This commit is contained in:
Chris Miles
2025-06-25 14:31:15 -05:00
committed by GitHub
182 changed files with 3376 additions and 2335 deletions
+1 -1
View File
@@ -77,7 +77,7 @@ ADD_EXECUTABLE(world ${world_sources} ${world_headers})
INSTALL(TARGETS world RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
IF (WIN32 AND EQEMU_BUILD_PCH)
TARGET_PRECOMPILE_HEADERS(world PRIVATE ../common/pch/pch.h)
TARGET_PRECOMPILE_HEADERS(world PRIVATE ../common/pch/std-pch.h)
ENDIF ()
ADD_DEFINITIONS(-DWORLD)
+6 -2
View File
@@ -17,7 +17,11 @@
extern ZSList zoneserver_list;
extern ClientList client_list;
<<<<<<< kinglykrab/adventuremanager-global-to-singleton
extern EQ::Random emu_random;
=======
extern AdventureManager adventure_manager;
>>>>>>> master
Adventure::Adventure(AdventureTemplate *t)
{
@@ -367,8 +371,8 @@ void Adventure::MoveCorpsesToGraveyard()
glm::vec4 position;
float x = GetTemplate()->graveyard_x + emu_random.Real(-GetTemplate()->graveyard_radius, GetTemplate()->graveyard_radius);
float y = GetTemplate()->graveyard_y + emu_random.Real(-GetTemplate()->graveyard_radius, GetTemplate()->graveyard_radius);
float x = GetTemplate()->graveyard_x + EQ::Random::Instance()->Real(-GetTemplate()->graveyard_radius, GetTemplate()->graveyard_radius);
float y = GetTemplate()->graveyard_y + EQ::Random::Instance()->Real(-GetTemplate()->graveyard_radius, GetTemplate()->graveyard_radius);
float z = GetTemplate()->graveyard_z;
position.x = x;
+19 -20
View File
@@ -16,7 +16,6 @@
extern ZSList zoneserver_list;
extern ClientList client_list;
extern EQ::Random emu_random;
AdventureManager::AdventureManager()
{
@@ -68,7 +67,7 @@ void AdventureManager::Process()
void AdventureManager::CalculateAdventureRequestReply(const char *data)
{
ServerAdventureRequest_Struct *sar = (ServerAdventureRequest_Struct*)data;
ClientListEntry *leader = client_list.FindCharacter(sar->leader);
ClientListEntry *leader = ClientList::Instance()->FindCharacter(sar->leader);
if(!leader)
{
return;
@@ -185,7 +184,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
for(int i = 0; i < sar->member_count; ++i)
{
ClientListEntry *current = client_list.FindCharacter((data + sizeof(ServerAdventureRequest_Struct) + (64 * i)));
ClientListEntry *current = ClientList::Instance()->FindCharacter((data + sizeof(ServerAdventureRequest_Struct) + (64 * i)));
if(current)
{
int lvl = current->level();
@@ -324,7 +323,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
if(eligible_adventures.size() > 0)
{
ea_iter = eligible_adventures.begin();
int c_index = emu_random.Int(0, (eligible_adventures.size()-1));
int c_index = EQ::Random::Instance()->Int(0, (eligible_adventures.size()-1));
for(int i = 0; i < c_index; ++i)
{
++ea_iter;
@@ -357,7 +356,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
void AdventureManager::TryAdventureCreate(const char *data)
{
ServerAdventureRequestCreate_Struct *src = (ServerAdventureRequestCreate_Struct*)data;
ClientListEntry *leader = client_list.FindCharacter(src->leader);
ClientListEntry *leader = ClientList::Instance()->FindCharacter(src->leader);
if(!leader)
{
return;
@@ -404,7 +403,7 @@ void AdventureManager::TryAdventureCreate(const char *data)
for(int i = 0; i < src->member_count; ++i)
{
ClientListEntry *player = client_list.FindCharacter((data + sizeof(ServerAdventureRequestCreate_Struct) + (64 * i)));
ClientListEntry *player = ClientList::Instance()->FindCharacter((data + sizeof(ServerAdventureRequestCreate_Struct) + (64 * i)));
if(player)
{
int f_count = 0;
@@ -458,7 +457,7 @@ void AdventureManager::GetAdventureData(Adventure *adv)
void AdventureManager::GetAdventureData(const char *name)
{
ClientListEntry *player = client_list.FindCharacter(name);
ClientListEntry *player = ClientList::Instance()->FindCharacter(name);
if(player)
{
int f_count = 0;
@@ -764,7 +763,7 @@ void AdventureManager::PlayerClickedDoor(const char *player, int zone_id, int do
{
if((*iter)->PlayerExists(player))
{
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack =
@@ -792,7 +791,7 @@ void AdventureManager::PlayerClickedDoor(const char *player, int zone_id, int do
++iter;
}
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack = new ServerPacket(ServerOP_AdventureClickDoorError, 64);
@@ -804,7 +803,7 @@ void AdventureManager::PlayerClickedDoor(const char *player, int zone_id, int do
void AdventureManager::LeaveAdventure(const char *name)
{
ClientListEntry *pc = client_list.FindCharacter(name);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(name);
if(pc)
{
Adventure *current = GetActiveAdventure(name);
@@ -867,7 +866,7 @@ void AdventureManager::IncrementCount(uint16 instance_id)
while(siter != slist.end())
{
ClientListEntry *pc = client_list.FindCharacter((*siter).c_str());
ClientListEntry *pc = ClientList::Instance()->FindCharacter((*siter).c_str());
if(pc)
{
memset(ac->player, 0, 64);
@@ -1262,7 +1261,7 @@ void AdventureManager::DoLeaderboardRequest(const char* player, uint8 type)
void AdventureManager::DoLeaderboardRequestWins(const char* player)
{
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
@@ -1328,7 +1327,7 @@ void AdventureManager::DoLeaderboardRequestWins(const char* player)
void AdventureManager::DoLeaderboardRequestPercentage(const char* player)
{
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
@@ -1394,7 +1393,7 @@ void AdventureManager::DoLeaderboardRequestPercentage(const char* player)
void AdventureManager::DoLeaderboardRequestWinsGuk(const char* player)
{
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
@@ -1460,7 +1459,7 @@ void AdventureManager::DoLeaderboardRequestWinsGuk(const char* player)
void AdventureManager::DoLeaderboardRequestPercentageGuk(const char* player)
{
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
@@ -1526,7 +1525,7 @@ void AdventureManager::DoLeaderboardRequestPercentageGuk(const char* player)
void AdventureManager::DoLeaderboardRequestWinsMir(const char* player)
{
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
@@ -1592,7 +1591,7 @@ void AdventureManager::DoLeaderboardRequestWinsMir(const char* player)
void AdventureManager::DoLeaderboardRequestPercentageMir(const char* player)
{
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
@@ -1658,7 +1657,7 @@ void AdventureManager::DoLeaderboardRequestPercentageMir(const char* player)
void AdventureManager::DoLeaderboardRequestWinsMmc(const char* player)
{
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
@@ -1724,7 +1723,7 @@ void AdventureManager::DoLeaderboardRequestWinsMmc(const char* player)
void AdventureManager::DoLeaderboardRequestPercentageMmc(const char* player)
{
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
@@ -1790,7 +1789,7 @@ void AdventureManager::DoLeaderboardRequestPercentageMmc(const char* player)
void AdventureManager::DoLeaderboardRequestWinsRuj(const char* player)
{
ClientListEntry *pc = client_list.FindCharacter(player);
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
if(pc)
{
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
+27 -8
View File
@@ -36,6 +36,7 @@
#include "../common/shareddb.h"
#include "../common/opcodemgr.h"
#include "../common/data_verification.h"
#include "../common/data_bucket.h"
#include "client.h"
#include "worlddb.h"
@@ -89,9 +90,7 @@ std::vector<RaceClassAllocation> character_create_allocations;
std::vector<RaceClassCombos> character_create_race_class_combos;
extern ZSList zoneserver_list;
extern LoginServerList loginserverlist;
extern ClientList client_list;
extern EQ::Random emu_random;
extern uint32 numclients;
extern volatile bool RunLoops;
extern volatile bool UCSServerAvailable_;
@@ -135,6 +134,8 @@ Client::Client(EQStreamInterface* ieqs)
}
Client::~Client() {
ClearDataBucketsCache();
if (RunLoops && cle && zone_id == 0)
cle->SetOnline(CLE_Status::Offline);
@@ -477,6 +478,8 @@ bool Client::HandleSendLoginInfoPacket(const EQApplicationPacket *app)
LogClientLogin("Checking authentication id [{}]", id);
if ((cle = client_list.CheckAuth(id, password))) {
LoadDataBucketsCache();
LogClientLogin("Checking authentication id [{}] passed", id);
if (!is_player_zoning) {
// Track who is in and who is out of the game
@@ -514,7 +517,7 @@ bool Client::HandleSendLoginInfoPacket(const EQApplicationPacket *app)
ServerLSPlayerJoinWorld_Struct* join =(ServerLSPlayerJoinWorld_Struct*)pack->pBuffer;
strcpy(join->key,GetLSKey());
join->lsaccount_id = GetLSID();
loginserverlist.SendPacket(pack);
LoginServerList::Instance()->SendPacket(pack);
safe_delete(pack);
}
@@ -984,7 +987,7 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) {
safe_delete(outapp);
// set mailkey - used for duration of character session
int mail_key = emu_random.Int(1, INT_MAX);
int mail_key = EQ::Random::Instance()->Int(1, INT_MAX);
database.SetMailKey(charid, GetIP(), mail_key);
if (UCSServerAvailable_) {
@@ -1097,7 +1100,7 @@ bool Client::HandlePacket(const EQApplicationPacket *app) {
OpcodeManager::EmuToName(app->GetOpcode()),
o->EmuToEQ(app->GetOpcode()) == 0 ? app->GetProtocolOpcode() : o->EmuToEQ(app->GetOpcode()),
app->Size(),
(LogSys.IsLogEnabled(Logs::Detail, Logs::PacketClientServer) ? DumpPacketToString(app) : "")
(EQEmuLogSys::Instance()->IsLogEnabled(Logs::Detail, Logs::PacketClientServer) ? DumpPacketToString(app) : "")
);
if (!eqs->CheckState(ESTABLISHED)) {
@@ -1246,7 +1249,7 @@ bool Client::Process() {
ServerLSPlayerLeftWorld_Struct* logout =(ServerLSPlayerLeftWorld_Struct*)pack->pBuffer;
strcpy(logout->key,GetLSKey());
logout->lsaccount_id = GetLSID();
loginserverlist.SendPacket(pack);
LoginServerList::Instance()->SendPacket(pack);
safe_delete(pack);
}
LogInfo("Client disconnected (not active in process)");
@@ -2171,7 +2174,7 @@ void Client::SetClassStartingSkills(PlayerProfile_Struct *pp)
i == EQ::skills::SkillAlcoholTolerance || i == EQ::skills::SkillBindWound)
continue;
pp->skills[i] = skill_caps.GetSkillCap(pp->class_, (EQ::skills::SkillType)i, 1).cap;
pp->skills[i] = SkillCaps::Instance()->GetSkillCap(pp->class_, (EQ::skills::SkillType)i, 1).cap;
}
}
@@ -2369,7 +2372,7 @@ bool Client::StoreCharacter(
return false;
}
const std::string& zone_name = zone_store.GetZoneName(p_player_profile_struct->zone_id, true);
const std::string& zone_name = ZoneStore::Instance()->GetZoneName(p_player_profile_struct->zone_id, true);
if (Strings::EqualFold(zone_name, "UNKNOWN")) {
p_player_profile_struct->zone_id = Zones::QEYNOS;
}
@@ -2518,3 +2521,19 @@ void Client::SendUnsupportedClientPacket(const std::string& message)
QueuePacket(&packet);
}
void Client::LoadDataBucketsCache()
{
DataBucket::BulkLoadEntitiesToCache(DataBucketLoadType::Account, {GetAccountID()});
const auto ids = CharacterDataRepository::GetCharacterIDsByAccountID(database, GetAccountID());
DataBucket::BulkLoadEntitiesToCache(DataBucketLoadType::Client, ids);
}
void Client::ClearDataBucketsCache()
{
DataBucket::DeleteFromCache(GetAccountID(), DataBucketLoadType::Account);
auto ids = CharacterDataRepository::GetCharacterIDsByAccountID(database, GetAccountID());
for (const auto& id : ids) {
DataBucket::DeleteFromCache(id, DataBucketLoadType::Client);
}
}
+3
View File
@@ -121,6 +121,9 @@ private:
bool CanTradeFVNoDropItem();
void RecordPossibleHack(const std::string& message);
void SendUnsupportedClientPacket(const std::string& message);
void LoadDataBucketsCache();
void ClearDataBucketsCache();
};
bool CheckCharCreateInfoSoF(CharCreate_Struct *cc);
+4 -6
View File
@@ -9,10 +9,8 @@
#include "world_config.h"
extern uint32 numplayers;
extern LoginServerList loginserverlist;
extern ClientList client_list;
extern volatile bool RunLoops;
extern SharedTaskManager shared_task_manager;
ClientListEntry::ClientListEntry(
uint32 id,
@@ -94,7 +92,7 @@ ClientListEntry::~ClientListEntry()
{
if (RunLoops) {
Camp(); // updates zoneserver's numplayers
client_list.RemoveCLEReferances(this);
ClientList::Instance()->RemoveCLEReferances(this);
}
for (auto &elem: m_tell_queue) {
safe_delete_array(elem);
@@ -146,7 +144,7 @@ void ClientListEntry::LSUpdate(ZoneServer *iZS)
zone->count = iZS->NumPlayers();
zone->zone = iZS->GetZoneID();
zone->zone_wid = iZS->GetID();
loginserverlist.SendPacket(pack);
LoginServerList::Instance()->SendPacket(pack);
safe_delete(pack);
}
}
@@ -162,7 +160,7 @@ void ClientListEntry::LSZoneChange(ZoneToZone_Struct *ztz)
zonechange->lsaccount_id = LSID();
zonechange->from = ztz->current_zone_id;
zonechange->to = ztz->requested_zone_id;
loginserverlist.SendPacket(pack);
LoginServerList::Instance()->SendPacket(pack);
safe_delete(pack);
}
}
@@ -224,7 +222,7 @@ void ClientListEntry::LeavingZone(ZoneServer *iZS, CLE_Status iOnline)
}
SetOnline(iOnline);
shared_task_manager.RemoveActiveInvitationByCharacterID(CharID());
SharedTaskManager::Instance()->RemoveActiveInvitationByCharacterID(CharID());
if (m_zone_server) {
m_zone_server->RemovePlayer();
+6
View File
@@ -85,6 +85,12 @@ public:
return {m_gm_zone_server_ids.begin(), m_gm_zone_server_ids.end()};
}
static ClientList* Instance()
{
static ClientList instance;
return &instance;
}
private:
void OnTick(EQ::Timer *t);
inline uint32 GetNextCLEID() { return NextCLEID++; }
+48 -7
View File
@@ -35,7 +35,6 @@
extern ClientList client_list;
extern ZSList zoneserver_list;
extern LoginServerList loginserverlist;
/**
* @param username
@@ -534,8 +533,8 @@ void ConsoleLock(
)
{
WorldConfig::LockWorld();
if (loginserverlist.Connected()) {
loginserverlist.SendStatus();
if (LoginServerList::Instance()->Connected()) {
LoginServerList::Instance()->SendStatus();
connection->SendLine("World locked.");
}
else {
@@ -555,8 +554,8 @@ void ConsoleUnlock(
)
{
WorldConfig::UnlockWorld();
if (loginserverlist.Connected()) {
loginserverlist.SendStatus();
if (LoginServerList::Instance()->Connected()) {
LoginServerList::Instance()->SendStatus();
connection->SendLine("World unlocked.");
}
else {
@@ -1219,7 +1218,7 @@ void ConsoleCrossZoneMove(
const auto& zone_short_name = !Strings::IsNumber(args[2]) ? args[2] : "";
const uint16 instance_id = Strings::IsNumber(args[2]) ? static_cast<uint16>(Strings::ToUnsignedInt(args[2])) : 0;
const auto& z = !zone_short_name.empty() ? zone_store.GetZone(zone_short_name) : nullptr;
const auto& z = !zone_short_name.empty() ? ZoneStore::Instance()->GetZone(zone_short_name) : nullptr;
if (z && !z->id) {
connection->SendLine(fmt::format("No zone with the short name '{}' exists.", zone_short_name));
@@ -1289,7 +1288,7 @@ void ConsoleWorldWideMove(
const auto& zone_short_name = !Strings::IsNumber(args[2]) ? args[2] : "";
const uint16 instance_id = Strings::IsNumber(args[2]) ? static_cast<uint16>(Strings::ToUnsignedInt(args[2])) : 0;
const auto& z = !zone_short_name.empty() ? zone_store.GetZone(zone_short_name) : nullptr;
const auto& z = !zone_short_name.empty() ? ZoneStore::Instance()->GetZone(zone_short_name) : nullptr;
if (z && !z->id) {
connection->SendLine(fmt::format("No zone with the short name '{}' exists.", zone_short_name));
@@ -1330,6 +1329,42 @@ void ConsoleWorldWideMove(
);
}
void ConsoleWWMarquee(
EQ::Net::ConsoleServerConnection* connection,
const std::string& command,
const std::vector<std::string>& args
)
{
if (args.size() < 2) {
connection->SendLine("Usage: wwmarquee <type> <message>");
return;
}
const uint32 type = Strings::IsNumber(args[0]) ? Strings::ToUnsignedInt(args[0]) : 0;
std::string message = Strings::Join(std::vector<std::string>(args.begin() + 1, args.end()), " ");
if (message.empty()) {
connection->SendLine("Message cannot be empty.");
return;
}
auto pack = new ServerPacket(ServerOP_WWMarquee, sizeof(WWMarquee_Struct));
auto* wwm = (WWMarquee_Struct*)pack->pBuffer;
wwm->type = type;
wwm->priority = 510;
wwm->fade_in = 0;
wwm->fade_out = 0;
wwm->duration = 5000;
wwm->min_status = AccountStatus::Player;
wwm->max_status = AccountStatus::Player;
strn0cpy(wwm->message, message.c_str(), sizeof(wwm->message));
zoneserver_list.SendPacket(pack);
safe_delete(pack);
connection->SendLine(fmt::format("Sent world marquee type {}: {}", type, message));
}
/**
* @param console
@@ -1367,6 +1402,12 @@ void RegisterConsoleFunctions(std::unique_ptr<EQ::Net::ConsoleServer>& console)
console->RegisterCall("whoami", 50, "whoami", std::bind(ConsoleWhoami, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
console->RegisterCall("worldshutdown", 200, "worldshutdown", std::bind(ConsoleWorldShutdown, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
console->RegisterCall("wwcast", 50, "wwcast [spell_id] [min_status] [max_status] - min_status and max_status are optional", std::bind(ConsoleWorldWideCastSpell, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
console->RegisterCall(
"wwmarquee",
50,
"wwmarquee <type> <message>",
std::bind(ConsoleWWMarquee, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)
);
console->RegisterCall("wwmove", 50, "wwmove [instance_id|zone_short_name] [min_status] [max_status] - min_status and max_status are optional, instance_id and zone_short_name are interchangeable", std::bind(ConsoleWorldWideMove, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
console->RegisterCall("zonebootup", 150, "zonebootup [zone_server_id] [zone_short_name]", std::bind(ConsoleZoneBootup, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
console->RegisterCall("zonelock", 150, "zonelock [list|lock|unlock] [zone_short_name]", std::bind(ConsoleZoneLock, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
+3 -3
View File
@@ -41,7 +41,7 @@ void DynamicZone::ChooseNewLeader()
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
if (member.id != GetLeaderID() && member.IsOnline()) {
auto member_cle = client_list.FindCLEByCharacterID(member.id);
auto member_cle = ClientList::Instance()->FindCLEByCharacterID(member.id);
return (member_cle && member_cle->GetOnline() == CLE_Status::InZone);
}
return false;
@@ -230,8 +230,8 @@ void DynamicZone::CacheMemberStatuses()
// called when a new dz is cached to fill member statuses
std::string zone_name;
std::vector<ClientListEntry*> all_clients;
all_clients.reserve(client_list.GetClientCount());
client_list.GetClients(zone_name.c_str(), all_clients);
all_clients.reserve(ClientList::Instance()->GetClientCount());
ClientList::Instance()->GetClients(zone_name.c_str(), all_clients);
for (const auto& member : m_members)
{
+7 -7
View File
@@ -210,7 +210,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
{
auto buf = reinterpret_cast<ServerDzCommand_Struct*>(pack->pBuffer);
ClientListEntry* cle = client_list.FindCharacter(buf->target_name);
ClientListEntry* cle = ClientList::Instance()->FindCharacter(buf->target_name);
if (cle && cle->Server())
{
// continue in the add target's zone
@@ -220,7 +220,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
else
{
// add target not online, return to inviter
ClientListEntry* inviter_cle = client_list.FindCharacter(buf->requester_name);
ClientListEntry* inviter_cle = ClientList::Instance()->FindCharacter(buf->requester_name);
if (inviter_cle && inviter_cle->Server())
{
inviter_cle->Server()->SendPacket(pack);
@@ -231,7 +231,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
case ServerOP_DzSaveInvite:
{
auto buf = reinterpret_cast<ServerDzCommand_Struct*>(pack->pBuffer);
if (ClientListEntry* cle = client_list.FindCharacter(buf->target_name))
if (ClientListEntry* cle = ClientList::Instance()->FindCharacter(buf->target_name))
{
// store packet on cle and re-send it when client requests it
buf->is_char_online = true;
@@ -243,7 +243,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
case ServerOP_DzRequestInvite:
{
auto buf = reinterpret_cast<ServerCharacterID_Struct*>(pack->pBuffer);
if (ClientListEntry* cle = client_list.FindCLEByCharacterID(buf->char_id))
if (ClientListEntry* cle = ClientList::Instance()->FindCLEByCharacterID(buf->char_id))
{
auto invite_pack = cle->GetPendingDzInvite();
if (invite_pack && cle->Server())
@@ -259,7 +259,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
// notify requester (old leader) and new leader of the result
ZoneServer* new_leader_zs = nullptr;
ClientListEntry* leader_cle = client_list.FindCharacter(buf->new_leader_name);
ClientListEntry* leader_cle = ClientList::Instance()->FindCharacter(buf->new_leader_name);
if (leader_cle && leader_cle->Server())
{
auto dz = DynamicZone::FindDynamicZoneByID(buf->dz_id);
@@ -274,7 +274,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
}
// if old and new leader are in the same zone only send one message
ClientListEntry* requester_cle = client_list.FindCLEByCharacterID(buf->requester_id);
ClientListEntry* requester_cle = ClientList::Instance()->FindCLEByCharacterID(buf->requester_id);
if (requester_cle && requester_cle->Server() && requester_cle->Server() != new_leader_zs)
{
requester_cle->Server()->SendPacket(pack);
@@ -441,7 +441,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
case ServerOP_DzCharacterLockout:
{
auto buf = reinterpret_cast<ServerDzCharacterLockout_Struct*>(pack->pBuffer);
auto cle = client_list.FindCLEByCharacterID(buf->char_id);
auto cle = ClientList::Instance()->FindCLEByCharacterID(buf->char_id);
if (cle && cle->Server())
{
cle->Server()->SendPacket(pack);
+3 -4
View File
@@ -16,7 +16,6 @@
extern ZSList zoneserver_list;
extern ClientList client_list;
extern WorldGuildManager guild_mgr;
extern UCSConnection UCSLink;
extern QueryServConnection QSLink;
void callGetZoneList(Json::Value &response)
@@ -125,7 +124,7 @@ void callGetClientList(Json::Value &response, const std::vector<std::string> &ar
}
}
client_list.GetClientList(response, full_list);
ClientList::Instance()->GetClientList(response, full_list);
}
void getReloadTypes(Json::Value &response)
@@ -142,7 +141,7 @@ void getReloadTypes(Json::Value &response)
void getServerCounts(Json::Value &response, const std::vector<std::string> &args)
{
response["zone_count"] = zoneserver_list.GetServerListCount();
response["client_count"] = client_list.GetClientCount();
response["client_count"] = ClientList::Instance()->GetClientCount();
}
void EQEmuApiWorldDataService::reload(Json::Value &r, const std::vector<std::string> &args)
@@ -259,7 +258,7 @@ void EQEmuApiWorldDataService::callGetGuildDetails(Json::Value &response, const
row["tribute"]["time_remaining"] = guild->tribute.time_remaining;
row["tribute"]["enabled"] = guild->tribute.enabled;
client_list.GetGuildClientList(response, guild_id);
ClientList::Instance()->GetGuildClientList(response, guild_id);
response.append(row);
}
+5 -6
View File
@@ -48,7 +48,6 @@
extern ZSList zoneserver_list;
extern ClientList client_list;
extern uint32 numzones;
extern LoginServerList loginserverlist;
extern LauncherList launcher_list;
extern volatile bool RunLoops;
@@ -86,15 +85,15 @@ const std::string &EQW::GetOutput() const {
void EQW::LockWorld() {
WorldConfig::LockWorld();
if (loginserverlist.Connected()) {
loginserverlist.SendStatus();
if (LoginServerList::Instance()->Connected()) {
LoginServerList::Instance()->SendStatus();
}
}
void EQW::UnlockWorld() {
WorldConfig::UnlockWorld();
if (loginserverlist.Connected()) {
loginserverlist.SendStatus();
if (LoginServerList::Instance()->Connected()) {
LoginServerList::Instance()->SendStatus();
}
}
@@ -104,7 +103,7 @@ Const_char *EQW::GetConfig(Const_char *var_name) {
}
bool EQW::LSConnected() {
return(loginserverlist.Connected());
return(LoginServerList::Instance()->Connected());
}
int EQW::CountZones() {
+4 -4
View File
@@ -108,7 +108,7 @@ void LoginServer::ProcessUsertoWorldReqLeg(uint16_t opcode, EQ::Net::Packet &p)
}
if (RuleB(World, EnforceCharacterLimitAtLogin)) {
if (client_list.IsAccountInGame(utwr->lsaccountid)) {
if (ClientList::Instance()->IsAccountInGame(utwr->lsaccountid)) {
LogDebug("User already online account_id [{0}]", utwr->lsaccountid);
utwrs->response = UserToWorldStatusAlreadyOnline;
SendPacket(&outpack);
@@ -189,7 +189,7 @@ void LoginServer::ProcessUsertoWorldReq(uint16_t opcode, EQ::Net::Packet &p)
}
if (RuleB(World, EnforceCharacterLimitAtLogin)) {
if (client_list.IsAccountInGame(utwr->lsaccountid)) {
if (ClientList::Instance()->IsAccountInGame(utwr->lsaccountid)) {
LogDebug("User already online account_id [{0}]", utwr->lsaccountid);
utwrs->response = UserToWorldStatusAlreadyOnline;
SendPacket(&outpack);
@@ -221,7 +221,7 @@ void LoginServer::ProcessLSClientAuthLegacy(uint16_t opcode, EQ::Net::Packet &p)
r.is_client_from_local_network
);
client_list.CLEAdd(
ClientList::Instance()->CLEAdd(
r.loginserver_account_id,
"eqemu",
r.loginserver_account_name,
@@ -256,7 +256,7 @@ void LoginServer::ProcessLSClientAuth(uint16_t opcode, EQ::Net::Packet &p)
r.is_client_from_local_network
);
client_list.CLEAdd(
ClientList::Instance()->CLEAdd(
r.loginserver_account_id,
r.loginserver_name,
r.account_name,
-1
View File
@@ -37,7 +37,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "world_config.h"
extern ZSList zoneserver_list;
extern LoginServerList loginserverlist;
extern ClientList client_list;
extern uint32 numzones;
extern uint32 numplayers;
+7
View File
@@ -21,6 +21,13 @@ public:
bool SendAccountUpdate(ServerPacket *pack);
bool Connected();
size_t GetServerCount() const { return m_list.size(); }
static LoginServerList* Instance()
{
static LoginServerList instance;
return &instance;
}
protected:
std::list<std::unique_ptr<LoginServer>> m_list;
};
+15 -14
View File
@@ -91,28 +91,24 @@
#include "../common/repositories/character_parcels_repository.h"
#include "../common/ip_util.h"
SkillCaps skill_caps;
ZoneStore zone_store;
ClientList client_list;
GroupLFPList LFPGroupList;
ZSList zoneserver_list;
<<<<<<< kinglykrab/ucsconnection-global-to-singleton
LoginServerList loginserverlist;
=======
UCSConnection UCSLink;
>>>>>>> master
QueryServConnection QSLink;
LauncherList launcher_list;
WorldEventScheduler event_scheduler;
SharedTaskManager shared_task_manager;
EQ::Random emu_random;
volatile bool RunLoops = true;
uint32 numclients = 0;
uint32 numzones = 0;
const WorldConfig *Config;
EQEmuLogSys LogSys;
WorldContentService content_service;
WebInterfaceList web_interface;
PathManager path;
PlayerEventLogs player_event_logs;
EvolvingItemsManager evolving_items_manager;
void CatchSignal(int sig_num);
@@ -134,14 +130,14 @@ inline void UpdateWindowTitle(std::string new_title)
int main(int argc, char **argv)
{
RegisterExecutablePlatform(ExePlatformWorld);
LogSys.LoadLogSettingsDefaults();
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
set_exception_handler();
if (WorldBoot::HandleCommandInput(argc, argv)) {
return 0;
}
path.LoadPaths();
PathManager::Instance()->Init();
if (!WorldBoot::LoadServerConfig()) {
return 0;
@@ -206,7 +202,7 @@ int main(int argc, char **argv)
->SetExpansionContext()
->ReloadContentFlags();
skill_caps.SetContentDatabase(&content_db)->LoadSkillCaps();
SkillCaps::Instance()->SetContentDatabase(&content_db)->LoadSkillCaps();
std::unique_ptr<EQ::Net::ServertalkServer> server_connection;
server_connection = std::make_unique<EQ::Net::ServertalkServer>();
@@ -302,7 +298,7 @@ int main(int argc, char **argv)
connection->GetUUID()
);
UCSLink.SetConnection(connection);
UCSConnection::Instance()->SetConnection(connection);
zoneserver_list.UpdateUCSServerAvailable();
}
@@ -312,11 +308,11 @@ int main(int argc, char **argv)
"UCS", [](std::shared_ptr<EQ::Net::ServertalkServerConnection> connection) {
LogInfo("Connection lost from UCS Server [{}]", connection->GetUUID());
auto ucs_connection = UCSLink.GetConnection();
auto ucs_connection = UCSConnection::Instance()->GetConnection();
if (ucs_connection->GetUUID() == connection->GetUUID()) {
LogInfo("Removing currently active UCS connection");
UCSLink.SetConnection(nullptr);
UCSConnection::Instance()->SetConnection(nullptr);
zoneserver_list.UpdateUCSServerAvailable(false);
}
}
@@ -474,8 +470,13 @@ int main(int argc, char **argv)
zoneserver_list.Process();
launcher_list.Process();
LFPGroupList.Process();
<<<<<<< kinglykrab/adventuremanager-global-to-singleton
AdventureManager::Instance()->Process();
shared_task_manager.Process();
=======
adventure_manager.Process();
SharedTaskManager::Instance()->Process();
>>>>>>> master
dynamic_zone_manager.Process();
if (!RuleB(Logging, PlayerEventsQSProcess)) {
@@ -508,7 +509,7 @@ int main(int argc, char **argv)
zoneserver_list.KillAll();
LogInfo("Zone (TCP) listener stopped");
LogInfo("Signaling HTTP service to stop");
LogSys.CloseFileLogs();
EQEmuLogSys::Instance()->CloseFileLogs();
WorldBoot::Shutdown();
+14 -14
View File
@@ -199,7 +199,7 @@ void SharedTaskManager::RemoveMember(SharedTask* s, const SharedTaskMember& memb
SendSharedTaskMemberRemovedToAllMembers(s, member.character_name);
client_list.SendCharacterMessageID(member.character_id, Chat::Yellow,
ClientList::Instance()->SendCharacterMessageID(member.character_id, Chat::Yellow,
TaskStr::PLAYER_REMOVED, {member.character_name, s->GetTaskData().title});
if (member.is_leader) {
@@ -229,10 +229,10 @@ void SharedTaskManager::RemoveEveryoneFromSharedTask(SharedTask *t, uint32 reque
SendRemovePlayerFromSharedTaskPacket(m.character_id, t->GetTaskData().id, true);
client_list.SendCharacterMessageID(m.character_id, Chat::Yellow, TaskStr::YOU_REMOVED, {t->GetTaskData().title});
ClientList::Instance()->SendCharacterMessageID(m.character_id, Chat::Yellow, TaskStr::YOU_REMOVED, {t->GetTaskData().title});
}
client_list.SendCharacterMessageID(requested_character_id, Chat::Red, TaskStr::PLAYER_REMOVED, {"Everyone", t->GetTaskData().title});
ClientList::Instance()->SendCharacterMessageID(requested_character_id, Chat::Red, TaskStr::PLAYER_REMOVED, {"Everyone", t->GetTaskData().title});
RemoveAllMembersFromDynamicZones(t);
@@ -252,7 +252,7 @@ void SharedTaskManager::Terminate(SharedTask& s, bool send_fail, bool erase)
SendSharedTaskFailed(member.character_id, s.GetTaskData().id);
}
SendRemovePlayerFromSharedTaskPacket(member.character_id, s.GetTaskData().id, true);
client_list.SendCharacterMessageID(member.character_id, Chat::Yellow, TaskStr::HAS_ENDED, {s.GetTaskData().title});
ClientList::Instance()->SendCharacterMessageID(member.character_id, Chat::Yellow, TaskStr::HAS_ENDED, {s.GetTaskData().title});
}
RemoveAllMembersFromDynamicZones(&s);
@@ -581,7 +581,7 @@ void SharedTaskManager::SharedTaskActivityUpdate(
d->ignore_quest_update = ignore_quest_update;
// get requested character zone server
ClientListEntry *c = client_list.FindCLEByCharacterID(m.character_id);
ClientListEntry *c = ClientList::Instance()->FindCLEByCharacterID(m.character_id);
if (c && c->Server()) {
c->Server()->SendPacket(p.get());
}
@@ -683,7 +683,7 @@ void SharedTaskManager::SendAcceptNewSharedTaskPacket(
d->accept_time = accept_time;
// get requested character zone server
ClientListEntry *cle = client_list.FindCLEByCharacterID(character_id);
ClientListEntry *cle = ClientList::Instance()->FindCLEByCharacterID(character_id);
if (cle && cle->Server()) {
cle->Server()->SendPacket(p.get());
}
@@ -704,7 +704,7 @@ void SharedTaskManager::SendRemovePlayerFromSharedTaskPacket(
d->remove_from_db = remove_from_db;
// get requested character zone server
ClientListEntry *cle = client_list.FindCLEByCharacterID(character_id);
ClientListEntry *cle = ClientList::Instance()->FindCLEByCharacterID(character_id);
if (cle && cle->Server()) {
cle->Server()->SendPacket(p.get());
}
@@ -717,7 +717,7 @@ void SharedTaskManager::SendSharedTaskFailed(uint32_t character_id, uint32_t tas
buf->character_id = character_id;
buf->task_id = task_id;
ClientListEntry* cle = client_list.FindCLEByCharacterID(character_id);
ClientListEntry* cle = ClientList::Instance()->FindCLEByCharacterID(character_id);
if (cle && cle->Server())
{
cle->Server()->SendPacket(&pack);
@@ -746,7 +746,7 @@ void SharedTaskManager::SendSharedTaskMemberList(uint32 character_id, const EQ::
memcpy(d->cereal_serialized_members, serialized_members.Data(), serialized_members.Length());
// send memberlist
ClientListEntry *cle = client_list.FindCLEByCharacterID(character_id);
ClientListEntry *cle = ClientList::Instance()->FindCLEByCharacterID(character_id);
if (cle && cle->Server()) {
cle->Server()->SendPacket(p.get());
}
@@ -768,7 +768,7 @@ void SharedTaskManager::SendSharedTaskMemberChange(
d->removed = removed;
strn0cpy(d->player_name, player_name.c_str(), sizeof(d->player_name));
ClientListEntry *cle = client_list.FindCLEByCharacterID(character_id);
ClientListEntry *cle = ClientList::Instance()->FindCLEByCharacterID(character_id);
if (cle && cle->Server()) {
cle->Server()->SendPacket(p.get());
}
@@ -990,7 +990,7 @@ void SharedTaskManager::SendSharedTaskInvitePacket(SharedTask *s, int64 invited_
strn0cpy(d->task_name, s->GetTaskData().title.c_str(), sizeof(d->task_name));
// get requested character zone server
ClientListEntry *cle = client_list.FindCLEByCharacterID(invited_character_id);
ClientListEntry *cle = ClientList::Instance()->FindCLEByCharacterID(invited_character_id);
if (cle && cle->Server()) {
SendLeaderMessageID(s, Chat::Yellow, TaskStr::SEND_INVITE_TO, {cle->name()});
cle->Server()->SendPacket(p.get());
@@ -1213,7 +1213,7 @@ void SharedTaskManager::SendLeaderMessage(SharedTask *shared_task, int chat_type
for (const auto &member : shared_task->GetMembers()) {
if (member.is_leader) {
client_list.SendCharacterMessage(member.character_id, chat_type, message);
ClientList::Instance()->SendCharacterMessage(member.character_id, chat_type, message);
break;
}
}
@@ -1230,7 +1230,7 @@ void SharedTaskManager::SendLeaderMessageID(
for (const auto &member : shared_task->GetMembers()) {
if (member.is_leader) {
client_list.SendCharacterMessageID(member.character_id, chat_type, eqstr_id, args);
ClientList::Instance()->SendCharacterMessageID(member.character_id, chat_type, eqstr_id, args);
break;
}
}
@@ -1243,7 +1243,7 @@ void SharedTaskManager::SendMembersMessage(SharedTask *shared_task, int chat_typ
}
for (const auto &member : shared_task->GetMembers()) {
client_list.SendCharacterMessage(member.character_id, chat_type, message);
ClientList::Instance()->SendCharacterMessage(member.character_id, chat_type, message);
}
}
+6
View File
@@ -102,6 +102,12 @@ public:
void SetSharedTasks(const std::vector<SharedTask> &shared_tasks);
SharedTaskManager * PurgeExpiredSharedTasks();
static SharedTaskManager* Instance()
{
static SharedTaskManager instance;
return &instance;
}
protected:
// reference to database
Database *m_database;
+38 -39
View File
@@ -16,7 +16,6 @@
extern ClientList client_list;
extern ZSList zoneserver_list;
extern SharedTaskManager shared_task_manager;
void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
{
@@ -30,7 +29,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->requested_npc_entity_id
);
shared_task_manager.AttemptSharedTaskCreation(
SharedTaskManager::Instance()->AttemptSharedTaskCreation(
r->requested_task_id,
r->requested_character_id,
r->requested_npc_entity_id
@@ -47,11 +46,11 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->remove_from_db
);
auto s = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->requested_character_id);
auto s = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->requested_character_id);
if (s) {
auto member = s->FindMemberFromCharacterID(r->requested_character_id);
if (member.character_id != 0) {
shared_task_manager.RemoveMember(s, member, r->remove_from_db);
SharedTaskManager::Instance()->RemoveMember(s, member, r->remove_from_db);
}
}
break;
@@ -64,14 +63,14 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->task_id
);
auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id);
auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id);
if (t) {
auto leader = t->GetLeader();
if (leader.character_id != r->source_character_id) {
client_list.SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name});
ClientList::Instance()->SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name});
}
else {
shared_task_manager.RemoveEveryoneFromSharedTask(t, r->source_character_id);
SharedTaskManager::Instance()->RemoveEveryoneFromSharedTask(t, r->source_character_id);
}
}
@@ -89,7 +88,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
(r->ignore_quest_update ? "true" : "false")
);
shared_task_manager.SharedTaskActivityUpdate(
SharedTaskManager::Instance()->SharedTaskActivityUpdate(
r->source_character_id,
r->task_id,
r->activity_id,
@@ -108,7 +107,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->task_id
);
auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id);
auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id);
if (t) {
LogTasksDetail(
"[ServerOP_SharedTaskRequestMemberlist] Found shared task character [{}] shared_task_id [{}]",
@@ -116,7 +115,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
t->GetDbSharedTask().id
);
shared_task_manager.SendSharedTaskMemberList(
SharedTaskManager::Instance()->SendSharedTaskMemberList(
r->source_character_id,
t->GetMembers()
);
@@ -134,7 +133,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->player_name
);
auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id);
auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id);
if (t) {
LogTasksDetail(
"[ServerOP_SharedTaskRemovePlayer] Found shared task character [{}] shared_task_id [{}]",
@@ -144,7 +143,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
auto leader = t->GetLeader();
if (leader.character_id != r->source_character_id) {
client_list.SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name});
ClientList::Instance()->SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name});
}
else {
LogTasksDetail(
@@ -155,11 +154,11 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
auto member = t->FindMemberFromCharacterName(r->player_name);
if (member.character_id == 0) {
shared_task_manager.SendLeaderMessageID(t, Chat::Red, TaskStr::IS_NOT_MEMBER, {r->player_name});
SharedTaskManager::Instance()->SendLeaderMessageID(t, Chat::Red, TaskStr::IS_NOT_MEMBER, {r->player_name});
}
else {
shared_task_manager.RemoveMember(t, member, true);
shared_task_manager.SendLeaderMessageID(t, Chat::Yellow, TaskStr::PLAYER_REMOVED, {member.character_name, t->GetTaskData().title});
SharedTaskManager::Instance()->RemoveMember(t, member, true);
SharedTaskManager::Instance()->SendLeaderMessageID(t, Chat::Yellow, TaskStr::PLAYER_REMOVED, {member.character_name, t->GetTaskData().title});
}
}
}
@@ -176,7 +175,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->player_name
);
auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id);
auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id);
if (t) {
LogTasksDetail(
"[ServerOP_SharedTaskMakeLeader] Found shared task character [{}] shared_task_id [{}]",
@@ -186,10 +185,10 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
auto leader = t->GetLeader();
if (leader.character_id != r->source_character_id) {
client_list.SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name});
ClientList::Instance()->SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name});
}
else if (strcasecmp(leader.character_name.c_str(), r->player_name) == 0) {
client_list.SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::YOU_ALREADY_LEADER);
ClientList::Instance()->SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::YOU_ALREADY_LEADER);
}
else {
LogTasksDetail(
@@ -199,7 +198,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
);
std::string character_name = r->player_name;
shared_task_manager.MakeLeaderByPlayerName(t, character_name);
SharedTaskManager::Instance()->MakeLeaderByPlayerName(t, character_name);
}
}
@@ -215,7 +214,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->player_name
);
auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id);
auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(r->task_id, r->source_character_id);
if (t) {
LogTasksDetail(
"[ServerOP_SharedTaskAddPlayer] Found shared task character [{}] shared_task_id [{}]",
@@ -226,7 +225,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
auto leader = t->GetLeader();
if (leader.character_id != r->source_character_id) {
// taskadd is client sided with System color in newer clients, server side might still be red
client_list.SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name});
ClientList::Instance()->SendCharacterMessageID(r->source_character_id, Chat::Red, TaskStr::NOT_LEADER, {leader.character_name});
}
else {
LogTasksDetail(
@@ -236,7 +235,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
);
std::string character_name = r->player_name;
shared_task_manager.InvitePlayerByPlayerName(t, character_name);
SharedTaskManager::Instance()->InvitePlayerByPlayerName(t, character_name);
}
}
@@ -252,21 +251,21 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
r->accepted
);
auto t = shared_task_manager.FindSharedTaskById(r->shared_task_id);
if (t && shared_task_manager.IsInvitationActive(r->shared_task_id, r->source_character_id)) {
auto t = SharedTaskManager::Instance()->FindSharedTaskById(r->shared_task_id);
if (t && SharedTaskManager::Instance()->IsInvitationActive(r->shared_task_id, r->source_character_id)) {
LogTasksDetail(
"[ServerOP_SharedTaskInviteAcceptedPlayer] Found shared task character [{}] shared_task_id [{}]",
r->source_character_id,
t->GetDbSharedTask().id
);
shared_task_manager.RemoveActiveInvitation(r->shared_task_id, r->source_character_id);
SharedTaskManager::Instance()->RemoveActiveInvitation(r->shared_task_id, r->source_character_id);
if (r->accepted) {
shared_task_manager.AddPlayerByCharacterIdAndName(t, r->source_character_id, r->player_name);
SharedTaskManager::Instance()->AddPlayerByCharacterIdAndName(t, r->source_character_id, r->player_name);
}
else {
shared_task_manager.SendLeaderMessageID(t, Chat::Red, TaskStr::PLAYER_DECLINED_OFFER, {r->player_name});
SharedTaskManager::Instance()->SendLeaderMessageID(t, Chat::Red, TaskStr::PLAYER_DECLINED_OFFER, {r->player_name});
}
}
break;
@@ -280,19 +279,19 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
buf->task_id
);
auto t = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id);
auto t = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id);
if (t) {
DynamicZone dz;
dz.Unserialize({ buf->cereal_data, buf->cereal_size });
shared_task_manager.CreateDynamicZone(t, dz);
SharedTaskManager::Instance()->CreateDynamicZone(t, dz);
}
break;
}
case ServerOP_SharedTaskPurgeAllCommand: {
LogTasksDetail("[ServerOP_SharedTaskPurgeAllCommand] Received request to purge all shared tasks");
shared_task_manager.PurgeAllSharedTasks();
SharedTaskManager::Instance()->PurgeAllSharedTasks();
auto p = std::make_unique<ServerPacket>(
ServerOP_SharedTaskPurgeAllCommand,
0
@@ -311,7 +310,7 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
buf->task_id
);
auto s = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id);
auto s = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id);
if (s) {
std::vector<std::string> player_names;
@@ -319,40 +318,40 @@ void SharedTaskWorldMessaging::HandleZoneMessage(ServerPacket *pack)
player_names.emplace_back(member.character_name);
if (member.is_leader) {
client_list.SendCharacterMessageID(buf->source_character_id, Chat::Yellow, TaskStr::LEADER_PRINT, {member.character_name});
ClientList::Instance()->SendCharacterMessageID(buf->source_character_id, Chat::Yellow, TaskStr::LEADER_PRINT, {member.character_name});
}
}
std::string player_list = fmt::format("{}", Strings::Join(player_names, ", "));
client_list.SendCharacterMessageID(buf->source_character_id, Chat::Yellow, TaskStr::MEMBERS_PRINT, {player_list});
ClientList::Instance()->SendCharacterMessageID(buf->source_character_id, Chat::Yellow, TaskStr::MEMBERS_PRINT, {player_list});
}
break;
}
case ServerOP_SharedTaskLock: {
auto buf = reinterpret_cast<ServerSharedTaskLock_Struct*>(pack->pBuffer);
auto shared_task = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id);
auto shared_task = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->source_character_id);
if (shared_task)
{
shared_task_manager.LockTask(shared_task, buf->lock);
SharedTaskManager::Instance()->LockTask(shared_task, buf->lock);
}
break;
}
case ServerOP_SharedTaskEndByDz: {
auto buf = reinterpret_cast<ServerSharedTaskEnd_Struct*>(pack->pBuffer);
auto shared_task = shared_task_manager.FindSharedTaskByDzId(buf->dz_id);
auto shared_task = SharedTaskManager::Instance()->FindSharedTaskByDzId(buf->dz_id);
if (shared_task)
{
shared_task_manager.Terminate(*shared_task, buf->send_fail, true);
SharedTaskManager::Instance()->Terminate(*shared_task, buf->send_fail, true);
}
break;
}
case ServerOP_SharedTaskEnd: {
auto buf = reinterpret_cast<ServerSharedTaskEnd_Struct*>(pack->pBuffer);
auto shared_task = shared_task_manager.FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->character_id);
auto shared_task = SharedTaskManager::Instance()->FindSharedTaskByTaskIdAndCharacterId(buf->task_id, buf->character_id);
if (shared_task)
{
shared_task_manager.Terminate(*shared_task, buf->send_fail, true);
SharedTaskManager::Instance()->Terminate(*shared_task, buf->send_fail, true);
}
break;
}
+6
View File
@@ -19,6 +19,12 @@ public:
const std::shared_ptr<EQ::Net::ServertalkServerConnection> &GetConnection() const;
inline bool IsConnected() const { return connection->Handle() ? connection->Handle()->IsConnected() : false; }
static UCSConnection* Instance()
{
static UCSConnection instance;
return &instance;
}
private:
inline std::string GetIP() const { return (connection && connection->Handle()) ? connection->Handle()->RemoteIP() : 0; }
std::shared_ptr<EQ::Net::ServertalkServerConnection> connection;
+5 -6
View File
@@ -6,7 +6,6 @@
#include "zonelist.h"
#include "launcher_list.h"
extern LoginServerList loginserverlist;
extern ClientList client_list;
extern ZSList zoneserver_list;
extern LauncherList launcher_list;
@@ -33,8 +32,8 @@ void EQW__IsLocked(WebInterface *i, const std::string& method, const std::string
void EQW__Lock(WebInterface *i, const std::string& method, const std::string& id, const Json::Value& params) {
WorldConfig::LockWorld();
if (loginserverlist.Connected()) {
loginserverlist.SendStatus();
if (LoginServerList::Instance()->Connected()) {
LoginServerList::Instance()->SendStatus();
}
Json::Value ret;
@@ -44,8 +43,8 @@ void EQW__Lock(WebInterface *i, const std::string& method, const std::string& id
void EQW__Unlock(WebInterface *i, const std::string& method, const std::string& id, const Json::Value& params) {
WorldConfig::UnlockWorld();
if (loginserverlist.Connected()) {
loginserverlist.SendStatus();
if (LoginServerList::Instance()->Connected()) {
LoginServerList::Instance()->SendStatus();
}
Json::Value ret;
@@ -69,7 +68,7 @@ void EQW__GetLauncherCount(WebInterface *i, const std::string& method, const std
}
void EQW__GetLoginServerCount(WebInterface *i, const std::string& method, const std::string& id, const Json::Value& params) {
Json::Value ret = loginserverlist.GetServerCount();
Json::Value ret = LoginServerList::Instance()->GetServerCount();
i->SendResponse(id, ret);
}
+20 -18
View File
@@ -57,7 +57,7 @@ void WorldBoot::GMSayHookCallBackProcessWorld(uint16 log_category, const char *f
0,
0,
AccountStatus::QuestTroupe,
LogSys.GetGMSayColorFromCategory(log_category),
EQEmuLogSys::Instance()->GetGMSayColorFromCategory(log_category),
fmt::format(
" {}{}",
(iter == 0 ? " ---" : ""),
@@ -73,7 +73,7 @@ void WorldBoot::GMSayHookCallBackProcessWorld(uint16 log_category, const char *f
0,
0,
AccountStatus::QuestTroupe,
LogSys.GetGMSayColorFromCategory(log_category),
EQEmuLogSys::Instance()->GetGMSayColorFromCategory(log_category),
"%s",
fmt::format("[{}] [{}] {}", Logs::LogCategoryName[log_category], func, message).c_str()
);
@@ -83,12 +83,12 @@ bool WorldBoot::HandleCommandInput(int argc, char **argv)
{
// command handler
if (argc > 1) {
LogSys.SilenceConsoleLogging();
path.LoadPaths();
EQEmuLogSys::Instance()->SilenceConsoleLogging();
PathManager::Instance()->Init();
WorldConfig::LoadConfig();
LoadDatabaseConnections();
RuleManager::Instance()->LoadRules(&database, "default", false);
LogSys.EnableConsoleLogging();
EQEmuLogSys::Instance()->EnableConsoleLogging();
WorldserverCLI::CommandHandler(argc, argv);
}
@@ -183,15 +183,13 @@ int get_file_size(const std::string &filename) // path to file
return size;
}
extern LoginServerList loginserverlist;
void WorldBoot::RegisterLoginservers()
{
const auto c = EQEmuConfig::get();
if (c->LoginCount == 0) {
if (c->LoginHost.length()) {
loginserverlist.Add(
LoginServerList::Instance()->Add(
c->LoginHost.c_str(),
c->LoginPort,
c->LoginAccount.c_str(),
@@ -207,7 +205,7 @@ void WorldBoot::RegisterLoginservers()
iterator.Reset();
while (iterator.MoreElements()) {
if (iterator.GetData()->LoginHost.length()) {
loginserverlist.Add(
LoginServerList::Instance()->Add(
iterator.GetData()->LoginHost.c_str(),
iterator.GetData()->LoginPort,
iterator.GetData()->LoginAccount.c_str(),
@@ -226,17 +224,21 @@ void WorldBoot::RegisterLoginservers()
}
}
<<<<<<< kinglykrab/adventuremanager-global-to-singleton
extern SharedTaskManager shared_task_manager;
=======
extern AdventureManager adventure_manager;
>>>>>>> master
extern WorldEventScheduler event_scheduler;
bool WorldBoot::DatabaseLoadRoutines(int argc, char **argv)
{
// logging system init
auto logging = LogSys.SetDatabase(&database)
->SetLogPath(path.GetLogPath())
auto logging = EQEmuLogSys::Instance()->SetDatabase(&database)
->SetLogPath(PathManager::Instance()->GetLogPath())
->LoadLogDatabaseSettings();
LogSys.SetDiscordHandler(&WorldBoot::DiscordWebhookMessageHandler);
EQEmuLogSys::Instance()->SetDiscordHandler(&WorldBoot::DiscordWebhookMessageHandler);
const auto c = EQEmuConfig::get();
if (c->auto_database_updates) {
@@ -278,9 +280,9 @@ bool WorldBoot::DatabaseLoadRoutines(int argc, char **argv)
LogInfo("Loading zones");
zone_store.LoadZones(content_db);
ZoneStore::Instance()->LoadZones(content_db);
if (zone_store.GetZones().empty()) {
if (ZoneStore::Instance()->GetZones().empty()) {
LogError("Failed to load zones data, check your schema for possible errors");
return 1;
}
@@ -401,13 +403,13 @@ bool WorldBoot::DatabaseLoadRoutines(int argc, char **argv)
->ReloadContentFlags();
LogInfo("Initializing [SharedTaskManager]");
shared_task_manager.SetDatabase(&database)
SharedTaskManager::Instance()->SetDatabase(&database)
->SetContentDatabase(&content_db)
->LoadTaskData()
->LoadSharedTaskState();
LogInfo("Purging expired shared tasks");
shared_task_manager.PurgeExpiredSharedTasks();
SharedTaskManager::Instance()->PurgeExpiredSharedTasks();
LogInfo("Cleaning up instance corpses");
database.CleanupInstanceCorpses();
@@ -627,14 +629,14 @@ void WorldBoot::Shutdown()
void WorldBoot::SendDiscordMessage(int webhook_id, const std::string &message)
{
if (UCSLink.IsConnected()) {
if (UCSConnection::Instance()->IsConnected()) {
auto pack = new ServerPacket(ServerOP_DiscordWebhookMessage, sizeof(DiscordWebhookMessage_Struct) + 1);
auto *q = (DiscordWebhookMessage_Struct *) pack->pBuffer;
strn0cpy(q->message, message.c_str(), 2000);
q->webhook_id = webhook_id;
UCSLink.SendPacket(pack);
UCSConnection::Instance()->SendPacket(pack);
safe_delete(pack);
}
-2
View File
@@ -6,8 +6,6 @@
#include "../common/discord/discord.h"
#include "ucs.h"
extern UCSConnection UCSLink;
class WorldBoot {
public:
static void GMSayHookCallBackProcessWorld(uint16 log_category, const char *func, std::string message);
+10 -9
View File
@@ -37,14 +37,14 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "dynamic_zone_manager.h"
#include "ucs.h"
#include "clientlist.h"
#include "queryserv.h"
#include "../common/repositories/trader_repository.h"
#include "../common/repositories/buyer_repository.h"
extern uint32 numzones;
extern EQ::Random emu_random;
extern WebInterfaceList web_interface;
extern SharedTaskManager shared_task_manager;
extern ClientList client_list;
extern QueryServConnection QSLink;
volatile bool UCSServerAvailable_ = false;
void CatchSignal(int sig_num);
@@ -694,7 +694,7 @@ void ZSList::RebootZone(const char* ip1, uint16 port, const char* ip2, uint32 sk
safe_delete_array(tmp);
return;
}
uint32 z = emu_random.Int(0, y - 1);
uint32 z = EQ::Random::Instance()->Int(0, y - 1);
auto pack = new ServerPacket(ServerOP_ZoneReboot, sizeof(ServerZoneReboot_Struct));
ServerZoneReboot_Struct* s = (ServerZoneReboot_Struct*)pack->pBuffer;
@@ -912,7 +912,7 @@ bool ZSList::SendPacketToBootedZones(ServerPacket* pack)
bool ZSList::SendPacketToZonesWithGuild(uint32 guild_id, ServerPacket* pack)
{
auto servers = client_list.GetGuildZoneServers(guild_id);
auto servers = ClientList::Instance()->GetGuildZoneServers(guild_id);
for (auto const& z : zone_server_list) {
for (auto const& server_id : servers) {
if (z->GetID() == server_id && z->GetZoneID() > 0) {
@@ -926,7 +926,7 @@ bool ZSList::SendPacketToZonesWithGuild(uint32 guild_id, ServerPacket* pack)
bool ZSList::SendPacketToZonesWithGMs(ServerPacket* pack)
{
auto servers = client_list.GetZoneServersWithGMs();
auto servers = ClientList::Instance()->GetZoneServersWithGMs();
for (auto const &z: zone_server_list) {
for (auto const &server_id: servers) {
if (z->GetID() == server_id && z->GetZoneID() > 0) {
@@ -978,15 +978,16 @@ void ZSList::SendServerReload(ServerReload::Type type, uchar *packet)
} else if (type == ServerReload::Type::Rules) {
RuleManager::Instance()->LoadRules(&database, RuleManager::Instance()->GetActiveRuleset(), true);
} else if (type == ServerReload::Type::SkillCaps) {
skill_caps.ReloadSkillCaps();
SkillCaps::Instance()->ReloadSkillCaps();
} else if (type == ServerReload::Type::ContentFlags) {
content_service.SetExpansionContext()->ReloadContentFlags();
} else if (type == ServerReload::Type::Logs) {
LogSys.LoadLogDatabaseSettings();
EQEmuLogSys::Instance()->LoadLogDatabaseSettings();
player_event_logs.ReloadSettings();
UCSLink.SendPacket(&pack);
UCSConnection::Instance()->SendPacket(&pack);
QSLink.SendPacket(&pack);
} else if (type == ServerReload::Type::Tasks) {
shared_task_manager.LoadTaskData();
SharedTaskManager::Instance()->LoadTaskData();
} else if (type == ServerReload::Type::DzTemplates) {
dynamic_zone_manager.LoadTemplates();
}
+12 -10
View File
@@ -55,12 +55,14 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
extern ClientList client_list;
extern GroupLFPList LFPGroupList;
extern ZSList zoneserver_list;
extern LoginServerList loginserverlist;
extern volatile bool RunLoops;
extern volatile bool UCSServerAvailable_;
<<<<<<< kinglykrab/adventuremanager-global-to-singleton
extern UCSConnection UCSLink;
=======
extern AdventureManager adventure_manager;
>>>>>>> master
extern QueryServConnection QSLink;
extern SharedTaskManager shared_task_manager;
void CatchSignal(int sig_num);
@@ -163,7 +165,7 @@ void ZoneServer::LSBootUpdate(uint32 zone_id, uint32 instanceid, bool startup) {
bootup->zone = zone_id;
bootup->zone_wid = GetID();
bootup->instance = instanceid;
loginserverlist.SendPacket(pack);
LoginServerList::Instance()->SendPacket(pack);
safe_delete(pack);
}
}
@@ -178,7 +180,7 @@ void ZoneServer::LSSleepUpdate(uint32 zone_id) {
auto sleep = (ServerLSZoneSleep_Struct*) pack->pBuffer;
sleep->zone = zone_id;
sleep->zone_wid = GetID();
loginserverlist.SendPacket(pack);
LoginServerList::Instance()->SendPacket(pack);
safe_delete(pack);
}
}
@@ -380,7 +382,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
// if discord enabled for event, ship to UCS to process
if (player_event_logs.IsEventDiscordEnabled(n.player_event_log.event_type_id)) {
UCSLink.SendPacket(pack);
UCSConnection::Instance()->SendPacket(pack);
}
break;
@@ -434,7 +436,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
auto scm = (ServerChannelMessage_Struct*) pack->pBuffer;
if (scm->chan_num == ChatChannel_UCSRelay) {
UCSLink.SendMessage(scm->from, scm->message);
UCSConnection::Instance()->SendMessage(scm->from, scm->message);
break;
}
@@ -1075,8 +1077,8 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
WorldConfig::UnlockWorld();
}
if (loginserverlist.Connected()) {
loginserverlist.SendStatus();
if (LoginServerList::Instance()->Connected()) {
LoginServerList::Instance()->SendStatus();
SendEmoteMessage(
l->character_name,
0,
@@ -1338,12 +1340,12 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
}
case ServerOP_LSAccountUpdate: {
LogNetcode("Received ServerOP_LSAccountUpdate packet from zone");
loginserverlist.SendAccountUpdate(pack);
LoginServerList::Instance()->SendAccountUpdate(pack);
break;
}
case ServerOP_DiscordWebhookMessage:
case ServerOP_UCSMailMessage: {
UCSLink.SendPacket(pack);
UCSConnection::Instance()->SendPacket(pack);
break;
}
case ServerOP_UCSServerStatusRequest: {