mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-25 10:28:23 +00:00
Compare commits
44 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 585ed3bd25 | |||
| 2eb291a461 | |||
| a1421af214 | |||
| 13aad6229f | |||
| 76d46ceaf0 | |||
| 389047c4e2 | |||
| 2c6d405b2c | |||
| 50ae0f8351 | |||
| dc261bb203 | |||
| 643ee56433 | |||
| c0bb32ed12 | |||
| c99bda3f47 | |||
| 967a13e692 | |||
| f304f9cc61 | |||
| 004e2ca63f | |||
| 128732e05d | |||
| 1e6a4dac78 | |||
| 654764685a | |||
| c5ab35e4af | |||
| 947795f1d1 | |||
| 1153c9ab96 | |||
| 2128b45313 | |||
| 4f7ff2d6f2 | |||
| b5f1e99d3b | |||
| 83918ce020 | |||
| f3aaeff0a9 | |||
| 98eff43346 | |||
| 46b43a990f | |||
| ea96cbf885 | |||
| de07870c99 | |||
| b3b228c26c | |||
| 27b5c80c3c | |||
| fb4d003e19 | |||
| f025e5741b | |||
| c3f2708f1b | |||
| 2e760d6397 | |||
| bac892b582 | |||
| 4005b68383 | |||
| 5ac9dd04e4 | |||
| f0c041e8b3 | |||
| 2f4a5b56dd | |||
| 940f97c9ae | |||
| f8ee664b27 | |||
| df86ad371b |
+106
@@ -1,3 +1,109 @@
|
|||||||
|
## [23.8.1] 6/28/2025
|
||||||
|
|
||||||
|
### Crash Fix
|
||||||
|
|
||||||
|
* Fix Possible Crashes with Raid Methods ([#4955](https://github.com/EQEmu/Server/pull/4955)) @Kinglykrab 2025-06-26
|
||||||
|
|
||||||
|
### Databuckets
|
||||||
|
|
||||||
|
* Revert Caching Changes of #4917 ([#4957](https://github.com/EQEmu/Server/pull/4957)) @Akkadius 2025-06-28
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
* Fix FindCharacter Using content_db ([#4956](https://github.com/EQEmu/Server/pull/4956)) @Kinglykrab 2025-06-26
|
||||||
|
* Fix Hero Forge on Character Select ([#4954](https://github.com/EQEmu/Server/pull/4954)) @Kinglykrab 2025-06-26
|
||||||
|
|
||||||
|
## [23.8.0] 6/25/2025
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
* Add wwmarquee <type> <message> ([#4919](https://github.com/EQEmu/Server/pull/4919)) @Akkadius 2025-06-23
|
||||||
|
|
||||||
|
### Build
|
||||||
|
|
||||||
|
* Significantly Improve Build Times Using Unity Builds ([#4948](https://github.com/EQEmu/Server/pull/4948)) @Akkadius 2025-06-22
|
||||||
|
|
||||||
|
### Code
|
||||||
|
|
||||||
|
* AdventureManager Global to Singleton Cleanup ([#4931](https://github.com/EQEmu/Server/pull/4931)) @Kinglykrab 2025-06-25
|
||||||
|
* Cleanup Strings Header ([#4950](https://github.com/EQEmu/Server/pull/4950)) @Akkadius 2025-06-22
|
||||||
|
* ClientList Global to Singleton Cleanup ([#4942](https://github.com/EQEmu/Server/pull/4942)) @Kinglykrab 2025-06-25
|
||||||
|
* DatabaseUpdate Global to Singleton Cleanup ([#4943](https://github.com/EQEmu/Server/pull/4943)) @Kinglykrab 2025-06-25
|
||||||
|
* DiscordManager Global to Singleton Cleanup ([#4926](https://github.com/EQEmu/Server/pull/4926)) @Kinglykrab 2025-06-25
|
||||||
|
* EQ::Random Global to Singleton Cleanup ([#4936](https://github.com/EQEmu/Server/pull/4936)) @Kinglykrab 2025-06-22
|
||||||
|
* EQEmuLogSys Global to Singleton Cleanup ([#4925](https://github.com/EQEmu/Server/pull/4925)) @Akkadius 2025-06-25
|
||||||
|
* EvolvingItemsManager Global to Singleton Cleanup ([#4929](https://github.com/EQEmu/Server/pull/4929)) @Kinglykrab 2025-06-25
|
||||||
|
* LFGuildManager Global to Singleton Cleanup ([#4927](https://github.com/EQEmu/Server/pull/4927)) @Kinglykrab 2025-06-25
|
||||||
|
* LoginServerList Global to Singleton Cleanup ([#4941](https://github.com/EQEmu/Server/pull/4941)) @Kinglykrab 2025-06-25
|
||||||
|
* Optimize PCH Config (Faster Builds) ([#4951](https://github.com/EQEmu/Server/pull/4951)) @Akkadius 2025-06-22
|
||||||
|
* PCH Cleanup ([#4952](https://github.com/EQEmu/Server/pull/4952)) @Akkadius 2025-06-25
|
||||||
|
* PathManager Global to Singleton Cleanup ([#4924](https://github.com/EQEmu/Server/pull/4924)) @Akkadius 2025-06-22
|
||||||
|
* PetitionList Global to Singleton Cleanup ([#4944](https://github.com/EQEmu/Server/pull/4944)) @Kinglykrab 2025-06-25
|
||||||
|
* PlayerEventLogs Global to Singleton Cleanup ([#4928](https://github.com/EQEmu/Server/pull/4928)) @Kinglykrab 2025-06-25
|
||||||
|
* QueryServConnection Global to Singleton Cleanup ([#4938](https://github.com/EQEmu/Server/pull/4938)) @Kinglykrab 2025-06-25
|
||||||
|
* Remove Lua Rule Constants ([#4949](https://github.com/EQEmu/Server/pull/4949)) @Akkadius 2025-06-22
|
||||||
|
* Remove Regex Compile Bloat ([#4947](https://github.com/EQEmu/Server/pull/4947)) @Akkadius 2025-06-22
|
||||||
|
* Remove Unused MZoneShutdown Mutex ([#4946](https://github.com/EQEmu/Server/pull/4946)) @Kinglykrab 2025-06-22
|
||||||
|
* SharedTaskManager Global to Singleton Cleanup ([#4930](https://github.com/EQEmu/Server/pull/4930)) @Kinglykrab 2025-06-25
|
||||||
|
* SkillCaps Global to Singleton Cleanup ([#4933](https://github.com/EQEmu/Server/pull/4933)) @Kinglykrab 2025-06-22
|
||||||
|
* TaskManager Global to Singleton Cleanup ([#4945](https://github.com/EQEmu/Server/pull/4945)) @Kinglykrab 2025-06-22
|
||||||
|
* UCSConnection Global to Singleton Cleanup ([#4937](https://github.com/EQEmu/Server/pull/4937)) @Kinglykrab 2025-06-25
|
||||||
|
* WebInterfaceList Global to Singleton Cleanup ([#4935](https://github.com/EQEmu/Server/pull/4935)) @Kinglykrab 2025-06-25
|
||||||
|
* WorldContentServer Global to Singleton Cleanup ([#4939](https://github.com/EQEmu/Server/pull/4939)) @Kinglykrab 2025-06-25
|
||||||
|
* WorldEventScheduler and ZoneEventScheduler Global to Singleton Cleanup ([#4932](https://github.com/EQEmu/Server/pull/4932)) @Kinglykrab 2025-06-25
|
||||||
|
* ZSList Global to Singleton Cleanup ([#4940](https://github.com/EQEmu/Server/pull/4940)) @Kinglykrab 2025-06-25
|
||||||
|
* ZoneStore Global to Singleton Cleanup ([#4934](https://github.com/EQEmu/Server/pull/4934)) @Kinglykrab 2025-06-23
|
||||||
|
|
||||||
|
### Corpses
|
||||||
|
|
||||||
|
* Add corpse entity variables to DB ([#4911](https://github.com/EQEmu/Server/pull/4911)) @fryguy503 2025-06-25
|
||||||
|
|
||||||
|
### Databuckets
|
||||||
|
|
||||||
|
* Move Databuckets to Common ([#4918](https://github.com/EQEmu/Server/pull/4918)) @Akkadius 2025-06-16
|
||||||
|
* Nested Caching ([#4917](https://github.com/EQEmu/Server/pull/4917)) @Akkadius 2025-06-25
|
||||||
|
|
||||||
|
### Doors
|
||||||
|
|
||||||
|
* Fix door saving for versions ([#4905](https://github.com/EQEmu/Server/pull/4905)) @nytmyr 2025-06-09
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
* Bulk Send Corpses after Idle State ([#4910](https://github.com/EQEmu/Server/pull/4910)) @Akkadius 2025-06-09
|
||||||
|
* Fix ClientList Singleton Shortcomings of #4942 @Akkadius 2025-06-25
|
||||||
|
* Fix breaking changes to Titanium, SoF, SoD patches causes by big bags update ([#4922](https://github.com/EQEmu/Server/pull/4922)) @regneq 2025-06-25
|
||||||
|
|
||||||
|
### Logs
|
||||||
|
|
||||||
|
* Fix output for tasks in logs ([#4907](https://github.com/EQEmu/Server/pull/4907)) @joligario 2025-06-09
|
||||||
|
|
||||||
|
### Performance
|
||||||
|
|
||||||
|
* Auto Idle / AFK ([#4903](https://github.com/EQEmu/Server/pull/4903)) @Akkadius 2025-05-22
|
||||||
|
* Wearchange Packet Send Deduplication ([#4916](https://github.com/EQEmu/Server/pull/4916)) @Akkadius 2025-06-25
|
||||||
|
|
||||||
|
### Player Event Logs
|
||||||
|
|
||||||
|
* Don't Clear Event Data on ETL Events ([#4913](https://github.com/EQEmu/Server/pull/4913)) @Akkadius 2025-06-25
|
||||||
|
|
||||||
|
### Player Events
|
||||||
|
|
||||||
|
* Don't Write Empty Data ([#4912](https://github.com/EQEmu/Server/pull/4912)) @Akkadius 2025-06-25
|
||||||
|
* Zone Fetch Settings from QS if Enabled ([#4915](https://github.com/EQEmu/Server/pull/4915)) @Akkadius 2025-06-25
|
||||||
|
|
||||||
|
### Quest API
|
||||||
|
|
||||||
|
* Add CompleteTask and UncompleteTask methods to Perl/Lua ([#4921](https://github.com/EQEmu/Server/pull/4921)) @Barathos 2025-06-25
|
||||||
|
* Lua Client Scoped EnableTitleSets ([#4914](https://github.com/EQEmu/Server/pull/4914)) @fryguy503 2025-06-25
|
||||||
|
|
||||||
|
### Quests
|
||||||
|
|
||||||
|
* Support Multiple Quest, Plugin, and Lua Module Paths ([#4906](https://github.com/EQEmu/Server/pull/4906)) @Akkadius 2025-06-09
|
||||||
|
|
||||||
|
### World API
|
||||||
|
|
||||||
|
* Input Validation ([#4904](https://github.com/EQEmu/Server/pull/4904)) @Akkadius 2025-05-22
|
||||||
|
|
||||||
## [23.7.0] 5/19/2025
|
## [23.7.0] 5/19/2025
|
||||||
|
|
||||||
### CLI
|
### CLI
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<b>EverQuest Emulator (EQEmu) - A Fan-Made Project Honoring the Legendary MMORPG</b>
|
<b>EQEmulator - A Fan-Made Project Honoring a Legendary MMORPG</b>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@@ -26,19 +26,19 @@
|
|||||||
***
|
***
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
EQEmulator is a <b>passion-driven</b>, <b>open source server emulator</b> project dedicated to preserving and celebrating the groundbreaking world of <b>EverQuest</b>, the massively multiplayer online role-playing game originally developed by <b>Verant Interactive</b> and <b>Sony Online Entertainment (now Daybreak Game Company)</b>.
|
EQEmulator is a <b>passion-driven</b>, <b>open source server emulator</b> project dedicated to preserving and celebrating the legacy of a groundbreaking classic MMORPG.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
For over two decades and continuing, EQEmulator has served as a <strong>fan tribute</strong>, providing tools and technology that allow players to explore, customize, and experience EverQuest’s iconic gameplay in new ways. This project exists solely out of <strong>deep admiration</strong> for the original developers, artists, designers, and visionaries who created one of the most influential online worlds of all time.
|
For over two decades and continuing, EQEmulator has served as a <strong>fan tribute</strong>, providing tools and technology that allow players to explore, customize, and experience the legendary game's iconic gameplay in new ways. This project exists solely out of <strong>deep admiration</strong> for the original developers, artists, designers, and visionaries who created one of the most influential online worlds of all time.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
We do not claim ownership of EverQuest or its assets. <strong>All credit and respect belong to the original creators and Daybreak Game Company</strong>, whose work continues to inspire generations of players and developers alike.
|
We do not claim ownership of the original game or its assets. <strong>All credit and respect belong to the original creators and Daybreak Game Company</strong>, whose work continues to inspire generations of players and developers alike.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
EQEmulator has for over 20 years and always will be a <strong>fan-based, non-commercial open-source effort</strong> made by players, for players—preserving the legacy of EverQuest while empowering community-driven creativity, learning and joy that the game and its creators has so strongly inspired in us all.
|
EQEmulator has for over 20 years and always will be a <strong>fan-based, non-commercial open-source effort</strong> made by players, for players—preserving the legacy of the game while empowering community-driven creativity, learning and joy that the game and its creators has so strongly inspired in us all.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
***
|
***
|
||||||
@@ -47,7 +47,7 @@ EQEmulator has for over 20 years and always will be a <strong>fan-based, non-com
|
|||||||
Technical Overview & Reverse Engineering Effort
|
Technical Overview & Reverse Engineering Effort
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<p align="center">EQEmulator represents <strong>over two decades of collaborative reverse engineering</strong>, rebuilding the EverQuest server from the ground up without access to the original source code. This effort was achieved entirely through <strong>community-driven analysis, network protocol decoding, and in-game behavioral research</strong>.</p>
|
<p align="center">EQEmulator represents <strong>over two decades of collaborative reverse engineering</strong>, building the server from the ground up without access to the original source code. This effort was achieved entirely through <strong>community-driven analysis, network protocol decoding, and in-game behavioral research</strong>.</p>
|
||||||
|
|
||||||
<h1 align="center">
|
<h1 align="center">
|
||||||
💡 How We Did It
|
💡 How We Did It
|
||||||
@@ -104,10 +104,10 @@ Every system, packet, opcode, and game mechanic has been reconstructed through c
|
|||||||
🚀 Why It Matters
|
🚀 Why It Matters
|
||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<p align="center">🧬 EQEmulator stands as a <strong>technical preservation project</strong>, ensuring that the magic of classic and custom EverQuest servers lives on for future generations of players, tinkerers, and game designers.
|
<p align="center">🧬 EQEmulator stands as a <strong>technical preservation project</strong>, ensuring that the magic of classic and custom servers lives on for future generations of players, tinkerers, and game designers.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
> We humbly acknowledge and thank the original developers at **Verant Interactive** and **Sony Online Entertainment (now Daybreak Game Company)** for creating one of the most influential online experiences in gaming history.
|
> We humbly acknowledge and thank the original developers for creating one of the most influential online experiences in gaming history.
|
||||||
|
|
||||||
<h1 align="center">
|
<h1 align="center">
|
||||||
🧑💻🖥️ Supported Clients
|
🧑💻🖥️ Supported Clients
|
||||||
@@ -148,4 +148,3 @@ If you want to set up your own EQEmulator server, please refer to the current [s
|
|||||||
<a href="https://github.com/EQEmu/server/graphs/contributors">
|
<a href="https://github.com/EQEmu/server/graphs/contributors">
|
||||||
<img src="https://contributors-img.firebaseapp.com/image?repo=EQEmu/server" />
|
<img src="https://contributors-img.firebaseapp.com/image?repo=EQEmu/server" />
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|||||||
@@ -38,13 +38,6 @@
|
|||||||
#include "../../common/skill_caps.h"
|
#include "../../common/skill_caps.h"
|
||||||
#include "../../common/evolving_items.h"
|
#include "../../common/evolving_items.h"
|
||||||
|
|
||||||
EQEmuLogSys LogSys;
|
|
||||||
WorldContentService content_service;
|
|
||||||
ZoneStore zone_store;
|
|
||||||
PathManager path;
|
|
||||||
PlayerEventLogs player_event_logs;
|
|
||||||
EvolvingItemsManager evolving_items_manager;
|
|
||||||
|
|
||||||
void ExportSpells(SharedDatabase *db);
|
void ExportSpells(SharedDatabase *db);
|
||||||
void ExportSkillCaps(SharedDatabase *db);
|
void ExportSkillCaps(SharedDatabase *db);
|
||||||
void ExportBaseData(SharedDatabase *db);
|
void ExportBaseData(SharedDatabase *db);
|
||||||
@@ -53,10 +46,10 @@ void ExportDBStrings(SharedDatabase *db);
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
RegisterExecutablePlatform(ExePlatformClientExport);
|
RegisterExecutablePlatform(ExePlatformClientExport);
|
||||||
LogSys.LoadLogSettingsDefaults();
|
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
|
||||||
set_exception_handler();
|
set_exception_handler();
|
||||||
|
|
||||||
path.LoadPaths();
|
PathManager::Instance()->Init();
|
||||||
|
|
||||||
LogInfo("Client Files Export Utility");
|
LogInfo("Client Files Export Utility");
|
||||||
if (!EQEmuConfig::LoadConfig()) {
|
if (!EQEmuConfig::LoadConfig()) {
|
||||||
@@ -99,8 +92,8 @@ int main(int argc, char **argv)
|
|||||||
content_db.SetMySQL(database);
|
content_db.SetMySQL(database);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSys.SetDatabase(&database)
|
EQEmuLogSys::Instance()->SetDatabase(&database)
|
||||||
->SetLogPath(path.GetLogPath())
|
->SetLogPath(PathManager::Instance()->GetLogPath())
|
||||||
->LoadLogDatabaseSettings()
|
->LoadLogDatabaseSettings()
|
||||||
->StartFileLogs();
|
->StartFileLogs();
|
||||||
|
|
||||||
@@ -129,14 +122,14 @@ int main(int argc, char **argv)
|
|||||||
ExportBaseData(&content_db);
|
ExportBaseData(&content_db);
|
||||||
ExportDBStrings(&database);
|
ExportDBStrings(&database);
|
||||||
|
|
||||||
LogSys.CloseFileLogs();
|
EQEmuLogSys::Instance()->CloseFileLogs();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExportSpells(SharedDatabase* db)
|
void ExportSpells(SharedDatabase* db)
|
||||||
{
|
{
|
||||||
std::ofstream file(fmt::format("{}/export/spells_us.txt", path.GetServerPath()));
|
std::ofstream file(fmt::format("{}/export/spells_us.txt", PathManager::Instance()->GetServerPath()));
|
||||||
if (!file || !file.is_open()) {
|
if (!file || !file.is_open()) {
|
||||||
LogError("Unable to open export/spells_us.txt to write, skipping.");
|
LogError("Unable to open export/spells_us.txt to write, skipping.");
|
||||||
return;
|
return;
|
||||||
@@ -155,7 +148,7 @@ void ExportSpells(SharedDatabase* db)
|
|||||||
|
|
||||||
void ExportSkillCaps(SharedDatabase* db)
|
void ExportSkillCaps(SharedDatabase* db)
|
||||||
{
|
{
|
||||||
std::ofstream file(fmt::format("{}/export/SkillCaps.txt", path.GetServerPath()));
|
std::ofstream file(fmt::format("{}/export/SkillCaps.txt", PathManager::Instance()->GetServerPath()));
|
||||||
if (!file || !file.is_open()) {
|
if (!file || !file.is_open()) {
|
||||||
LogError("Unable to open export/SkillCaps.txt to write, skipping.");
|
LogError("Unable to open export/SkillCaps.txt to write, skipping.");
|
||||||
return;
|
return;
|
||||||
@@ -174,7 +167,7 @@ void ExportSkillCaps(SharedDatabase* db)
|
|||||||
|
|
||||||
void ExportBaseData(SharedDatabase *db)
|
void ExportBaseData(SharedDatabase *db)
|
||||||
{
|
{
|
||||||
std::ofstream file(fmt::format("{}/export/BaseData.txt", path.GetServerPath()));
|
std::ofstream file(fmt::format("{}/export/BaseData.txt", PathManager::Instance()->GetServerPath()));
|
||||||
if (!file || !file.is_open()) {
|
if (!file || !file.is_open()) {
|
||||||
LogError("Unable to open export/BaseData.txt to write, skipping.");
|
LogError("Unable to open export/BaseData.txt to write, skipping.");
|
||||||
return;
|
return;
|
||||||
@@ -193,7 +186,7 @@ void ExportBaseData(SharedDatabase *db)
|
|||||||
|
|
||||||
void ExportDBStrings(SharedDatabase *db)
|
void ExportDBStrings(SharedDatabase *db)
|
||||||
{
|
{
|
||||||
std::ofstream file(fmt::format("{}/export/dbstr_us.txt", path.GetServerPath()));
|
std::ofstream file(fmt::format("{}/export/dbstr_us.txt", PathManager::Instance()->GetServerPath()));
|
||||||
if (!file || !file.is_open()) {
|
if (!file || !file.is_open()) {
|
||||||
LogError("Unable to open export/dbstr_us.txt to write, skipping.");
|
LogError("Unable to open export/dbstr_us.txt to write, skipping.");
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -32,13 +32,6 @@
|
|||||||
#include "../../common/events/player_event_logs.h"
|
#include "../../common/events/player_event_logs.h"
|
||||||
#include "../../common/evolving_items.h"
|
#include "../../common/evolving_items.h"
|
||||||
|
|
||||||
EQEmuLogSys LogSys;
|
|
||||||
WorldContentService content_service;
|
|
||||||
ZoneStore zone_store;
|
|
||||||
PathManager path;
|
|
||||||
PlayerEventLogs player_event_logs;
|
|
||||||
EvolvingItemsManager evolving_items_manager;
|
|
||||||
|
|
||||||
void ImportSpells(SharedDatabase *db);
|
void ImportSpells(SharedDatabase *db);
|
||||||
void ImportSkillCaps(SharedDatabase *db);
|
void ImportSkillCaps(SharedDatabase *db);
|
||||||
void ImportBaseData(SharedDatabase *db);
|
void ImportBaseData(SharedDatabase *db);
|
||||||
@@ -46,10 +39,10 @@ void ImportDBStrings(SharedDatabase *db);
|
|||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
RegisterExecutablePlatform(ExePlatformClientImport);
|
RegisterExecutablePlatform(ExePlatformClientImport);
|
||||||
LogSys.LoadLogSettingsDefaults();
|
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
|
||||||
set_exception_handler();
|
set_exception_handler();
|
||||||
|
|
||||||
path.LoadPaths();
|
PathManager::Instance()->Init();
|
||||||
|
|
||||||
LogInfo("Client Files Import Utility");
|
LogInfo("Client Files Import Utility");
|
||||||
if(!EQEmuConfig::LoadConfig()) {
|
if(!EQEmuConfig::LoadConfig()) {
|
||||||
@@ -92,8 +85,8 @@ int main(int argc, char **argv) {
|
|||||||
content_db.SetMySQL(database);
|
content_db.SetMySQL(database);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSys.SetDatabase(&database)
|
EQEmuLogSys::Instance()->SetDatabase(&database)
|
||||||
->SetLogPath(path.GetLogPath())
|
->SetLogPath(PathManager::Instance()->GetLogPath())
|
||||||
->LoadLogDatabaseSettings()
|
->LoadLogDatabaseSettings()
|
||||||
->StartFileLogs();
|
->StartFileLogs();
|
||||||
|
|
||||||
@@ -102,7 +95,7 @@ int main(int argc, char **argv) {
|
|||||||
ImportBaseData(&content_db);
|
ImportBaseData(&content_db);
|
||||||
ImportDBStrings(&database);
|
ImportDBStrings(&database);
|
||||||
|
|
||||||
LogSys.CloseFileLogs();
|
EQEmuLogSys::Instance()->CloseFileLogs();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -138,7 +131,7 @@ bool IsStringField(int i) {
|
|||||||
|
|
||||||
void ImportSpells(SharedDatabase *db) {
|
void ImportSpells(SharedDatabase *db) {
|
||||||
LogInfo("Importing Spells");
|
LogInfo("Importing Spells");
|
||||||
std::string file = fmt::format("{}/import/spells_us.txt", path.GetServerPath());
|
std::string file = fmt::format("{}/import/spells_us.txt", PathManager::Instance()->GetServerPath());
|
||||||
FILE *f = fopen(file.c_str(), "r");
|
FILE *f = fopen(file.c_str(), "r");
|
||||||
if(!f) {
|
if(!f) {
|
||||||
LogError("Unable to open {} to read, skipping.", file);
|
LogError("Unable to open {} to read, skipping.", file);
|
||||||
@@ -228,7 +221,7 @@ void ImportSpells(SharedDatabase *db) {
|
|||||||
void ImportSkillCaps(SharedDatabase *db) {
|
void ImportSkillCaps(SharedDatabase *db) {
|
||||||
LogInfo("Importing Skill Caps");
|
LogInfo("Importing Skill Caps");
|
||||||
|
|
||||||
std::string file = fmt::format("{}/import/SkillCaps.txt", path.GetServerPath());
|
std::string file = fmt::format("{}/import/SkillCaps.txt", PathManager::Instance()->GetServerPath());
|
||||||
FILE *f = fopen(file.c_str(), "r");
|
FILE *f = fopen(file.c_str(), "r");
|
||||||
if(!f) {
|
if(!f) {
|
||||||
LogError("Unable to open {} to read, skipping.", file);
|
LogError("Unable to open {} to read, skipping.", file);
|
||||||
@@ -265,7 +258,7 @@ void ImportBaseData(SharedDatabase *db)
|
|||||||
{
|
{
|
||||||
LogInfo("Importing Base Data");
|
LogInfo("Importing Base Data");
|
||||||
|
|
||||||
const std::string& file_name = fmt::format("{}/import/BaseData.txt", path.GetServerPath());
|
const std::string& file_name = fmt::format("{}/import/BaseData.txt", PathManager::Instance()->GetServerPath());
|
||||||
|
|
||||||
const auto& file_contents = File::GetContents(file_name);
|
const auto& file_contents = File::GetContents(file_name);
|
||||||
if (!file_contents.error.empty()) {
|
if (!file_contents.error.empty()) {
|
||||||
@@ -305,7 +298,7 @@ void ImportBaseData(SharedDatabase *db)
|
|||||||
void ImportDBStrings(SharedDatabase *db) {
|
void ImportDBStrings(SharedDatabase *db) {
|
||||||
LogInfo("Importing DB Strings");
|
LogInfo("Importing DB Strings");
|
||||||
|
|
||||||
std::string file = fmt::format("{}/import/dbstr_us.txt", path.GetServerPath());
|
std::string file = fmt::format("{}/import/dbstr_us.txt", PathManager::Instance()->GetServerPath());
|
||||||
FILE *f = fopen(file.c_str(), "r");
|
FILE *f = fopen(file.c_str(), "r");
|
||||||
if(!f) {
|
if(!f) {
|
||||||
LogError("Unable to open {} to read, skipping.", file);
|
LogError("Unable to open {} to read, skipping.", file);
|
||||||
|
|||||||
@@ -842,7 +842,7 @@ IF (UNIX)
|
|||||||
ENDIF (UNIX)
|
ENDIF (UNIX)
|
||||||
|
|
||||||
IF (WIN32 AND EQEMU_BUILD_PCH)
|
IF (WIN32 AND EQEMU_BUILD_PCH)
|
||||||
TARGET_PRECOMPILE_HEADERS(common PRIVATE pch/pch.h)
|
TARGET_PRECOMPILE_HEADERS(common PRIVATE pch/std-pch.h)
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ WorldContentService *WorldContentService::SetExpansionContext()
|
|||||||
// pull expansion from rules
|
// pull expansion from rules
|
||||||
int expansion = RuleI(Expansion, CurrentExpansion);
|
int expansion = RuleI(Expansion, CurrentExpansion);
|
||||||
if (expansion >= Expansion::Classic && expansion <= Expansion::MaxId) {
|
if (expansion >= Expansion::Classic && expansion <= Expansion::MaxId) {
|
||||||
content_service.SetCurrentExpansion(expansion);
|
WorldContentService::Instance()->SetCurrentExpansion(expansion);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogInfo(
|
LogInfo(
|
||||||
@@ -41,12 +41,12 @@ WorldContentService *WorldContentService::SetExpansionContext()
|
|||||||
|
|
||||||
std::string WorldContentService::GetCurrentExpansionName()
|
std::string WorldContentService::GetCurrentExpansionName()
|
||||||
{
|
{
|
||||||
if (content_service.GetCurrentExpansion() == Expansion::EXPANSION_ALL) {
|
if (WorldContentService::Instance()->GetCurrentExpansion() == Expansion::EXPANSION_ALL) {
|
||||||
return "All Expansions";
|
return "All Expansions";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (current_expansion >= Expansion::Classic && current_expansion <= Expansion::MaxId) {
|
if (current_expansion >= Expansion::Classic && current_expansion <= Expansion::MaxId) {
|
||||||
return Expansion::ExpansionName[content_service.GetCurrentExpansion()];
|
return Expansion::ExpansionName[WorldContentService::Instance()->GetCurrentExpansion()];
|
||||||
}
|
}
|
||||||
|
|
||||||
return "Unknown Expansion";
|
return "Unknown Expansion";
|
||||||
@@ -185,7 +185,7 @@ void WorldContentService::ReloadContentFlags()
|
|||||||
|
|
||||||
SetContentFlags(set_content_flags);
|
SetContentFlags(set_content_flags);
|
||||||
LoadStaticGlobalZoneInstances();
|
LoadStaticGlobalZoneInstances();
|
||||||
zone_store.LoadZones(*m_content_database);
|
ZoneStore::Instance()->LoadZones(*m_content_database);
|
||||||
}
|
}
|
||||||
|
|
||||||
Database *WorldContentService::GetDatabase() const
|
Database *WorldContentService::GetDatabase() const
|
||||||
@@ -291,7 +291,7 @@ WorldContentService *WorldContentService::LoadStaticGlobalZoneInstances()
|
|||||||
// instance_list table entry for lavastorm has version = 1, is_global = 1, never_expires = 1
|
// instance_list table entry for lavastorm has version = 1, is_global = 1, never_expires = 1
|
||||||
WorldContentService::FindZoneResult WorldContentService::FindZone(uint32 zone_id, uint32 instance_id)
|
WorldContentService::FindZoneResult WorldContentService::FindZone(uint32 zone_id, uint32 instance_id)
|
||||||
{
|
{
|
||||||
for (const auto &z: zone_store.GetZones()) {
|
for (const auto &z: ZoneStore::Instance()->GetZones()) {
|
||||||
for (auto &i: m_zone_static_instances) {
|
for (auto &i: m_zone_static_instances) {
|
||||||
if (
|
if (
|
||||||
z.zoneidnumber == zone_id &&
|
z.zoneidnumber == zone_id &&
|
||||||
|
|||||||
@@ -181,6 +181,12 @@ public:
|
|||||||
FindZoneResult FindZone(uint32 zone_id, uint32 instance_id);
|
FindZoneResult FindZone(uint32 zone_id, uint32 instance_id);
|
||||||
bool IsInPublicStaticInstance(uint32 instance_id);
|
bool IsInPublicStaticInstance(uint32 instance_id);
|
||||||
|
|
||||||
|
static WorldContentService* Instance()
|
||||||
|
{
|
||||||
|
static WorldContentService instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int current_expansion{};
|
int current_expansion{};
|
||||||
std::vector<ContentFlagsRepository::ContentFlags> content_flags;
|
std::vector<ContentFlagsRepository::ContentFlags> content_flags;
|
||||||
@@ -194,6 +200,4 @@ private:
|
|||||||
std::vector<InstanceListRepository::InstanceList> m_zone_static_instances;
|
std::vector<InstanceListRepository::InstanceList> m_zone_static_instances;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern WorldContentService content_service;
|
|
||||||
|
|
||||||
#endif //EQEMU_WORLD_CONTENT_SERVICE_H
|
#endif //EQEMU_WORLD_CONTENT_SERVICE_H
|
||||||
|
|||||||
+7
-5
@@ -27,6 +27,8 @@ void SendCrashReport(const std::string &crash_report)
|
|||||||
// "http://localhost:3010/api/v1/analytics/server-crash-report", // development
|
// "http://localhost:3010/api/v1/analytics/server-crash-report", // development
|
||||||
};
|
};
|
||||||
|
|
||||||
|
EQEmuLogSys* log = EQEmuLogSys::Instance();
|
||||||
|
|
||||||
auto config = EQEmuConfig::get();
|
auto config = EQEmuConfig::get();
|
||||||
for (auto &e: endpoints) {
|
for (auto &e: endpoints) {
|
||||||
uri u(e);
|
uri u(e);
|
||||||
@@ -68,12 +70,12 @@ void SendCrashReport(const std::string &crash_report)
|
|||||||
p["cpus"] = cpus.size();
|
p["cpus"] = cpus.size();
|
||||||
p["origination_info"] = "";
|
p["origination_info"] = "";
|
||||||
|
|
||||||
if (!LogSys.origination_info.zone_short_name.empty()) {
|
if (!log->origination_info.zone_short_name.empty()) {
|
||||||
p["origination_info"] = fmt::format(
|
p["origination_info"] = fmt::format(
|
||||||
"{} ({}) instance_id [{}]",
|
"{} ({}) instance_id [{}]",
|
||||||
LogSys.origination_info.zone_short_name,
|
log->origination_info.zone_short_name,
|
||||||
LogSys.origination_info.zone_long_name,
|
log->origination_info.zone_long_name,
|
||||||
LogSys.origination_info.instance_id
|
log->origination_info.instance_id
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,7 +296,7 @@ void print_trace()
|
|||||||
SendCrashReport(crash_report);
|
SendCrashReport(crash_report);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSys.CloseFileLogs();
|
EQEmuLogSys::Instance()->CloseFileLogs();
|
||||||
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-1
@@ -708,6 +708,20 @@ const std::string Database::GetNPCNameByID(uint32 npc_id)
|
|||||||
return e.id ? e.name : std::string();
|
return e.id ? e.name : std::string();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename InputIterator, typename OutputIterator>
|
||||||
|
inline auto CleanMobName(InputIterator first, InputIterator last, OutputIterator result)
|
||||||
|
{
|
||||||
|
for (; first != last; ++first) {
|
||||||
|
if (*first == '_') {
|
||||||
|
*result = ' ';
|
||||||
|
}
|
||||||
|
else if (isalpha(*first) || *first == '`') {
|
||||||
|
*result = *first;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
const std::string Database::GetCleanNPCNameByID(uint32 npc_id)
|
const std::string Database::GetCleanNPCNameByID(uint32 npc_id)
|
||||||
{
|
{
|
||||||
const auto& e = NpcTypesRepository::FindOne(*this, npc_id);
|
const auto& e = NpcTypesRepository::FindOne(*this, npc_id);
|
||||||
@@ -2230,7 +2244,7 @@ void Database::PurgeCharacterParcels()
|
|||||||
pel.event_data = ss.str();
|
pel.event_data = ss.str();
|
||||||
pel.created_at = std::time(nullptr);
|
pel.created_at = std::time(nullptr);
|
||||||
|
|
||||||
player_event_logs.AddToQueue(pel);
|
PlayerEventLogs::Instance()->AddToQueue(pel);
|
||||||
|
|
||||||
ss.str("");
|
ss.str("");
|
||||||
ss.clear();
|
ss.clear();
|
||||||
|
|||||||
@@ -204,7 +204,7 @@ void DatabaseDumpService::DatabaseDump()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (IsDumpOutputToConsole()) {
|
if (IsDumpOutputToConsole()) {
|
||||||
LogSys.SilenceConsoleLogging();
|
EQEmuLogSys::Instance()->SilenceConsoleLogging();
|
||||||
}
|
}
|
||||||
|
|
||||||
LogInfo("MySQL installed [{}]", GetMySQLVersion());
|
LogInfo("MySQL installed [{}]", GetMySQLVersion());
|
||||||
@@ -324,7 +324,7 @@ void DatabaseDumpService::DatabaseDump()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!IsDumpOutputToConsole()) {
|
if (!IsDumpOutputToConsole()) {
|
||||||
LogSys.LoadLogSettingsDefaults();
|
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pipe_file.empty()) {
|
if (!pipe_file.empty()) {
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ bool DatabaseUpdate::UpdateManifest(
|
|||||||
std::vector<int> missing_migrations = {};
|
std::vector<int> missing_migrations = {};
|
||||||
if (version_low != version_high) {
|
if (version_low != version_high) {
|
||||||
|
|
||||||
LogSys.DisableMySQLErrorLogs();
|
EQEmuLogSys::Instance()->DisableMySQLErrorLogs();
|
||||||
bool force_interactive = false;
|
bool force_interactive = false;
|
||||||
for (int version = version_low + 1; version <= version_high; ++version) {
|
for (int version = version_low + 1; version <= version_high; ++version) {
|
||||||
for (auto &e: entries) {
|
for (auto &e: entries) {
|
||||||
@@ -184,7 +184,7 @@ bool DatabaseUpdate::UpdateManifest(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LogSys.EnableMySQLErrorLogs();
|
EQEmuLogSys::Instance()->EnableMySQLErrorLogs();
|
||||||
LogInfo("{}", Strings::Repeat("-", BREAK_LENGTH));
|
LogInfo("{}", Strings::Repeat("-", BREAK_LENGTH));
|
||||||
|
|
||||||
if (!missing_migrations.empty() && m_skip_backup) {
|
if (!missing_migrations.empty() && m_skip_backup) {
|
||||||
|
|||||||
@@ -33,6 +33,13 @@ public:
|
|||||||
DatabaseUpdate *SetContentDatabase(Database *db);
|
DatabaseUpdate *SetContentDatabase(Database *db);
|
||||||
DatabaseUpdate *SetSkipBackup(bool skip);
|
DatabaseUpdate *SetSkipBackup(bool skip);
|
||||||
bool HasPendingUpdates();
|
bool HasPendingUpdates();
|
||||||
|
|
||||||
|
static DatabaseUpdate* Instance()
|
||||||
|
{
|
||||||
|
static DatabaseUpdate instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool m_skip_backup = false;
|
bool m_skip_backup = false;
|
||||||
Database *m_database;
|
Database *m_database;
|
||||||
|
|||||||
@@ -7109,6 +7109,30 @@ ALTER TABLE `npc_types`
|
|||||||
ALTER TABLE `character_data`
|
ALTER TABLE `character_data`
|
||||||
CHANGE COLUMN `firstlogon` `ingame` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 AFTER `xtargets`,
|
CHANGE COLUMN `firstlogon` `ingame` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 AFTER `xtargets`,
|
||||||
ADD COLUMN `first_login` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `xtargets`;
|
ADD COLUMN `first_login` int(11) UNSIGNED NOT NULL DEFAULT 0 AFTER `xtargets`;
|
||||||
|
)",
|
||||||
|
.content_schema_update = false
|
||||||
|
},
|
||||||
|
ManifestEntry{
|
||||||
|
.version = 9324,
|
||||||
|
.description = "2025_06_11_player_event_logs_table.sql",
|
||||||
|
.check = "SHOW CREATE TABLE `player_event_logs`",
|
||||||
|
.condition = "missing",
|
||||||
|
.match = "COMPRESS",
|
||||||
|
.sql = R"(
|
||||||
|
ALTER TABLE player_event_logs ROW_FORMAT=COMPRESSED;
|
||||||
|
CREATE INDEX idx_event_type_char_id ON player_event_logs (event_type_id, character_id);
|
||||||
|
)",
|
||||||
|
.content_schema_update = false
|
||||||
|
},
|
||||||
|
ManifestEntry{
|
||||||
|
.version = 9325,
|
||||||
|
.description = "2025_06_10_character_corpses_entity_variables.sql",
|
||||||
|
.check = "SHOW COLUMNS FROM `character_corpses` LIKE 'entity_variables'",
|
||||||
|
.condition = "empty",
|
||||||
|
.match = "",
|
||||||
|
.sql = R"(
|
||||||
|
ALTER TABLE `character_corpses`
|
||||||
|
ADD COLUMN `entity_variables` TEXT DEFAULT NULL AFTER `rezzable`;
|
||||||
)",
|
)",
|
||||||
.content_schema_update = false
|
.content_schema_update = false
|
||||||
},
|
},
|
||||||
|
|||||||
+1
-1
@@ -160,7 +160,7 @@ MySQLRequestResult DBcore::QueryDatabase(const char *query, uint32 querylen, boo
|
|||||||
(uint32) mysql_insert_id(mysql)
|
(uint32) mysql_insert_id(mysql)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (LogSys.log_settings[Logs::MySQLQuery].is_category_enabled == 1) {
|
if (EQEmuLogSys::Instance()->log_settings[Logs::MySQLQuery].is_category_enabled == 1) {
|
||||||
if ((strncasecmp(query, "select", 6) == 0)) {
|
if ((strncasecmp(query, "select", 6) == 0)) {
|
||||||
LogMySQLQuery(
|
LogMySQLQuery(
|
||||||
"{0} -- ({1} row{2} returned) ({3}s)",
|
"{0} -- ({1} row{2} returned) ({3}s)",
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ void DiscordManager::ProcessMessageQueue()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto webhook = LogSys.GetDiscordWebhooks()[q.first];
|
auto webhook = EQEmuLogSys::Instance()->GetDiscordWebhooks()[q.first];
|
||||||
std::string message;
|
std::string message;
|
||||||
|
|
||||||
for (auto &m: q.second) {
|
for (auto &m: q.second) {
|
||||||
@@ -68,7 +68,7 @@ void DiscordManager::ProcessMessageQueue()
|
|||||||
|
|
||||||
void DiscordManager::QueuePlayerEventMessage(const PlayerEvent::PlayerEventContainer& e)
|
void DiscordManager::QueuePlayerEventMessage(const PlayerEvent::PlayerEventContainer& e)
|
||||||
{
|
{
|
||||||
auto w = player_event_logs.GetDiscordWebhookUrlFromEventType(e.player_event_log.event_type_id);
|
auto w = PlayerEventLogs::Instance()->GetDiscordWebhookUrlFromEventType(e.player_event_log.event_type_id);
|
||||||
if (!w.empty()) {
|
if (!w.empty()) {
|
||||||
Discord::SendPlayerEventMessage(e, w);
|
Discord::SendPlayerEventMessage(e, w);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,12 @@ public:
|
|||||||
void QueueWebhookMessage(uint32 webhook_id, const std::string& message);
|
void QueueWebhookMessage(uint32 webhook_id, const std::string& message);
|
||||||
void ProcessMessageQueue();
|
void ProcessMessageQueue();
|
||||||
void QueuePlayerEventMessage(const PlayerEvent::PlayerEventContainer& e);
|
void QueuePlayerEventMessage(const PlayerEvent::PlayerEventContainer& e);
|
||||||
|
|
||||||
|
static DiscordManager* Instance()
|
||||||
|
{
|
||||||
|
static DiscordManager instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
std::mutex webhook_queue_lock{};
|
std::mutex webhook_queue_lock{};
|
||||||
std::map<uint32, std::vector<std::string>> webhook_message_queue{};
|
std::map<uint32, std::vector<std::string>> webhook_message_queue{};
|
||||||
|
|||||||
@@ -545,13 +545,13 @@ void EQStream::SendPacket(uint16 opcode, EQApplicationPacket *p)
|
|||||||
uint32 chunksize, used;
|
uint32 chunksize, used;
|
||||||
uint32 length;
|
uint32 length;
|
||||||
|
|
||||||
if (LogSys.log_settings[Logs::Server_Client_Packet].is_category_enabled == 1){
|
if (EQEmuLogSys::Instance()->log_settings[Logs::Server_Client_Packet].is_category_enabled == 1){
|
||||||
if (p->GetOpcode() != OP_SpecialMesg){
|
if (p->GetOpcode() != OP_SpecialMesg){
|
||||||
Log(Logs::General, Logs::Server_Client_Packet, "[%s - 0x%04x] [Size: %u]", OpcodeManager::EmuToName(p->GetOpcode()), p->GetOpcode(), p->Size());
|
Log(Logs::General, Logs::Server_Client_Packet, "[%s - 0x%04x] [Size: %u]", OpcodeManager::EmuToName(p->GetOpcode()), p->GetOpcode(), p->Size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LogSys.log_settings[Logs::Server_Client_Packet_With_Dump].is_category_enabled == 1){
|
if (EQEmuLogSys::Instance()->log_settings[Logs::Server_Client_Packet_With_Dump].is_category_enabled == 1){
|
||||||
if (p->GetOpcode() != OP_SpecialMesg){
|
if (p->GetOpcode() != OP_SpecialMesg){
|
||||||
Log(Logs::General, Logs::Server_Client_Packet_With_Dump, "[%s - 0x%04x] [Size: %u] %s", OpcodeManager::EmuToName(p->GetOpcode()), p->GetOpcode(), p->Size(), DumpPacketToString(p).c_str());
|
Log(Logs::General, Logs::Server_Client_Packet_With_Dump, "[%s - 0x%04x] [Size: %u] %s", OpcodeManager::EmuToName(p->GetOpcode()), p->GetOpcode(), p->Size(), DumpPacketToString(p).c_str());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -436,11 +436,11 @@ void EQEmuConfig::CheckUcsConfigConversion()
|
|||||||
LogInfo("Migrating old [eqemu_config] UCS configuration to new configuration");
|
LogInfo("Migrating old [eqemu_config] UCS configuration to new configuration");
|
||||||
|
|
||||||
std::string config_file_path = std::filesystem::path{
|
std::string config_file_path = std::filesystem::path{
|
||||||
path.GetServerPath() + "/eqemu_config.json"
|
PathManager::Instance()->GetServerPath() + "/eqemu_config.json"
|
||||||
}.string();
|
}.string();
|
||||||
|
|
||||||
std::string config_file_bak_path = std::filesystem::path{
|
std::string config_file_bak_path = std::filesystem::path{
|
||||||
path.GetServerPath() + "/eqemu_config.ucs-migrate-json.bak"
|
PathManager::Instance()->GetServerPath() + "/eqemu_config.ucs-migrate-json.bak"
|
||||||
}.string();
|
}.string();
|
||||||
|
|
||||||
// copy eqemu_config.json to eqemu_config.json.bak
|
// copy eqemu_config.json to eqemu_config.json.bak
|
||||||
|
|||||||
@@ -191,7 +191,7 @@ class EQEmuConfig
|
|||||||
|
|
||||||
std::string file = fmt::format(
|
std::string file = fmt::format(
|
||||||
"{}/{}",
|
"{}/{}",
|
||||||
(file_path.empty() ? path.GetServerPath() : file_path),
|
(file_path.empty() ? PathManager::Instance()->GetServerPath() : file_path),
|
||||||
EQEmuConfig::ConfigFile
|
EQEmuConfig::ConfigFile
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -537,9 +537,9 @@ void EQEmuLogSys::StartFileLogs(const std::string &log_name)
|
|||||||
{
|
{
|
||||||
EQEmuLogSys::CloseFileLogs();
|
EQEmuLogSys::CloseFileLogs();
|
||||||
|
|
||||||
if (!File::Exists(path.GetLogPath())) {
|
if (!File::Exists(PathManager::Instance()->GetLogPath())) {
|
||||||
LogInfo("Logs directory not found, creating [{}]", path.GetLogPath());
|
LogInfo("Logs directory not found, creating [{}]", PathManager::Instance()->GetLogPath());
|
||||||
File::Makedir(path.GetLogPath());
|
File::Makedir(PathManager::Instance()->GetLogPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -656,7 +656,7 @@ EQEmuLogSys *EQEmuLogSys::LoadLogDatabaseSettings(bool silent_load)
|
|||||||
// If we go through this whole loop and nothing is set to any debug level, there
|
// If we go through this whole loop and nothing is set to any debug level, there
|
||||||
// is no point to create a file or keep anything open
|
// is no point to create a file or keep anything open
|
||||||
if (log_settings[c.log_category_id].log_to_file > 0) {
|
if (log_settings[c.log_category_id].log_to_file > 0) {
|
||||||
LogSys.m_file_logs_enabled = true;
|
m_file_logs_enabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
db_categories.emplace_back(c.log_category_id);
|
db_categories.emplace_back(c.log_category_id);
|
||||||
|
|||||||
+12
-18
@@ -266,8 +266,6 @@ namespace Logs {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "eqemu_logsys_log_aliases.h"
|
|
||||||
|
|
||||||
class Database;
|
class Database;
|
||||||
|
|
||||||
constexpr uint16 MAX_DISCORD_WEBHOOK_ID = 300;
|
constexpr uint16 MAX_DISCORD_WEBHOOK_ID = 300;
|
||||||
@@ -285,6 +283,12 @@ public:
|
|||||||
EQEmuLogSys *LoadLogSettingsDefaults();
|
EQEmuLogSys *LoadLogSettingsDefaults();
|
||||||
EQEmuLogSys *LoadLogDatabaseSettings(bool silent_load = false);
|
EQEmuLogSys *LoadLogDatabaseSettings(bool silent_load = false);
|
||||||
|
|
||||||
|
static EQEmuLogSys *Instance()
|
||||||
|
{
|
||||||
|
static EQEmuLogSys instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param directory_name
|
* @param directory_name
|
||||||
*/
|
*/
|
||||||
@@ -350,7 +354,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Internally used memory reference for all log settings per category
|
* Internally used memory reference for all log settings per category
|
||||||
* These are loaded via DB and have defaults loaded in LoadLogSettingsDefaults
|
* These are loaded via DB and have defaults loaded in LoadLogSettingsDefaults
|
||||||
* Database loaded via LogSys.SetDatabase(&database)->LoadLogDatabaseSettings();
|
* Database loaded via EQEmuLogSys::Instance()->SetDatabase(&database)->LoadLogDatabaseSettings();
|
||||||
*/
|
*/
|
||||||
LogSettings log_settings[Logs::LogCategory::MaxCategoryID]{};
|
LogSettings log_settings[Logs::LogCategory::MaxCategoryID]{};
|
||||||
|
|
||||||
@@ -434,7 +438,7 @@ private:
|
|||||||
void InjectTablesIfNotExist();
|
void InjectTablesIfNotExist();
|
||||||
};
|
};
|
||||||
|
|
||||||
extern EQEmuLogSys LogSys;
|
#include "eqemu_logsys_log_aliases.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
@@ -454,19 +458,9 @@ void OutF(
|
|||||||
}
|
}
|
||||||
**/
|
**/
|
||||||
|
|
||||||
template<typename... Args>
|
#define OutF(ls, debug_level, log_category, file, func, line, formatStr, ...) \
|
||||||
inline void OutF(
|
do { \
|
||||||
EQEmuLogSys& ls,
|
ls->Out(debug_level, log_category, file, func, line, fmt::format(formatStr, ##__VA_ARGS__).c_str()); \
|
||||||
Logs::DebugLevel debug_level,
|
} while(0)
|
||||||
uint16 log_category,
|
|
||||||
const char* file,
|
|
||||||
const char* func,
|
|
||||||
int line,
|
|
||||||
fmt::format_string<Args...> fmt_str,
|
|
||||||
Args&&... args
|
|
||||||
) {
|
|
||||||
std::string formatted = fmt::format(fmt_str, std::forward<Args>(args)...);
|
|
||||||
ls.Out(debug_level, log_category, file, func, line, formatted.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+366
-364
File diff suppressed because it is too large
Load Diff
@@ -716,7 +716,7 @@ std::string PlayerEventDiscordFormatter::FormatNPCHandinEvent(
|
|||||||
);
|
);
|
||||||
|
|
||||||
for (int i = 0; i < h.augment_ids.size(); i++) {
|
for (int i = 0; i < h.augment_ids.size(); i++) {
|
||||||
if (!Strings::EqualFold(h.augment_names[i], "None")) {
|
if (!h.augment_names[i].empty()) {
|
||||||
const uint8 slot_id = (i + 1);
|
const uint8 slot_id = (i + 1);
|
||||||
handin_items_info += fmt::format(
|
handin_items_info += fmt::format(
|
||||||
"Augment {}: {} ({})\n",
|
"Augment {}: {} ({})\n",
|
||||||
@@ -741,7 +741,7 @@ std::string PlayerEventDiscordFormatter::FormatNPCHandinEvent(
|
|||||||
);
|
);
|
||||||
|
|
||||||
for (int i = 0; i < r.augment_ids.size(); i++) {
|
for (int i = 0; i < r.augment_ids.size(); i++) {
|
||||||
if (!Strings::EqualFold(r.augment_names[i], "None")) {
|
if (!r.augment_names[i].empty()) {
|
||||||
const uint8 slot_id = (i + 1);
|
const uint8 slot_id = (i + 1);
|
||||||
return_items_info += fmt::format(
|
return_items_info += fmt::format(
|
||||||
"Augment {}: {} ({})\n",
|
"Augment {}: {} ({})\n",
|
||||||
|
|||||||
@@ -195,10 +195,12 @@ void PlayerEventLogs::ProcessBatchQueue()
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Helper to assign ETL table ID
|
// Helper to assign ETL table ID
|
||||||
|
|
||||||
auto AssignEtlId = [&](
|
auto AssignEtlId = [&](
|
||||||
PlayerEventLogsRepository::PlayerEventLogs &r,
|
PlayerEventLogsRepository::PlayerEventLogs& r,
|
||||||
PlayerEvent::EventType type
|
PlayerEvent::EventType type
|
||||||
) {
|
)
|
||||||
|
{
|
||||||
if (m_etl_settings.contains(type)) {
|
if (m_etl_settings.contains(type)) {
|
||||||
r.etl_table_id = m_etl_settings.at(type).next_id++;
|
r.etl_table_id = m_etl_settings.at(type).next_id++;
|
||||||
}
|
}
|
||||||
@@ -406,7 +408,6 @@ void PlayerEventLogs::ProcessBatchQueue()
|
|||||||
auto it = event_processors.find(static_cast<PlayerEvent::EventType>(r.event_type_id));
|
auto it = event_processors.find(static_cast<PlayerEvent::EventType>(r.event_type_id));
|
||||||
if (it != event_processors.end()) {
|
if (it != event_processors.end()) {
|
||||||
it->second(r); // Call the appropriate lambda
|
it->second(r); // Call the appropriate lambda
|
||||||
r.event_data = "{}"; // Clear event data
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
LogPlayerEventsDetail("Non-Implemented ETL routing [{}]", r.event_type_id);
|
LogPlayerEventsDetail("Non-Implemented ETL routing [{}]", r.event_type_id);
|
||||||
@@ -508,7 +509,7 @@ bool PlayerEventLogs::IsEventDiscordEnabled(int32_t event_type_id)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ensure there is a matching webhook to begin with
|
// ensure there is a matching webhook to begin with
|
||||||
if (!LogSys.GetDiscordWebhooks()[m_settings[event_type_id].discord_webhook_id].webhook_url.empty()) {
|
if (!EQEmuLogSys::Instance()->GetDiscordWebhooks()[m_settings[event_type_id].discord_webhook_id].webhook_url.empty()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -528,13 +529,27 @@ std::string PlayerEventLogs::GetDiscordWebhookUrlFromEventType(int32_t event_typ
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ensure there is a matching webhook to begin with
|
// ensure there is a matching webhook to begin with
|
||||||
if (!LogSys.GetDiscordWebhooks()[m_settings[event_type_id].discord_webhook_id].webhook_url.empty()) {
|
if (!EQEmuLogSys::Instance()->GetDiscordWebhooks()[m_settings[event_type_id].discord_webhook_id].webhook_url.empty()) {
|
||||||
return LogSys.GetDiscordWebhooks()[m_settings[event_type_id].discord_webhook_id].webhook_url;
|
return EQEmuLogSys::Instance()->GetDiscordWebhooks()[m_settings[event_type_id].discord_webhook_id].webhook_url;
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PlayerEventLogs::LoadPlayerEventSettingsFromQS(
|
||||||
|
const std::vector<PlayerEventLogSettingsRepository::PlayerEventLogSettings> &settings
|
||||||
|
)
|
||||||
|
{
|
||||||
|
for (const auto &e : settings) {
|
||||||
|
if (e.id >= PlayerEvent::MAX || e.id < 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
m_settings[e.id] = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
LogInfo("Applied [{}] player event log settings from QS", settings.size());
|
||||||
|
}
|
||||||
|
|
||||||
// GM_COMMAND | [x] Implemented Formatter
|
// GM_COMMAND | [x] Implemented Formatter
|
||||||
// ZONING | [x] Implemented Formatter
|
// ZONING | [x] Implemented Formatter
|
||||||
// AA_GAIN | [x] Implemented Formatter
|
// AA_GAIN | [x] Implemented Formatter
|
||||||
|
|||||||
@@ -73,10 +73,12 @@ public:
|
|||||||
return BuildPlayerEventPacket(c);
|
return BuildPlayerEventPacket(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] const PlayerEventLogSettingsRepository::PlayerEventLogSettings *GetSettings() const;
|
[[nodiscard]] const PlayerEventLogSettingsRepository::PlayerEventLogSettings * GetSettings() const;
|
||||||
bool IsEventDiscordEnabled(int32_t event_type_id);
|
bool IsEventDiscordEnabled(int32_t event_type_id);
|
||||||
std::string GetDiscordWebhookUrlFromEventType(int32_t event_type_id);
|
std::string GetDiscordWebhookUrlFromEventType(int32_t event_type_id);
|
||||||
|
|
||||||
|
void LoadPlayerEventSettingsFromQS(const std::vector<PlayerEventLogSettingsRepository::PlayerEventLogSettings>& settings);
|
||||||
|
|
||||||
static std::string GetDiscordPayloadFromEvent(const PlayerEvent::PlayerEventContainer &e);
|
static std::string GetDiscordPayloadFromEvent(const PlayerEvent::PlayerEventContainer &e);
|
||||||
|
|
||||||
struct EtlQueues {
|
struct EtlQueues {
|
||||||
@@ -94,6 +96,12 @@ public:
|
|||||||
std::vector<PlayerEventAaPurchaseRepository::PlayerEventAaPurchase> aa_purchase;
|
std::vector<PlayerEventAaPurchaseRepository::PlayerEventAaPurchase> aa_purchase;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static PlayerEventLogs* Instance()
|
||||||
|
{
|
||||||
|
static PlayerEventLogs instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct EtlSettings {
|
struct EtlSettings {
|
||||||
bool enabled;
|
bool enabled;
|
||||||
@@ -127,6 +135,4 @@ public:
|
|||||||
std::map<PlayerEvent::EventType, EtlSettings> &GetEtlSettings() { return m_etl_settings;}
|
std::map<PlayerEvent::EventType, EtlSettings> &GetEtlSettings() { return m_etl_settings;}
|
||||||
};
|
};
|
||||||
|
|
||||||
extern PlayerEventLogs player_event_logs;
|
|
||||||
|
|
||||||
#endif //EQEMU_PLAYER_EVENT_LOGS_H
|
#endif //EQEMU_PLAYER_EVENT_LOGS_H
|
||||||
|
|||||||
+547
-114
File diff suppressed because it is too large
Load Diff
+18
-18
@@ -21,8 +21,8 @@ void EvolvingItemsManager::LoadEvolvingItems() const
|
|||||||
results.begin(),
|
results.begin(),
|
||||||
results.end(),
|
results.end(),
|
||||||
std::inserter(
|
std::inserter(
|
||||||
evolving_items_manager.GetEvolvingItemsCache(),
|
EvolvingItemsManager::Instance()->GetEvolvingItemsCache(),
|
||||||
evolving_items_manager.GetEvolvingItemsCache().end()
|
EvolvingItemsManager::Instance()->GetEvolvingItemsCache().end()
|
||||||
),
|
),
|
||||||
[](const ItemsEvolvingDetailsRepository::ItemsEvolvingDetails &x) {
|
[](const ItemsEvolvingDetailsRepository::ItemsEvolvingDetails &x) {
|
||||||
return std::make_pair(x.item_id, x);
|
return std::make_pair(x.item_id, x);
|
||||||
@@ -42,13 +42,13 @@ void EvolvingItemsManager::SetContentDatabase(Database *db)
|
|||||||
|
|
||||||
double EvolvingItemsManager::CalculateProgression(const uint64 current_amount, const uint32 item_id)
|
double EvolvingItemsManager::CalculateProgression(const uint64 current_amount, const uint32 item_id)
|
||||||
{
|
{
|
||||||
if (!evolving_items_manager.GetEvolvingItemsCache().contains(item_id)) {
|
if (!EvolvingItemsManager::Instance()->GetEvolvingItemsCache().contains(item_id)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return evolving_items_manager.GetEvolvingItemsCache().at(item_id).required_amount > 0
|
return EvolvingItemsManager::Instance()->GetEvolvingItemsCache().at(item_id).required_amount > 0
|
||||||
? static_cast<double>(current_amount)
|
? static_cast<double>(current_amount)
|
||||||
/ static_cast<double>(evolving_items_manager.GetEvolvingItemsCache().at(item_id).required_amount) * 100
|
/ static_cast<double>(EvolvingItemsManager::Instance()->GetEvolvingItemsCache().at(item_id).required_amount) * 100
|
||||||
: 0;
|
: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ void EvolvingItemsManager::DoLootChecks(const uint32 char_id, const uint16 slot_
|
|||||||
e.character_id = char_id;
|
e.character_id = char_id;
|
||||||
e.item_id = inst.GetID();
|
e.item_id = inst.GetID();
|
||||||
e.equipped = inst.GetEvolveEquipped();
|
e.equipped = inst.GetEvolveEquipped();
|
||||||
e.final_item_id = evolving_items_manager.GetFinalItemID(inst);
|
e.final_item_id = EvolvingItemsManager::Instance()->GetFinalItemID(inst);
|
||||||
|
|
||||||
auto r = CharacterEvolvingItemsRepository::InsertOne(*m_db, e);
|
auto r = CharacterEvolvingItemsRepository::InsertOne(*m_db, e);
|
||||||
e.id = r.id;
|
e.id = r.id;
|
||||||
@@ -96,20 +96,20 @@ uint32 EvolvingItemsManager::GetFinalItemID(const EQ::ItemInstance &inst) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
const auto start_iterator = std::ranges::find_if(
|
const auto start_iterator = std::ranges::find_if(
|
||||||
evolving_items_manager.GetEvolvingItemsCache().cbegin(),
|
EvolvingItemsManager::Instance()->GetEvolvingItemsCache().cbegin(),
|
||||||
evolving_items_manager.GetEvolvingItemsCache().cend(),
|
EvolvingItemsManager::Instance()->GetEvolvingItemsCache().cend(),
|
||||||
[&](const std::pair<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &a) {
|
[&](const std::pair<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &a) {
|
||||||
return a.second.item_evo_id == inst.GetEvolveLoreID();
|
return a.second.item_evo_id == inst.GetEvolveLoreID();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if (start_iterator == std::end(evolving_items_manager.GetEvolvingItemsCache())) {
|
if (start_iterator == std::end(EvolvingItemsManager::Instance()->GetEvolvingItemsCache())) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto final_id = std::ranges::max_element(
|
const auto final_id = std::ranges::max_element(
|
||||||
start_iterator,
|
start_iterator,
|
||||||
evolving_items_manager.GetEvolvingItemsCache().cend(),
|
EvolvingItemsManager::Instance()->GetEvolvingItemsCache().cend(),
|
||||||
[&](
|
[&](
|
||||||
const std::pair<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &a,
|
const std::pair<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &a,
|
||||||
const std::pair<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &b
|
const std::pair<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &b
|
||||||
@@ -131,15 +131,15 @@ uint32 EvolvingItemsManager::GetNextEvolveItemID(const EQ::ItemInstance &inst) c
|
|||||||
int8 const current_level = inst.GetEvolveLvl();
|
int8 const current_level = inst.GetEvolveLvl();
|
||||||
|
|
||||||
const auto iterator = std::ranges::find_if(
|
const auto iterator = std::ranges::find_if(
|
||||||
evolving_items_manager.GetEvolvingItemsCache().cbegin(),
|
EvolvingItemsManager::Instance()->GetEvolvingItemsCache().cbegin(),
|
||||||
evolving_items_manager.GetEvolvingItemsCache().cend(),
|
EvolvingItemsManager::Instance()->GetEvolvingItemsCache().cend(),
|
||||||
[&](const std::pair<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &a) {
|
[&](const std::pair<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> &a) {
|
||||||
return a.second.item_evo_id == inst.GetEvolveLoreID() &&
|
return a.second.item_evo_id == inst.GetEvolveLoreID() &&
|
||||||
a.second.item_evolve_level == current_level + 1;
|
a.second.item_evolve_level == current_level + 1;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
if (iterator == std::end(evolving_items_manager.GetEvolvingItemsCache())) {
|
if (iterator == std::end(EvolvingItemsManager::Instance()->GetEvolvingItemsCache())) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -255,8 +255,8 @@ EvolveTransfer EvolvingItemsManager::DetermineTransferResults(
|
|||||||
return ets;
|
return ets;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto evolving_details_inst_from = evolving_items_manager.GetEvolveItemDetails(inst_from.GetID());
|
auto evolving_details_inst_from = EvolvingItemsManager::Instance()->GetEvolveItemDetails(inst_from.GetID());
|
||||||
auto evolving_details_inst_to = evolving_items_manager.GetEvolveItemDetails(inst_to.GetID());
|
auto evolving_details_inst_to = EvolvingItemsManager::Instance()->GetEvolveItemDetails(inst_to.GetID());
|
||||||
|
|
||||||
if (!evolving_details_inst_from.id || !evolving_details_inst_to.id) {
|
if (!evolving_details_inst_from.id || !evolving_details_inst_to.id) {
|
||||||
return ets;
|
return ets;
|
||||||
@@ -272,10 +272,10 @@ EvolveTransfer EvolvingItemsManager::DetermineTransferResults(
|
|||||||
compatibility = 30;
|
compatibility = 30;
|
||||||
}
|
}
|
||||||
|
|
||||||
xp = evolving_items_manager.GetTotalEarnedXP(inst_from) * compatibility / 100;
|
xp = EvolvingItemsManager::Instance()->GetTotalEarnedXP(inst_from) * compatibility / 100;
|
||||||
auto results = evolving_items_manager.GetNextItemByXP(inst_to, xp);
|
auto results = EvolvingItemsManager::Instance()->GetNextItemByXP(inst_to, xp);
|
||||||
|
|
||||||
ets.item_from_id = evolving_items_manager.GetFirstItemInLoreGroup(inst_from.GetEvolveLoreID());
|
ets.item_from_id = EvolvingItemsManager::Instance()->GetFirstItemInLoreGroup(inst_from.GetEvolveLoreID());
|
||||||
ets.item_from_current_amount = results.from_current_amount;
|
ets.item_from_current_amount = results.from_current_amount;
|
||||||
ets.item_to_id = results.new_item_id;
|
ets.item_to_id = results.new_item_id;
|
||||||
ets.item_to_current_amount = results.new_current_amount;
|
ets.item_to_current_amount = results.new_current_amount;
|
||||||
|
|||||||
@@ -56,12 +56,15 @@ public:
|
|||||||
std::map<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails>& GetEvolvingItemsCache() { return m_evolving_items_cache; }
|
std::map<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails>& GetEvolvingItemsCache() { return m_evolving_items_cache; }
|
||||||
std::vector<ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> GetEvolveIDItems(uint32 evolve_id);
|
std::vector<ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> GetEvolveIDItems(uint32 evolve_id);
|
||||||
|
|
||||||
|
static EvolvingItemsManager* Instance()
|
||||||
|
{
|
||||||
|
static EvolvingItemsManager instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
std::map<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> m_evolving_items_cache;
|
std::map<uint32, ItemsEvolvingDetailsRepository::ItemsEvolvingDetails> m_evolving_items_cache;
|
||||||
Database * m_db;
|
Database * m_db;
|
||||||
Database * m_content_db;
|
Database * m_content_db;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern EvolvingItemsManager evolving_items_manager;
|
|
||||||
|
|
||||||
#endif //EVOLVING_H
|
#endif //EVOLVING_H
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ namespace EQ {
|
|||||||
EQ_EXCEPT("IPC Mutex", "Could not create mutex.");
|
EQ_EXCEPT("IPC Mutex", "Could not create mutex.");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
std::string final_name = fmt::format("{}/{}.lock", path.GetSharedMemoryPath(), name);
|
std::string final_name = fmt::format("{}/{}.lock", PathManager::Instance()->GetSharedMemoryPath(), name);
|
||||||
|
|
||||||
#ifdef __DARWIN
|
#ifdef __DARWIN
|
||||||
#if __DARWIN_C_LEVEL < 200809L
|
#if __DARWIN_C_LEVEL < 200809L
|
||||||
|
|||||||
@@ -574,7 +574,7 @@ EQ::ItemInstance* EQ::ItemInstance::GetOrnamentationAugment() const
|
|||||||
uint32 EQ::ItemInstance::GetOrnamentHeroModel(int32 material_slot) const
|
uint32 EQ::ItemInstance::GetOrnamentHeroModel(int32 material_slot) const
|
||||||
{
|
{
|
||||||
// Not a Hero Forge item.
|
// Not a Hero Forge item.
|
||||||
if (m_ornament_hero_model == 0 || material_slot < 0) {
|
if (m_ornament_hero_model == 0) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1799,7 +1799,7 @@ std::vector<std::string> EQ::ItemInstance::GetAugmentNames() const
|
|||||||
|
|
||||||
for (uint8 slot_id = invaug::SOCKET_BEGIN; slot_id <= invaug::SOCKET_END; slot_id++) {
|
for (uint8 slot_id = invaug::SOCKET_BEGIN; slot_id <= invaug::SOCKET_END; slot_id++) {
|
||||||
const auto augment = GetAugment(slot_id);
|
const auto augment = GetAugment(slot_id);
|
||||||
augment_names.push_back(augment ? augment->GetItem()->Name : "None");
|
augment_names.push_back(augment ? augment->GetItem()->Name : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
return augment_names;
|
return augment_names;
|
||||||
|
|||||||
@@ -335,7 +335,7 @@ namespace EQ
|
|||||||
void SetEvolveAddToCurrentAmount(const uint64 in) const { m_evolving_details.current_amount += in; }
|
void SetEvolveAddToCurrentAmount(const uint64 in) const { m_evolving_details.current_amount += in; }
|
||||||
void SetEvolveFinalItemID(const uint32 in) const { m_evolving_details.final_item_id = in; }
|
void SetEvolveFinalItemID(const uint32 in) const { m_evolving_details.final_item_id = in; }
|
||||||
bool TransferOwnership(Database& db, const uint32 to_char_id) const;
|
bool TransferOwnership(Database& db, const uint32 to_char_id) const;
|
||||||
void CalculateEvolveProgression() const { m_evolving_details.progression = evolving_items_manager.CalculateProgression(GetEvolveCurrentAmount(), GetID()); }
|
void CalculateEvolveProgression() const { m_evolving_details.progression = EvolvingItemsManager::Instance()->CalculateProgression(GetEvolveCurrentAmount(), GetID()); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//////////////////////////
|
//////////////////////////
|
||||||
|
|||||||
@@ -1167,7 +1167,7 @@ void EQ::Net::DaybreakConnection::ProcessResend(int stream)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LogSys.IsLogEnabled(Logs::General, Logs::NetClient)) {
|
if (EQEmuLogSys::Instance()->IsLogEnabled(Logs::General, Logs::NetClient)) {
|
||||||
size_t total_size = 0;
|
size_t total_size = 0;
|
||||||
for (auto &e: s->sent_packets) {
|
for (auto &e: s->sent_packets) {
|
||||||
total_size += e.second.packet.Length();
|
total_size += e.second.packet.Length();
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ void EQ::Net::EQStream::QueuePacket(const EQApplicationPacket *p, bool ack_req)
|
|||||||
OpcodeManager::EmuToName(p->GetOpcode()),
|
OpcodeManager::EmuToName(p->GetOpcode()),
|
||||||
(*m_opcode_manager)->EmuToEQ(p->GetOpcode()),
|
(*m_opcode_manager)->EmuToEQ(p->GetOpcode()),
|
||||||
p->Size(),
|
p->Size(),
|
||||||
(LogSys.IsLogEnabled(Logs::Detail, Logs::PacketServerClient) ? DumpPacketToString(p) : "")
|
(EQEmuLogSys::Instance()->IsLogEnabled(Logs::Detail, Logs::PacketServerClient) ? DumpPacketToString(p) : "")
|
||||||
);
|
);
|
||||||
|
|
||||||
if (m_opcode_manager && *m_opcode_manager) {
|
if (m_opcode_manager && *m_opcode_manager) {
|
||||||
|
|||||||
@@ -319,7 +319,7 @@ void EQ::Net::ServertalkServerConnection::ProcessMessage(EQ::Net::Packet &p)
|
|||||||
size_t message_len = length;
|
size_t message_len = length;
|
||||||
EQ::Net::StaticPacket packet(&data[0], message_len);
|
EQ::Net::StaticPacket packet(&data[0], message_len);
|
||||||
|
|
||||||
const auto is_detail_enabled = LogSys.IsLogEnabled(Logs::Detail, Logs::PacketServerToServer);
|
const auto is_detail_enabled = EQEmuLogSys::Instance()->IsLogEnabled(Logs::Detail, Logs::PacketServerToServer);
|
||||||
if (opcode != ServerOP_KeepAlive || is_detail_enabled) {
|
if (opcode != ServerOP_KeepAlive || is_detail_enabled) {
|
||||||
LogPacketServerToServer(
|
LogPacketServerToServer(
|
||||||
"[{:#06x}] Size [{}] {}",
|
"[{:#06x}] Size [{}] {}",
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ namespace RoF
|
|||||||
{
|
{
|
||||||
//create our opcode manager if we havent already
|
//create our opcode manager if we havent already
|
||||||
if (opcodes == nullptr) {
|
if (opcodes == nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
|
|
||||||
//load up the opcode manager.
|
//load up the opcode manager.
|
||||||
//TODO: figure out how to support shared memory with multiple patches...
|
//TODO: figure out how to support shared memory with multiple patches...
|
||||||
@@ -117,7 +117,7 @@ namespace RoF
|
|||||||
//we need to go to every stream and replace it's manager.
|
//we need to go to every stream and replace it's manager.
|
||||||
|
|
||||||
if (opcodes != nullptr) {
|
if (opcodes != nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
||||||
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ namespace RoF2
|
|||||||
//create our opcode manager if we havent already
|
//create our opcode manager if we havent already
|
||||||
if (opcodes == nullptr) {
|
if (opcodes == nullptr) {
|
||||||
|
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
|
|
||||||
//load up the opcode manager.
|
//load up the opcode manager.
|
||||||
//TODO: figure out how to support shared memory with multiple patches...
|
//TODO: figure out how to support shared memory with multiple patches...
|
||||||
@@ -123,7 +123,7 @@ namespace RoF2
|
|||||||
//we need to go to every stream and replace it's manager.
|
//we need to go to every stream and replace it's manager.
|
||||||
|
|
||||||
if (opcodes != nullptr) {
|
if (opcodes != nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
||||||
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
||||||
return;
|
return;
|
||||||
|
|||||||
+13
-13
@@ -72,7 +72,7 @@ namespace SoD
|
|||||||
{
|
{
|
||||||
//create our opcode manager if we havent already
|
//create our opcode manager if we havent already
|
||||||
if (opcodes == nullptr) {
|
if (opcodes == nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
//load up the opcode manager.
|
//load up the opcode manager.
|
||||||
//TODO: figure out how to support shared memory with multiple patches...
|
//TODO: figure out how to support shared memory with multiple patches...
|
||||||
opcodes = new RegularOpcodeManager();
|
opcodes = new RegularOpcodeManager();
|
||||||
@@ -113,7 +113,7 @@ namespace SoD
|
|||||||
//we need to go to every stream and replace it's manager.
|
//we need to go to every stream and replace it's manager.
|
||||||
|
|
||||||
if (opcodes != nullptr) {
|
if (opcodes != nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
||||||
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
||||||
return;
|
return;
|
||||||
@@ -3966,12 +3966,12 @@ namespace SoD
|
|||||||
SoDSlot = serverSlot - 2;
|
SoDSlot = serverSlot - 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (serverSlot <= EQ::invbag::GENERAL_BAGS_8_END && serverSlot >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
else if (serverSlot <= EQ::invbag::GENERAL_BAGS_END && serverSlot >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
||||||
SoDSlot = serverSlot + 11;
|
SoDSlot = serverSlot - (EQ::invbag::GENERAL_BAGS_BEGIN - invbag::GENERAL_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((serverSlot - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (serverSlot <= EQ::invbag::CURSOR_BAG_END && serverSlot >= EQ::invbag::CURSOR_BAG_BEGIN) {
|
else if (serverSlot <= EQ::invbag::CURSOR_BAG_END && serverSlot >= EQ::invbag::CURSOR_BAG_BEGIN) {
|
||||||
SoDSlot = serverSlot - 9;
|
SoDSlot = serverSlot - (EQ::invbag::CURSOR_BAG_BEGIN - invbag::CURSOR_BAG_BEGIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (serverSlot <= EQ::invslot::TRIBUTE_END && serverSlot >= EQ::invslot::TRIBUTE_BEGIN) {
|
else if (serverSlot <= EQ::invslot::TRIBUTE_END && serverSlot >= EQ::invslot::TRIBUTE_BEGIN) {
|
||||||
@@ -3991,7 +3991,7 @@ namespace SoD
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (serverSlot <= EQ::invbag::BANK_BAGS_END && serverSlot >= EQ::invbag::BANK_BAGS_BEGIN) {
|
else if (serverSlot <= EQ::invbag::BANK_BAGS_END && serverSlot >= EQ::invbag::BANK_BAGS_BEGIN) {
|
||||||
SoDSlot = serverSlot + 1;
|
SoDSlot = serverSlot - (EQ::invbag::BANK_BAGS_BEGIN - invbag::BANK_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((serverSlot - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (serverSlot <= EQ::invslot::SHARED_BANK_END && serverSlot >= EQ::invslot::SHARED_BANK_BEGIN) {
|
else if (serverSlot <= EQ::invslot::SHARED_BANK_END && serverSlot >= EQ::invslot::SHARED_BANK_BEGIN) {
|
||||||
@@ -3999,7 +3999,7 @@ namespace SoD
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (serverSlot <= EQ::invbag::SHARED_BANK_BAGS_END && serverSlot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) {
|
else if (serverSlot <= EQ::invbag::SHARED_BANK_BAGS_END && serverSlot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) {
|
||||||
SoDSlot = serverSlot + 1;
|
SoDSlot = serverSlot - (EQ::invbag::SHARED_BANK_BAGS_BEGIN - invbag::SHARED_BANK_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((serverSlot - EQ::invbag::SHARED_BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (serverSlot <= EQ::invslot::TRADE_END && serverSlot >= EQ::invslot::TRADE_BEGIN) {
|
else if (serverSlot <= EQ::invslot::TRADE_END && serverSlot >= EQ::invslot::TRADE_BEGIN) {
|
||||||
@@ -4007,7 +4007,7 @@ namespace SoD
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (serverSlot <= EQ::invbag::TRADE_BAGS_END && serverSlot >= EQ::invbag::TRADE_BAGS_BEGIN) {
|
else if (serverSlot <= EQ::invbag::TRADE_BAGS_END && serverSlot >= EQ::invbag::TRADE_BAGS_BEGIN) {
|
||||||
SoDSlot = serverSlot;
|
SoDSlot = serverSlot - (EQ::invbag::TRADE_BAGS_BEGIN - invbag::TRADE_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((serverSlot - EQ::invbag::TRADE_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (serverSlot <= EQ::invslot::WORLD_END && serverSlot >= EQ::invslot::WORLD_BEGIN) {
|
else if (serverSlot <= EQ::invslot::WORLD_END && serverSlot >= EQ::invslot::WORLD_BEGIN) {
|
||||||
@@ -4049,11 +4049,11 @@ namespace SoD
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (sod_slot <= invbag::GENERAL_BAGS_END && sod_slot >= invbag::GENERAL_BAGS_BEGIN) {
|
else if (sod_slot <= invbag::GENERAL_BAGS_END && sod_slot >= invbag::GENERAL_BAGS_BEGIN) {
|
||||||
server_slot = sod_slot - 11;
|
server_slot = sod_slot + (EQ::invbag::GENERAL_BAGS_BEGIN - invbag::GENERAL_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((sod_slot - invbag::GENERAL_BAGS_BEGIN) / invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (sod_slot <= invbag::CURSOR_BAG_END && sod_slot >= invbag::CURSOR_BAG_BEGIN) {
|
else if (sod_slot <= invbag::CURSOR_BAG_END && sod_slot >= invbag::CURSOR_BAG_BEGIN) {
|
||||||
server_slot = sod_slot + 9;
|
server_slot = sod_slot + (EQ::invbag::CURSOR_BAG_BEGIN - invbag::CURSOR_BAG_BEGIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (sod_slot <= invslot::TRIBUTE_END && sod_slot >= invslot::TRIBUTE_BEGIN) {
|
else if (sod_slot <= invslot::TRIBUTE_END && sod_slot >= invslot::TRIBUTE_BEGIN) {
|
||||||
@@ -4073,7 +4073,7 @@ namespace SoD
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (sod_slot <= invbag::BANK_BAGS_END && sod_slot >= invbag::BANK_BAGS_BEGIN) {
|
else if (sod_slot <= invbag::BANK_BAGS_END && sod_slot >= invbag::BANK_BAGS_BEGIN) {
|
||||||
server_slot = sod_slot - 1;
|
server_slot = sod_slot + (EQ::invbag::BANK_BAGS_BEGIN - invbag::BANK_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((sod_slot - invbag::BANK_BAGS_BEGIN) / invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (sod_slot <= invslot::SHARED_BANK_END && sod_slot >= invslot::SHARED_BANK_BEGIN) {
|
else if (sod_slot <= invslot::SHARED_BANK_END && sod_slot >= invslot::SHARED_BANK_BEGIN) {
|
||||||
@@ -4081,7 +4081,7 @@ namespace SoD
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (sod_slot <= invbag::SHARED_BANK_BAGS_END && sod_slot >= invbag::SHARED_BANK_BAGS_BEGIN) {
|
else if (sod_slot <= invbag::SHARED_BANK_BAGS_END && sod_slot >= invbag::SHARED_BANK_BAGS_BEGIN) {
|
||||||
server_slot = sod_slot - 1;
|
server_slot = sod_slot + (EQ::invbag::SHARED_BANK_BAGS_BEGIN - invbag::SHARED_BANK_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((sod_slot - invbag::SHARED_BANK_BAGS_BEGIN) / invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (sod_slot <= invslot::TRADE_END && sod_slot >= invslot::TRADE_BEGIN) {
|
else if (sod_slot <= invslot::TRADE_END && sod_slot >= invslot::TRADE_BEGIN) {
|
||||||
@@ -4089,7 +4089,7 @@ namespace SoD
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (sod_slot <= invbag::TRADE_BAGS_END && sod_slot >= invbag::TRADE_BAGS_BEGIN) {
|
else if (sod_slot <= invbag::TRADE_BAGS_END && sod_slot >= invbag::TRADE_BAGS_BEGIN) {
|
||||||
server_slot = sod_slot;
|
server_slot = sod_slot + (EQ::invbag::TRADE_BAGS_BEGIN - invbag::TRADE_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((sod_slot - invbag::TRADE_BAGS_BEGIN) / invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (sod_slot <= invslot::WORLD_END && sod_slot >= invslot::WORLD_BEGIN) {
|
else if (sod_slot <= invslot::WORLD_END && sod_slot >= invslot::WORLD_BEGIN) {
|
||||||
|
|||||||
+13
-13
@@ -71,7 +71,7 @@ namespace SoF
|
|||||||
{
|
{
|
||||||
//create our opcode manager if we havent already
|
//create our opcode manager if we havent already
|
||||||
if (opcodes == nullptr) {
|
if (opcodes == nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
//load up the opcode manager.
|
//load up the opcode manager.
|
||||||
//TODO: figure out how to support shared memory with multiple patches...
|
//TODO: figure out how to support shared memory with multiple patches...
|
||||||
opcodes = new RegularOpcodeManager();
|
opcodes = new RegularOpcodeManager();
|
||||||
@@ -110,7 +110,7 @@ namespace SoF
|
|||||||
//we need to go to every stream and replace it's manager.
|
//we need to go to every stream and replace it's manager.
|
||||||
|
|
||||||
if (opcodes != nullptr) {
|
if (opcodes != nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
||||||
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
||||||
return;
|
return;
|
||||||
@@ -3355,12 +3355,12 @@ namespace SoF
|
|||||||
sof_slot = server_slot - 2;
|
sof_slot = server_slot - 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (server_slot <= EQ::invbag::GENERAL_BAGS_8_END && server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
else if (server_slot <= EQ::invbag::GENERAL_BAGS_END && server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
||||||
sof_slot = server_slot + 11;
|
sof_slot = server_slot - (EQ::invbag::GENERAL_BAGS_BEGIN - invbag::GENERAL_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((server_slot - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::CURSOR_BAG_BEGIN) {
|
else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::CURSOR_BAG_BEGIN) {
|
||||||
sof_slot = server_slot - 9;
|
sof_slot = server_slot - (EQ::invbag::CURSOR_BAG_BEGIN - invbag::CURSOR_BAG_BEGIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (server_slot <= EQ::invslot::TRIBUTE_END && server_slot >= EQ::invslot::TRIBUTE_BEGIN) {
|
else if (server_slot <= EQ::invslot::TRIBUTE_END && server_slot >= EQ::invslot::TRIBUTE_BEGIN) {
|
||||||
@@ -3380,7 +3380,7 @@ namespace SoF
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (server_slot <= EQ::invbag::BANK_BAGS_END && server_slot >= EQ::invbag::BANK_BAGS_BEGIN) {
|
else if (server_slot <= EQ::invbag::BANK_BAGS_END && server_slot >= EQ::invbag::BANK_BAGS_BEGIN) {
|
||||||
sof_slot = server_slot + 1;
|
sof_slot = server_slot - (EQ::invbag::BANK_BAGS_BEGIN - invbag::BANK_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((server_slot - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (server_slot <= EQ::invslot::SHARED_BANK_END && server_slot >= EQ::invslot::SHARED_BANK_BEGIN) {
|
else if (server_slot <= EQ::invslot::SHARED_BANK_END && server_slot >= EQ::invslot::SHARED_BANK_BEGIN) {
|
||||||
@@ -3388,7 +3388,7 @@ namespace SoF
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (server_slot <= EQ::invbag::SHARED_BANK_BAGS_END && server_slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) {
|
else if (server_slot <= EQ::invbag::SHARED_BANK_BAGS_END && server_slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) {
|
||||||
sof_slot = server_slot + 1;
|
sof_slot = server_slot - (EQ::invbag::SHARED_BANK_BAGS_BEGIN - invbag::SHARED_BANK_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((server_slot - EQ::invbag::SHARED_BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (server_slot <= EQ::invslot::TRADE_END && server_slot >= EQ::invslot::TRADE_BEGIN) {
|
else if (server_slot <= EQ::invslot::TRADE_END && server_slot >= EQ::invslot::TRADE_BEGIN) {
|
||||||
@@ -3396,7 +3396,7 @@ namespace SoF
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (server_slot <= EQ::invbag::TRADE_BAGS_END && server_slot >= EQ::invbag::TRADE_BAGS_BEGIN) {
|
else if (server_slot <= EQ::invbag::TRADE_BAGS_END && server_slot >= EQ::invbag::TRADE_BAGS_BEGIN) {
|
||||||
sof_slot = server_slot;
|
sof_slot = server_slot - (EQ::invbag::TRADE_BAGS_BEGIN - invbag::TRADE_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((server_slot - EQ::invbag::TRADE_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (server_slot <= EQ::invslot::WORLD_END && server_slot >= EQ::invslot::WORLD_BEGIN) {
|
else if (server_slot <= EQ::invslot::WORLD_END && server_slot >= EQ::invslot::WORLD_BEGIN) {
|
||||||
@@ -3442,11 +3442,11 @@ namespace SoF
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (sof_slot <= invbag::GENERAL_BAGS_END && sof_slot >= invbag::GENERAL_BAGS_BEGIN) {
|
else if (sof_slot <= invbag::GENERAL_BAGS_END && sof_slot >= invbag::GENERAL_BAGS_BEGIN) {
|
||||||
server_slot = sof_slot - 11;
|
server_slot = sof_slot + (EQ::invbag::GENERAL_BAGS_BEGIN - invbag::GENERAL_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((sof_slot - invbag::GENERAL_BAGS_BEGIN) / invbag::SLOT_COUNT));;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (sof_slot <= invbag::CURSOR_BAG_END && sof_slot >= invbag::CURSOR_BAG_BEGIN) {
|
else if (sof_slot <= invbag::CURSOR_BAG_END && sof_slot >= invbag::CURSOR_BAG_BEGIN) {
|
||||||
server_slot = sof_slot + 9;
|
server_slot = sof_slot + (EQ::invbag::CURSOR_BAG_BEGIN - invbag::CURSOR_BAG_BEGIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (sof_slot <= invslot::TRIBUTE_END && sof_slot >= invslot::TRIBUTE_BEGIN) {
|
else if (sof_slot <= invslot::TRIBUTE_END && sof_slot >= invslot::TRIBUTE_BEGIN) {
|
||||||
@@ -3466,7 +3466,7 @@ namespace SoF
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (sof_slot <= invbag::BANK_BAGS_END && sof_slot >= invbag::BANK_BAGS_BEGIN) {
|
else if (sof_slot <= invbag::BANK_BAGS_END && sof_slot >= invbag::BANK_BAGS_BEGIN) {
|
||||||
server_slot = sof_slot - 1;
|
server_slot = sof_slot + (EQ::invbag::BANK_BAGS_BEGIN - invbag::BANK_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((sof_slot - invbag::BANK_BAGS_BEGIN) / invbag::SLOT_COUNT));;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (sof_slot <= invslot::SHARED_BANK_END && sof_slot >= invslot::SHARED_BANK_BEGIN) {
|
else if (sof_slot <= invslot::SHARED_BANK_END && sof_slot >= invslot::SHARED_BANK_BEGIN) {
|
||||||
@@ -3474,7 +3474,7 @@ namespace SoF
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (sof_slot <= invbag::SHARED_BANK_BAGS_END && sof_slot >= invbag::SHARED_BANK_BAGS_BEGIN) {
|
else if (sof_slot <= invbag::SHARED_BANK_BAGS_END && sof_slot >= invbag::SHARED_BANK_BAGS_BEGIN) {
|
||||||
server_slot = sof_slot - 1;
|
server_slot = sof_slot + (EQ::invbag::SHARED_BANK_BAGS_BEGIN - invbag::SHARED_BANK_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((sof_slot - invbag::SHARED_BANK_BAGS_BEGIN) / invbag::SLOT_COUNT));;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (sof_slot <= invslot::TRADE_END && sof_slot >= invslot::TRADE_BEGIN) {
|
else if (sof_slot <= invslot::TRADE_END && sof_slot >= invslot::TRADE_BEGIN) {
|
||||||
@@ -3482,7 +3482,7 @@ namespace SoF
|
|||||||
}
|
}
|
||||||
|
|
||||||
else if (sof_slot <= invbag::TRADE_BAGS_END && sof_slot >= invbag::TRADE_BAGS_BEGIN) {
|
else if (sof_slot <= invbag::TRADE_BAGS_END && sof_slot >= invbag::TRADE_BAGS_BEGIN) {
|
||||||
server_slot = sof_slot;
|
server_slot = sof_slot + (EQ::invbag::TRADE_BAGS_BEGIN - invbag::TRADE_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((sof_slot - invbag::TRADE_BAGS_BEGIN) / invbag::SLOT_COUNT));;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (sof_slot <= invslot::WORLD_END && sof_slot >= invslot::WORLD_BEGIN) {
|
else if (sof_slot <= invslot::WORLD_END && sof_slot >= invslot::WORLD_BEGIN) {
|
||||||
|
|||||||
+14
-14
@@ -73,7 +73,7 @@ namespace Titanium
|
|||||||
auto Config = EQEmuConfig::get();
|
auto Config = EQEmuConfig::get();
|
||||||
//create our opcode manager if we havent already
|
//create our opcode manager if we havent already
|
||||||
if (opcodes == nullptr) {
|
if (opcodes == nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
//load up the opcode manager.
|
//load up the opcode manager.
|
||||||
//TODO: figure out how to support shared memory with multiple patches...
|
//TODO: figure out how to support shared memory with multiple patches...
|
||||||
opcodes = new RegularOpcodeManager();
|
opcodes = new RegularOpcodeManager();
|
||||||
@@ -114,7 +114,7 @@ namespace Titanium
|
|||||||
//we need to go to every stream and replace it's manager.
|
//we need to go to every stream and replace it's manager.
|
||||||
|
|
||||||
if (opcodes != nullptr) {
|
if (opcodes != nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
||||||
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
||||||
return;
|
return;
|
||||||
@@ -3596,12 +3596,12 @@ namespace Titanium
|
|||||||
else if (server_slot == (EQ::invslot::POSSESSIONS_COUNT + EQ::invslot::slotAmmo)) {
|
else if (server_slot == (EQ::invslot::POSSESSIONS_COUNT + EQ::invslot::slotAmmo)) {
|
||||||
titanium_slot = server_slot - 4;
|
titanium_slot = server_slot - 4;
|
||||||
}
|
}
|
||||||
else if (server_slot <= EQ::invbag::GENERAL_BAGS_8_END &&
|
else if (server_slot <= EQ::invbag::GENERAL_BAGS_END &&
|
||||||
server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
server_slot >= EQ::invbag::GENERAL_BAGS_BEGIN) {
|
||||||
titanium_slot = server_slot;
|
titanium_slot = server_slot - (EQ::invbag::GENERAL_BAGS_BEGIN - invbag::GENERAL_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((server_slot - EQ::invbag::GENERAL_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::CURSOR_BAG_BEGIN) {
|
else if (server_slot <= EQ::invbag::CURSOR_BAG_END && server_slot >= EQ::invbag::CURSOR_BAG_BEGIN) {
|
||||||
titanium_slot = server_slot - 20;
|
titanium_slot = server_slot - (EQ::invbag::CURSOR_BAG_BEGIN - invbag::CURSOR_BAG_BEGIN);
|
||||||
}
|
}
|
||||||
else if (server_slot <= EQ::invslot::TRIBUTE_END && server_slot >= EQ::invslot::TRIBUTE_BEGIN) {
|
else if (server_slot <= EQ::invslot::TRIBUTE_END && server_slot >= EQ::invslot::TRIBUTE_BEGIN) {
|
||||||
titanium_slot = server_slot;
|
titanium_slot = server_slot;
|
||||||
@@ -3616,21 +3616,21 @@ namespace Titanium
|
|||||||
else if (server_slot <= EQ::invslot::BANK_END && server_slot >= EQ::invslot::BANK_BEGIN) {
|
else if (server_slot <= EQ::invslot::BANK_END && server_slot >= EQ::invslot::BANK_BEGIN) {
|
||||||
titanium_slot = server_slot;
|
titanium_slot = server_slot;
|
||||||
}
|
}
|
||||||
else if (server_slot <= EQ::invbag::BANK_BAGS_16_END && server_slot >= EQ::invbag::BANK_BAGS_BEGIN) {
|
else if (server_slot <= EQ::invbag::BANK_BAGS_END && server_slot >= EQ::invbag::BANK_BAGS_BEGIN) {
|
||||||
titanium_slot = server_slot;
|
titanium_slot = server_slot - (EQ::invbag::BANK_BAGS_BEGIN - invbag::BANK_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((server_slot - EQ::invbag::BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
else if (server_slot <= EQ::invslot::SHARED_BANK_END && server_slot >= EQ::invslot::SHARED_BANK_BEGIN) {
|
else if (server_slot <= EQ::invslot::SHARED_BANK_END && server_slot >= EQ::invslot::SHARED_BANK_BEGIN) {
|
||||||
titanium_slot = server_slot;
|
titanium_slot = server_slot;
|
||||||
}
|
}
|
||||||
else if (server_slot <= EQ::invbag::SHARED_BANK_BAGS_END &&
|
else if (server_slot <= EQ::invbag::SHARED_BANK_BAGS_END &&
|
||||||
server_slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) {
|
server_slot >= EQ::invbag::SHARED_BANK_BAGS_BEGIN) {
|
||||||
titanium_slot = server_slot;
|
titanium_slot = server_slot - (EQ::invbag::SHARED_BANK_BAGS_BEGIN - invbag::SHARED_BANK_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((server_slot - EQ::invbag::SHARED_BANK_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
else if (server_slot <= EQ::invslot::TRADE_END && server_slot >= EQ::invslot::TRADE_BEGIN) {
|
else if (server_slot <= EQ::invslot::TRADE_END && server_slot >= EQ::invslot::TRADE_BEGIN) {
|
||||||
titanium_slot = server_slot;
|
titanium_slot = server_slot;
|
||||||
}
|
}
|
||||||
else if (server_slot <= EQ::invbag::TRADE_BAGS_END && server_slot >= EQ::invbag::TRADE_BAGS_BEGIN) {
|
else if (server_slot <= EQ::invbag::TRADE_BAGS_END && server_slot >= EQ::invbag::TRADE_BAGS_BEGIN) {
|
||||||
titanium_slot = server_slot;
|
titanium_slot = server_slot - (EQ::invbag::TRADE_BAGS_BEGIN - invbag::TRADE_BAGS_BEGIN) - ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((server_slot - EQ::invbag::TRADE_BAGS_BEGIN) / EQ::invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
else if (server_slot <= EQ::invslot::WORLD_END && server_slot >= EQ::invslot::WORLD_BEGIN) {
|
else if (server_slot <= EQ::invslot::WORLD_END && server_slot >= EQ::invslot::WORLD_BEGIN) {
|
||||||
titanium_slot = server_slot;
|
titanium_slot = server_slot;
|
||||||
@@ -3687,10 +3687,10 @@ namespace Titanium
|
|||||||
server_slot = titanium_slot + 4;
|
server_slot = titanium_slot + 4;
|
||||||
}
|
}
|
||||||
else if (titanium_slot <= invbag::GENERAL_BAGS_END && titanium_slot >= invbag::GENERAL_BAGS_BEGIN) {
|
else if (titanium_slot <= invbag::GENERAL_BAGS_END && titanium_slot >= invbag::GENERAL_BAGS_BEGIN) {
|
||||||
server_slot = titanium_slot;
|
server_slot = titanium_slot + (EQ::invbag::GENERAL_BAGS_BEGIN - invbag::GENERAL_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((titanium_slot - invbag::GENERAL_BAGS_BEGIN) / invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
else if (titanium_slot <= invbag::CURSOR_BAG_END && titanium_slot >= invbag::CURSOR_BAG_BEGIN) {
|
else if (titanium_slot <= invbag::CURSOR_BAG_END && titanium_slot >= invbag::CURSOR_BAG_BEGIN) {
|
||||||
server_slot = titanium_slot + 20;
|
server_slot = titanium_slot + (EQ::invbag::CURSOR_BAG_BEGIN - invbag::CURSOR_BAG_BEGIN);
|
||||||
}
|
}
|
||||||
else if (titanium_slot <= invslot::TRIBUTE_END && titanium_slot >= invslot::TRIBUTE_BEGIN) {
|
else if (titanium_slot <= invslot::TRIBUTE_END && titanium_slot >= invslot::TRIBUTE_BEGIN) {
|
||||||
server_slot = titanium_slot;
|
server_slot = titanium_slot;
|
||||||
@@ -3705,19 +3705,19 @@ namespace Titanium
|
|||||||
server_slot = titanium_slot;
|
server_slot = titanium_slot;
|
||||||
}
|
}
|
||||||
else if (titanium_slot <= invbag::BANK_BAGS_END && titanium_slot >= invbag::BANK_BAGS_BEGIN) {
|
else if (titanium_slot <= invbag::BANK_BAGS_END && titanium_slot >= invbag::BANK_BAGS_BEGIN) {
|
||||||
server_slot = titanium_slot;
|
server_slot = titanium_slot + (EQ::invbag::BANK_BAGS_BEGIN - invbag::BANK_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((titanium_slot - invbag::BANK_BAGS_BEGIN) / invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
else if (titanium_slot <= invslot::SHARED_BANK_END && titanium_slot >= invslot::SHARED_BANK_BEGIN) {
|
else if (titanium_slot <= invslot::SHARED_BANK_END && titanium_slot >= invslot::SHARED_BANK_BEGIN) {
|
||||||
server_slot = titanium_slot;
|
server_slot = titanium_slot;
|
||||||
}
|
}
|
||||||
else if (titanium_slot <= invbag::SHARED_BANK_BAGS_END && titanium_slot >= invbag::SHARED_BANK_BAGS_BEGIN) {
|
else if (titanium_slot <= invbag::SHARED_BANK_BAGS_END && titanium_slot >= invbag::SHARED_BANK_BAGS_BEGIN) {
|
||||||
server_slot = titanium_slot;
|
server_slot = titanium_slot + (EQ::invbag::SHARED_BANK_BAGS_BEGIN - invbag::SHARED_BANK_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((titanium_slot - invbag::SHARED_BANK_BAGS_BEGIN) / invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
else if (titanium_slot <= invslot::TRADE_END && titanium_slot >= invslot::TRADE_BEGIN) {
|
else if (titanium_slot <= invslot::TRADE_END && titanium_slot >= invslot::TRADE_BEGIN) {
|
||||||
server_slot = titanium_slot;
|
server_slot = titanium_slot;
|
||||||
}
|
}
|
||||||
else if (titanium_slot <= invbag::TRADE_BAGS_END && titanium_slot >= invbag::TRADE_BAGS_BEGIN) {
|
else if (titanium_slot <= invbag::TRADE_BAGS_END && titanium_slot >= invbag::TRADE_BAGS_BEGIN) {
|
||||||
server_slot = titanium_slot;
|
server_slot = titanium_slot + (EQ::invbag::TRADE_BAGS_BEGIN - invbag::TRADE_BAGS_BEGIN) + ((EQ::invbag::SLOT_COUNT - invbag::SLOT_COUNT) * ((titanium_slot - invbag::TRADE_BAGS_BEGIN) / invbag::SLOT_COUNT));
|
||||||
}
|
}
|
||||||
else if (titanium_slot <= invslot::WORLD_END && titanium_slot >= invslot::WORLD_BEGIN) {
|
else if (titanium_slot <= invslot::WORLD_END && titanium_slot >= invslot::WORLD_BEGIN) {
|
||||||
server_slot = titanium_slot;
|
server_slot = titanium_slot;
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ namespace UF
|
|||||||
{
|
{
|
||||||
//create our opcode manager if we havent already
|
//create our opcode manager if we havent already
|
||||||
if (opcodes == nullptr) {
|
if (opcodes == nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
//load up the opcode manager.
|
//load up the opcode manager.
|
||||||
//TODO: figure out how to support shared memory with multiple patches...
|
//TODO: figure out how to support shared memory with multiple patches...
|
||||||
opcodes = new RegularOpcodeManager();
|
opcodes = new RegularOpcodeManager();
|
||||||
@@ -117,7 +117,7 @@ namespace UF
|
|||||||
//we need to go to every stream and replace it's manager.
|
//we need to go to every stream and replace it's manager.
|
||||||
|
|
||||||
if (opcodes != nullptr) {
|
if (opcodes != nullptr) {
|
||||||
std::string opfile = fmt::format("{}/patch_{}.conf", path.GetPatchPath(), name);
|
std::string opfile = fmt::format("{}/patch_{}.conf", PathManager::Instance()->GetPatchPath(), name);
|
||||||
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
if (!opcodes->ReloadOpcodes(opfile.c_str())) {
|
||||||
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
LogNetcode("[OPCODES] Error reloading opcodes file [{}] for patch [{}]", opfile.c_str(), name);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
namespace fs = std::filesystem;
|
namespace fs = std::filesystem;
|
||||||
|
|
||||||
void PathManager::LoadPaths()
|
void PathManager::Init()
|
||||||
{
|
{
|
||||||
m_server_path = File::FindEqemuConfigPath();
|
m_server_path = File::FindEqemuConfigPath();
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,13 @@
|
|||||||
|
|
||||||
class PathManager {
|
class PathManager {
|
||||||
public:
|
public:
|
||||||
void LoadPaths();
|
void Init();
|
||||||
|
|
||||||
|
static PathManager *Instance()
|
||||||
|
{
|
||||||
|
static PathManager instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
[[nodiscard]] const std::string &GetLogPath() const;
|
[[nodiscard]] const std::string &GetLogPath() const;
|
||||||
[[nodiscard]] const std::string &GetLuaModsPath() const;
|
[[nodiscard]] const std::string &GetLuaModsPath() const;
|
||||||
@@ -38,6 +44,4 @@ private:
|
|||||||
std::string m_shared_memory_path;
|
std::string m_shared_memory_path;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern PathManager path;
|
|
||||||
|
|
||||||
#endif //EQEMU_PATH_MANAGER_H
|
#endif //EQEMU_PATH_MANAGER_H
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../types.h"
|
||||||
|
#include "../database.h"
|
||||||
|
#include "../strings.h"
|
||||||
|
#include "../eqemu_logsys.h"
|
||||||
|
#include "../eqemu_logsys_log_aliases.h"
|
||||||
|
#include "../features.h"
|
||||||
|
#include "../global_define.h"
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include "process.h"
|
#include "process.h"
|
||||||
|
#include <fmt/format.h>
|
||||||
|
|
||||||
std::string Process::execute(const std::string &cmd)
|
std::string Process::execute(const std::string &cmd)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -116,6 +116,12 @@ namespace EQ {
|
|||||||
Reseed();
|
Reseed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Random* Instance()
|
||||||
|
{
|
||||||
|
static Random instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
#ifndef BIASED_INT_DIST
|
#ifndef BIASED_INT_DIST
|
||||||
typedef std::uniform_int_distribution<int>::param_type int_param_t;
|
typedef std::uniform_int_distribution<int>::param_type int_param_t;
|
||||||
|
|||||||
@@ -70,6 +70,7 @@ public:
|
|||||||
uint32_t gm_exp;
|
uint32_t gm_exp;
|
||||||
uint32_t killed_by;
|
uint32_t killed_by;
|
||||||
uint8_t rezzable;
|
uint8_t rezzable;
|
||||||
|
std::string entity_variables;
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string PrimaryKey()
|
static std::string PrimaryKey()
|
||||||
@@ -131,6 +132,7 @@ public:
|
|||||||
"gm_exp",
|
"gm_exp",
|
||||||
"killed_by",
|
"killed_by",
|
||||||
"rezzable",
|
"rezzable",
|
||||||
|
"entity_variables",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -188,6 +190,7 @@ public:
|
|||||||
"gm_exp",
|
"gm_exp",
|
||||||
"killed_by",
|
"killed_by",
|
||||||
"rezzable",
|
"rezzable",
|
||||||
|
"entity_variables",
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -279,6 +282,7 @@ public:
|
|||||||
e.gm_exp = 0;
|
e.gm_exp = 0;
|
||||||
e.killed_by = 0;
|
e.killed_by = 0;
|
||||||
e.rezzable = 0;
|
e.rezzable = 0;
|
||||||
|
e.entity_variables = "";
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@@ -366,6 +370,7 @@ public:
|
|||||||
e.gm_exp = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
|
e.gm_exp = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
|
||||||
e.killed_by = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
|
e.killed_by = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
|
||||||
e.rezzable = row[50] ? static_cast<uint8_t>(strtoul(row[50], nullptr, 10)) : 0;
|
e.rezzable = row[50] ? static_cast<uint8_t>(strtoul(row[50], nullptr, 10)) : 0;
|
||||||
|
e.entity_variables = row[51] ? row[51] : "";
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@@ -449,6 +454,7 @@ public:
|
|||||||
v.push_back(columns[48] + " = " + std::to_string(e.gm_exp));
|
v.push_back(columns[48] + " = " + std::to_string(e.gm_exp));
|
||||||
v.push_back(columns[49] + " = " + std::to_string(e.killed_by));
|
v.push_back(columns[49] + " = " + std::to_string(e.killed_by));
|
||||||
v.push_back(columns[50] + " = " + std::to_string(e.rezzable));
|
v.push_back(columns[50] + " = " + std::to_string(e.rezzable));
|
||||||
|
v.push_back(columns[51] + " = '" + Strings::Escape(e.entity_variables) + "'");
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@@ -521,6 +527,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.gm_exp));
|
v.push_back(std::to_string(e.gm_exp));
|
||||||
v.push_back(std::to_string(e.killed_by));
|
v.push_back(std::to_string(e.killed_by));
|
||||||
v.push_back(std::to_string(e.rezzable));
|
v.push_back(std::to_string(e.rezzable));
|
||||||
|
v.push_back("'" + Strings::Escape(e.entity_variables) + "'");
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@@ -601,6 +608,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.gm_exp));
|
v.push_back(std::to_string(e.gm_exp));
|
||||||
v.push_back(std::to_string(e.killed_by));
|
v.push_back(std::to_string(e.killed_by));
|
||||||
v.push_back(std::to_string(e.rezzable));
|
v.push_back(std::to_string(e.rezzable));
|
||||||
|
v.push_back("'" + Strings::Escape(e.entity_variables) + "'");
|
||||||
|
|
||||||
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
||||||
}
|
}
|
||||||
@@ -685,6 +693,7 @@ public:
|
|||||||
e.gm_exp = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
|
e.gm_exp = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
|
||||||
e.killed_by = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
|
e.killed_by = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
|
||||||
e.rezzable = row[50] ? static_cast<uint8_t>(strtoul(row[50], nullptr, 10)) : 0;
|
e.rezzable = row[50] ? static_cast<uint8_t>(strtoul(row[50], nullptr, 10)) : 0;
|
||||||
|
e.entity_variables = row[51] ? row[51] : "";
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@@ -760,6 +769,7 @@ public:
|
|||||||
e.gm_exp = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
|
e.gm_exp = row[48] ? static_cast<uint32_t>(strtoul(row[48], nullptr, 10)) : 0;
|
||||||
e.killed_by = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
|
e.killed_by = row[49] ? static_cast<uint32_t>(strtoul(row[49], nullptr, 10)) : 0;
|
||||||
e.rezzable = row[50] ? static_cast<uint8_t>(strtoul(row[50], nullptr, 10)) : 0;
|
e.rezzable = row[50] ? static_cast<uint8_t>(strtoul(row[50], nullptr, 10)) : 0;
|
||||||
|
e.entity_variables = row[51] ? row[51] : "";
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@@ -885,6 +895,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.gm_exp));
|
v.push_back(std::to_string(e.gm_exp));
|
||||||
v.push_back(std::to_string(e.killed_by));
|
v.push_back(std::to_string(e.killed_by));
|
||||||
v.push_back(std::to_string(e.rezzable));
|
v.push_back(std::to_string(e.rezzable));
|
||||||
|
v.push_back("'" + Strings::Escape(e.entity_variables) + "'");
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@@ -958,6 +969,7 @@ public:
|
|||||||
v.push_back(std::to_string(e.gm_exp));
|
v.push_back(std::to_string(e.gm_exp));
|
||||||
v.push_back(std::to_string(e.killed_by));
|
v.push_back(std::to_string(e.killed_by));
|
||||||
v.push_back(std::to_string(e.rezzable));
|
v.push_back(std::to_string(e.rezzable));
|
||||||
|
v.push_back("'" + Strings::Escape(e.entity_variables) + "'");
|
||||||
|
|
||||||
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
#include "../../database.h"
|
#include "../../database.h"
|
||||||
#include "../../strings.h"
|
#include "../../strings.h"
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
#include <cereal/cereal.hpp>
|
||||||
class BasePlayerEventLogSettingsRepository {
|
class BasePlayerEventLogSettingsRepository {
|
||||||
public:
|
public:
|
||||||
struct PlayerEventLogSettings {
|
struct PlayerEventLogSettings {
|
||||||
@@ -25,6 +25,20 @@ public:
|
|||||||
int32_t retention_days;
|
int32_t retention_days;
|
||||||
int32_t discord_webhook_id;
|
int32_t discord_webhook_id;
|
||||||
uint8_t etl_enabled;
|
uint8_t etl_enabled;
|
||||||
|
|
||||||
|
// cereal
|
||||||
|
template<class Archive>
|
||||||
|
void serialize(Archive &ar)
|
||||||
|
{
|
||||||
|
ar(
|
||||||
|
CEREAL_NVP(id),
|
||||||
|
CEREAL_NVP(event_name),
|
||||||
|
CEREAL_NVP(event_enabled),
|
||||||
|
CEREAL_NVP(retention_days),
|
||||||
|
CEREAL_NVP(discord_webhook_id),
|
||||||
|
CEREAL_NVP(etl_enabled)
|
||||||
|
);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string PrimaryKey()
|
static std::string PrimaryKey()
|
||||||
|
|||||||
@@ -231,6 +231,21 @@ public:
|
|||||||
|
|
||||||
return UpdateOne(db, corpse);
|
return UpdateOne(db, corpse);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int UpdateEntityVariables(Database& db, uint32 corpse_id, const std::string& json_string)
|
||||||
|
{
|
||||||
|
auto results = db.QueryDatabase(
|
||||||
|
fmt::format(
|
||||||
|
"UPDATE `{}` SET `entity_variables` = '{}' WHERE `{}` = {}",
|
||||||
|
TableName(),
|
||||||
|
Strings::Escape(json_string),
|
||||||
|
PrimaryKey(),
|
||||||
|
corpse_id
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
return results.Success() ? results.RowsAffected() : 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //EQEMU_CHARACTER_CORPSES_REPOSITORY_H
|
#endif //EQEMU_CHARACTER_CORPSES_REPOSITORY_H
|
||||||
|
|||||||
@@ -167,6 +167,30 @@ public:
|
|||||||
|
|
||||||
return zone_player_counts;
|
return zone_player_counts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::vector<uint32_t> GetCharacterIDsByAccountID(
|
||||||
|
Database& db,
|
||||||
|
uint32_t account_id
|
||||||
|
)
|
||||||
|
{
|
||||||
|
std::vector<uint32_t> character_ids;
|
||||||
|
|
||||||
|
auto query = fmt::format(
|
||||||
|
"SELECT id FROM character_data WHERE account_id = {} AND deleted_at IS NULL",
|
||||||
|
account_id
|
||||||
|
);
|
||||||
|
|
||||||
|
auto results = db.QueryDatabase(query);
|
||||||
|
if (results.Success()) {
|
||||||
|
for (auto row : results) {
|
||||||
|
if (row[0]) {
|
||||||
|
character_ids.push_back(static_cast<uint32_t>(std::stoul(row[0])));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return character_ids;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //EQEMU_CHARACTER_DATA_REPOSITORY_H
|
#endif //EQEMU_CHARACTER_DATA_REPOSITORY_H
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ namespace ContentFilterCriteria {
|
|||||||
table_prefix = table_prefix + ".";
|
table_prefix = table_prefix + ".";
|
||||||
}
|
}
|
||||||
|
|
||||||
int current_expansion_filter_criteria = content_service.GetCurrentExpansion();
|
int current_expansion_filter_criteria = WorldContentService::Instance()->GetCurrentExpansion();
|
||||||
if (current_expansion_filter_criteria == Expansion::EXPANSION_ALL) {
|
if (current_expansion_filter_criteria == Expansion::EXPANSION_ALL) {
|
||||||
current_expansion_filter_criteria = Expansion::EXPANSION_FILTER_MAX;
|
current_expansion_filter_criteria = Expansion::EXPANSION_FILTER_MAX;
|
||||||
}
|
}
|
||||||
@@ -33,8 +33,8 @@ namespace ContentFilterCriteria {
|
|||||||
table_prefix
|
table_prefix
|
||||||
);
|
);
|
||||||
|
|
||||||
std::vector<std::string> flags_disabled = content_service.GetContentFlagsDisabled();
|
std::vector<std::string> flags_disabled = WorldContentService::Instance()->GetContentFlagsDisabled();
|
||||||
std::vector<std::string> flags_enabled = content_service.GetContentFlagsEnabled();
|
std::vector<std::string> flags_enabled = WorldContentService::Instance()->GetContentFlagsEnabled();
|
||||||
std::string flags_in_filter_enabled;
|
std::string flags_in_filter_enabled;
|
||||||
std::string flags_in_filter_disabled;
|
std::string flags_in_filter_disabled;
|
||||||
if (!flags_enabled.empty()) {
|
if (!flags_enabled.empty()) {
|
||||||
|
|||||||
@@ -43,6 +43,47 @@ public:
|
|||||||
* method and encapsulate filters there
|
* method and encapsulate filters there
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
template<typename T1, typename T2, typename T3, typename T4>
|
||||||
|
static std::vector<std::string> join_tuple(
|
||||||
|
const std::string &glue,
|
||||||
|
const std::pair<char, char> &encapsulation,
|
||||||
|
const std::vector<std::tuple<T1, T2, T3, T4>> &src
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (src.empty()) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> output;
|
||||||
|
|
||||||
|
for (const std::tuple<T1, T2, T3, T4> &src_iter: src) {
|
||||||
|
|
||||||
|
output.emplace_back(
|
||||||
|
|
||||||
|
fmt::format(
|
||||||
|
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
|
||||||
|
encapsulation.first,
|
||||||
|
std::get<0>(src_iter),
|
||||||
|
encapsulation.second,
|
||||||
|
glue,
|
||||||
|
encapsulation.first,
|
||||||
|
std::get<1>(src_iter),
|
||||||
|
encapsulation.second,
|
||||||
|
glue,
|
||||||
|
encapsulation.first,
|
||||||
|
std::get<2>(src_iter),
|
||||||
|
encapsulation.second,
|
||||||
|
glue,
|
||||||
|
encapsulation.first,
|
||||||
|
std::get<3>(src_iter),
|
||||||
|
encapsulation.second
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
// Custom extended repository methods here
|
// Custom extended repository methods here
|
||||||
static std::vector<std::string> GetRuleNames(Database &db, int rule_set_id)
|
static std::vector<std::string> GetRuleNames(Database &db, int rule_set_id)
|
||||||
{
|
{
|
||||||
@@ -87,12 +128,28 @@ public:
|
|||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
static std::string
|
||||||
|
ImplodePair(const std::string &glue, const std::pair<char, char> &encapsulation, const std::vector<T> &src)
|
||||||
|
{
|
||||||
|
if (src.empty()) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
std::ostringstream oss;
|
||||||
|
for (const T &src_iter: src) {
|
||||||
|
oss << encapsulation.first << src_iter << encapsulation.second << glue;
|
||||||
|
}
|
||||||
|
std::string output(oss.str());
|
||||||
|
output.resize(output.size() - glue.size());
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
static bool DeleteOrphanedRules(Database& db, std::vector<std::string>& v)
|
static bool DeleteOrphanedRules(Database& db, std::vector<std::string>& v)
|
||||||
{
|
{
|
||||||
const auto query = fmt::format(
|
const auto query = fmt::format(
|
||||||
"DELETE FROM {} WHERE rule_name IN ({})",
|
"DELETE FROM {} WHERE rule_name IN ({})",
|
||||||
TableName(),
|
TableName(),
|
||||||
Strings::ImplodePair(",", std::pair<char, char>('\'', '\''), v)
|
ImplodePair(",", std::pair<char, char>('\'', '\''), v)
|
||||||
);
|
);
|
||||||
|
|
||||||
return db.QueryDatabase(query).Success();
|
return db.QueryDatabase(query).Success();
|
||||||
@@ -103,7 +160,7 @@ public:
|
|||||||
const auto query = fmt::format(
|
const auto query = fmt::format(
|
||||||
"REPLACE INTO {} (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES {}",
|
"REPLACE INTO {} (`ruleset_id`, `rule_name`, `rule_value`, `notes`) VALUES {}",
|
||||||
TableName(),
|
TableName(),
|
||||||
Strings::ImplodePair(
|
ImplodePair(
|
||||||
",",
|
",",
|
||||||
std::pair<char, char>('(', ')'),
|
std::pair<char, char>('(', ')'),
|
||||||
join_tuple(",", std::pair<char, char>('\'', '\''), v)
|
join_tuple(",", std::pair<char, char>('\'', '\''), v)
|
||||||
|
|||||||
+1
-1
@@ -233,7 +233,7 @@ RULE_BOOL(Character, SneakAlwaysSucceedOver100, false, "When sneak skill is over
|
|||||||
RULE_INT(Character, BandolierSwapDelay, 0, "Bandolier swap delay in milliseconds, default is 0")
|
RULE_INT(Character, BandolierSwapDelay, 0, "Bandolier swap delay in milliseconds, default is 0")
|
||||||
RULE_BOOL(Character, EnableHackedFastCampForGM, false, "Enables hacked fast camp for GM clients, if the GM doesn't have a hacked client they'll camp like normal")
|
RULE_BOOL(Character, EnableHackedFastCampForGM, false, "Enables hacked fast camp for GM clients, if the GM doesn't have a hacked client they'll camp like normal")
|
||||||
RULE_BOOL(Character, AlwaysAllowNameChange, false, "Enable this option to allow /changename to work without enabling a name change via scripts.")
|
RULE_BOOL(Character, AlwaysAllowNameChange, false, "Enable this option to allow /changename to work without enabling a name change via scripts.")
|
||||||
RULE_BOOL(Character, EnableAutoAFK, true, "Enable or disable the auto AFK feature, cuts down on packet spam")
|
RULE_BOOL(Character, EnableAutoAFK, false, "Enable or disable the auto AFK feature, cuts down on packet spam")
|
||||||
RULE_BOOL(Character, AutoIdleFilterPackets, true, "Enable or disable filtering packets when auto AFK is enabled, heavily cuts down on packet spam in zones with lots of players")
|
RULE_BOOL(Character, AutoIdleFilterPackets, true, "Enable or disable filtering packets when auto AFK is enabled, heavily cuts down on packet spam in zones with lots of players")
|
||||||
RULE_INT(Character, SecondsBeforeIdleCombatZone, 600, "Seconds before a player is considered idle in combat zones (600 = 10 minutes)")
|
RULE_INT(Character, SecondsBeforeIdleCombatZone, 600, "Seconds before a player is considered idle in combat zones (600 = 10 minutes)")
|
||||||
RULE_INT(Character, SecondsBeforeIdleNonCombatZone, 60, "Seconds before a player is considered idle in non-combat zones (60 = 1 minute)")
|
RULE_INT(Character, SecondsBeforeIdleNonCombatZone, 60, "Seconds before a player is considered idle in non-combat zones (60 = 1 minute)")
|
||||||
|
|||||||
@@ -275,6 +275,7 @@
|
|||||||
// player events
|
// player events
|
||||||
#define ServerOP_QSSendQuery 0x5000
|
#define ServerOP_QSSendQuery 0x5000
|
||||||
#define ServerOP_PlayerEvent 0x5100
|
#define ServerOP_PlayerEvent 0x5100
|
||||||
|
#define ServerOP_SendPlayerEventSettings 0x5101
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
CZUpdateType_Character,
|
CZUpdateType_Character,
|
||||||
@@ -1778,6 +1779,7 @@ struct BazaarPurchaseMessaging_Struct {
|
|||||||
uint32 id;
|
uint32 id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+54
-6
@@ -824,7 +824,7 @@ bool SharedDatabase::GetInventory(Client *c)
|
|||||||
e.character_id = char_id;
|
e.character_id = char_id;
|
||||||
e.item_id = item_id;
|
e.item_id = item_id;
|
||||||
e.equipped = inst->GetEvolveEquipped();
|
e.equipped = inst->GetEvolveEquipped();
|
||||||
e.final_item_id = evolving_items_manager.GetFinalItemID(*inst);
|
e.final_item_id = EvolvingItemsManager::Instance()->GetFinalItemID(*inst);
|
||||||
|
|
||||||
auto r = CharacterEvolvingItemsRepository::InsertOne(*this, e);
|
auto r = CharacterEvolvingItemsRepository::InsertOne(*this, e);
|
||||||
e.id = r.id;
|
e.id = r.id;
|
||||||
@@ -974,7 +974,7 @@ bool SharedDatabase::LoadItems(const std::string &prefix) {
|
|||||||
const auto Config = EQEmuConfig::get();
|
const auto Config = EQEmuConfig::get();
|
||||||
EQ::IPCMutex mutex("items");
|
EQ::IPCMutex mutex("items");
|
||||||
mutex.Lock();
|
mutex.Lock();
|
||||||
std::string file_name = fmt::format("{}/{}{}", path.GetSharedMemoryPath(), prefix, std::string("items"));
|
std::string file_name = fmt::format("{}/{}{}", PathManager::Instance()->GetSharedMemoryPath(), prefix, std::string("items"));
|
||||||
items_mmf = std::make_unique<EQ::MemoryMappedFile>(file_name);
|
items_mmf = std::make_unique<EQ::MemoryMappedFile>(file_name);
|
||||||
items_hash = std::make_unique<EQ::FixedMemoryHashSet<EQ::ItemData>>(static_cast<uint8*>(items_mmf->Get()), items_mmf->Size());
|
items_hash = std::make_unique<EQ::FixedMemoryHashSet<EQ::ItemData>>(static_cast<uint8*>(items_mmf->Get()), items_mmf->Size());
|
||||||
mutex.Unlock();
|
mutex.Unlock();
|
||||||
@@ -1544,12 +1544,60 @@ bool SharedDatabase::GetCommandSettings(std::map<std::string, std::pair<uint8, s
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T1, typename T2>
|
||||||
|
inline std::vector<std::string> join_pair(
|
||||||
|
const std::string &glue,
|
||||||
|
const std::pair<char, char> &encapsulation,
|
||||||
|
const std::vector<std::pair<T1, T2>> &src
|
||||||
|
)
|
||||||
|
{
|
||||||
|
if (src.empty()) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> output;
|
||||||
|
|
||||||
|
for (const std::pair<T1, T2> &src_iter: src) {
|
||||||
|
output.emplace_back(
|
||||||
|
|
||||||
|
fmt::format(
|
||||||
|
"{}{}{}{}{}{}{}",
|
||||||
|
encapsulation.first,
|
||||||
|
src_iter.first,
|
||||||
|
encapsulation.second,
|
||||||
|
glue,
|
||||||
|
encapsulation.first,
|
||||||
|
src_iter.second,
|
||||||
|
encapsulation.second
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
inline std::string
|
||||||
|
ImplodePair(const std::string &glue, const std::pair<char, char> &encapsulation, const std::vector<T> &src)
|
||||||
|
{
|
||||||
|
if (src.empty()) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
std::ostringstream oss;
|
||||||
|
for (const T &src_iter: src) {
|
||||||
|
oss << encapsulation.first << src_iter << encapsulation.second << glue;
|
||||||
|
}
|
||||||
|
std::string output(oss.str());
|
||||||
|
output.resize(output.size() - glue.size());
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
bool SharedDatabase::UpdateInjectedCommandSettings(const std::vector<std::pair<std::string, uint8>> &injected)
|
bool SharedDatabase::UpdateInjectedCommandSettings(const std::vector<std::pair<std::string, uint8>> &injected)
|
||||||
{
|
{
|
||||||
if (injected.size()) {
|
if (injected.size()) {
|
||||||
const std::string query = fmt::format(
|
const std::string query = fmt::format(
|
||||||
"REPLACE INTO `command_settings`(`command`, `access`) VALUES {}",
|
"REPLACE INTO `command_settings`(`command`, `access`) VALUES {}",
|
||||||
Strings::ImplodePair(
|
ImplodePair(
|
||||||
",",
|
",",
|
||||||
std::pair<char, char>('(', ')'),
|
std::pair<char, char>('(', ')'),
|
||||||
join_pair(",", std::pair<char, char>('\'', '\''), injected)
|
join_pair(",", std::pair<char, char>('\'', '\''), injected)
|
||||||
@@ -1576,7 +1624,7 @@ bool SharedDatabase::UpdateOrphanedCommandSettings(const std::vector<std::string
|
|||||||
if (orphaned.size()) {
|
if (orphaned.size()) {
|
||||||
std::string query = fmt::format(
|
std::string query = fmt::format(
|
||||||
"DELETE FROM `command_settings` WHERE `command` IN ({})",
|
"DELETE FROM `command_settings` WHERE `command` IN ({})",
|
||||||
Strings::ImplodePair(",", std::pair<char, char>('\'', '\''), orphaned)
|
ImplodePair(",", std::pair<char, char>('\'', '\''), orphaned)
|
||||||
);
|
);
|
||||||
|
|
||||||
auto results = QueryDatabase(query);
|
auto results = QueryDatabase(query);
|
||||||
@@ -1586,7 +1634,7 @@ bool SharedDatabase::UpdateOrphanedCommandSettings(const std::vector<std::string
|
|||||||
|
|
||||||
query = fmt::format(
|
query = fmt::format(
|
||||||
"DELETE FROM `command_subsettings` WHERE `parent_command` IN ({})",
|
"DELETE FROM `command_subsettings` WHERE `parent_command` IN ({})",
|
||||||
Strings::ImplodePair(",", std::pair<char, char>('\'', '\''), orphaned)
|
ImplodePair(",", std::pair<char, char>('\'', '\''), orphaned)
|
||||||
);
|
);
|
||||||
|
|
||||||
auto results_two = QueryDatabase(query);
|
auto results_two = QueryDatabase(query);
|
||||||
@@ -1665,7 +1713,7 @@ bool SharedDatabase::LoadSpells(const std::string &prefix, int32 *records, const
|
|||||||
EQ::IPCMutex mutex("spells");
|
EQ::IPCMutex mutex("spells");
|
||||||
mutex.Lock();
|
mutex.Lock();
|
||||||
|
|
||||||
std::string file_name = fmt::format("{}/{}{}", path.GetSharedMemoryPath(), prefix, std::string("spells"));
|
std::string file_name = fmt::format("{}/{}{}", PathManager::Instance()->GetSharedMemoryPath(), prefix, std::string("spells"));
|
||||||
spells_mmf = std::make_unique<EQ::MemoryMappedFile>(file_name);
|
spells_mmf = std::make_unique<EQ::MemoryMappedFile>(file_name);
|
||||||
LogInfo("Loading [{}]", file_name);
|
LogInfo("Loading [{}]", file_name);
|
||||||
*records = *static_cast<uint32*>(spells_mmf->Get());
|
*records = *static_cast<uint32*>(spells_mmf->Get());
|
||||||
|
|||||||
+6
-2
@@ -16,12 +16,16 @@ public:
|
|||||||
static int32_t GetSkillCapMaxLevel(uint8 class_id, EQ::skills::SkillType skill_id);
|
static int32_t GetSkillCapMaxLevel(uint8 class_id, EQ::skills::SkillType skill_id);
|
||||||
|
|
||||||
SkillCaps *SetContentDatabase(Database *db);
|
SkillCaps *SetContentDatabase(Database *db);
|
||||||
|
|
||||||
|
static SkillCaps* Instance()
|
||||||
|
{
|
||||||
|
static SkillCaps instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
Database *m_content_database{};
|
Database *m_content_database{};
|
||||||
std::map<uint64, SkillCapsRepository::SkillCaps> m_skill_caps = {};
|
std::map<uint64, SkillCapsRepository::SkillCaps> m_skill_caps = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
extern SkillCaps skill_caps;
|
|
||||||
|
|
||||||
|
|
||||||
#endif //CODE_SKILL_CAPS_H
|
#endif //CODE_SKILL_CAPS_H
|
||||||
|
|||||||
@@ -34,6 +34,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "strings.h"
|
#include "strings.h"
|
||||||
|
#include <cereal/external/rapidjson/document.h>
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cctype>
|
#include <cctype>
|
||||||
@@ -41,6 +42,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
#include <random>
|
#include <random>
|
||||||
#include <string>
|
#include <string>
|
||||||
@@ -49,6 +51,12 @@
|
|||||||
#include "strings_legacy.cpp" // legacy c functions
|
#include "strings_legacy.cpp" // legacy c functions
|
||||||
#include "strings_misc.cpp" // anything non "Strings" scoped
|
#include "strings_misc.cpp" // anything non "Strings" scoped
|
||||||
|
|
||||||
|
#ifdef _WINDOWS
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <functional>
|
||||||
|
#include <algorithm>
|
||||||
|
#endif
|
||||||
|
|
||||||
std::string Strings::Random(size_t length)
|
std::string Strings::Random(size_t length)
|
||||||
{
|
{
|
||||||
static auto &chrs = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
static auto &chrs = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||||
@@ -701,6 +709,18 @@ std::string &Strings::Trim(std::string &str, const std::string &chars)
|
|||||||
return LTrim(RTrim(str, chars), chars);
|
return LTrim(RTrim(str, chars), chars);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const std::string NUM_TO_ENGLISH_X[] = {
|
||||||
|
"", "One ", "Two ", "Three ", "Four ",
|
||||||
|
"Five ", "Six ", "Seven ", "Eight ", "Nine ", "Ten ", "Eleven ",
|
||||||
|
"Twelve ", "Thirteen ", "Fourteen ", "Fifteen ",
|
||||||
|
"Sixteen ", "Seventeen ", "Eighteen ", "Nineteen "
|
||||||
|
};
|
||||||
|
|
||||||
|
const std::string NUM_TO_ENGLISH_Y[] = {
|
||||||
|
"", "", "Twenty ", "Thirty ", "Forty ",
|
||||||
|
"Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "
|
||||||
|
};
|
||||||
|
|
||||||
// Function to convert single digit or two digit number into words
|
// Function to convert single digit or two digit number into words
|
||||||
std::string Strings::ConvertToDigit(int n, const std::string& suffix)
|
std::string Strings::ConvertToDigit(int n, const std::string& suffix)
|
||||||
{
|
{
|
||||||
|
|||||||
+3
-193
@@ -36,53 +36,19 @@
|
|||||||
#define _STRINGUTIL_H_
|
#define _STRINGUTIL_H_
|
||||||
|
|
||||||
#include <charconv>
|
#include <charconv>
|
||||||
#include <sstream>
|
#include <cstring>
|
||||||
#include <string.h>
|
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <cstdarg>
|
#include <cstdarg>
|
||||||
#include <tuple>
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
#include <fmt/format.h>
|
#ifdef _WIN32
|
||||||
#include <cereal/external/rapidjson/document.h>
|
|
||||||
|
|
||||||
#ifndef _WIN32
|
|
||||||
// this doesn't appear to affect linux-based systems..need feedback for _WIN64
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WINDOWS
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <functional>
|
|
||||||
#include <algorithm>
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
namespace detail {
|
|
||||||
// template magic to check if std::from_chars floating point functions exist
|
|
||||||
template <typename T, typename = void>
|
|
||||||
struct has_from_chars_float : std::false_type { };
|
|
||||||
|
|
||||||
// basically it "uses" this template if they do exist because reasons
|
|
||||||
template <typename T>
|
|
||||||
struct has_from_chars_float < T,
|
|
||||||
std::void_t<decltype(std::from_chars(std::declval<const char *>(), std::declval<const char *>(),
|
|
||||||
std::declval<T &>()))>> : std::true_type { };
|
|
||||||
}; // namespace detail
|
|
||||||
|
|
||||||
namespace EQ {
|
|
||||||
// lame -- older GCC's didn't define this, clang's libc++ however does, even though they lack FP support
|
|
||||||
#if defined(__GNUC__) && (__GNUC__ < 11) && !defined(__clang__)
|
|
||||||
enum class chars_format {
|
|
||||||
scientific = 1, fixed = 2, hex = 4, general = fixed | scientific
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
using chars_format = std::chars_format;
|
|
||||||
#endif
|
|
||||||
}; // namespace EQ
|
|
||||||
|
|
||||||
class Strings {
|
class Strings {
|
||||||
public:
|
public:
|
||||||
static bool Contains(std::vector<std::string> container, const std::string& element);
|
static bool Contains(std::vector<std::string> container, const std::string& element);
|
||||||
@@ -133,61 +99,6 @@ public:
|
|||||||
static bool BeginsWith(const std::string& subject, const std::string& search);
|
static bool BeginsWith(const std::string& subject, const std::string& search);
|
||||||
static bool EndsWith(const std::string& subject, const std::string& search);
|
static bool EndsWith(const std::string& subject, const std::string& search);
|
||||||
static std::string ZoneTime(const uint8 hours, const uint8 minutes);
|
static std::string ZoneTime(const uint8 hours, const uint8 minutes);
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
static std::string
|
|
||||||
ImplodePair(const std::string &glue, const std::pair<char, char> &encapsulation, const std::vector<T> &src)
|
|
||||||
{
|
|
||||||
if (src.empty()) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
std::ostringstream oss;
|
|
||||||
for (const T &src_iter: src) {
|
|
||||||
oss << encapsulation.first << src_iter << encapsulation.second << glue;
|
|
||||||
}
|
|
||||||
std::string output(oss.str());
|
|
||||||
output.resize(output.size() - glue.size());
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
// basic string_view overloads that just use std stuff since they work!
|
|
||||||
template <typename T>
|
|
||||||
std::enable_if_t<std::is_floating_point_v<T> && detail::has_from_chars_float<T>::value, std::from_chars_result>
|
|
||||||
static from_chars(std::string_view str, T& value, EQ::chars_format fmt = EQ::chars_format::general)
|
|
||||||
{
|
|
||||||
return std::from_chars(str.data(), str.data() + str.size(), value, fmt);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
std::enable_if_t<std::is_integral_v<T>, std::from_chars_result>
|
|
||||||
static from_chars(std::string_view str, T& value, int base = 10)
|
|
||||||
{
|
|
||||||
return std::from_chars(str.data(), str.data() + str.size(), value, base);
|
|
||||||
}
|
|
||||||
|
|
||||||
// fallback versions of floating point in case they're not implemented
|
|
||||||
// TODO: add error handling ...
|
|
||||||
// This does have to allocate since from_chars doesn't need a null terminated string and neither does string_view
|
|
||||||
template <typename T>
|
|
||||||
std::enable_if_t<std::is_floating_point_v<T> && !detail::has_from_chars_float<T>::value && std::is_same_v<T, float>, std::from_chars_result>
|
|
||||||
static from_chars(std::string_view str, T& value, EQ::chars_format fmt = EQ::chars_format::general)
|
|
||||||
{
|
|
||||||
std::from_chars_result res{};
|
|
||||||
std::string tmp_str(str.data(), str.size());
|
|
||||||
value = strtof(tmp_str.data(), nullptr);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
std::enable_if_t<std::is_floating_point_v<T> && !detail::has_from_chars_float<T>::value && std::is_same_v<T, double>, std::from_chars_result>
|
|
||||||
static from_chars(std::string_view str, T& value, EQ::chars_format fmt = EQ::chars_format::general)
|
|
||||||
{
|
|
||||||
std::from_chars_result res{};
|
|
||||||
std::string tmp_str(str.data(), str.size());
|
|
||||||
value = strtod(tmp_str.data(), nullptr);
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
static std::string Slugify(const std::string &input, const std::string &separator = "-");
|
static std::string Slugify(const std::string &input, const std::string &separator = "-");
|
||||||
static bool IsValidJson(const std::string& json);
|
static bool IsValidJson(const std::string& json);
|
||||||
};
|
};
|
||||||
@@ -199,93 +110,6 @@ const std::string vStringFormat(const char *format, va_list args);
|
|||||||
// Used for grid nodes, as NPC names remove numerals.
|
// Used for grid nodes, as NPC names remove numerals.
|
||||||
// But general purpose
|
// But general purpose
|
||||||
|
|
||||||
const std::string NUM_TO_ENGLISH_X[] = {
|
|
||||||
"", "One ", "Two ", "Three ", "Four ",
|
|
||||||
"Five ", "Six ", "Seven ", "Eight ", "Nine ", "Ten ", "Eleven ",
|
|
||||||
"Twelve ", "Thirteen ", "Fourteen ", "Fifteen ",
|
|
||||||
"Sixteen ", "Seventeen ", "Eighteen ", "Nineteen "
|
|
||||||
};
|
|
||||||
|
|
||||||
const std::string NUM_TO_ENGLISH_Y[] = {
|
|
||||||
"", "", "Twenty ", "Thirty ", "Forty ",
|
|
||||||
"Fifty ", "Sixty ", "Seventy ", "Eighty ", "Ninety "
|
|
||||||
};
|
|
||||||
|
|
||||||
// _WIN32 builds require that #include<fmt/format.h> be included in whatever code file the invocation is made from (no header files)
|
|
||||||
template<typename T1, typename T2>
|
|
||||||
std::vector<std::string> join_pair(
|
|
||||||
const std::string &glue,
|
|
||||||
const std::pair<char, char> &encapsulation,
|
|
||||||
const std::vector<std::pair<T1, T2>> &src
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (src.empty()) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<std::string> output;
|
|
||||||
|
|
||||||
for (const std::pair<T1, T2> &src_iter: src) {
|
|
||||||
output.emplace_back(
|
|
||||||
|
|
||||||
fmt::format(
|
|
||||||
"{}{}{}{}{}{}{}",
|
|
||||||
encapsulation.first,
|
|
||||||
src_iter.first,
|
|
||||||
encapsulation.second,
|
|
||||||
glue,
|
|
||||||
encapsulation.first,
|
|
||||||
src_iter.second,
|
|
||||||
encapsulation.second
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
// _WIN32 builds require that #include<fmt/format.h> be included in whatever code file the invocation is made from (no header files)
|
|
||||||
template<typename T1, typename T2, typename T3, typename T4>
|
|
||||||
std::vector<std::string> join_tuple(
|
|
||||||
const std::string &glue,
|
|
||||||
const std::pair<char, char> &encapsulation,
|
|
||||||
const std::vector<std::tuple<T1, T2, T3, T4>> &src
|
|
||||||
)
|
|
||||||
{
|
|
||||||
if (src.empty()) {
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<std::string> output;
|
|
||||||
|
|
||||||
for (const std::tuple<T1, T2, T3, T4> &src_iter: src) {
|
|
||||||
|
|
||||||
output.emplace_back(
|
|
||||||
|
|
||||||
fmt::format(
|
|
||||||
"{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}",
|
|
||||||
encapsulation.first,
|
|
||||||
std::get<0>(src_iter),
|
|
||||||
encapsulation.second,
|
|
||||||
glue,
|
|
||||||
encapsulation.first,
|
|
||||||
std::get<1>(src_iter),
|
|
||||||
encapsulation.second,
|
|
||||||
glue,
|
|
||||||
encapsulation.first,
|
|
||||||
std::get<2>(src_iter),
|
|
||||||
encapsulation.second,
|
|
||||||
glue,
|
|
||||||
encapsulation.first,
|
|
||||||
std::get<3>(src_iter),
|
|
||||||
encapsulation.second
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
// misc functions
|
// misc functions
|
||||||
std::string SanitizeWorldServerName(std::string server_long_name);
|
std::string SanitizeWorldServerName(std::string server_long_name);
|
||||||
std::vector<std::string> GetBadWords();
|
std::vector<std::string> GetBadWords();
|
||||||
@@ -310,18 +134,4 @@ std::string FormatName(const std::string &char_name);
|
|||||||
bool IsAllowedWorldServerCharacterList(char c);
|
bool IsAllowedWorldServerCharacterList(char c);
|
||||||
void SanitizeWorldServerName(char *name);
|
void SanitizeWorldServerName(char *name);
|
||||||
|
|
||||||
template<typename InputIterator, typename OutputIterator>
|
|
||||||
auto CleanMobName(InputIterator first, InputIterator last, OutputIterator result)
|
|
||||||
{
|
|
||||||
for (; first != last; ++first) {
|
|
||||||
if (*first == '_') {
|
|
||||||
*result = ' ';
|
|
||||||
}
|
|
||||||
else if (isalpha(*first) || *first == '`') {
|
|
||||||
*result = *first;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+2
-2
@@ -25,7 +25,7 @@
|
|||||||
|
|
||||||
// Build variables
|
// Build variables
|
||||||
// these get injected during the build pipeline
|
// these get injected during the build pipeline
|
||||||
#define CURRENT_VERSION "23.7.0-dev" // always append -dev to the current version for custom-builds
|
#define CURRENT_VERSION "23.8.1-dev" // always append -dev to the current version for custom-builds
|
||||||
#define LOGIN_VERSION "0.8.0"
|
#define LOGIN_VERSION "0.8.0"
|
||||||
#define COMPILE_DATE __DATE__
|
#define COMPILE_DATE __DATE__
|
||||||
#define COMPILE_TIME __TIME__
|
#define COMPILE_TIME __TIME__
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
* Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt
|
* Manifest: https://github.com/EQEmu/Server/blob/master/utils/sql/db_update_manifest.txt
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define CURRENT_BINARY_DATABASE_VERSION 9323
|
#define CURRENT_BINARY_DATABASE_VERSION 9325
|
||||||
#define CURRENT_BINARY_BOTS_DATABASE_VERSION 9054
|
#define CURRENT_BINARY_BOTS_DATABASE_VERSION 9054
|
||||||
#define CUSTOM_BINARY_DATABASE_VERSION 0
|
#define CUSTOM_BINARY_DATABASE_VERSION 0
|
||||||
|
|
||||||
|
|||||||
+13
-10
@@ -104,36 +104,39 @@ public:
|
|||||||
uint8 GetZoneIdleWhenEmpty(uint32 zone_id, int version = 0);
|
uint8 GetZoneIdleWhenEmpty(uint32 zone_id, int version = 0);
|
||||||
uint32 GetZoneSecondsBeforeIdle(uint32 zone_id, int version = 0);
|
uint32 GetZoneSecondsBeforeIdle(uint32 zone_id, int version = 0);
|
||||||
|
|
||||||
|
static ZoneStore* Instance()
|
||||||
|
{
|
||||||
|
static ZoneStore instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
std::vector<ZoneRepository::Zone> m_zones;
|
std::vector<ZoneRepository::Zone> m_zones;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern ZoneStore zone_store;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Global helpers
|
* Global helpers
|
||||||
*/
|
*/
|
||||||
inline uint32 ZoneID(const char *in_zone_name) { return zone_store.GetZoneID(in_zone_name); }
|
inline uint32 ZoneID(const char *in_zone_name) { return ZoneStore::Instance()->GetZoneID(in_zone_name); }
|
||||||
inline uint32 ZoneID(const std::string& zone_name) { return zone_store.GetZoneID(zone_name); }
|
inline uint32 ZoneID(const std::string& zone_name) { return ZoneStore::Instance()->GetZoneID(zone_name); }
|
||||||
inline const char *ZoneName(uint32 zone_id, bool error_unknown = false)
|
inline const char *ZoneName(uint32 zone_id, bool error_unknown = false)
|
||||||
{
|
{
|
||||||
return zone_store.GetZoneName(
|
return ZoneStore::Instance()->GetZoneName(
|
||||||
zone_id,
|
zone_id,
|
||||||
error_unknown
|
error_unknown
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
inline const char *ZoneLongName(uint32 zone_id, bool error_unknown = false)
|
inline const char *ZoneLongName(uint32 zone_id, bool error_unknown = false)
|
||||||
{
|
{
|
||||||
return zone_store.GetZoneLongName(
|
return ZoneStore::Instance()->GetZoneLongName(
|
||||||
zone_id,
|
zone_id,
|
||||||
error_unknown
|
error_unknown
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
inline ZoneRepository::Zone *GetZone(uint32 zone_id, int version = 0) { return zone_store.GetZone(zone_id, version); };
|
inline ZoneRepository::Zone *GetZone(uint32 zone_id, int version = 0) { return ZoneStore::Instance()->GetZone(zone_id, version); };
|
||||||
inline ZoneRepository::Zone *GetZone(const char *in_zone_name) { return zone_store.GetZone(in_zone_name); };
|
inline ZoneRepository::Zone *GetZone(const char *in_zone_name) { return ZoneStore::Instance()->GetZone(in_zone_name); };
|
||||||
inline ZoneRepository::Zone *GetZone(const char *in_zone_name, int version = 0)
|
inline ZoneRepository::Zone *GetZone(const char *in_zone_name, int version = 0)
|
||||||
{
|
{
|
||||||
return zone_store.GetZone(
|
return ZoneStore::Instance()->GetZone(
|
||||||
ZoneID(
|
ZoneID(
|
||||||
in_zone_name
|
in_zone_name
|
||||||
), version
|
), version
|
||||||
@@ -141,7 +144,7 @@ inline ZoneRepository::Zone *GetZone(const char *in_zone_name, int version = 0)
|
|||||||
};
|
};
|
||||||
inline ZoneRepository::Zone *GetZoneVersionWithFallback(uint32 zone_id, int version = 0)
|
inline ZoneRepository::Zone *GetZoneVersionWithFallback(uint32 zone_id, int version = 0)
|
||||||
{
|
{
|
||||||
return zone_store.GetZoneWithFallback(
|
return ZoneStore::Instance()->GetZoneWithFallback(
|
||||||
zone_id,
|
zone_id,
|
||||||
version
|
version
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -33,19 +33,16 @@
|
|||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
EQEmuLogSys LogSys;
|
|
||||||
PathManager path;
|
|
||||||
|
|
||||||
bool RunLoops = false;
|
bool RunLoops = false;
|
||||||
|
|
||||||
void CatchSignal(int sig_num);
|
void CatchSignal(int sig_num);
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
RegisterExecutablePlatform(ExePlatformLaunch);
|
RegisterExecutablePlatform(ExePlatformLaunch);
|
||||||
LogSys.LoadLogSettingsDefaults();
|
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
|
||||||
set_exception_handler();
|
set_exception_handler();
|
||||||
|
|
||||||
path.LoadPaths();
|
PathManager::Instance()->Init();
|
||||||
|
|
||||||
std::string launcher_name;
|
std::string launcher_name;
|
||||||
if(argc == 2) {
|
if(argc == 2) {
|
||||||
@@ -169,7 +166,7 @@ int main(int argc, char *argv[]) {
|
|||||||
delete zone->second;
|
delete zone->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSys.CloseFileLogs();
|
EQEmuLogSys::Instance()->CloseFileLogs();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ bool Client::Process()
|
|||||||
OpcodeManager::EmuToName(app->GetOpcode()),
|
OpcodeManager::EmuToName(app->GetOpcode()),
|
||||||
o->EmuToEQ(app->GetOpcode()) == 0 ? app->GetProtocolOpcode() : o->EmuToEQ(app->GetOpcode()),
|
o->EmuToEQ(app->GetOpcode()) == 0 ? app->GetProtocolOpcode() : o->EmuToEQ(app->GetOpcode()),
|
||||||
app->Size(),
|
app->Size(),
|
||||||
(LogSys.IsLogEnabled(Logs::Detail, Logs::PacketClientServer) ? DumpPacketToString(app) : "")
|
(EQEmuLogSys::Instance()->IsLogEnabled(Logs::Detail, Logs::PacketClientServer) ? DumpPacketToString(app) : "")
|
||||||
);
|
);
|
||||||
|
|
||||||
if (m_client_status == cs_failed_to_login) {
|
if (m_client_status == cs_failed_to_login) {
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ ClientManager::ClientManager()
|
|||||||
|
|
||||||
std::string opcodes_path = fmt::format(
|
std::string opcodes_path = fmt::format(
|
||||||
"{}/{}",
|
"{}/{}",
|
||||||
path.GetOpcodePath(),
|
PathManager::Instance()->GetOpcodePath(),
|
||||||
"login_opcodes.conf"
|
"login_opcodes.conf"
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ ClientManager::ClientManager()
|
|||||||
|
|
||||||
opcodes_path = fmt::format(
|
opcodes_path = fmt::format(
|
||||||
"{}/{}",
|
"{}/{}",
|
||||||
path.GetOpcodePath(),
|
PathManager::Instance()->GetOpcodePath(),
|
||||||
"login_opcodes_sod.conf"
|
"login_opcodes_sod.conf"
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -169,7 +169,7 @@ ClientManager::ClientManager()
|
|||||||
|
|
||||||
opcodes_path = fmt::format(
|
opcodes_path = fmt::format(
|
||||||
"{}/{}",
|
"{}/{}",
|
||||||
path.GetOpcodePath(),
|
PathManager::Instance()->GetOpcodePath(),
|
||||||
"login_opcodes_larion.conf"
|
"login_opcodes_larion.conf"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
+8
-12
@@ -22,12 +22,8 @@
|
|||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
LoginServer server;
|
LoginServer server;
|
||||||
EQEmuLogSys LogSys;
|
|
||||||
bool run_server = true;
|
bool run_server = true;
|
||||||
PathManager path;
|
|
||||||
Database database;
|
Database database;
|
||||||
PlayerEventLogs player_event_logs;
|
|
||||||
ZoneStore zone_store;
|
|
||||||
|
|
||||||
void CatchSignal(int sig_num)
|
void CatchSignal(int sig_num)
|
||||||
{
|
{
|
||||||
@@ -52,7 +48,7 @@ void LoadDatabaseConnection()
|
|||||||
void LoadServerConfig()
|
void LoadServerConfig()
|
||||||
{
|
{
|
||||||
server.config = EQ::JsonConfigFile::Load(
|
server.config = EQ::JsonConfigFile::Load(
|
||||||
fmt::format("{}/login.json", path.GetServerPath())
|
fmt::format("{}/login.json", PathManager::Instance()->GetServerPath())
|
||||||
);
|
);
|
||||||
LogInfo("Config System Init");
|
LogInfo("Config System Init");
|
||||||
|
|
||||||
@@ -159,21 +155,21 @@ int main(int argc, char **argv)
|
|||||||
LogInfo("Logging System Init");
|
LogInfo("Logging System Init");
|
||||||
|
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
LogSys.LoadLogSettingsDefaults();
|
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
|
||||||
}
|
}
|
||||||
|
|
||||||
path.LoadPaths();
|
PathManager::Instance()->Init();
|
||||||
|
|
||||||
// command handler
|
// command handler
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
LogSys.SilenceConsoleLogging();
|
EQEmuLogSys::Instance()->SilenceConsoleLogging();
|
||||||
|
|
||||||
LoadServerConfig();
|
LoadServerConfig();
|
||||||
LoadDatabaseConnection();
|
LoadDatabaseConnection();
|
||||||
|
|
||||||
LogSys.LoadLogSettingsDefaults();
|
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
|
||||||
LogSys.log_settings[Logs::Debug].log_to_console = static_cast<uint8>(Logs::General);
|
EQEmuLogSys::Instance()->log_settings[Logs::Debug].log_to_console = static_cast<uint8>(Logs::General);
|
||||||
LogSys.log_settings[Logs::Debug].is_category_enabled = 1;
|
EQEmuLogSys::Instance()->log_settings[Logs::Debug].is_category_enabled = 1;
|
||||||
|
|
||||||
LoginserverCommandHandler::CommandHandler(argc, argv);
|
LoginserverCommandHandler::CommandHandler(argc, argv);
|
||||||
}
|
}
|
||||||
@@ -182,7 +178,7 @@ int main(int argc, char **argv)
|
|||||||
LoadDatabaseConnection();
|
LoadDatabaseConnection();
|
||||||
|
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
LogSys.SetDatabase(&database)
|
EQEmuLogSys::Instance()->SetDatabase(&database)
|
||||||
->SetLogPath("logs")
|
->SetLogPath("logs")
|
||||||
->LoadLogDatabaseSettings()
|
->LoadLogDatabaseSettings()
|
||||||
->StartFileLogs();
|
->StartFileLogs();
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "eqemu-server",
|
"name": "eqemu-server",
|
||||||
"version": "23.7.0",
|
"version": "23.8.1",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/EQEmu/Server.git"
|
"url": "https://github.com/EQEmu/Server.git"
|
||||||
|
|||||||
@@ -44,6 +44,12 @@ public:
|
|||||||
bool LoadDatabase();
|
bool LoadDatabase();
|
||||||
void HandlePacket(ServerPacket *pack);
|
void HandlePacket(ServerPacket *pack);
|
||||||
void ExpireEntries();
|
void ExpireEntries();
|
||||||
|
|
||||||
|
static LFGuildManager* Instance()
|
||||||
|
{
|
||||||
|
static LFGuildManager instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
private:
|
private:
|
||||||
void SendPlayerMatches(uint32 FromZoneID, uint32 FromInstanceID, char *From, uint32 FromLevel, uint32 ToLevel, uint32 MinAA, uint32 TimeZone, uint32 Classes);
|
void SendPlayerMatches(uint32 FromZoneID, uint32 FromInstanceID, char *From, uint32 FromLevel, uint32 ToLevel, uint32 MinAA, uint32 TimeZone, uint32 Classes);
|
||||||
void SendGuildMatches(uint32 FromZoneID, uint32 FromInstanceID, char *From, uint32 Level, uint32 AAPoints, uint32 TimeZone, uint32 Class);
|
void SendGuildMatches(uint32 FromZoneID, uint32 FromInstanceID, char *From, uint32 Level, uint32 AAPoints, uint32 TimeZone, uint32 Class);
|
||||||
|
|||||||
+11
-19
@@ -20,23 +20,15 @@
|
|||||||
#include "../common/net/console_server.h"
|
#include "../common/net/console_server.h"
|
||||||
#include "../queryserv/zonelist.h"
|
#include "../queryserv/zonelist.h"
|
||||||
#include "../queryserv/zoneserver.h"
|
#include "../queryserv/zoneserver.h"
|
||||||
#include "../common/discord/discord_manager.h"
|
|
||||||
|
|
||||||
volatile bool RunLoops = true;
|
volatile bool RunLoops = true;
|
||||||
|
|
||||||
QSDatabase qs_database;
|
QSDatabase qs_database;
|
||||||
Database database;
|
Database database;
|
||||||
LFGuildManager lfguildmanager;
|
|
||||||
std::string WorldShortName;
|
std::string WorldShortName;
|
||||||
const queryservconfig *Config;
|
const queryservconfig *Config;
|
||||||
WorldServer *worldserver = 0;
|
WorldServer *worldserver = 0;
|
||||||
EQEmuLogSys LogSys;
|
|
||||||
PathManager path;
|
|
||||||
ZoneStore zone_store;
|
|
||||||
PlayerEventLogs player_event_logs;
|
|
||||||
ZSList zs_list;
|
|
||||||
uint32 numzones = 0;
|
uint32 numzones = 0;
|
||||||
DiscordManager discord_manager;
|
|
||||||
|
|
||||||
void CatchSignal(int sig_num)
|
void CatchSignal(int sig_num)
|
||||||
{
|
{
|
||||||
@@ -46,11 +38,11 @@ void CatchSignal(int sig_num)
|
|||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
RegisterExecutablePlatform(ExePlatformQueryServ);
|
RegisterExecutablePlatform(ExePlatformQueryServ);
|
||||||
LogSys.LoadLogSettingsDefaults();
|
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
|
||||||
set_exception_handler();
|
set_exception_handler();
|
||||||
Timer LFGuildExpireTimer(60000);
|
Timer LFGuildExpireTimer(60000);
|
||||||
|
|
||||||
path.LoadPaths();
|
PathManager::Instance()->Init();
|
||||||
|
|
||||||
LogInfo("Starting EQEmu QueryServ");
|
LogInfo("Starting EQEmu QueryServ");
|
||||||
if (!queryservconfig::LoadConfig()) {
|
if (!queryservconfig::LoadConfig()) {
|
||||||
@@ -85,8 +77,8 @@ int main()
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSys.SetDatabase(&database)
|
EQEmuLogSys::Instance()->SetDatabase(&database)
|
||||||
->SetLogPath(path.GetLogPath())
|
->SetLogPath(PathManager::Instance()->GetLogPath())
|
||||||
->LoadLogDatabaseSettings()
|
->LoadLogDatabaseSettings()
|
||||||
->StartFileLogs();
|
->StartFileLogs();
|
||||||
|
|
||||||
@@ -129,7 +121,7 @@ int main()
|
|||||||
server_connection->OnConnectionIdentified(
|
server_connection->OnConnectionIdentified(
|
||||||
"Zone", [&console](std::shared_ptr<EQ::Net::ServertalkServerConnection> connection) {
|
"Zone", [&console](std::shared_ptr<EQ::Net::ServertalkServerConnection> connection) {
|
||||||
numzones++;
|
numzones++;
|
||||||
zs_list.Add(new ZoneServer(connection, console.get()));
|
ZSList::Instance()->Add(new ZoneServer(connection, console.get()));
|
||||||
|
|
||||||
LogInfo(
|
LogInfo(
|
||||||
"New Zone Server connection from [{}] at [{}:{}] zone_count [{}]",
|
"New Zone Server connection from [{}] at [{}:{}] zone_count [{}]",
|
||||||
@@ -144,7 +136,7 @@ int main()
|
|||||||
server_connection->OnConnectionRemoved(
|
server_connection->OnConnectionRemoved(
|
||||||
"Zone", [](std::shared_ptr<EQ::Net::ServertalkServerConnection> connection) {
|
"Zone", [](std::shared_ptr<EQ::Net::ServertalkServerConnection> connection) {
|
||||||
numzones--;
|
numzones--;
|
||||||
zs_list.Remove(connection->GetUUID());
|
ZSList::Instance()->Remove(connection->GetUUID());
|
||||||
|
|
||||||
LogInfo(
|
LogInfo(
|
||||||
"Removed Zone Server connection from [{}] total zone_count [{}]",
|
"Removed Zone Server connection from [{}] total zone_count [{}]",
|
||||||
@@ -159,10 +151,10 @@ int main()
|
|||||||
worldserver->Connect();
|
worldserver->Connect();
|
||||||
|
|
||||||
/* Load Looking For Guild Manager */
|
/* Load Looking For Guild Manager */
|
||||||
lfguildmanager.LoadDatabase();
|
LFGuildManager::Instance()->LoadDatabase();
|
||||||
|
|
||||||
Timer player_event_process_timer(1000);
|
Timer player_event_process_timer(1000);
|
||||||
player_event_logs.SetDatabase(&qs_database)->Init();
|
PlayerEventLogs::Instance()->SetDatabase(&qs_database)->Init();
|
||||||
|
|
||||||
auto loop_fn = [&](EQ::Timer *t) {
|
auto loop_fn = [&](EQ::Timer *t) {
|
||||||
Timer::SetCurrentTime();
|
Timer::SetCurrentTime();
|
||||||
@@ -173,11 +165,11 @@ int main()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (LFGuildExpireTimer.Check()) {
|
if (LFGuildExpireTimer.Check()) {
|
||||||
lfguildmanager.ExpireEntries();
|
LFGuildManager::Instance()->ExpireEntries();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player_event_process_timer.Check()) {
|
if (player_event_process_timer.Check()) {
|
||||||
player_event_logs.Process();
|
PlayerEventLogs::Instance()->Process();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -187,7 +179,7 @@ int main()
|
|||||||
EQ::EventLoop::Get().Run();
|
EQ::EventLoop::Get().Run();
|
||||||
|
|
||||||
safe_delete(worldserver);
|
safe_delete(worldserver);
|
||||||
LogSys.CloseFileLogs();
|
EQEmuLogSys::Instance()->CloseFileLogs();
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateWindowTitle(char *iNewTitle)
|
void UpdateWindowTitle(char *iNewTitle)
|
||||||
|
|||||||
@@ -21,10 +21,11 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
|
#include "zonelist.h"
|
||||||
|
|
||||||
extern WorldServer worldserver;
|
extern WorldServer worldserver;
|
||||||
extern const queryservconfig *Config;
|
extern const queryservconfig *Config;
|
||||||
extern QSDatabase qs_database;
|
extern QSDatabase qs_database;
|
||||||
extern LFGuildManager lfguildmanager;
|
|
||||||
|
|
||||||
WorldServer::WorldServer()
|
WorldServer::WorldServer()
|
||||||
{
|
{
|
||||||
@@ -76,8 +77,9 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
case ServerOP_ServerReloadRequest: {
|
case ServerOP_ServerReloadRequest: {
|
||||||
auto o = (ServerReload::Request*) p.Data();
|
auto o = (ServerReload::Request*) p.Data();
|
||||||
if (o->type == ServerReload::Type::Logs) {
|
if (o->type == ServerReload::Type::Logs) {
|
||||||
LogSys.LoadLogDatabaseSettings();
|
EQEmuLogSys::Instance()->LoadLogDatabaseSettings();
|
||||||
player_event_logs.ReloadSettings();
|
PlayerEventLogs::Instance()->ReloadSettings();
|
||||||
|
ZSList::Instance()->SendPlayerEventLogSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -112,7 +114,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
pack.pBuffer = (uchar *) p.Data();
|
pack.pBuffer = (uchar *) p.Data();
|
||||||
pack.opcode = opcode;
|
pack.opcode = opcode;
|
||||||
pack.size = (uint32) p.Length();
|
pack.size = (uint32) p.Length();
|
||||||
lfguildmanager.HandlePacket(&pack);
|
LFGuildManager::Instance()->HandlePacket(&pack);
|
||||||
pack.pBuffer = nullptr;
|
pack.pBuffer = nullptr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
void ZSList::Add(ZoneServer* zoneserver) {
|
void ZSList::Add(ZoneServer* zoneserver) {
|
||||||
zone_server_list.emplace_back(std::unique_ptr<ZoneServer>(zoneserver));
|
zone_server_list.emplace_back(std::unique_ptr<ZoneServer>(zoneserver));
|
||||||
zoneserver->SetIsZoneConnected(true);
|
zoneserver->SetIsZoneConnected(true);
|
||||||
|
|
||||||
|
zoneserver->SendPlayerEventLogSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZSList::Remove(const std::string &uuid)
|
void ZSList::Remove(const std::string &uuid)
|
||||||
@@ -18,3 +20,10 @@ void ZSList::Remove(const std::string &uuid)
|
|||||||
iter++;
|
iter++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ZSList::SendPlayerEventLogSettings()
|
||||||
|
{
|
||||||
|
for (auto &zs : zone_server_list) {
|
||||||
|
zs->SendPlayerEventLogSettings();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
+11
-4
@@ -6,15 +6,22 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
#include "zoneserver.h"
|
||||||
|
|
||||||
class WorldTCPConnection;
|
class WorldTCPConnection;
|
||||||
class ZoneServer;
|
|
||||||
|
|
||||||
class ZSList {
|
class ZSList {
|
||||||
public:
|
public:
|
||||||
std::list<std::unique_ptr<ZoneServer>> &GetZsList() { return zone_server_list; }
|
std::list<std::unique_ptr<ZoneServer>>& GetZsList() { return zone_server_list; }
|
||||||
void Add(ZoneServer *zoneserver);
|
void Add(ZoneServer* zoneserver);
|
||||||
void Remove(const std::string &uuid);
|
void Remove(const std::string& uuid);
|
||||||
|
void SendPlayerEventLogSettings();
|
||||||
|
|
||||||
|
static ZSList* Instance()
|
||||||
|
{
|
||||||
|
static ZSList instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::list<std::unique_ptr<ZoneServer>> zone_server_list;
|
std::list<std::unique_ptr<ZoneServer>> zone_server_list;
|
||||||
|
|||||||
@@ -5,8 +5,6 @@
|
|||||||
#include "../common/events/player_event_logs.h"
|
#include "../common/events/player_event_logs.h"
|
||||||
#include "../common/discord/discord_manager.h"
|
#include "../common/discord/discord_manager.h"
|
||||||
|
|
||||||
extern DiscordManager discord_manager;
|
|
||||||
|
|
||||||
ZoneServer::ZoneServer(
|
ZoneServer::ZoneServer(
|
||||||
std::shared_ptr<EQ::Net::ServertalkServerConnection> in_connection,
|
std::shared_ptr<EQ::Net::ServertalkServerConnection> in_connection,
|
||||||
EQ::Net::ConsoleServer *in_console
|
EQ::Net::ConsoleServer *in_console
|
||||||
@@ -35,9 +33,9 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
cereal::BinaryInputArchive archive(ss);
|
cereal::BinaryInputArchive archive(ss);
|
||||||
archive(n);
|
archive(n);
|
||||||
|
|
||||||
player_event_logs.AddToQueue(n.player_event_log);
|
PlayerEventLogs::Instance()->AddToQueue(n.player_event_log);
|
||||||
|
|
||||||
discord_manager.QueuePlayerEventMessage(n);
|
DiscordManager::Instance()->QueuePlayerEventMessage(n);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
@@ -46,3 +44,27 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ZoneServer::SendPlayerEventLogSettings()
|
||||||
|
{
|
||||||
|
EQ::Net::DynamicPacket dyn_pack;
|
||||||
|
std::vector<PlayerEventLogSettingsRepository::PlayerEventLogSettings> settings(
|
||||||
|
PlayerEventLogs::Instance()->GetSettings(),
|
||||||
|
PlayerEventLogs::Instance()->GetSettings() + PlayerEvent::EventType::MAX
|
||||||
|
);
|
||||||
|
|
||||||
|
dyn_pack.PutSerialize(0, settings);
|
||||||
|
|
||||||
|
auto packet_size = sizeof(ServerSendPlayerEvent_Struct) + dyn_pack.Length();
|
||||||
|
|
||||||
|
auto pack = std::make_unique<ServerPacket>(
|
||||||
|
ServerOP_SendPlayerEventSettings,
|
||||||
|
static_cast<uint32_t>(packet_size)
|
||||||
|
);
|
||||||
|
|
||||||
|
auto* buf = reinterpret_cast<ServerSendPlayerEvent_Struct*>(pack->pBuffer);
|
||||||
|
buf->cereal_size = static_cast<uint32_t>(dyn_pack.Length());
|
||||||
|
memcpy(buf->cereal_data, dyn_pack.Data(), dyn_pack.Length());
|
||||||
|
|
||||||
|
SendPacket(pack.release());
|
||||||
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public:
|
|||||||
bool GetIsZoneConnected() { return m_is_zone_connected; }
|
bool GetIsZoneConnected() { return m_is_zone_connected; }
|
||||||
void HandleMessage(uint16 opcode, const EQ::Net::Packet &p);
|
void HandleMessage(uint16 opcode, const EQ::Net::Packet &p);
|
||||||
std::string GetUUID() const { return m_connection->GetUUID(); }
|
std::string GetUUID() const { return m_connection->GetUUID(); }
|
||||||
|
void SendPlayerEventLogSettings();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<EQ::Net::ServertalkServerConnection> m_connection{};
|
std::shared_ptr<EQ::Net::ServertalkServerConnection> m_connection{};
|
||||||
|
|||||||
+9
-16
@@ -35,13 +35,6 @@
|
|||||||
#include "../common/events/player_event_logs.h"
|
#include "../common/events/player_event_logs.h"
|
||||||
#include "../common/evolving_items.h"
|
#include "../common/evolving_items.h"
|
||||||
|
|
||||||
EQEmuLogSys LogSys;
|
|
||||||
WorldContentService content_service;
|
|
||||||
ZoneStore zone_store;
|
|
||||||
PathManager path;
|
|
||||||
PlayerEventLogs player_event_logs;
|
|
||||||
EvolvingItemsManager evolving_items_manager;
|
|
||||||
|
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
#include <direct.h>
|
#include <direct.h>
|
||||||
#else
|
#else
|
||||||
@@ -81,10 +74,10 @@ inline bool MakeDirectory(const std::string &directory_name)
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
RegisterExecutablePlatform(ExePlatformSharedMemory);
|
RegisterExecutablePlatform(ExePlatformSharedMemory);
|
||||||
LogSys.LoadLogSettingsDefaults();
|
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
|
||||||
set_exception_handler();
|
set_exception_handler();
|
||||||
|
|
||||||
path.LoadPaths();
|
PathManager::Instance()->Init();
|
||||||
|
|
||||||
LogInfo("Shared Memory Loader Program");
|
LogInfo("Shared Memory Loader Program");
|
||||||
if (!EQEmuConfig::LoadConfig()) {
|
if (!EQEmuConfig::LoadConfig()) {
|
||||||
@@ -126,8 +119,8 @@ int main(int argc, char **argv)
|
|||||||
content_db.SetMySQL(database);
|
content_db.SetMySQL(database);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSys.SetDatabase(&database)
|
EQEmuLogSys::Instance()->SetDatabase(&database)
|
||||||
->SetLogPath(path.GetLogPath())
|
->SetLogPath(PathManager::Instance()->GetLogPath())
|
||||||
->LoadLogDatabaseSettings()
|
->LoadLogDatabaseSettings()
|
||||||
->StartFileLogs();
|
->StartFileLogs();
|
||||||
|
|
||||||
@@ -169,16 +162,16 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
content_service.SetCurrentExpansion(RuleI(Expansion, CurrentExpansion));
|
WorldContentService::Instance()->SetCurrentExpansion(RuleI(Expansion, CurrentExpansion));
|
||||||
content_service.SetDatabase(&database)
|
WorldContentService::Instance()->SetDatabase(&database)
|
||||||
->SetContentDatabase(&content_db)
|
->SetContentDatabase(&content_db)
|
||||||
->SetExpansionContext()
|
->SetExpansionContext()
|
||||||
->ReloadContentFlags();
|
->ReloadContentFlags();
|
||||||
|
|
||||||
LogInfo(
|
LogInfo(
|
||||||
"Current expansion is [{}] ({})",
|
"Current expansion is [{}] ({})",
|
||||||
content_service.GetCurrentExpansion(),
|
WorldContentService::Instance()->GetCurrentExpansion(),
|
||||||
content_service.GetCurrentExpansionName()
|
WorldContentService::Instance()->GetCurrentExpansionName()
|
||||||
);
|
);
|
||||||
|
|
||||||
std::string hotfix_name = "";
|
std::string hotfix_name = "";
|
||||||
@@ -244,6 +237,6 @@ int main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSys.CloseFileLogs();
|
EQEmuLogSys::Instance()->CloseFileLogs();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-4
@@ -34,14 +34,12 @@
|
|||||||
#include "task_state_test.h"
|
#include "task_state_test.h"
|
||||||
|
|
||||||
const EQEmuConfig *Config;
|
const EQEmuConfig *Config;
|
||||||
EQEmuLogSys LogSys;
|
|
||||||
PathManager path;
|
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
RegisterExecutablePlatform(ExePlatformClientImport);
|
RegisterExecutablePlatform(ExePlatformClientImport);
|
||||||
LogSys.LoadLogSettingsDefaults();
|
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
|
||||||
path.LoadPaths();
|
PathManager::Instance()->Init();
|
||||||
|
|
||||||
auto ConfigLoadResult = EQEmuConfig::LoadConfig();
|
auto ConfigLoadResult = EQEmuConfig::LoadConfig();
|
||||||
Config = EQEmuConfig::get();
|
Config = EQEmuConfig::get();
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ public:
|
|||||||
TEST_ADD(StringUtilTest::EscapeStringTest);
|
TEST_ADD(StringUtilTest::EscapeStringTest);
|
||||||
TEST_ADD(StringUtilTest::SearchDeliminatedStringTest);
|
TEST_ADD(StringUtilTest::SearchDeliminatedStringTest);
|
||||||
TEST_ADD(StringUtilTest::SplitStringTest);
|
TEST_ADD(StringUtilTest::SplitStringTest);
|
||||||
TEST_ADD(StringUtilTest::FromCharsTest);
|
|
||||||
TEST_ADD(StringUtilTest::TestIsFloat);
|
TEST_ADD(StringUtilTest::TestIsFloat);
|
||||||
TEST_ADD(StringUtilTest::TestIsNumber);
|
TEST_ADD(StringUtilTest::TestIsNumber);
|
||||||
}
|
}
|
||||||
@@ -108,21 +107,6 @@ public:
|
|||||||
TEST_ASSERT(v[2] == "789");
|
TEST_ASSERT(v[2] == "789");
|
||||||
}
|
}
|
||||||
|
|
||||||
void FromCharsTest() {
|
|
||||||
char int_chars[] = "123";
|
|
||||||
int int_value = 0;
|
|
||||||
|
|
||||||
char float_chars[] = "3.14";
|
|
||||||
float float_value = 0.0f;
|
|
||||||
|
|
||||||
Strings::from_chars(int_chars, int_value);
|
|
||||||
TEST_ASSERT(int_value == 123);
|
|
||||||
|
|
||||||
Strings::from_chars(float_chars, float_value);
|
|
||||||
TEST_ASSERT(float_value == 3.14f);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void TestIsFloat() {
|
void TestIsFloat() {
|
||||||
TEST_ASSERT_EQUALS(Strings::IsFloat("0.23424523"), true);
|
TEST_ASSERT_EQUALS(Strings::IsFloat("0.23424523"), true);
|
||||||
TEST_ASSERT_EQUALS(Strings::IsFloat("12312312313.23424523"), true);
|
TEST_ASSERT_EQUALS(Strings::IsFloat("12312312313.23424523"), true);
|
||||||
|
|||||||
+2
-2
@@ -482,7 +482,7 @@ Clientlist::Clientlist(int ChatPort) {
|
|||||||
const ucsconfig *Config = ucsconfig::get();
|
const ucsconfig *Config = ucsconfig::get();
|
||||||
|
|
||||||
|
|
||||||
std::string opcodes_file = fmt::format("{}/{}", path.GetServerPath(), Config->MailOpCodesFile);
|
std::string opcodes_file = fmt::format("{}/{}", PathManager::Instance()->GetServerPath(), Config->MailOpCodesFile);
|
||||||
|
|
||||||
LogInfo("Loading [{}]", opcodes_file);
|
LogInfo("Loading [{}]", opcodes_file);
|
||||||
if (!ChatOpMgr->LoadOpcodes(opcodes_file.c_str()))
|
if (!ChatOpMgr->LoadOpcodes(opcodes_file.c_str()))
|
||||||
@@ -651,7 +651,7 @@ void Clientlist::Process()
|
|||||||
OpcodeManager::EmuToName(app->GetOpcode()),
|
OpcodeManager::EmuToName(app->GetOpcode()),
|
||||||
o->EmuToEQ(app->GetOpcode()) == 0 ? app->GetProtocolOpcode() : o->EmuToEQ(app->GetOpcode()),
|
o->EmuToEQ(app->GetOpcode()) == 0 ? app->GetProtocolOpcode() : o->EmuToEQ(app->GetOpcode()),
|
||||||
app->Size(),
|
app->Size(),
|
||||||
(LogSys.IsLogEnabled(Logs::Detail, Logs::PacketClientServer) ? DumpPacketToString(app) : "")
|
(EQEmuLogSys::Instance()->IsLogEnabled(Logs::Detail, Logs::PacketClientServer) ? DumpPacketToString(app) : "")
|
||||||
);
|
);
|
||||||
|
|
||||||
switch (opcode) {
|
switch (opcode) {
|
||||||
|
|||||||
+9
-13
@@ -44,13 +44,8 @@
|
|||||||
|
|
||||||
ChatChannelList *ChannelList;
|
ChatChannelList *ChannelList;
|
||||||
Clientlist *g_Clientlist;
|
Clientlist *g_Clientlist;
|
||||||
EQEmuLogSys LogSys;
|
|
||||||
UCSDatabase database;
|
UCSDatabase database;
|
||||||
WorldServer *worldserver = nullptr;
|
WorldServer *worldserver = nullptr;
|
||||||
DiscordManager discord_manager;
|
|
||||||
PathManager path;
|
|
||||||
ZoneStore zone_store;
|
|
||||||
PlayerEventLogs player_event_logs;
|
|
||||||
|
|
||||||
const ucsconfig *Config;
|
const ucsconfig *Config;
|
||||||
|
|
||||||
@@ -75,7 +70,7 @@ void Shutdown() {
|
|||||||
LogInfo("Shutting down...");
|
LogInfo("Shutting down...");
|
||||||
ChannelList->RemoveAllChannels();
|
ChannelList->RemoveAllChannels();
|
||||||
g_Clientlist->CloseAllConnections();
|
g_Clientlist->CloseAllConnections();
|
||||||
LogSys.CloseFileLogs();
|
EQEmuLogSys::Instance()->CloseFileLogs();
|
||||||
}
|
}
|
||||||
|
|
||||||
int caught_loop = 0;
|
int caught_loop = 0;
|
||||||
@@ -90,24 +85,24 @@ void CatchSignal(int sig_num) {
|
|||||||
LogInfo("In a signal handler loop and process is incapable of exiting properly, forcefully cleaning up");
|
LogInfo("In a signal handler loop and process is incapable of exiting properly, forcefully cleaning up");
|
||||||
ChannelList->RemoveAllChannels();
|
ChannelList->RemoveAllChannels();
|
||||||
g_Clientlist->CloseAllConnections();
|
g_Clientlist->CloseAllConnections();
|
||||||
LogSys.CloseFileLogs();
|
EQEmuLogSys::Instance()->CloseFileLogs();
|
||||||
std::exit(0);
|
std::exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerEventQueueListener() {
|
void PlayerEventQueueListener() {
|
||||||
while (caught_loop == 0) {
|
while (caught_loop == 0) {
|
||||||
discord_manager.ProcessMessageQueue();
|
DiscordManager::Instance()->ProcessMessageQueue();
|
||||||
Sleep(100);
|
Sleep(100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
RegisterExecutablePlatform(ExePlatformUCS);
|
RegisterExecutablePlatform(ExePlatformUCS);
|
||||||
LogSys.LoadLogSettingsDefaults();
|
EQEmuLogSys::Instance()->LoadLogSettingsDefaults();
|
||||||
set_exception_handler();
|
set_exception_handler();
|
||||||
|
|
||||||
path.LoadPaths();
|
PathManager::Instance()->Init();
|
||||||
|
|
||||||
// Check every minute for unused channels we can delete
|
// Check every minute for unused channels we can delete
|
||||||
//
|
//
|
||||||
@@ -139,12 +134,13 @@ int main() {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSys.SetDatabase(&database)
|
EQEmuLogSys::Instance()
|
||||||
->SetLogPath(path.GetLogPath())
|
->SetDatabase(&database)
|
||||||
|
->SetLogPath(PathManager::Instance()->GetLogPath())
|
||||||
->LoadLogDatabaseSettings()
|
->LoadLogDatabaseSettings()
|
||||||
->StartFileLogs();
|
->StartFileLogs();
|
||||||
|
|
||||||
player_event_logs.SetDatabase(&database)->Init();
|
PlayerEventLogs::Instance()->SetDatabase(&database)->Init();
|
||||||
|
|
||||||
char tmp[64];
|
char tmp[64];
|
||||||
|
|
||||||
|
|||||||
+4
-5
@@ -42,7 +42,6 @@ extern WorldServer worldserver;
|
|||||||
extern Clientlist *g_Clientlist;
|
extern Clientlist *g_Clientlist;
|
||||||
extern const ucsconfig *Config;
|
extern const ucsconfig *Config;
|
||||||
extern UCSDatabase database;
|
extern UCSDatabase database;
|
||||||
extern DiscordManager discord_manager;
|
|
||||||
|
|
||||||
void ProcessMailTo(Client *c, const std::string& from, const std::string& subject, const std::string& message);
|
void ProcessMailTo(Client *c, const std::string& from, const std::string& subject, const std::string& message);
|
||||||
|
|
||||||
@@ -79,8 +78,8 @@ void WorldServer::ProcessMessage(uint16 opcode, EQ::Net::Packet &p)
|
|||||||
case ServerOP_ServerReloadRequest: {
|
case ServerOP_ServerReloadRequest: {
|
||||||
auto o = (ServerReload::Request*) pack->pBuffer;
|
auto o = (ServerReload::Request*) pack->pBuffer;
|
||||||
if (o->type == ServerReload::Type::Logs) {
|
if (o->type == ServerReload::Type::Logs) {
|
||||||
LogSys.LoadLogDatabaseSettings();
|
EQEmuLogSys::Instance()->LoadLogDatabaseSettings();
|
||||||
player_event_logs.ReloadSettings();
|
PlayerEventLogs::Instance()->ReloadSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@@ -92,14 +91,14 @@ void WorldServer::ProcessMessage(uint16 opcode, EQ::Net::Packet &p)
|
|||||||
cereal::BinaryInputArchive archive(ss);
|
cereal::BinaryInputArchive archive(ss);
|
||||||
archive(n);
|
archive(n);
|
||||||
|
|
||||||
discord_manager.QueuePlayerEventMessage(n);
|
DiscordManager::Instance()->QueuePlayerEventMessage(n);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DiscordWebhookMessage: {
|
case ServerOP_DiscordWebhookMessage: {
|
||||||
auto *q = (DiscordWebhookMessage_Struct *) p.Data();
|
auto *q = (DiscordWebhookMessage_Struct *) p.Data();
|
||||||
|
|
||||||
discord_manager.QueueWebhookMessage(
|
DiscordManager::Instance()->QueueWebhookMessage(
|
||||||
q->webhook_id,
|
q->webhook_id,
|
||||||
q->message
|
q->message
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -35,12 +35,12 @@ if (scalar(@enum) > 0) {
|
|||||||
|
|
||||||
foreach my $cat (@cats) {
|
foreach my $cat (@cats) {
|
||||||
print "#define Log" . $cat . "(message, ...) do {\\
|
print "#define Log" . $cat . "(message, ...) do {\\
|
||||||
if (LogSys.IsLogEnabled(Logs::General, Logs::" . $cat . "))\\
|
if (EQEmuLogSys::Instance()->IsLogEnabled(Logs::General, Logs::" . $cat . "))\\
|
||||||
OutF(LogSys, Logs::General, Logs::" . $cat . ", __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\\
|
OutF(LogSys, Logs::General, Logs::" . $cat . ", __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define Log" . $cat . "Detail(message, ...) do {\\
|
#define Log" . $cat . "Detail(message, ...) do {\\
|
||||||
if (LogSys.IsLogEnabled(Logs::Detail, Logs::" . $cat . "))\\
|
if (EQEmuLogSys::Instance()->IsLogEnabled(Logs::Detail, Logs::" . $cat . "))\\
|
||||||
OutF(LogSys, Logs::Detail, Logs::" . $cat . ", __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\\
|
OutF(LogSys, Logs::Detail, Logs::" . $cat . ", __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,8 @@ if ($requested_table_to_generate ne "all") {
|
|||||||
|
|
||||||
my @cereal_enabled_tables = (
|
my @cereal_enabled_tables = (
|
||||||
"data_buckets",
|
"data_buckets",
|
||||||
"player_event_logs"
|
"player_event_logs",
|
||||||
|
"player_event_log_settings"
|
||||||
);
|
);
|
||||||
|
|
||||||
my $generated_base_repository_files = "";
|
my $generated_base_repository_files = "";
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ ADD_EXECUTABLE(world ${world_sources} ${world_headers})
|
|||||||
INSTALL(TARGETS world RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
INSTALL(TARGETS world RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
|
||||||
|
|
||||||
IF (WIN32 AND EQEMU_BUILD_PCH)
|
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 ()
|
ENDIF ()
|
||||||
|
|
||||||
ADD_DEFINITIONS(-DWORLD)
|
ADD_DEFINITIONS(-DWORLD)
|
||||||
|
|||||||
+15
-18
@@ -15,9 +15,6 @@
|
|||||||
#include "../common/zone_store.h"
|
#include "../common/zone_store.h"
|
||||||
#include "../common/repositories/character_corpses_repository.h"
|
#include "../common/repositories/character_corpses_repository.h"
|
||||||
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern AdventureManager adventure_manager;
|
|
||||||
extern EQ::Random emu_random;
|
extern EQ::Random emu_random;
|
||||||
|
|
||||||
Adventure::Adventure(AdventureTemplate *t)
|
Adventure::Adventure(AdventureTemplate *t)
|
||||||
@@ -177,7 +174,7 @@ void Adventure::SetStatus(AdventureStatus new_status)
|
|||||||
ut->instance_id = instance_id;
|
ut->instance_id = instance_id;
|
||||||
ut->new_duration = adventure_template->duration + 60;
|
ut->new_duration = adventure_template->duration + 60;
|
||||||
|
|
||||||
zoneserver_list.SendPacket(0, instance_id, pack);
|
ZSList::Instance()->SendPacket(0, instance_id, pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
else if(new_status == AS_WaitingForSecondaryEndTime)
|
else if(new_status == AS_WaitingForSecondaryEndTime)
|
||||||
@@ -191,7 +188,7 @@ void Adventure::SetStatus(AdventureStatus new_status)
|
|||||||
ut->instance_id = instance_id;
|
ut->instance_id = instance_id;
|
||||||
ut->new_duration = 1860;
|
ut->new_duration = 1860;
|
||||||
|
|
||||||
zoneserver_list.SendPacket(0, instance_id, pack);
|
ZSList::Instance()->SendPacket(0, instance_id, pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
else if(new_status == AS_Finished)
|
else if(new_status == AS_Finished)
|
||||||
@@ -205,7 +202,7 @@ void Adventure::SetStatus(AdventureStatus new_status)
|
|||||||
ut->instance_id = instance_id;
|
ut->instance_id = instance_id;
|
||||||
ut->new_duration = 1860;
|
ut->new_duration = 1860;
|
||||||
|
|
||||||
zoneserver_list.SendPacket(0, instance_id, pack);
|
ZSList::Instance()->SendPacket(0, instance_id, pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -216,7 +213,7 @@ void Adventure::SetStatus(AdventureStatus new_status)
|
|||||||
auto iter = players.begin();
|
auto iter = players.begin();
|
||||||
while(iter != players.end())
|
while(iter != players.end())
|
||||||
{
|
{
|
||||||
adventure_manager.GetAdventureData((*iter).c_str());
|
AdventureManager::Instance()->GetAdventureData((*iter).c_str());
|
||||||
++iter;
|
++iter;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -230,11 +227,11 @@ void Adventure::SendAdventureMessage(uint32 type, const char *msg)
|
|||||||
auto iter = players.begin();
|
auto iter = players.begin();
|
||||||
while(iter != players.end())
|
while(iter != players.end())
|
||||||
{
|
{
|
||||||
ClientListEntry *current = client_list.FindCharacter((*iter).c_str());
|
ClientListEntry *current = ClientList::Instance()->FindCharacter((*iter).c_str());
|
||||||
if(current)
|
if(current)
|
||||||
{
|
{
|
||||||
strcpy(sms->to, (*iter).c_str());
|
strcpy(sms->to, (*iter).c_str());
|
||||||
zoneserver_list.SendPacket(current->zone(), current->instance(), pack);
|
ZSList::Instance()->SendPacket(current->zone(), current->instance(), pack);
|
||||||
}
|
}
|
||||||
++iter;
|
++iter;
|
||||||
}
|
}
|
||||||
@@ -283,7 +280,7 @@ void Adventure::Finished(AdventureWinStatus ws)
|
|||||||
{
|
{
|
||||||
auto iter = players.begin();
|
auto iter = players.begin();
|
||||||
while (iter != players.end()) {
|
while (iter != players.end()) {
|
||||||
ClientListEntry *current = client_list.FindCharacter((*iter).c_str());
|
ClientListEntry *current = ClientList::Instance()->FindCharacter((*iter).c_str());
|
||||||
auto character_id = database.GetCharacterID(*iter);
|
auto character_id = database.GetCharacterID(*iter);
|
||||||
|
|
||||||
if (character_id == 0) {
|
if (character_id == 0) {
|
||||||
@@ -310,7 +307,7 @@ void Adventure::Finished(AdventureWinStatus ws)
|
|||||||
af->win = false;
|
af->win = false;
|
||||||
af->points = 0;
|
af->points = 0;
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(current->zone(), current->instance(), pack);
|
ZSList::Instance()->SendPacket(current->zone(), current->instance(), pack);
|
||||||
database.UpdateAdventureStatsEntry(character_id, GetTemplate()->theme, (ws != AWS_Lose) ? true : false);
|
database.UpdateAdventureStatsEntry(character_id, GetTemplate()->theme, (ws != AWS_Lose) ? true : false);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
@@ -331,7 +328,7 @@ void Adventure::Finished(AdventureWinStatus ws)
|
|||||||
afe.win = false;
|
afe.win = false;
|
||||||
afe.points = 0;
|
afe.points = 0;
|
||||||
}
|
}
|
||||||
adventure_manager.AddFinishedEvent(afe);
|
AdventureManager::Instance()->AddFinishedEvent(afe);
|
||||||
database.UpdateAdventureStatsEntry(character_id, GetTemplate()->theme, (ws != AWS_Lose) ? true : false);
|
database.UpdateAdventureStatsEntry(character_id, GetTemplate()->theme, (ws != AWS_Lose) ? true : false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -352,12 +349,12 @@ void Adventure::Finished(AdventureWinStatus ws)
|
|||||||
afe.win = false;
|
afe.win = false;
|
||||||
afe.points = 0;
|
afe.points = 0;
|
||||||
}
|
}
|
||||||
adventure_manager.AddFinishedEvent(afe);
|
AdventureManager::Instance()->AddFinishedEvent(afe);
|
||||||
database.UpdateAdventureStatsEntry(character_id, GetTemplate()->theme, (ws != AWS_Lose) ? true : false);
|
database.UpdateAdventureStatsEntry(character_id, GetTemplate()->theme, (ws != AWS_Lose) ? true : false);
|
||||||
}
|
}
|
||||||
++iter;
|
++iter;
|
||||||
}
|
}
|
||||||
adventure_manager.GetAdventureData(this);
|
AdventureManager::Instance()->GetAdventureData(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adventure::MoveCorpsesToGraveyard()
|
void Adventure::MoveCorpsesToGraveyard()
|
||||||
@@ -368,8 +365,8 @@ void Adventure::MoveCorpsesToGraveyard()
|
|||||||
|
|
||||||
glm::vec4 position;
|
glm::vec4 position;
|
||||||
|
|
||||||
float x = GetTemplate()->graveyard_x + 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 + emu_random.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;
|
float z = GetTemplate()->graveyard_z;
|
||||||
|
|
||||||
position.x = x;
|
position.x = x;
|
||||||
@@ -396,7 +393,7 @@ void Adventure::MoveCorpsesToGraveyard()
|
|||||||
d->InstanceID = 0;
|
d->InstanceID = 0;
|
||||||
d->ZoneID = GetTemplate()->graveyard_zone_id;
|
d->ZoneID = GetTemplate()->graveyard_zone_id;
|
||||||
|
|
||||||
zoneserver_list.SendPacket(0, GetInstanceID(), pack);
|
ZSList::Instance()->SendPacket(0, GetInstanceID(), pack);
|
||||||
|
|
||||||
delete pack;
|
delete pack;
|
||||||
|
|
||||||
@@ -407,7 +404,7 @@ void Adventure::MoveCorpsesToGraveyard()
|
|||||||
spc->player_corpse_id = e.id;
|
spc->player_corpse_id = e.id;
|
||||||
spc->zone_id = GetTemplate()->graveyard_zone_id;
|
spc->zone_id = GetTemplate()->graveyard_zone_id;
|
||||||
|
|
||||||
zoneserver_list.SendPacket(spc->zone_id, 0, pack);
|
ZSList::Instance()->SendPacket(spc->zone_id, 0, pack);
|
||||||
|
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
|
|||||||
+55
-59
@@ -14,10 +14,6 @@
|
|||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern EQ::Random emu_random;
|
|
||||||
|
|
||||||
AdventureManager::AdventureManager()
|
AdventureManager::AdventureManager()
|
||||||
{
|
{
|
||||||
process_timer = new Timer(500);
|
process_timer = new Timer(500);
|
||||||
@@ -68,7 +64,7 @@ void AdventureManager::Process()
|
|||||||
void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
||||||
{
|
{
|
||||||
ServerAdventureRequest_Struct *sar = (ServerAdventureRequest_Struct*)data;
|
ServerAdventureRequest_Struct *sar = (ServerAdventureRequest_Struct*)data;
|
||||||
ClientListEntry *leader = client_list.FindCharacter(sar->leader);
|
ClientListEntry *leader = ClientList::Instance()->FindCharacter(sar->leader);
|
||||||
if(!leader)
|
if(!leader)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -84,7 +80,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
|||||||
ServerAdventureRequestDeny_Struct *deny = (ServerAdventureRequestDeny_Struct*)pack->pBuffer;
|
ServerAdventureRequestDeny_Struct *deny = (ServerAdventureRequestDeny_Struct*)pack->pBuffer;
|
||||||
strcpy(deny->leader, sar->leader);
|
strcpy(deny->leader, sar->leader);
|
||||||
strcpy(deny->reason, "There are currently no adventures set for this theme.");
|
strcpy(deny->reason, "There are currently no adventures set for this theme.");
|
||||||
zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack);
|
ZSList::Instance()->SendPacket(leader->zone(), leader->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -113,7 +109,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
|||||||
ss << (data + sizeof(ServerAdventureRequest_Struct) + (64 * i)) << " is already apart of an active adventure.";
|
ss << (data + sizeof(ServerAdventureRequest_Struct) + (64 * i)) << " is already apart of an active adventure.";
|
||||||
|
|
||||||
strcpy(deny->reason, ss.str().c_str());
|
strcpy(deny->reason, ss.str().c_str());
|
||||||
zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack);
|
ZSList::Instance()->SendPacket(leader->zone(), leader->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -185,7 +181,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
|||||||
|
|
||||||
for(int i = 0; i < sar->member_count; ++i)
|
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)
|
if(current)
|
||||||
{
|
{
|
||||||
int lvl = current->level();
|
int lvl = current->level();
|
||||||
@@ -244,7 +240,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
|||||||
ServerAdventureRequestDeny_Struct *deny = (ServerAdventureRequestDeny_Struct*)pack->pBuffer;
|
ServerAdventureRequestDeny_Struct *deny = (ServerAdventureRequestDeny_Struct*)pack->pBuffer;
|
||||||
strcpy(deny->leader, sar->leader);
|
strcpy(deny->leader, sar->leader);
|
||||||
strcpy(deny->reason, "The number of found players for this adventure was zero.");
|
strcpy(deny->reason, "The number of found players for this adventure was zero.");
|
||||||
zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack);
|
ZSList::Instance()->SendPacket(leader->zone(), leader->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -261,7 +257,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
|||||||
ss << "The maximum level range for this adventure is " << RuleI(Adventure, MaxLevelRange);
|
ss << "The maximum level range for this adventure is " << RuleI(Adventure, MaxLevelRange);
|
||||||
ss << " but the level range calculated was " << (max_level - min_level) << ".";
|
ss << " but the level range calculated was " << (max_level - min_level) << ".";
|
||||||
strcpy(deny->reason, ss.str().c_str());
|
strcpy(deny->reason, ss.str().c_str());
|
||||||
zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack);
|
ZSList::Instance()->SendPacket(leader->zone(), leader->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -324,7 +320,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
|||||||
if(eligible_adventures.size() > 0)
|
if(eligible_adventures.size() > 0)
|
||||||
{
|
{
|
||||||
ea_iter = eligible_adventures.begin();
|
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)
|
for(int i = 0; i < c_index; ++i)
|
||||||
{
|
{
|
||||||
++ea_iter;
|
++ea_iter;
|
||||||
@@ -338,7 +334,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
|||||||
sra->id = (*ea_iter)->id;
|
sra->id = (*ea_iter)->id;
|
||||||
sra->member_count = sar->member_count;
|
sra->member_count = sar->member_count;
|
||||||
memcpy((pack->pBuffer + sizeof(ServerAdventureRequestAccept_Struct)), (data + sizeof(ServerAdventureRequest_Struct)), (sar->member_count * 64));
|
memcpy((pack->pBuffer + sizeof(ServerAdventureRequestAccept_Struct)), (data + sizeof(ServerAdventureRequest_Struct)), (sar->member_count * 64));
|
||||||
zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack);
|
ZSList::Instance()->SendPacket(leader->zone(), leader->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -348,7 +344,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
|||||||
ServerAdventureRequestDeny_Struct *deny = (ServerAdventureRequestDeny_Struct*)pack->pBuffer;
|
ServerAdventureRequestDeny_Struct *deny = (ServerAdventureRequestDeny_Struct*)pack->pBuffer;
|
||||||
strcpy(deny->leader, sar->leader);
|
strcpy(deny->leader, sar->leader);
|
||||||
strcpy(deny->reason, "The number of adventures returned was zero.");
|
strcpy(deny->reason, "The number of adventures returned was zero.");
|
||||||
zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack);
|
ZSList::Instance()->SendPacket(leader->zone(), leader->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -357,7 +353,7 @@ void AdventureManager::CalculateAdventureRequestReply(const char *data)
|
|||||||
void AdventureManager::TryAdventureCreate(const char *data)
|
void AdventureManager::TryAdventureCreate(const char *data)
|
||||||
{
|
{
|
||||||
ServerAdventureRequestCreate_Struct *src = (ServerAdventureRequestCreate_Struct*)data;
|
ServerAdventureRequestCreate_Struct *src = (ServerAdventureRequestCreate_Struct*)data;
|
||||||
ClientListEntry *leader = client_list.FindCharacter(src->leader);
|
ClientListEntry *leader = ClientList::Instance()->FindCharacter(src->leader);
|
||||||
if(!leader)
|
if(!leader)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
@@ -368,7 +364,7 @@ void AdventureManager::TryAdventureCreate(const char *data)
|
|||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureCreateDeny, 64);
|
auto pack = new ServerPacket(ServerOP_AdventureCreateDeny, 64);
|
||||||
strcpy((char*)pack->pBuffer, src->leader);
|
strcpy((char*)pack->pBuffer, src->leader);
|
||||||
zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack);
|
ZSList::Instance()->SendPacket(leader->zone(), leader->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -378,7 +374,7 @@ void AdventureManager::TryAdventureCreate(const char *data)
|
|||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureCreateDeny, 64);
|
auto pack = new ServerPacket(ServerOP_AdventureCreateDeny, 64);
|
||||||
strcpy((char*)pack->pBuffer, src->leader);
|
strcpy((char*)pack->pBuffer, src->leader);
|
||||||
zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack);
|
ZSList::Instance()->SendPacket(leader->zone(), leader->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
delete adv;
|
delete adv;
|
||||||
return;
|
return;
|
||||||
@@ -391,7 +387,7 @@ void AdventureManager::TryAdventureCreate(const char *data)
|
|||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureCreateDeny, 64);
|
auto pack = new ServerPacket(ServerOP_AdventureCreateDeny, 64);
|
||||||
strcpy((char*)pack->pBuffer, src->leader);
|
strcpy((char*)pack->pBuffer, src->leader);
|
||||||
zoneserver_list.SendPacket(leader->zone(), leader->instance(), pack);
|
ZSList::Instance()->SendPacket(leader->zone(), leader->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
delete adv;
|
delete adv;
|
||||||
return;
|
return;
|
||||||
@@ -404,7 +400,7 @@ void AdventureManager::TryAdventureCreate(const char *data)
|
|||||||
for(int i = 0; i < src->member_count; ++i)
|
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)
|
if(player)
|
||||||
{
|
{
|
||||||
int f_count = 0;
|
int f_count = 0;
|
||||||
@@ -436,7 +432,7 @@ void AdventureManager::TryAdventureCreate(const char *data)
|
|||||||
sfa->zone_in_object = finished_adventures[f]->GetTemplate()->zone_in_object_id;
|
sfa->zone_in_object = finished_adventures[f]->GetTemplate()->zone_in_object_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(player->zone(), player->instance(), pack);
|
ZSList::Instance()->SendPacket(player->zone(), player->instance(), pack);
|
||||||
safe_delete_array(finished_adventures);
|
safe_delete_array(finished_adventures);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
@@ -458,7 +454,7 @@ void AdventureManager::GetAdventureData(Adventure *adv)
|
|||||||
|
|
||||||
void AdventureManager::GetAdventureData(const char *name)
|
void AdventureManager::GetAdventureData(const char *name)
|
||||||
{
|
{
|
||||||
ClientListEntry *player = client_list.FindCharacter(name);
|
ClientListEntry *player = ClientList::Instance()->FindCharacter(name);
|
||||||
if(player)
|
if(player)
|
||||||
{
|
{
|
||||||
int f_count = 0;
|
int f_count = 0;
|
||||||
@@ -497,7 +493,7 @@ void AdventureManager::GetAdventureData(const char *name)
|
|||||||
delete pack;
|
delete pack;
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureDataClear, 64);
|
auto pack = new ServerPacket(ServerOP_AdventureDataClear, 64);
|
||||||
strcpy((char*)pack->pBuffer, name);
|
strcpy((char*)pack->pBuffer, name);
|
||||||
zoneserver_list.SendPacket(player->zone(), player->instance(), pack);
|
ZSList::Instance()->SendPacket(player->zone(), player->instance(), pack);
|
||||||
|
|
||||||
delete pack;
|
delete pack;
|
||||||
delete[] finished_adventures;
|
delete[] finished_adventures;
|
||||||
@@ -515,7 +511,7 @@ void AdventureManager::GetAdventureData(const char *name)
|
|||||||
sfa->zone_in_object = finished_adventures[i]->GetTemplate()->zone_in_object_id;
|
sfa->zone_in_object = finished_adventures[i]->GetTemplate()->zone_in_object_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(player->zone(), player->instance(), pack);
|
ZSList::Instance()->SendPacket(player->zone(), player->instance(), pack);
|
||||||
safe_delete_array(finished_adventures);
|
safe_delete_array(finished_adventures);
|
||||||
delete pack;
|
delete pack;
|
||||||
delete[] finished_adventures;
|
delete[] finished_adventures;
|
||||||
@@ -764,7 +760,7 @@ void AdventureManager::PlayerClickedDoor(const char *player, int zone_id, int do
|
|||||||
{
|
{
|
||||||
if((*iter)->PlayerExists(player))
|
if((*iter)->PlayerExists(player))
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack =
|
auto pack =
|
||||||
@@ -783,7 +779,7 @@ void AdventureManager::PlayerClickedDoor(const char *player, int zone_id, int do
|
|||||||
(*iter)->SetStatus(AS_WaitingForPrimaryEndTime);
|
(*iter)->SetStatus(AS_WaitingForPrimaryEndTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@@ -792,19 +788,19 @@ void AdventureManager::PlayerClickedDoor(const char *player, int zone_id, int do
|
|||||||
++iter;
|
++iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureClickDoorError, 64);
|
auto pack = new ServerPacket(ServerOP_AdventureClickDoorError, 64);
|
||||||
strcpy((char*)pack->pBuffer, player);
|
strcpy((char*)pack->pBuffer, player);
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::LeaveAdventure(const char *name)
|
void AdventureManager::LeaveAdventure(const char *name)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(name);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(name);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
Adventure *current = GetActiveAdventure(name);
|
Adventure *current = GetActiveAdventure(name);
|
||||||
@@ -814,7 +810,7 @@ void AdventureManager::LeaveAdventure(const char *name)
|
|||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaveDeny, 64);
|
auto pack = new ServerPacket(ServerOP_AdventureLeaveDeny, 64);
|
||||||
strcpy((char*)pack->pBuffer, name);
|
strcpy((char*)pack->pBuffer, name);
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -827,7 +823,7 @@ void AdventureManager::LeaveAdventure(const char *name)
|
|||||||
current->RemovePlayer(name);
|
current->RemovePlayer(name);
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaveReply, 64);
|
auto pack = new ServerPacket(ServerOP_AdventureLeaveReply, 64);
|
||||||
strcpy((char*)pack->pBuffer, name);
|
strcpy((char*)pack->pBuffer, name);
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -835,7 +831,7 @@ void AdventureManager::LeaveAdventure(const char *name)
|
|||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaveReply, 64);
|
auto pack = new ServerPacket(ServerOP_AdventureLeaveReply, 64);
|
||||||
strcpy((char*)pack->pBuffer, name);
|
strcpy((char*)pack->pBuffer, name);
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -867,12 +863,12 @@ void AdventureManager::IncrementCount(uint16 instance_id)
|
|||||||
|
|
||||||
while(siter != slist.end())
|
while(siter != slist.end())
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter((*siter).c_str());
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter((*siter).c_str());
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
memset(ac->player, 0, 64);
|
memset(ac->player, 0, 64);
|
||||||
strcpy(ac->player, (*siter).c_str());
|
strcpy(ac->player, (*siter).c_str());
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
}
|
}
|
||||||
++siter;
|
++siter;
|
||||||
}
|
}
|
||||||
@@ -936,7 +932,7 @@ void AdventureManager::GetZoneData(uint16 instance_id)
|
|||||||
zd->dest_y = temp->dest_y;
|
zd->dest_y = temp->dest_y;
|
||||||
zd->dest_z = temp->dest_z;
|
zd->dest_z = temp->dest_z;
|
||||||
zd->dest_h = temp->dest_h;
|
zd->dest_h = temp->dest_h;
|
||||||
zoneserver_list.SendPacket(0, instance_id, pack);
|
ZSList::Instance()->SendPacket(0, instance_id, pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1262,7 +1258,7 @@ void AdventureManager::DoLeaderboardRequest(const char* player, uint8 type)
|
|||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestWins(const char* player)
|
void AdventureManager::DoLeaderboardRequestWins(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1321,14 +1317,14 @@ void AdventureManager::DoLeaderboardRequestWins(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestPercentage(const char* player)
|
void AdventureManager::DoLeaderboardRequestPercentage(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1387,14 +1383,14 @@ void AdventureManager::DoLeaderboardRequestPercentage(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestWinsGuk(const char* player)
|
void AdventureManager::DoLeaderboardRequestWinsGuk(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1453,14 +1449,14 @@ void AdventureManager::DoLeaderboardRequestWinsGuk(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestPercentageGuk(const char* player)
|
void AdventureManager::DoLeaderboardRequestPercentageGuk(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1519,14 +1515,14 @@ void AdventureManager::DoLeaderboardRequestPercentageGuk(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestWinsMir(const char* player)
|
void AdventureManager::DoLeaderboardRequestWinsMir(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1585,14 +1581,14 @@ void AdventureManager::DoLeaderboardRequestWinsMir(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestPercentageMir(const char* player)
|
void AdventureManager::DoLeaderboardRequestPercentageMir(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1651,14 +1647,14 @@ void AdventureManager::DoLeaderboardRequestPercentageMir(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestWinsMmc(const char* player)
|
void AdventureManager::DoLeaderboardRequestWinsMmc(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1717,14 +1713,14 @@ void AdventureManager::DoLeaderboardRequestWinsMmc(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestPercentageMmc(const char* player)
|
void AdventureManager::DoLeaderboardRequestPercentageMmc(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1783,14 +1779,14 @@ void AdventureManager::DoLeaderboardRequestPercentageMmc(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestWinsRuj(const char* player)
|
void AdventureManager::DoLeaderboardRequestWinsRuj(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1849,14 +1845,14 @@ void AdventureManager::DoLeaderboardRequestWinsRuj(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestPercentageRuj(const char* player)
|
void AdventureManager::DoLeaderboardRequestPercentageRuj(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1915,14 +1911,14 @@ void AdventureManager::DoLeaderboardRequestPercentageRuj(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestWinsTak(const char* player)
|
void AdventureManager::DoLeaderboardRequestWinsTak(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -1981,14 +1977,14 @@ void AdventureManager::DoLeaderboardRequestWinsTak(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AdventureManager::DoLeaderboardRequestPercentageTak(const char* player)
|
void AdventureManager::DoLeaderboardRequestPercentageTak(const char* player)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(player);
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(player);
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureLeaderboard, 64 + sizeof(AdventureLeaderboard_Struct));
|
||||||
@@ -2047,7 +2043,7 @@ void AdventureManager::DoLeaderboardRequestPercentageTak(const char* player)
|
|||||||
al->failure = our_failures;
|
al->failure = our_failures;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2074,7 +2070,7 @@ bool AdventureManager::PopFinishedEvent(const char *name, AdventureFinishEvent &
|
|||||||
|
|
||||||
void AdventureManager::SendAdventureFinish(AdventureFinishEvent fe)
|
void AdventureManager::SendAdventureFinish(AdventureFinishEvent fe)
|
||||||
{
|
{
|
||||||
ClientListEntry *pc = client_list.FindCharacter(fe.name.c_str());
|
ClientListEntry *pc = ClientList::Instance()->FindCharacter(fe.name.c_str());
|
||||||
if(pc)
|
if(pc)
|
||||||
{
|
{
|
||||||
auto pack = new ServerPacket(ServerOP_AdventureFinish, sizeof(ServerAdventureFinish_Struct));
|
auto pack = new ServerPacket(ServerOP_AdventureFinish, sizeof(ServerAdventureFinish_Struct));
|
||||||
@@ -2084,7 +2080,7 @@ void AdventureManager::SendAdventureFinish(AdventureFinishEvent fe)
|
|||||||
af->win = fe.win;
|
af->win = fe.win;
|
||||||
af->points = fe.points;
|
af->points = fe.points;
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pc->zone(), pc->instance(), pack);
|
ZSList::Instance()->SendPacket(pc->zone(), pc->instance(), pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,6 +40,12 @@ public:
|
|||||||
AdventureTemplate *GetAdventureTemplate(int theme, int id);
|
AdventureTemplate *GetAdventureTemplate(int theme, int id);
|
||||||
AdventureTemplate *GetAdventureTemplate(int id);
|
AdventureTemplate *GetAdventureTemplate(int id);
|
||||||
void GetZoneData(uint16 instance_id);
|
void GetZoneData(uint16 instance_id);
|
||||||
|
|
||||||
|
static AdventureManager* Instance()
|
||||||
|
{
|
||||||
|
static AdventureManager instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
protected:
|
protected:
|
||||||
bool IsInExcludedZoneList(std::list<AdventureZones> excluded_zones, std::string zone_name, int version);
|
bool IsInExcludedZoneList(std::list<AdventureZones> excluded_zones, std::string zone_name, int version);
|
||||||
bool IsInExcludedZoneInList(std::list<AdventureZoneIn> excluded_zone_ins, int zone_id, int door_object);
|
bool IsInExcludedZoneInList(std::list<AdventureZoneIn> excluded_zone_ins, int zone_id, int door_object);
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ void WorldserverCLI::EtlGetSettings(int argc, char **argv, argh::parser &cmd, st
|
|||||||
Json::Value etl_settings;
|
Json::Value etl_settings;
|
||||||
Json::Value player_events;
|
Json::Value player_events;
|
||||||
|
|
||||||
player_event_logs.SetDatabase(&database)->Init();
|
PlayerEventLogs::Instance()->SetDatabase(&database)->Init();
|
||||||
auto event_settings = player_event_logs.GetSettings();
|
auto event_settings = PlayerEventLogs::Instance()->GetSettings();
|
||||||
auto etl_details = player_event_logs.GetEtlSettings();
|
auto etl_details = PlayerEventLogs::Instance()->GetEtlSettings();
|
||||||
|
|
||||||
for (int i = PlayerEvent::GM_COMMAND; i < PlayerEvent::EventType::MAX; i++) {
|
for (int i = PlayerEvent::GM_COMMAND; i < PlayerEvent::EventType::MAX; i++) {
|
||||||
player_events["event_id"] = event_settings[i].id;
|
player_events["event_id"] = event_settings[i].id;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ void WorldserverCLI::ExpansionTestCommand(int argc, char **argv, argh::parser &c
|
|||||||
LogInfo("No rule set configured, using default rules");
|
LogInfo("No rule set configured, using default rules");
|
||||||
}
|
}
|
||||||
|
|
||||||
content_service.SetCurrentExpansion(RuleI(Expansion, CurrentExpansion));
|
WorldContentService::Instance()->SetCurrentExpansion(RuleI(Expansion, CurrentExpansion));
|
||||||
|
|
||||||
std::vector<ContentFlagsRepository::ContentFlags> flags = {};
|
std::vector<ContentFlagsRepository::ContentFlags> flags = {};
|
||||||
auto f = ContentFlagsRepository::NewEntity();
|
auto f = ContentFlagsRepository::NewEntity();
|
||||||
@@ -32,13 +32,13 @@ void WorldserverCLI::ExpansionTestCommand(int argc, char **argv, argh::parser &c
|
|||||||
flags.push_back(f);
|
flags.push_back(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
content_service.SetContentFlags(flags);
|
WorldContentService::Instance()->SetContentFlags(flags);
|
||||||
|
|
||||||
LogInfo(
|
LogInfo(
|
||||||
"Current expansion is [{}] ({}) is Velious Enabled [{}] Criteria [{}]",
|
"Current expansion is [{}] ({}) is Velious Enabled [{}] Criteria [{}]",
|
||||||
content_service.GetCurrentExpansion(),
|
WorldContentService::Instance()->GetCurrentExpansion(),
|
||||||
content_service.GetCurrentExpansionName(),
|
WorldContentService::Instance()->GetCurrentExpansionName(),
|
||||||
content_service.IsTheScarsOfVeliousEnabled() ? "true" : "false",
|
WorldContentService::Instance()->IsTheScarsOfVeliousEnabled() ? "true" : "false",
|
||||||
ContentFilterCriteria::apply()
|
ContentFilterCriteria::apply()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
+38
-21
@@ -36,6 +36,7 @@
|
|||||||
#include "../common/shareddb.h"
|
#include "../common/shareddb.h"
|
||||||
#include "../common/opcodemgr.h"
|
#include "../common/opcodemgr.h"
|
||||||
#include "../common/data_verification.h"
|
#include "../common/data_verification.h"
|
||||||
|
#include "../common/data_bucket.h"
|
||||||
|
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
#include "worlddb.h"
|
#include "worlddb.h"
|
||||||
@@ -88,10 +89,6 @@
|
|||||||
std::vector<RaceClassAllocation> character_create_allocations;
|
std::vector<RaceClassAllocation> character_create_allocations;
|
||||||
std::vector<RaceClassCombos> character_create_race_class_combos;
|
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 uint32 numclients;
|
||||||
extern volatile bool RunLoops;
|
extern volatile bool RunLoops;
|
||||||
extern volatile bool UCSServerAvailable_;
|
extern volatile bool UCSServerAvailable_;
|
||||||
@@ -135,6 +132,8 @@ Client::Client(EQStreamInterface* ieqs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
Client::~Client() {
|
Client::~Client() {
|
||||||
|
ClearDataBucketsCache();
|
||||||
|
|
||||||
if (RunLoops && cle && zone_id == 0)
|
if (RunLoops && cle && zone_id == 0)
|
||||||
cle->SetOnline(CLE_Status::Offline);
|
cle->SetOnline(CLE_Status::Offline);
|
||||||
|
|
||||||
@@ -476,7 +475,9 @@ bool Client::HandleSendLoginInfoPacket(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
LogClientLogin("Checking authentication id [{}]", id);
|
LogClientLogin("Checking authentication id [{}]", id);
|
||||||
|
|
||||||
if ((cle = client_list.CheckAuth(id, password))) {
|
if ((cle = ClientList::Instance()->CheckAuth(id, password))) {
|
||||||
|
LoadDataBucketsCache();
|
||||||
|
|
||||||
LogClientLogin("Checking authentication id [{}] passed", id);
|
LogClientLogin("Checking authentication id [{}] passed", id);
|
||||||
if (!is_player_zoning) {
|
if (!is_player_zoning) {
|
||||||
// Track who is in and who is out of the game
|
// Track who is in and who is out of the game
|
||||||
@@ -514,7 +515,7 @@ bool Client::HandleSendLoginInfoPacket(const EQApplicationPacket *app)
|
|||||||
ServerLSPlayerJoinWorld_Struct* join =(ServerLSPlayerJoinWorld_Struct*)pack->pBuffer;
|
ServerLSPlayerJoinWorld_Struct* join =(ServerLSPlayerJoinWorld_Struct*)pack->pBuffer;
|
||||||
strcpy(join->key,GetLSKey());
|
strcpy(join->key,GetLSKey());
|
||||||
join->lsaccount_id = GetLSID();
|
join->lsaccount_id = GetLSID();
|
||||||
loginserverlist.SendPacket(pack);
|
LoginServerList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -797,7 +798,7 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) {
|
|||||||
RuleB(World, EnableIPExemptions) ||
|
RuleB(World, EnableIPExemptions) ||
|
||||||
RuleI(World, MaxClientsPerIP) > 0
|
RuleI(World, MaxClientsPerIP) > 0
|
||||||
) {
|
) {
|
||||||
client_list.GetCLEIP(GetIP()); //Check current CLE Entry IPs against incoming connection
|
ClientList::Instance()->GetCLEIP(GetIP()); //Check current CLE Entry IPs against incoming connection
|
||||||
}
|
}
|
||||||
|
|
||||||
auto ew = (EnterWorld_Struct *) app->pBuffer;
|
auto ew = (EnterWorld_Struct *) app->pBuffer;
|
||||||
@@ -817,7 +818,7 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto r = content_service.FindZone(zone_id, instance_id);
|
auto r = WorldContentService::Instance()->FindZone(zone_id, instance_id);
|
||||||
if (r.zone_id && r.instance.id != instance_id) {
|
if (r.zone_id && r.instance.id != instance_id) {
|
||||||
LogInfo(
|
LogInfo(
|
||||||
"Zone [{}] has been remapped to instance_id [{}] from instance_id [{}] for client [{}]",
|
"Zone [{}] has been remapped to instance_id [{}] from instance_id [{}] for client [{}]",
|
||||||
@@ -984,7 +985,7 @@ bool Client::HandleEnterWorldPacket(const EQApplicationPacket *app) {
|
|||||||
safe_delete(outapp);
|
safe_delete(outapp);
|
||||||
|
|
||||||
// set mailkey - used for duration of character session
|
// 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);
|
database.SetMailKey(charid, GetIP(), mail_key);
|
||||||
if (UCSServerAvailable_) {
|
if (UCSServerAvailable_) {
|
||||||
@@ -1097,7 +1098,7 @@ bool Client::HandlePacket(const EQApplicationPacket *app) {
|
|||||||
OpcodeManager::EmuToName(app->GetOpcode()),
|
OpcodeManager::EmuToName(app->GetOpcode()),
|
||||||
o->EmuToEQ(app->GetOpcode()) == 0 ? app->GetProtocolOpcode() : o->EmuToEQ(app->GetOpcode()),
|
o->EmuToEQ(app->GetOpcode()) == 0 ? app->GetProtocolOpcode() : o->EmuToEQ(app->GetOpcode()),
|
||||||
app->Size(),
|
app->Size(),
|
||||||
(LogSys.IsLogEnabled(Logs::Detail, Logs::PacketClientServer) ? DumpPacketToString(app) : "")
|
(EQEmuLogSys::Instance()->IsLogEnabled(Logs::Detail, Logs::PacketClientServer) ? DumpPacketToString(app) : "")
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!eqs->CheckState(ESTABLISHED)) {
|
if (!eqs->CheckState(ESTABLISHED)) {
|
||||||
@@ -1246,7 +1247,7 @@ bool Client::Process() {
|
|||||||
ServerLSPlayerLeftWorld_Struct* logout =(ServerLSPlayerLeftWorld_Struct*)pack->pBuffer;
|
ServerLSPlayerLeftWorld_Struct* logout =(ServerLSPlayerLeftWorld_Struct*)pack->pBuffer;
|
||||||
strcpy(logout->key,GetLSKey());
|
strcpy(logout->key,GetLSKey());
|
||||||
logout->lsaccount_id = GetLSID();
|
logout->lsaccount_id = GetLSID();
|
||||||
loginserverlist.SendPacket(pack);
|
LoginServerList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
LogInfo("Client disconnected (not active in process)");
|
LogInfo("Client disconnected (not active in process)");
|
||||||
@@ -1412,18 +1413,18 @@ void Client::EnterWorld(bool TryBootup) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
zone_server = zoneserver_list.FindByInstanceID(instance_id);
|
zone_server = ZSList::Instance()->FindByInstanceID(instance_id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
zone_server = zoneserver_list.FindByZoneID(zone_id);
|
zone_server = ZSList::Instance()->FindByZoneID(zone_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *zone_name = ZoneName(zone_id, true);
|
const char *zone_name = ZoneName(zone_id, true);
|
||||||
if (zone_server) {
|
if (zone_server) {
|
||||||
if (false == enter_world_triggered) {
|
if (false == enter_world_triggered) {
|
||||||
//Drop any clients we own in other zones.
|
//Drop any clients we own in other zones.
|
||||||
zoneserver_list.DropClient(GetLSID(), zone_server);
|
ZSList::Instance()->DropClient(GetLSID(), zone_server);
|
||||||
|
|
||||||
// warn the zone we're coming
|
// warn the zone we're coming
|
||||||
zone_server->IncomingClient(this);
|
zone_server->IncomingClient(this);
|
||||||
@@ -1436,7 +1437,7 @@ void Client::EnterWorld(bool TryBootup) {
|
|||||||
if (TryBootup) {
|
if (TryBootup) {
|
||||||
LogInfo("Attempting autobootup of [{}] [{}] [{}]", zone_name, zone_id, instance_id);
|
LogInfo("Attempting autobootup of [{}] [{}] [{}]", zone_name, zone_id, instance_id);
|
||||||
autobootup_timeout.Start();
|
autobootup_timeout.Start();
|
||||||
zone_waiting_for_bootup = zoneserver_list.TriggerBootup(zone_id, instance_id);
|
zone_waiting_for_bootup = ZSList::Instance()->TriggerBootup(zone_id, instance_id);
|
||||||
if (zone_waiting_for_bootup == 0) {
|
if (zone_waiting_for_bootup == 0) {
|
||||||
LogInfo("No zoneserver available to boot up");
|
LogInfo("No zoneserver available to boot up");
|
||||||
TellClientZoneUnavailable();
|
TellClientZoneUnavailable();
|
||||||
@@ -1452,7 +1453,7 @@ void Client::EnterWorld(bool TryBootup) {
|
|||||||
|
|
||||||
zone_waiting_for_bootup = 0;
|
zone_waiting_for_bootup = 0;
|
||||||
|
|
||||||
if (GetAdmin() < 80 && zoneserver_list.IsZoneLocked(zone_id)) {
|
if (GetAdmin() < 80 && ZSList::Instance()->IsZoneLocked(zone_id)) {
|
||||||
LogInfo("Enter world failed. Zone is locked");
|
LogInfo("Enter world failed. Zone is locked");
|
||||||
TellClientZoneUnavailable();
|
TellClientZoneUnavailable();
|
||||||
return;
|
return;
|
||||||
@@ -1498,11 +1499,11 @@ void Client::Clearance(int8 response)
|
|||||||
ZoneServer* zs = nullptr;
|
ZoneServer* zs = nullptr;
|
||||||
if(instance_id > 0)
|
if(instance_id > 0)
|
||||||
{
|
{
|
||||||
zs = zoneserver_list.FindByInstanceID(instance_id);
|
zs = ZSList::Instance()->FindByInstanceID(instance_id);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
zs = zoneserver_list.FindByZoneID(zone_id);
|
zs = ZSList::Instance()->FindByZoneID(zone_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(zs == 0 || response == -1 || response == 0)
|
if(zs == 0 || response == -1 || response == 0)
|
||||||
@@ -2171,7 +2172,7 @@ void Client::SetClassStartingSkills(PlayerProfile_Struct *pp)
|
|||||||
i == EQ::skills::SkillAlcoholTolerance || i == EQ::skills::SkillBindWound)
|
i == EQ::skills::SkillAlcoholTolerance || i == EQ::skills::SkillBindWound)
|
||||||
continue;
|
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 +2370,7 @@ bool Client::StoreCharacter(
|
|||||||
return false;
|
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")) {
|
if (Strings::EqualFold(zone_name, "UNKNOWN")) {
|
||||||
p_player_profile_struct->zone_id = Zones::QEYNOS;
|
p_player_profile_struct->zone_id = Zones::QEYNOS;
|
||||||
}
|
}
|
||||||
@@ -2427,7 +2428,7 @@ bool Client::StoreCharacter(
|
|||||||
|
|
||||||
void Client::RecordPossibleHack(const std::string& message)
|
void Client::RecordPossibleHack(const std::string& message)
|
||||||
{
|
{
|
||||||
if (player_event_logs.IsEventEnabled(PlayerEvent::POSSIBLE_HACK)) {
|
if (PlayerEventLogs::Instance()->IsEventEnabled(PlayerEvent::POSSIBLE_HACK)) {
|
||||||
auto event = PlayerEvent::PossibleHackEvent{.message = message};
|
auto event = PlayerEvent::PossibleHackEvent{.message = message};
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
{
|
{
|
||||||
@@ -2518,3 +2519,19 @@ void Client::SendUnsupportedClientPacket(const std::string& message)
|
|||||||
|
|
||||||
QueuePacket(&packet);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -121,6 +121,9 @@ private:
|
|||||||
bool CanTradeFVNoDropItem();
|
bool CanTradeFVNoDropItem();
|
||||||
void RecordPossibleHack(const std::string& message);
|
void RecordPossibleHack(const std::string& message);
|
||||||
void SendUnsupportedClientPacket(const std::string& message);
|
void SendUnsupportedClientPacket(const std::string& message);
|
||||||
|
|
||||||
|
void LoadDataBucketsCache();
|
||||||
|
void ClearDataBucketsCache();
|
||||||
};
|
};
|
||||||
|
|
||||||
bool CheckCharCreateInfoSoF(CharCreate_Struct *cc);
|
bool CheckCharCreateInfoSoF(CharCreate_Struct *cc);
|
||||||
|
|||||||
@@ -9,10 +9,7 @@
|
|||||||
#include "world_config.h"
|
#include "world_config.h"
|
||||||
|
|
||||||
extern uint32 numplayers;
|
extern uint32 numplayers;
|
||||||
extern LoginServerList loginserverlist;
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern volatile bool RunLoops;
|
extern volatile bool RunLoops;
|
||||||
extern SharedTaskManager shared_task_manager;
|
|
||||||
|
|
||||||
ClientListEntry::ClientListEntry(
|
ClientListEntry::ClientListEntry(
|
||||||
uint32 id,
|
uint32 id,
|
||||||
@@ -94,7 +91,7 @@ ClientListEntry::~ClientListEntry()
|
|||||||
{
|
{
|
||||||
if (RunLoops) {
|
if (RunLoops) {
|
||||||
Camp(); // updates zoneserver's numplayers
|
Camp(); // updates zoneserver's numplayers
|
||||||
client_list.RemoveCLEReferances(this);
|
ClientList::Instance()->RemoveCLEReferances(this);
|
||||||
}
|
}
|
||||||
for (auto &elem: m_tell_queue) {
|
for (auto &elem: m_tell_queue) {
|
||||||
safe_delete_array(elem);
|
safe_delete_array(elem);
|
||||||
@@ -146,7 +143,7 @@ void ClientListEntry::LSUpdate(ZoneServer *iZS)
|
|||||||
zone->count = iZS->NumPlayers();
|
zone->count = iZS->NumPlayers();
|
||||||
zone->zone = iZS->GetZoneID();
|
zone->zone = iZS->GetZoneID();
|
||||||
zone->zone_wid = iZS->GetID();
|
zone->zone_wid = iZS->GetID();
|
||||||
loginserverlist.SendPacket(pack);
|
LoginServerList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -162,7 +159,7 @@ void ClientListEntry::LSZoneChange(ZoneToZone_Struct *ztz)
|
|||||||
zonechange->lsaccount_id = LSID();
|
zonechange->lsaccount_id = LSID();
|
||||||
zonechange->from = ztz->current_zone_id;
|
zonechange->from = ztz->current_zone_id;
|
||||||
zonechange->to = ztz->requested_zone_id;
|
zonechange->to = ztz->requested_zone_id;
|
||||||
loginserverlist.SendPacket(pack);
|
LoginServerList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -224,7 +221,7 @@ void ClientListEntry::LeavingZone(ZoneServer *iZS, CLE_Status iOnline)
|
|||||||
}
|
}
|
||||||
SetOnline(iOnline);
|
SetOnline(iOnline);
|
||||||
|
|
||||||
shared_task_manager.RemoveActiveInvitationByCharacterID(CharID());
|
SharedTaskManager::Instance()->RemoveActiveInvitationByCharacterID(CharID());
|
||||||
|
|
||||||
if (m_zone_server) {
|
if (m_zone_server) {
|
||||||
m_zone_server->RemovePlayer();
|
m_zone_server->RemovePlayer();
|
||||||
|
|||||||
+12
-15
@@ -36,9 +36,6 @@
|
|||||||
#include "../common/zone_store.h"
|
#include "../common/zone_store.h"
|
||||||
#include <set>
|
#include <set>
|
||||||
|
|
||||||
extern WebInterfaceList web_interface;
|
|
||||||
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
uint32 numplayers = 0; //this really wants to be a member variable of ClientList...
|
uint32 numplayers = 0; //this really wants to be a member variable of ClientList...
|
||||||
|
|
||||||
ClientList::ClientList()
|
ClientList::ClientList()
|
||||||
@@ -234,7 +231,7 @@ void ClientList::DisconnectByIP(uint32 in_ip) {
|
|||||||
strn0cpy(skp->adminname, "SessionLimit", sizeof(skp->adminname));
|
strn0cpy(skp->adminname, "SessionLimit", sizeof(skp->adminname));
|
||||||
strn0cpy(skp->name, cle->name(), sizeof(skp->name));
|
strn0cpy(skp->name, cle->name(), sizeof(skp->name));
|
||||||
skp->adminrank = 255;
|
skp->adminrank = 255;
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
cle->SetOnline(CLE_Status::Offline);
|
cle->SetOnline(CLE_Status::Offline);
|
||||||
@@ -553,7 +550,7 @@ void ClientList::SendOnlineGuildMembers(uint32 FromID, uint32 GuildID)
|
|||||||
|
|
||||||
Iterator.Advance();
|
Iterator.Advance();
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(from->zone(), from->instance(), pack);
|
ZSList::Instance()->SendPacket(from->zone(), from->instance(), pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1318,7 +1315,7 @@ void ClientList::RemoveCLEReferances(ClientListEntry* cle) {
|
|||||||
|
|
||||||
bool ClientList::SendPacket(const char* to, ServerPacket* pack) {
|
bool ClientList::SendPacket(const char* to, ServerPacket* pack) {
|
||||||
if (to == 0 || to[0] == 0) {
|
if (to == 0 || to[0] == 0) {
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (to[0] == '*') {
|
else if (to[0] == '*') {
|
||||||
@@ -1334,7 +1331,7 @@ bool ClientList::SendPacket(const char* to, ServerPacket* pack) {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
ZoneServer* zs = zoneserver_list.FindByName(to);
|
ZoneServer* zs = ZSList::Instance()->FindByName(to);
|
||||||
if (zs != nullptr) {
|
if (zs != nullptr) {
|
||||||
zs->SendPacket(pack);
|
zs->SendPacket(pack);
|
||||||
return true;
|
return true;
|
||||||
@@ -1439,7 +1436,7 @@ void ClientList::SendClientVersionSummary(const char *Name)
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (client_count[EQ::versions::ClientVersion::Titanium]) {
|
if (client_count[EQ::versions::ClientVersion::Titanium]) {
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
Name,
|
Name,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -1452,7 +1449,7 @@ void ClientList::SendClientVersionSummary(const char *Name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (client_count[EQ::versions::ClientVersion::SoF]) {
|
if (client_count[EQ::versions::ClientVersion::SoF]) {
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
Name,
|
Name,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -1465,7 +1462,7 @@ void ClientList::SendClientVersionSummary(const char *Name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (client_count[EQ::versions::ClientVersion::SoD]) {
|
if (client_count[EQ::versions::ClientVersion::SoD]) {
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
Name,
|
Name,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -1478,7 +1475,7 @@ void ClientList::SendClientVersionSummary(const char *Name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (client_count[EQ::versions::ClientVersion::UF]) {
|
if (client_count[EQ::versions::ClientVersion::UF]) {
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
Name,
|
Name,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -1491,7 +1488,7 @@ void ClientList::SendClientVersionSummary(const char *Name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (client_count[EQ::versions::ClientVersion::RoF]) {
|
if (client_count[EQ::versions::ClientVersion::RoF]) {
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
Name,
|
Name,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -1504,7 +1501,7 @@ void ClientList::SendClientVersionSummary(const char *Name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (client_count[EQ::versions::ClientVersion::RoF2]) {
|
if (client_count[EQ::versions::ClientVersion::RoF2]) {
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
Name,
|
Name,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -1517,7 +1514,7 @@ void ClientList::SendClientVersionSummary(const char *Name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
Name,
|
Name,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -1613,7 +1610,7 @@ void ClientList::OnTick(EQ::Timer *t)
|
|||||||
Iterator.Advance();
|
Iterator.Advance();
|
||||||
}
|
}
|
||||||
|
|
||||||
web_interface.SendEvent(out);
|
WebInterfaceList::Instance()->SendEvent(out);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -85,6 +85,12 @@ public:
|
|||||||
return {m_gm_zone_server_ids.begin(), m_gm_zone_server_ids.end()};
|
return {m_gm_zone_server_ids.begin(), m_gm_zone_server_ids.end()};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ClientList* Instance()
|
||||||
|
{
|
||||||
|
static ClientList instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void OnTick(EQ::Timer *t);
|
void OnTick(EQ::Timer *t);
|
||||||
inline uint32 GetNextCLEID() { return NextCLEID++; }
|
inline uint32 GetNextCLEID() { return NextCLEID++; }
|
||||||
|
|||||||
+83
-45
@@ -33,10 +33,6 @@
|
|||||||
#include "../common/zone_store.h"
|
#include "../common/zone_store.h"
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
extern LoginServerList loginserverlist;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param username
|
* @param username
|
||||||
* @param password
|
* @param password
|
||||||
@@ -149,7 +145,7 @@ void ConsoleZoneStatus(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
WorldConsoleTCPConnection console_connection(connection);
|
WorldConsoleTCPConnection console_connection(connection);
|
||||||
zoneserver_list.SendZoneStatus(0, connection->Admin(), &console_connection);
|
ZSList::Instance()->SendZoneStatus(0, connection->Admin(), &console_connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -193,7 +189,7 @@ void ConsoleWho(
|
|||||||
}
|
}
|
||||||
|
|
||||||
WorldConsoleTCPConnection console_connection(connection);
|
WorldConsoleTCPConnection console_connection(connection);
|
||||||
client_list.ConsoleSendWhoAll(0, connection->Admin(), &whom, &console_connection);
|
ClientList::Instance()->ConsoleSendWhoAll(0, connection->Admin(), &whom, &console_connection);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -216,7 +212,7 @@ void ConsoleUptime(
|
|||||||
ServerUptime_Struct *sus = (ServerUptime_Struct *) pack->pBuffer;
|
ServerUptime_Struct *sus = (ServerUptime_Struct *) pack->pBuffer;
|
||||||
snprintf(sus->adminname, sizeof(sus->adminname), "*%s", connection->UserName().c_str());
|
snprintf(sus->adminname, sizeof(sus->adminname), "*%s", connection->UserName().c_str());
|
||||||
sus->zoneserverid = Strings::ToInt(args[0]);
|
sus->zoneserverid = Strings::ToInt(args[0]);
|
||||||
ZoneServer *zs = zoneserver_list.FindByID(sus->zoneserverid);
|
ZoneServer *zs = ZSList::Instance()->FindByID(sus->zoneserverid);
|
||||||
if (zs) {
|
if (zs) {
|
||||||
zs->SendPacket(pack);
|
zs->SendPacket(pack);
|
||||||
}
|
}
|
||||||
@@ -291,7 +287,7 @@ void ConsoleEmote(
|
|||||||
join_args.erase(join_args.begin(), join_args.begin() + 2);
|
join_args.erase(join_args.begin(), join_args.begin() + 2);
|
||||||
|
|
||||||
if (strcasecmp(args[0].c_str(), "world") == 0) {
|
if (strcasecmp(args[0].c_str(), "world") == 0) {
|
||||||
zoneserver_list.SendEmoteMessageRaw(
|
ZSList::Instance()->SendEmoteMessageRaw(
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -300,7 +296,7 @@ void ConsoleEmote(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ZoneServer *zs = zoneserver_list.FindByName(args[0].c_str());
|
ZoneServer *zs = ZSList::Instance()->FindByName(args[0].c_str());
|
||||||
if (zs != 0) {
|
if (zs != 0) {
|
||||||
zs->SendEmoteMessageRaw(
|
zs->SendEmoteMessageRaw(
|
||||||
0,
|
0,
|
||||||
@@ -311,7 +307,7 @@ void ConsoleEmote(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
zoneserver_list.SendEmoteMessageRaw(
|
ZSList::Instance()->SendEmoteMessageRaw(
|
||||||
args[0].c_str(),
|
args[0].c_str(),
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -372,7 +368,7 @@ void ConsoleTell(
|
|||||||
auto join_args = args;
|
auto join_args = args;
|
||||||
join_args.erase(join_args.begin(), join_args.begin() + 1);
|
join_args.erase(join_args.begin(), join_args.begin() + 1);
|
||||||
|
|
||||||
zoneserver_list.SendChannelMessage(tmpname, to.c_str(), ChatChannel_Tell, 0, Strings::Join(join_args, " ").c_str());
|
ZSList::Instance()->SendChannelMessage(tmpname, to.c_str(), ChatChannel_Tell, 0, Strings::Join(join_args, " ").c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -393,7 +389,7 @@ void ConsoleBroadcast(
|
|||||||
char tmpname[64];
|
char tmpname[64];
|
||||||
tmpname[0] = '*';
|
tmpname[0] = '*';
|
||||||
strcpy(&tmpname[1], connection->UserName().c_str());
|
strcpy(&tmpname[1], connection->UserName().c_str());
|
||||||
zoneserver_list.SendChannelMessage(tmpname, 0, ChatChannel_Broadcast, 0, Strings::Join(args, " ").c_str());
|
ZSList::Instance()->SendChannelMessage(tmpname, 0, ChatChannel_Broadcast, 0, Strings::Join(args, " ").c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -414,7 +410,7 @@ void ConsoleGMSay(
|
|||||||
char tmpname[64];
|
char tmpname[64];
|
||||||
tmpname[0] = '*';
|
tmpname[0] = '*';
|
||||||
strcpy(&tmpname[1], connection->UserName().c_str());
|
strcpy(&tmpname[1], connection->UserName().c_str());
|
||||||
zoneserver_list.SendChannelMessage(tmpname, 0, ChatChannel_GMSAY, 0, Strings::Join(args, " ").c_str());
|
ZSList::Instance()->SendChannelMessage(tmpname, 0, ChatChannel_GMSAY, 0, Strings::Join(args, " ").c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -447,7 +443,7 @@ void ConsoleGuildSay(
|
|||||||
Strings::Join(join_args, " ")
|
Strings::Join(join_args, " ")
|
||||||
);
|
);
|
||||||
|
|
||||||
zoneserver_list.SendEmoteMessage(0, guild_id, AccountStatus::Player, Chat::Guild, message.c_str());
|
ZSList::Instance()->SendEmoteMessage(0, guild_id, AccountStatus::Player, Chat::Guild, message.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -468,7 +464,7 @@ void ConsoleOOC(
|
|||||||
char tmpname[64];
|
char tmpname[64];
|
||||||
tmpname[0] = '*';
|
tmpname[0] = '*';
|
||||||
strcpy(&tmpname[1], connection->UserName().c_str());
|
strcpy(&tmpname[1], connection->UserName().c_str());
|
||||||
zoneserver_list.SendChannelMessage(tmpname, 0, ChatChannel_OOC, 0, Strings::Join(args, " ").c_str());
|
ZSList::Instance()->SendChannelMessage(tmpname, 0, ChatChannel_OOC, 0, Strings::Join(args, " ").c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -489,7 +485,7 @@ void ConsoleAuction(
|
|||||||
char tmpname[64];
|
char tmpname[64];
|
||||||
tmpname[0] = '*';
|
tmpname[0] = '*';
|
||||||
strcpy(&tmpname[1], connection->UserName().c_str());
|
strcpy(&tmpname[1], connection->UserName().c_str());
|
||||||
zoneserver_list.SendChannelMessage(tmpname, 0, ChatChannel_Auction, 0, Strings::Join(args, " ").c_str());
|
ZSList::Instance()->SendChannelMessage(tmpname, 0, ChatChannel_Auction, 0, Strings::Join(args, " ").c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -518,7 +514,7 @@ void ConsoleKick(
|
|||||||
strcpy(skp->adminname, tmpname);
|
strcpy(skp->adminname, tmpname);
|
||||||
strcpy(skp->name, args[0].c_str());
|
strcpy(skp->name, args[0].c_str());
|
||||||
skp->adminrank = connection->Admin();
|
skp->adminrank = connection->Admin();
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
delete pack;
|
delete pack;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -534,8 +530,8 @@ void ConsoleLock(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
WorldConfig::LockWorld();
|
WorldConfig::LockWorld();
|
||||||
if (loginserverlist.Connected()) {
|
if (LoginServerList::Instance()->Connected()) {
|
||||||
loginserverlist.SendStatus();
|
LoginServerList::Instance()->SendStatus();
|
||||||
connection->SendLine("World locked.");
|
connection->SendLine("World locked.");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -555,8 +551,8 @@ void ConsoleUnlock(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
WorldConfig::UnlockWorld();
|
WorldConfig::UnlockWorld();
|
||||||
if (loginserverlist.Connected()) {
|
if (LoginServerList::Instance()->Connected()) {
|
||||||
loginserverlist.SendStatus();
|
LoginServerList::Instance()->SendStatus();
|
||||||
connection->SendLine("World unlocked.");
|
connection->SendLine("World unlocked.");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -604,10 +600,10 @@ void ConsoleZoneShutdown(
|
|||||||
|
|
||||||
ZoneServer *zs = 0;
|
ZoneServer *zs = 0;
|
||||||
if (s->zone_server_id != 0) {
|
if (s->zone_server_id != 0) {
|
||||||
zs = zoneserver_list.FindByID(s->zone_server_id);
|
zs = ZSList::Instance()->FindByID(s->zone_server_id);
|
||||||
}
|
}
|
||||||
else if (s->zone_id != 0) {
|
else if (s->zone_id != 0) {
|
||||||
zs = zoneserver_list.FindByName(ZoneName(s->zone_id));
|
zs = ZSList::Instance()->FindByName(ZoneName(s->zone_id));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
connection->SendLine("Error: ZoneShutdown: neither ID nor name specified");
|
connection->SendLine("Error: ZoneShutdown: neither ID nor name specified");
|
||||||
@@ -648,14 +644,14 @@ void ConsoleZoneBootup(
|
|||||||
strcpy(&tmpname[1], connection->UserName().c_str());
|
strcpy(&tmpname[1], connection->UserName().c_str());
|
||||||
|
|
||||||
if (args.size() > 2) {
|
if (args.size() > 2) {
|
||||||
zoneserver_list.SOPZoneBootup(
|
ZSList::Instance()->SOPZoneBootup(
|
||||||
tmpname,
|
tmpname,
|
||||||
Strings::ToInt(args[0]),
|
Strings::ToInt(args[0]),
|
||||||
args[1].c_str(),
|
args[1].c_str(),
|
||||||
(bool) (strcasecmp(args[1].c_str(), "static") == 0));
|
(bool) (strcasecmp(args[1].c_str(), "static") == 0));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
zoneserver_list.SOPZoneBootup(tmpname, Strings::ToInt(args[0]), args[1].c_str(), false);
|
ZSList::Instance()->SOPZoneBootup(tmpname, Strings::ToInt(args[0]), args[1].c_str(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -677,7 +673,7 @@ void ConsoleZoneLock(
|
|||||||
|
|
||||||
if (strcasecmp(args[0].c_str(), "list") == 0) {
|
if (strcasecmp(args[0].c_str(), "list") == 0) {
|
||||||
WorldConsoleTCPConnection console_connection(connection);
|
WorldConsoleTCPConnection console_connection(connection);
|
||||||
zoneserver_list.ListLockedZones(0, &console_connection);
|
ZSList::Instance()->ListLockedZones(0, &console_connection);
|
||||||
}
|
}
|
||||||
else if (strcasecmp(args[0].c_str(), "lock") == 0 && connection->Admin() >= 101) {
|
else if (strcasecmp(args[0].c_str(), "lock") == 0 && connection->Admin() >= 101) {
|
||||||
if (args.size() < 2) {
|
if (args.size() < 2) {
|
||||||
@@ -686,8 +682,8 @@ void ConsoleZoneLock(
|
|||||||
|
|
||||||
uint16 tmp = ZoneID(args[1].c_str());
|
uint16 tmp = ZoneID(args[1].c_str());
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
if (zoneserver_list.SetLockedZone(tmp, true)) {
|
if (ZSList::Instance()->SetLockedZone(tmp, true)) {
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
AccountStatus::QuestTroupe,
|
AccountStatus::QuestTroupe,
|
||||||
@@ -713,8 +709,8 @@ void ConsoleZoneLock(
|
|||||||
|
|
||||||
uint16 tmp = ZoneID(args[1].c_str());
|
uint16 tmp = ZoneID(args[1].c_str());
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
if (zoneserver_list.SetLockedZone(tmp, false)) {
|
if (ZSList::Instance()->SetLockedZone(tmp, false)) {
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
AccountStatus::QuestTroupe,
|
AccountStatus::QuestTroupe,
|
||||||
@@ -834,7 +830,7 @@ void ConsoleWorldShutdown(
|
|||||||
int32 time, interval;
|
int32 time, interval;
|
||||||
if (Strings::IsNumber(args[0]) && Strings::IsNumber(args[1]) && ((time = Strings::ToInt(args[0])) > 0) &&
|
if (Strings::IsNumber(args[0]) && Strings::IsNumber(args[1]) && ((time = Strings::ToInt(args[0])) > 0) &&
|
||||||
((interval = Strings::ToInt(args[1])) > 0)) {
|
((interval = Strings::ToInt(args[1])) > 0)) {
|
||||||
zoneserver_list.WorldShutDown(time, interval);
|
ZSList::Instance()->WorldShutDown(time, interval);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
connection->SendLine("Usage: worldshutdown [now] [disable] ([time] [interval])");
|
connection->SendLine("Usage: worldshutdown [now] [disable] ([time] [interval])");
|
||||||
@@ -842,19 +838,19 @@ void ConsoleWorldShutdown(
|
|||||||
}
|
}
|
||||||
else if (args.size() == 1) {
|
else if (args.size() == 1) {
|
||||||
if (strcasecmp(args[0].c_str(), "now") == 0) {
|
if (strcasecmp(args[0].c_str(), "now") == 0) {
|
||||||
zoneserver_list.WorldShutDown(0, 0);
|
ZSList::Instance()->WorldShutDown(0, 0);
|
||||||
}
|
}
|
||||||
else if (strcasecmp(args[0].c_str(), "disable") == 0) {
|
else if (strcasecmp(args[0].c_str(), "disable") == 0) {
|
||||||
connection->SendLine("[SYSTEM] World shutdown has been aborted.");
|
connection->SendLine("[SYSTEM] World shutdown has been aborted.");
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
Chat::Yellow,
|
Chat::Yellow,
|
||||||
"[SYSTEM] World shutdown has been aborted."
|
"[SYSTEM] World shutdown has been aborted."
|
||||||
);
|
);
|
||||||
zoneserver_list.shutdowntimer->Disable();
|
ZSList::Instance()->shutdowntimer->Disable();
|
||||||
zoneserver_list.reminder->Disable();
|
ZSList::Instance()->reminder->Disable();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
connection->SendLine("Usage: worldshutdown [now] [disable] ([time] [interval])");
|
connection->SendLine("Usage: worldshutdown [now] [disable] ([time] [interval])");
|
||||||
@@ -878,7 +874,7 @@ void ConsoleIpLookup(
|
|||||||
{
|
{
|
||||||
if (!args.empty()) {
|
if (!args.empty()) {
|
||||||
WorldConsoleTCPConnection console_connection(connection);
|
WorldConsoleTCPConnection console_connection(connection);
|
||||||
client_list.SendCLEList(connection->Admin(), nullptr, &console_connection, args[0].c_str());
|
ClientList::Instance()->SendCLEList(connection->Admin(), nullptr, &console_connection, args[0].c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -907,7 +903,7 @@ void ConsoleSignalCharByName(
|
|||||||
CZS->update_identifier = update_identifier;
|
CZS->update_identifier = update_identifier;
|
||||||
CZS->signal_id = Strings::ToInt(args[1]);
|
CZS->signal_id = Strings::ToInt(args[1]);
|
||||||
strn0cpy(CZS->client_name, (char *) args[0].c_str(), 64);
|
strn0cpy(CZS->client_name, (char *) args[0].c_str(), 64);
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -923,7 +919,7 @@ void ConsoleReloadWorld(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
connection->SendLine("Reloading World...");
|
connection->SendLine("Reloading World...");
|
||||||
zoneserver_list.SendServerReload(ServerReload::Type::WorldRepop, nullptr);
|
ZSList::Instance()->SendServerReload(ServerReload::Type::WorldRepop, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto debounce_reload = std::chrono::system_clock::now();
|
auto debounce_reload = std::chrono::system_clock::now();
|
||||||
@@ -960,7 +956,7 @@ void ConsoleReloadZoneQuests(
|
|||||||
auto *hot_reload_quests = (HotReloadQuestsStruct *) pack->pBuffer;
|
auto *hot_reload_quests = (HotReloadQuestsStruct *) pack->pBuffer;
|
||||||
strn0cpy(hot_reload_quests->zone_short_name, (char *) zone_short_name.c_str(), 200);
|
strn0cpy(hot_reload_quests->zone_short_name, (char *) zone_short_name.c_str(), 200);
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1076,7 +1072,7 @@ void ConsoleCrossZoneCastSpell(
|
|||||||
|
|
||||||
strn0cpy(CZS->client_name, name.c_str(), sizeof(CZS->client_name));
|
strn0cpy(CZS->client_name, name.c_str(), sizeof(CZS->client_name));
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
|
|
||||||
connection->SendLine(
|
connection->SendLine(
|
||||||
@@ -1127,7 +1123,7 @@ void ConsoleWorldWideCastSpell(
|
|||||||
WWS->min_status = min_status;
|
WWS->min_status = min_status;
|
||||||
WWS->max_status = max_status;
|
WWS->max_status = max_status;
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
|
|
||||||
connection->SendLine(
|
connection->SendLine(
|
||||||
@@ -1219,7 +1215,7 @@ void ConsoleCrossZoneMove(
|
|||||||
const auto& zone_short_name = !Strings::IsNumber(args[2]) ? args[2] : "";
|
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 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) {
|
if (z && !z->id) {
|
||||||
connection->SendLine(fmt::format("No zone with the short name '{}' exists.", zone_short_name));
|
connection->SendLine(fmt::format("No zone with the short name '{}' exists.", zone_short_name));
|
||||||
@@ -1258,7 +1254,7 @@ void ConsoleCrossZoneMove(
|
|||||||
m->zone_short_name = zone_short_name;
|
m->zone_short_name = zone_short_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
|
|
||||||
connection->SendLine(
|
connection->SendLine(
|
||||||
@@ -1289,7 +1285,7 @@ void ConsoleWorldWideMove(
|
|||||||
const auto& zone_short_name = !Strings::IsNumber(args[2]) ? args[2] : "";
|
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 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) {
|
if (z && !z->id) {
|
||||||
connection->SendLine(fmt::format("No zone with the short name '{}' exists.", zone_short_name));
|
connection->SendLine(fmt::format("No zone with the short name '{}' exists.", zone_short_name));
|
||||||
@@ -1317,7 +1313,7 @@ void ConsoleWorldWideMove(
|
|||||||
|
|
||||||
strn0cpy(WWM->zone_short_name, zone_short_name.c_str(), sizeof(WWM->zone_short_name));
|
strn0cpy(WWM->zone_short_name, zone_short_name.c_str(), sizeof(WWM->zone_short_name));
|
||||||
|
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
|
|
||||||
connection->SendLine(
|
connection->SendLine(
|
||||||
@@ -1330,6 +1326,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));
|
||||||
|
|
||||||
|
ZSList::Instance()->SendPacket(pack);
|
||||||
|
safe_delete(pack);
|
||||||
|
|
||||||
|
connection->SendLine(fmt::format("Sent world marquee type {}: {}", type, message));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param console
|
* @param console
|
||||||
@@ -1367,6 +1399,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("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("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("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("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("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));
|
console->RegisterCall("zonelock", 150, "zonelock [list|lock|unlock] [zone_short_name]", std::bind(ConsoleZoneLock, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
|
||||||
|
|||||||
+10
-13
@@ -8,9 +8,6 @@
|
|||||||
#include "../common/eqemu_logsys.h"
|
#include "../common/eqemu_logsys.h"
|
||||||
#include "../common/repositories/instance_list_repository.h"
|
#include "../common/repositories/instance_list_repository.h"
|
||||||
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
|
|
||||||
Database& DynamicZone::GetDatabase()
|
Database& DynamicZone::GetDatabase()
|
||||||
{
|
{
|
||||||
return database;
|
return database;
|
||||||
@@ -18,7 +15,7 @@ Database& DynamicZone::GetDatabase()
|
|||||||
|
|
||||||
bool DynamicZone::SendServerPacket(ServerPacket* packet)
|
bool DynamicZone::SendServerPacket(ServerPacket* packet)
|
||||||
{
|
{
|
||||||
return zoneserver_list.SendPacket(packet);
|
return ZSList::Instance()->SendPacket(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
DynamicZone* DynamicZone::FindDynamicZoneByID(uint32_t dz_id)
|
DynamicZone* DynamicZone::FindDynamicZoneByID(uint32_t dz_id)
|
||||||
@@ -41,7 +38,7 @@ void DynamicZone::ChooseNewLeader()
|
|||||||
|
|
||||||
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
|
auto it = std::find_if(m_members.begin(), m_members.end(), [&](const DynamicZoneMember& member) {
|
||||||
if (member.id != GetLeaderID() && member.IsOnline()) {
|
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 (member_cle && member_cle->GetOnline() == CLE_Status::InZone);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -91,7 +88,7 @@ DynamicZoneStatus DynamicZone::Process()
|
|||||||
{
|
{
|
||||||
status = DynamicZoneStatus::Expired;
|
status = DynamicZoneStatus::Expired;
|
||||||
|
|
||||||
auto dz_zoneserver = zoneserver_list.FindByInstanceID(GetInstanceID());
|
auto dz_zoneserver = ZSList::Instance()->FindByInstanceID(GetInstanceID());
|
||||||
if (!dz_zoneserver || dz_zoneserver->NumPlayers() == 0) // no clients inside dz
|
if (!dz_zoneserver || dz_zoneserver->NumPlayers() == 0) // no clients inside dz
|
||||||
{
|
{
|
||||||
status = DynamicZoneStatus::ExpiredEmpty;
|
status = DynamicZoneStatus::ExpiredEmpty;
|
||||||
@@ -119,7 +116,7 @@ void DynamicZone::SendZonesDynamicZoneDeleted()
|
|||||||
auto pack = std::make_unique<ServerPacket>(ServerOP_DzDeleted, pack_size);
|
auto pack = std::make_unique<ServerPacket>(ServerOP_DzDeleted, pack_size);
|
||||||
auto buf = reinterpret_cast<ServerDzID_Struct*>(pack->pBuffer);
|
auto buf = reinterpret_cast<ServerDzID_Struct*>(pack->pBuffer);
|
||||||
buf->dz_id = GetID();
|
buf->dz_id = GetID();
|
||||||
zoneserver_list.SendPacket(pack.get());
|
ZSList::Instance()->SendPacket(pack.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicZone::SetSecondsRemaining(uint32_t seconds_remaining)
|
void DynamicZone::SetSecondsRemaining(uint32_t seconds_remaining)
|
||||||
@@ -154,7 +151,7 @@ void DynamicZone::SendZonesDurationUpdate()
|
|||||||
auto packbuf = reinterpret_cast<ServerDzSetDuration_Struct*>(pack->pBuffer);
|
auto packbuf = reinterpret_cast<ServerDzSetDuration_Struct*>(pack->pBuffer);
|
||||||
packbuf->dz_id = GetID();
|
packbuf->dz_id = GetID();
|
||||||
packbuf->seconds = static_cast<uint32_t>(m_duration.count());
|
packbuf->seconds = static_cast<uint32_t>(m_duration.count());
|
||||||
zoneserver_list.SendPacket(pack.get());
|
ZSList::Instance()->SendPacket(pack.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicZone::SendZonesLeaderChanged()
|
void DynamicZone::SendZonesLeaderChanged()
|
||||||
@@ -164,7 +161,7 @@ void DynamicZone::SendZonesLeaderChanged()
|
|||||||
auto buf = reinterpret_cast<ServerDzLeaderID_Struct*>(pack->pBuffer);
|
auto buf = reinterpret_cast<ServerDzLeaderID_Struct*>(pack->pBuffer);
|
||||||
buf->dz_id = GetID();
|
buf->dz_id = GetID();
|
||||||
buf->leader_id = GetLeaderID();
|
buf->leader_id = GetLeaderID();
|
||||||
zoneserver_list.SendPacket(pack.get());
|
ZSList::Instance()->SendPacket(pack.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicZone::ProcessMemberAddRemove(const DynamicZoneMember& member, bool removed)
|
void DynamicZone::ProcessMemberAddRemove(const DynamicZoneMember& member, bool removed)
|
||||||
@@ -198,7 +195,7 @@ void DynamicZone::SendZonesExpireWarning(uint32_t minutes_remaining)
|
|||||||
auto buf = reinterpret_cast<ServerDzExpireWarning_Struct*>(pack->pBuffer);
|
auto buf = reinterpret_cast<ServerDzExpireWarning_Struct*>(pack->pBuffer);
|
||||||
buf->dz_id = GetID();
|
buf->dz_id = GetID();
|
||||||
buf->minutes_remaining = minutes_remaining;
|
buf->minutes_remaining = minutes_remaining;
|
||||||
zoneserver_list.SendPacket(pack.get());
|
ZSList::Instance()->SendPacket(pack.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicZone::SendZoneMemberStatuses(uint16_t zone_id, uint16_t instance_id)
|
void DynamicZone::SendZoneMemberStatuses(uint16_t zone_id, uint16_t instance_id)
|
||||||
@@ -217,7 +214,7 @@ void DynamicZone::SendZoneMemberStatuses(uint16_t zone_id, uint16_t instance_id)
|
|||||||
buf->entries[i].online_status = static_cast<uint8_t>(m_members[i].status);
|
buf->entries[i].online_status = static_cast<uint8_t>(m_members[i].status);
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneserver_list.SendPacket(zone_id, instance_id, pack.get());
|
ZSList::Instance()->SendPacket(zone_id, instance_id, pack.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicZone::CacheMemberStatuses()
|
void DynamicZone::CacheMemberStatuses()
|
||||||
@@ -230,8 +227,8 @@ void DynamicZone::CacheMemberStatuses()
|
|||||||
// called when a new dz is cached to fill member statuses
|
// called when a new dz is cached to fill member statuses
|
||||||
std::string zone_name;
|
std::string zone_name;
|
||||||
std::vector<ClientListEntry*> all_clients;
|
std::vector<ClientListEntry*> all_clients;
|
||||||
all_clients.reserve(client_list.GetClientCount());
|
all_clients.reserve(ClientList::Instance()->GetClientCount());
|
||||||
client_list.GetClients(zone_name.c_str(), all_clients);
|
ClientList::Instance()->GetClients(zone_name.c_str(), all_clients);
|
||||||
|
|
||||||
for (const auto& member : m_members)
|
for (const auto& member : m_members)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,9 +9,6 @@
|
|||||||
#include "../common/repositories/dynamic_zone_lockouts_repository.h"
|
#include "../common/repositories/dynamic_zone_lockouts_repository.h"
|
||||||
#include <cereal/types/utility.hpp>
|
#include <cereal/types/utility.hpp>
|
||||||
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
|
|
||||||
DynamicZoneManager dynamic_zone_manager;
|
DynamicZoneManager dynamic_zone_manager;
|
||||||
|
|
||||||
DynamicZoneManager::DynamicZoneManager() :
|
DynamicZoneManager::DynamicZoneManager() :
|
||||||
@@ -56,7 +53,7 @@ DynamicZone* DynamicZoneManager::TryCreate(DynamicZone& dz_request, const std::v
|
|||||||
LogDynamicZones("Created new dz [{}] for zone [{}]", dz_id, dz_request.GetZoneID());
|
LogDynamicZones("Created new dz [{}] for zone [{}]", dz_id, dz_request.GetZoneID());
|
||||||
|
|
||||||
auto pack = dz->CreateServerPacket(0, 0);
|
auto pack = dz->CreateServerPacket(0, 0);
|
||||||
zoneserver_list.SendPacket(pack.get());
|
ZSList::Instance()->SendPacket(pack.get());
|
||||||
|
|
||||||
auto inserted = dynamic_zone_cache.emplace(dz_id, std::move(dz));
|
auto inserted = dynamic_zone_cache.emplace(dz_id, std::move(dz));
|
||||||
return inserted.first->second.get();
|
return inserted.first->second.get();
|
||||||
@@ -76,7 +73,7 @@ void DynamicZoneManager::CacheNewDynamicZone(ServerPacket* pack)
|
|||||||
dynamic_zone_cache.emplace(buf->dz_id, std::move(new_dz));
|
dynamic_zone_cache.emplace(buf->dz_id, std::move(new_dz));
|
||||||
LogDynamicZones("Cached new dynamic zone [{}]", buf->dz_id);
|
LogDynamicZones("Cached new dynamic zone [{}]", buf->dz_id);
|
||||||
|
|
||||||
zoneserver_list.SendPacket(repack.get());
|
ZSList::Instance()->SendPacket(repack.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicZoneManager::CacheAllFromDatabase()
|
void DynamicZoneManager::CacheAllFromDatabase()
|
||||||
@@ -194,7 +191,7 @@ void DynamicZoneManager::SendBulkMemberStatuses(uint32_t zone_id, uint16_t inst_
|
|||||||
buf->cereal_size = static_cast<uint32_t>(sv.size());
|
buf->cereal_size = static_cast<uint32_t>(sv.size());
|
||||||
memcpy(buf->cereal_data, sv.data(), sv.size());
|
memcpy(buf->cereal_data, sv.data(), sv.size());
|
||||||
|
|
||||||
zoneserver_list.SendPacket(zone_id, inst_id, &pack);
|
ZSList::Instance()->SendPacket(zone_id, inst_id, &pack);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
||||||
@@ -210,7 +207,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
{
|
{
|
||||||
auto buf = reinterpret_cast<ServerDzCommand_Struct*>(pack->pBuffer);
|
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())
|
if (cle && cle->Server())
|
||||||
{
|
{
|
||||||
// continue in the add target's zone
|
// continue in the add target's zone
|
||||||
@@ -220,7 +217,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// add target not online, return to inviter
|
// 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())
|
if (inviter_cle && inviter_cle->Server())
|
||||||
{
|
{
|
||||||
inviter_cle->Server()->SendPacket(pack);
|
inviter_cle->Server()->SendPacket(pack);
|
||||||
@@ -231,7 +228,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
case ServerOP_DzSaveInvite:
|
case ServerOP_DzSaveInvite:
|
||||||
{
|
{
|
||||||
auto buf = reinterpret_cast<ServerDzCommand_Struct*>(pack->pBuffer);
|
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
|
// store packet on cle and re-send it when client requests it
|
||||||
buf->is_char_online = true;
|
buf->is_char_online = true;
|
||||||
@@ -243,7 +240,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
case ServerOP_DzRequestInvite:
|
case ServerOP_DzRequestInvite:
|
||||||
{
|
{
|
||||||
auto buf = reinterpret_cast<ServerCharacterID_Struct*>(pack->pBuffer);
|
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();
|
auto invite_pack = cle->GetPendingDzInvite();
|
||||||
if (invite_pack && cle->Server())
|
if (invite_pack && cle->Server())
|
||||||
@@ -259,7 +256,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
|
|
||||||
// notify requester (old leader) and new leader of the result
|
// notify requester (old leader) and new leader of the result
|
||||||
ZoneServer* new_leader_zs = nullptr;
|
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())
|
if (leader_cle && leader_cle->Server())
|
||||||
{
|
{
|
||||||
auto dz = DynamicZone::FindDynamicZoneByID(buf->dz_id);
|
auto dz = DynamicZone::FindDynamicZoneByID(buf->dz_id);
|
||||||
@@ -274,7 +271,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// if old and new leader are in the same zone only send one message
|
// 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)
|
if (requester_cle && requester_cle->Server() && requester_cle->Server() != new_leader_zs)
|
||||||
{
|
{
|
||||||
requester_cle->Server()->SendPacket(pack);
|
requester_cle->Server()->SendPacket(pack);
|
||||||
@@ -301,7 +298,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
dz->SetZoneInLocation(buf->x, buf->y, buf->z, buf->heading, false);
|
dz->SetZoneInLocation(buf->x, buf->y, buf->z, buf->heading, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DzSetSwitchID:
|
case ServerOP_DzSetSwitchID:
|
||||||
@@ -311,7 +308,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
{
|
{
|
||||||
dz->ProcessSetSwitchID(buf->dz_switch_id);
|
dz->ProcessSetSwitchID(buf->dz_switch_id);
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DzAddRemoveMember:
|
case ServerOP_DzAddRemoveMember:
|
||||||
@@ -322,7 +319,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
auto status = static_cast<DynamicZoneMemberStatus>(buf->character_status);
|
auto status = static_cast<DynamicZoneMemberStatus>(buf->character_status);
|
||||||
dz->ProcessMemberAddRemove({ buf->character_id, buf->character_name, status }, buf->removed);
|
dz->ProcessMemberAddRemove({ buf->character_id, buf->character_name, status }, buf->removed);
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DzSwapMembers:
|
case ServerOP_DzSwapMembers:
|
||||||
@@ -335,7 +332,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
dz->ProcessMemberAddRemove({ buf->add_character_id, buf->add_character_name, status }, false);
|
dz->ProcessMemberAddRemove({ buf->add_character_id, buf->add_character_name, status }, false);
|
||||||
dz->ProcessMemberAddRemove({ buf->remove_character_id, buf->remove_character_name }, true);
|
dz->ProcessMemberAddRemove({ buf->remove_character_id, buf->remove_character_name }, true);
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DzRemoveAllMembers:
|
case ServerOP_DzRemoveAllMembers:
|
||||||
@@ -345,7 +342,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
{
|
{
|
||||||
dz->ProcessRemoveAllMembers();
|
dz->ProcessRemoveAllMembers();
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DzSetSecondsRemaining:
|
case ServerOP_DzSetSecondsRemaining:
|
||||||
@@ -383,7 +380,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
auto status = static_cast<DynamicZoneMemberStatus>(buf->status);
|
auto status = static_cast<DynamicZoneMemberStatus>(buf->status);
|
||||||
dz->ProcessMemberStatusChange(buf->character_id, status);
|
dz->ProcessMemberStatusChange(buf->character_id, status);
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DzMovePC:
|
case ServerOP_DzMovePC:
|
||||||
@@ -392,7 +389,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
auto dz = DynamicZone::FindDynamicZoneByID(buf->dz_id);
|
auto dz = DynamicZone::FindDynamicZoneByID(buf->dz_id);
|
||||||
if (dz && dz->HasMember(buf->character_id))
|
if (dz && dz->HasMember(buf->character_id))
|
||||||
{
|
{
|
||||||
zoneserver_list.SendPacket(buf->sender_zone_id, buf->sender_instance_id, pack);
|
ZSList::Instance()->SendPacket(buf->sender_zone_id, buf->sender_instance_id, pack);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -403,7 +400,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
{
|
{
|
||||||
dz->SetLocked(buf->lock);
|
dz->SetLocked(buf->lock);
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DzReplayOnJoin:
|
case ServerOP_DzReplayOnJoin:
|
||||||
@@ -413,7 +410,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
{
|
{
|
||||||
dz->SetReplayOnJoin(buf->enabled);
|
dz->SetReplayOnJoin(buf->enabled);
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DzLockout:
|
case ServerOP_DzLockout:
|
||||||
@@ -424,7 +421,7 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
DzLockout lockout{ dz->GetUUID(), dz->GetName(), buf->event_name, buf->expire_time, buf->duration };
|
DzLockout lockout{ dz->GetUUID(), dz->GetName(), buf->event_name, buf->expire_time, buf->duration };
|
||||||
dz->HandleLockoutUpdate(lockout, buf->remove, buf->members_only);
|
dz->HandleLockoutUpdate(lockout, buf->remove, buf->members_only);
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DzLockoutDuration:
|
case ServerOP_DzLockoutDuration:
|
||||||
@@ -435,13 +432,13 @@ void DynamicZoneManager::HandleZoneMessage(ServerPacket* pack)
|
|||||||
DzLockout lockout{ dz->GetUUID(), dz->GetName(), buf->event_name, buf->expire_time, buf->duration };
|
DzLockout lockout{ dz->GetUUID(), dz->GetName(), buf->event_name, buf->expire_time, buf->duration };
|
||||||
dz->HandleLockoutDuration(lockout, buf->seconds, buf->members_only, false);
|
dz->HandleLockoutDuration(lockout, buf->seconds, buf->members_only, false);
|
||||||
}
|
}
|
||||||
zoneserver_list.SendPacket(pack);
|
ZSList::Instance()->SendPacket(pack);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ServerOP_DzCharacterLockout:
|
case ServerOP_DzCharacterLockout:
|
||||||
{
|
{
|
||||||
auto buf = reinterpret_cast<ServerDzCharacterLockout_Struct*>(pack->pBuffer);
|
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())
|
if (cle && cle->Server())
|
||||||
{
|
{
|
||||||
cle->Server()->SendPacket(pack);
|
cle->Server()->SendPacket(pack);
|
||||||
|
|||||||
@@ -13,15 +13,11 @@
|
|||||||
#include "ucs.h"
|
#include "ucs.h"
|
||||||
#include "queryserv.h"
|
#include "queryserv.h"
|
||||||
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern WorldGuildManager guild_mgr;
|
extern WorldGuildManager guild_mgr;
|
||||||
extern UCSConnection UCSLink;
|
|
||||||
extern QueryServConnection QSLink;
|
|
||||||
|
|
||||||
void callGetZoneList(Json::Value &response)
|
void callGetZoneList(Json::Value &response)
|
||||||
{
|
{
|
||||||
for (auto &zone: zoneserver_list.getZoneServerList()) {
|
for (auto &zone: ZSList::Instance()->getZoneServerList()) {
|
||||||
Json::Value row;
|
Json::Value row;
|
||||||
|
|
||||||
if (!zone) {
|
if (!zone) {
|
||||||
@@ -125,7 +121,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)
|
void getReloadTypes(Json::Value &response)
|
||||||
@@ -141,8 +137,8 @@ void getReloadTypes(Json::Value &response)
|
|||||||
|
|
||||||
void getServerCounts(Json::Value &response, const std::vector<std::string> &args)
|
void getServerCounts(Json::Value &response, const std::vector<std::string> &args)
|
||||||
{
|
{
|
||||||
response["zone_count"] = zoneserver_list.GetServerListCount();
|
response["zone_count"] = ZSList::Instance()->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)
|
void EQEmuApiWorldDataService::reload(Json::Value &r, const std::vector<std::string> &args)
|
||||||
@@ -167,7 +163,7 @@ void EQEmuApiWorldDataService::reload(Json::Value &r, const std::vector<std::str
|
|||||||
if (std::to_string(t) == command || Strings::ToLower(ServerReload::GetName(t)) == command) {
|
if (std::to_string(t) == command || Strings::ToLower(ServerReload::GetName(t)) == command) {
|
||||||
message(r, fmt::format("Reloading [{}] globally", ServerReload::GetName(t)));
|
message(r, fmt::format("Reloading [{}] globally", ServerReload::GetName(t)));
|
||||||
LogInfo("Queueing reload of type [{}] to zones", ServerReload::GetName(t));
|
LogInfo("Queueing reload of type [{}] to zones", ServerReload::GetName(t));
|
||||||
zoneserver_list.QueueServerReload(t);
|
ZSList::Instance()->QueueServerReload(t);
|
||||||
}
|
}
|
||||||
found_command = true;
|
found_command = true;
|
||||||
}
|
}
|
||||||
@@ -259,7 +255,7 @@ void EQEmuApiWorldDataService::callGetGuildDetails(Json::Value &response, const
|
|||||||
row["tribute"]["time_remaining"] = guild->tribute.time_remaining;
|
row["tribute"]["time_remaining"] = guild->tribute.time_remaining;
|
||||||
row["tribute"]["enabled"] = guild->tribute.enabled;
|
row["tribute"]["enabled"] = guild->tribute.enabled;
|
||||||
|
|
||||||
client_list.GetGuildClientList(response, guild_id);
|
ClientList::Instance()->GetGuildClientList(response, guild_id);
|
||||||
|
|
||||||
response.append(row);
|
response.append(row);
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-18
@@ -45,10 +45,7 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern uint32 numzones;
|
extern uint32 numzones;
|
||||||
extern LoginServerList loginserverlist;
|
|
||||||
extern LauncherList launcher_list;
|
extern LauncherList launcher_list;
|
||||||
extern volatile bool RunLoops;
|
extern volatile bool RunLoops;
|
||||||
|
|
||||||
@@ -86,15 +83,15 @@ const std::string &EQW::GetOutput() const {
|
|||||||
|
|
||||||
void EQW::LockWorld() {
|
void EQW::LockWorld() {
|
||||||
WorldConfig::LockWorld();
|
WorldConfig::LockWorld();
|
||||||
if (loginserverlist.Connected()) {
|
if (LoginServerList::Instance()->Connected()) {
|
||||||
loginserverlist.SendStatus();
|
LoginServerList::Instance()->SendStatus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EQW::UnlockWorld() {
|
void EQW::UnlockWorld() {
|
||||||
WorldConfig::UnlockWorld();
|
WorldConfig::UnlockWorld();
|
||||||
if (loginserverlist.Connected()) {
|
if (LoginServerList::Instance()->Connected()) {
|
||||||
loginserverlist.SendStatus();
|
LoginServerList::Instance()->SendStatus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,11 +101,11 @@ Const_char *EQW::GetConfig(Const_char *var_name) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool EQW::LSConnected() {
|
bool EQW::LSConnected() {
|
||||||
return(loginserverlist.Connected());
|
return(LoginServerList::Instance()->Connected());
|
||||||
}
|
}
|
||||||
|
|
||||||
int EQW::CountZones() {
|
int EQW::CountZones() {
|
||||||
return(zoneserver_list.GetZoneCount());
|
return(ZSList::Instance()->GetZoneCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
//returns an array of zone_refs (opaque)
|
//returns an array of zone_refs (opaque)
|
||||||
@@ -116,7 +113,7 @@ std::vector<std::string> EQW::ListBootedZones() {
|
|||||||
std::vector<std::string> res;
|
std::vector<std::string> res;
|
||||||
|
|
||||||
std::vector<uint32> zones;
|
std::vector<uint32> zones;
|
||||||
zoneserver_list.GetZoneIDList(zones);
|
ZSList::Instance()->GetZoneIDList(zones);
|
||||||
|
|
||||||
std::vector<uint32>::iterator cur, end;
|
std::vector<uint32>::iterator cur, end;
|
||||||
cur = zones.begin();
|
cur = zones.begin();
|
||||||
@@ -131,7 +128,7 @@ std::vector<std::string> EQW::ListBootedZones() {
|
|||||||
std::map<std::string,std::string> EQW::GetZoneDetails(Const_char *zone_ref) {
|
std::map<std::string,std::string> EQW::GetZoneDetails(Const_char *zone_ref) {
|
||||||
std::map<std::string,std::string> res;
|
std::map<std::string,std::string> res;
|
||||||
|
|
||||||
ZoneServer *zs = zoneserver_list.FindByID(Strings::ToInt(zone_ref));
|
ZoneServer *zs = ZSList::Instance()->FindByID(Strings::ToInt(zone_ref));
|
||||||
if(zs == nullptr) {
|
if(zs == nullptr) {
|
||||||
res["error"] = "Invalid zone.";
|
res["error"] = "Invalid zone.";
|
||||||
return(res);
|
return(res);
|
||||||
@@ -158,7 +155,7 @@ std::map<std::string,std::string> EQW::GetZoneDetails(Const_char *zone_ref) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int EQW::CountPlayers() {
|
int EQW::CountPlayers() {
|
||||||
return(client_list.GetClientCount());
|
return(ClientList::Instance()->GetClientCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
//returns an array of character names in the zone (empty=all zones)
|
//returns an array of character names in the zone (empty=all zones)
|
||||||
@@ -166,7 +163,7 @@ std::vector<std::string> EQW::ListPlayers(Const_char *zone_name) {
|
|||||||
std::vector<std::string> res;
|
std::vector<std::string> res;
|
||||||
|
|
||||||
std::vector<ClientListEntry *> list;
|
std::vector<ClientListEntry *> list;
|
||||||
client_list.GetClients(zone_name, list);
|
ClientList::Instance()->GetClients(zone_name, list);
|
||||||
|
|
||||||
std::vector<ClientListEntry *>::iterator cur, end;
|
std::vector<ClientListEntry *>::iterator cur, end;
|
||||||
cur = list.begin();
|
cur = list.begin();
|
||||||
@@ -180,7 +177,7 @@ std::vector<std::string> EQW::ListPlayers(Const_char *zone_name) {
|
|||||||
std::map<std::string,std::string> EQW::GetPlayerDetails(Const_char *char_name) {
|
std::map<std::string,std::string> EQW::GetPlayerDetails(Const_char *char_name) {
|
||||||
std::map<std::string,std::string> res;
|
std::map<std::string,std::string> res;
|
||||||
|
|
||||||
ClientListEntry *cle = client_list.FindCharacter(char_name);
|
ClientListEntry *cle = ClientList::Instance()->FindCharacter(char_name);
|
||||||
if(cle == nullptr) {
|
if(cle == nullptr) {
|
||||||
res["error"] = "1";
|
res["error"] = "1";
|
||||||
return(res);
|
return(res);
|
||||||
@@ -265,7 +262,7 @@ void EQW::CreateLauncher(Const_char *launcher_name, int dynamic_count) {
|
|||||||
uint32 EQW::CreateGuild(const char* name, uint32 leader_char_id) {
|
uint32 EQW::CreateGuild(const char* name, uint32 leader_char_id) {
|
||||||
uint32 id = guild_mgr.CreateGuild(name, leader_char_id);
|
uint32 id = guild_mgr.CreateGuild(name, leader_char_id);
|
||||||
if(id != GUILD_NONE)
|
if(id != GUILD_NONE)
|
||||||
client_list.UpdateClientGuild(leader_char_id, id);
|
ClientList::Instance()->UpdateClientGuild(leader_char_id, id);
|
||||||
return(id);
|
return(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -286,7 +283,7 @@ bool EQW::SetGuildLeader(uint32 guild_id, uint32 leader_char_id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool EQW::SetGuild(uint32 charid, uint32 guild_id, uint8 rank) {
|
bool EQW::SetGuild(uint32 charid, uint32 guild_id, uint8 rank) {
|
||||||
client_list.UpdateClientGuild(charid, guild_id);
|
ClientList::Instance()->UpdateClientGuild(charid, guild_id);
|
||||||
return(guild_mgr.SetGuild(charid, guild_id, rank));
|
return(guild_mgr.SetGuild(charid, guild_id, rank));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,7 +358,7 @@ void EQW::ResolveBug(const char *id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EQW::SendMessage(uint32 type, const char *msg) {
|
void EQW::SendMessage(uint32 type, const char *msg) {
|
||||||
zoneserver_list.SendEmoteMessage(
|
ZSList::Instance()->SendEmoteMessage(
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -371,7 +368,7 @@ void EQW::SendMessage(uint32 type, const char *msg) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EQW::WorldShutDown(uint32 time, uint32 interval) {
|
void EQW::WorldShutDown(uint32 time, uint32 interval) {
|
||||||
zoneserver_list.WorldShutDown(time, interval);
|
ZSList::Instance()->WorldShutDown(time, interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //EMBPERL
|
#endif //EMBPERL
|
||||||
|
|||||||
+4
-7
@@ -25,9 +25,6 @@
|
|||||||
#include "../common/misc_functions.h"
|
#include "../common/misc_functions.h"
|
||||||
#include "../common/classes.h"
|
#include "../common/classes.h"
|
||||||
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
|
|
||||||
GroupLFP::GroupLFP(uint32 inLeaderID) {
|
GroupLFP::GroupLFP(uint32 inLeaderID) {
|
||||||
|
|
||||||
LeaderID = inLeaderID;
|
LeaderID = inLeaderID;
|
||||||
@@ -69,7 +66,7 @@ void GroupLFP::SetDetails(ServerLFPUpdate_Struct *Update) {
|
|||||||
}
|
}
|
||||||
// Otherwise try and find the information ourselves.
|
// Otherwise try and find the information ourselves.
|
||||||
else {
|
else {
|
||||||
CLE = client_list.FindCharacter(Members[i].Name);
|
CLE = ClientList::Instance()->FindCharacter(Members[i].Name);
|
||||||
if(CLE) {
|
if(CLE) {
|
||||||
Members[i].Class = CLE->class_();
|
Members[i].Class = CLE->class_();
|
||||||
Members[i].Level = CLE->level();
|
Members[i].Level = CLE->level();
|
||||||
@@ -125,7 +122,7 @@ void GroupLFPList::Process() {
|
|||||||
if(GroupMembers[i].Name[0] == '\0')
|
if(GroupMembers[i].Name[0] == '\0')
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ClientListEntry *CLE = client_list.FindCharacter(GroupMembers[i].Name);
|
ClientListEntry *CLE = ClientList::Instance()->FindCharacter(GroupMembers[i].Name);
|
||||||
if(!CLE) {
|
if(!CLE) {
|
||||||
// The first member entry is always the person who posted the LFP group, either
|
// The first member entry is always the person who posted the LFP group, either
|
||||||
// a single ungrouped player, or the leader of the group. If (s)he is gone, remove
|
// a single ungrouped player, or the leader of the group. If (s)he is gone, remove
|
||||||
@@ -264,13 +261,13 @@ void GroupLFPList::SendLFPMatches(ServerLFPMatchesRequest_Struct* smrs) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ClientListEntry* CLE = client_list.FindCharacter(smrs->FromName);
|
ClientListEntry* CLE = ClientList::Instance()->FindCharacter(smrs->FromName);
|
||||||
if (CLE != nullptr) {
|
if (CLE != nullptr) {
|
||||||
if (CLE->Server() != nullptr)
|
if (CLE->Server() != nullptr)
|
||||||
CLE->Server()->SendPacket(Pack);
|
CLE->Server()->SendPacket(Pack);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ZoneServer* zs = zoneserver_list.FindByName(smrs->FromName);
|
ZoneServer* zs = ZSList::Instance()->FindByName(smrs->FromName);
|
||||||
if (zs != nullptr)
|
if (zs != nullptr)
|
||||||
zs->SendPacket(Pack);
|
zs->SendPacket(Pack);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,8 +20,6 @@
|
|||||||
#include "cliententry.h"
|
#include "cliententry.h"
|
||||||
#include "world_config.h"
|
#include "world_config.h"
|
||||||
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern uint32 numzones;
|
extern uint32 numzones;
|
||||||
extern uint32 numplayers;
|
extern uint32 numplayers;
|
||||||
extern volatile bool RunLoops;
|
extern volatile bool RunLoops;
|
||||||
@@ -108,7 +106,7 @@ void LoginServer::ProcessUsertoWorldReqLeg(uint16_t opcode, EQ::Net::Packet &p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (RuleB(World, EnforceCharacterLimitAtLogin)) {
|
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);
|
LogDebug("User already online account_id [{0}]", utwr->lsaccountid);
|
||||||
utwrs->response = UserToWorldStatusAlreadyOnline;
|
utwrs->response = UserToWorldStatusAlreadyOnline;
|
||||||
SendPacket(&outpack);
|
SendPacket(&outpack);
|
||||||
@@ -189,7 +187,7 @@ void LoginServer::ProcessUsertoWorldReq(uint16_t opcode, EQ::Net::Packet &p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (RuleB(World, EnforceCharacterLimitAtLogin)) {
|
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);
|
LogDebug("User already online account_id [{0}]", utwr->lsaccountid);
|
||||||
utwrs->response = UserToWorldStatusAlreadyOnline;
|
utwrs->response = UserToWorldStatusAlreadyOnline;
|
||||||
SendPacket(&outpack);
|
SendPacket(&outpack);
|
||||||
@@ -221,7 +219,7 @@ void LoginServer::ProcessLSClientAuthLegacy(uint16_t opcode, EQ::Net::Packet &p)
|
|||||||
r.is_client_from_local_network
|
r.is_client_from_local_network
|
||||||
);
|
);
|
||||||
|
|
||||||
client_list.CLEAdd(
|
ClientList::Instance()->CLEAdd(
|
||||||
r.loginserver_account_id,
|
r.loginserver_account_id,
|
||||||
"eqemu",
|
"eqemu",
|
||||||
r.loginserver_account_name,
|
r.loginserver_account_name,
|
||||||
@@ -256,7 +254,7 @@ void LoginServer::ProcessLSClientAuth(uint16_t opcode, EQ::Net::Packet &p)
|
|||||||
r.is_client_from_local_network
|
r.is_client_from_local_network
|
||||||
);
|
);
|
||||||
|
|
||||||
client_list.CLEAdd(
|
ClientList::Instance()->CLEAdd(
|
||||||
r.loginserver_account_id,
|
r.loginserver_account_id,
|
||||||
r.loginserver_name,
|
r.loginserver_name,
|
||||||
r.account_name,
|
r.account_name,
|
||||||
@@ -312,7 +310,7 @@ void LoginServer::ProcessSystemwideMessage(uint16_t opcode, EQ::Net::Packet &p)
|
|||||||
LogNetcode("Received ServerPacket from LS OpCode {:#04x}", opcode);
|
LogNetcode("Received ServerPacket from LS OpCode {:#04x}", opcode);
|
||||||
|
|
||||||
ServerSystemwideMessage *swm = (ServerSystemwideMessage *) p.Data();
|
ServerSystemwideMessage *swm = (ServerSystemwideMessage *) p.Data();
|
||||||
zoneserver_list.SendEmoteMessageRaw(
|
ZSList::Instance()->SendEmoteMessageRaw(
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
AccountStatus::Player,
|
AccountStatus::Player,
|
||||||
@@ -376,7 +374,7 @@ bool LoginServer::Connect()
|
|||||||
|
|
||||||
SendInfo();
|
SendInfo();
|
||||||
SendStatus();
|
SendStatus();
|
||||||
zoneserver_list.SendLSZones();
|
ZSList::Instance()->SendLSZones();
|
||||||
|
|
||||||
m_statusupdate_timer = std::make_unique<EQ::Timer>(
|
m_statusupdate_timer = std::make_unique<EQ::Timer>(
|
||||||
LoginServer_StatusUpdateInterval, true, [this](EQ::Timer *t) {
|
LoginServer_StatusUpdateInterval, true, [this](EQ::Timer *t) {
|
||||||
@@ -485,7 +483,7 @@ bool LoginServer::Connect()
|
|||||||
);
|
);
|
||||||
SendInfo();
|
SendInfo();
|
||||||
SendStatus();
|
SendStatus();
|
||||||
zoneserver_list.SendLSZones();
|
ZSList::Instance()->SendLSZones();
|
||||||
|
|
||||||
m_statusupdate_timer = std::make_unique<EQ::Timer>(
|
m_statusupdate_timer = std::make_unique<EQ::Timer>(
|
||||||
LoginServer_StatusUpdateInterval, true, [this](EQ::Timer *t) {
|
LoginServer_StatusUpdateInterval, true, [this](EQ::Timer *t) {
|
||||||
|
|||||||
@@ -36,9 +36,6 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
#include "clientlist.h"
|
#include "clientlist.h"
|
||||||
#include "world_config.h"
|
#include "world_config.h"
|
||||||
|
|
||||||
extern ZSList zoneserver_list;
|
|
||||||
extern LoginServerList loginserverlist;
|
|
||||||
extern ClientList client_list;
|
|
||||||
extern uint32 numzones;
|
extern uint32 numzones;
|
||||||
extern uint32 numplayers;
|
extern uint32 numplayers;
|
||||||
extern volatile bool RunLoops;
|
extern volatile bool RunLoops;
|
||||||
|
|||||||
@@ -21,6 +21,13 @@ public:
|
|||||||
bool SendAccountUpdate(ServerPacket *pack);
|
bool SendAccountUpdate(ServerPacket *pack);
|
||||||
bool Connected();
|
bool Connected();
|
||||||
size_t GetServerCount() const { return m_list.size(); }
|
size_t GetServerCount() const { return m_list.size(); }
|
||||||
|
|
||||||
|
static LoginServerList* Instance()
|
||||||
|
{
|
||||||
|
static LoginServerList instance;
|
||||||
|
return &instance;
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::list<std::unique_ptr<LoginServer>> m_list;
|
std::list<std::unique_ptr<LoginServer>> m_list;
|
||||||
};
|
};
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user