[Commands] #reload Command Overhaul. (#2162)

* [Commands] #reload Command Overhaul.
- Consolidated #reloadaa, #reloadallrules, #reloadcontentflags, #reloademote, #reloadlevelmods, #reloadmerchants, #reloadperlexportsettings, #reloadqst, #reloadstatic, #reloadtitles, #relaodtraps, #reloadworld, and #reloadzps in to one command.
- #reload has 15 different sub commands you may use, including Log Settings and Tasks reloading.
- All the reload commands are a part of the Developer Tools Menu messages now, as well as part of the documentation.
- Fixes the commands that weren't actually sending their packet to zone server to globally reload stuff.
- Added Variables table reloading to command.

* Consistency.

* Hot reload.

* Final big push.
This commit is contained in:
Kinglykrab
2022-05-10 06:19:07 -04:00
committed by GitHub
parent 209b0eb273
commit d120cf8a40
29 changed files with 1083 additions and 525 deletions
+104 -47
View File
@@ -1894,17 +1894,43 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
break;
}
case ServerOP_ReloadAAData:
{
{
zone->SendReloadMessage("Alternate Advancement Data");
zone->LoadAlternateAdvancement();
break;
}
case ServerOP_ReloadAlternateCurrencies:
{
zone->SendReloadMessage("Alternate Currencies");
zone->LoadAlternateCurrencies();
break;
}
case ServerOP_ReloadBlockedSpells:
{
zone->SendReloadMessage("Blocked Spells");
zone->LoadZoneBlockedSpells();
break;
}
case ServerOP_ReloadContentFlags:
{
zone->SendReloadMessage("Content Flags");
content_service.SetExpansionContext()->ReloadContentFlags();
break;
}
case ServerOP_ReloadDoors:
{
zone->SendReloadMessage("Doors");
entity_list.RemoveAllDoors();
zone->LoadZoneDoors();
entity_list.RespawnAllDoors();
break;
}
case ServerOP_ReloadGroundSpawns:
{
zone->SendReloadMessage("Ground Spawns");
zone->LoadGroundSpawns();
break;
}
case ServerOP_ReloadLevelEXPMods:
{
zone->SendReloadMessage("Level Based Experience Modifiers");
@@ -1922,6 +1948,19 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
entity_list.ReloadMerchants();
break;
}
case ServerOP_ReloadNPCEmotes:
{
zone->SendReloadMessage("NPC Emotes");
zone->LoadNPCEmotes(&zone->NPCEmoteList);
break;
}
case ServerOP_ReloadObjects:
{
zone->SendReloadMessage("Objects");
entity_list.RemoveAllObjects();
zone->LoadZoneObjects();
break;
}
case ServerOP_ReloadPerlExportSettings:
{
zone->SendReloadMessage("Perl Event Export Settings");
@@ -1960,6 +1999,18 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
entity_list.UpdateAllTraps(true, true);
break;
}
case ServerOP_ReloadVariables:
{
zone->SendReloadMessage("Variables");
database.LoadVariables();
break;
}
case ServerOP_ReloadVeteranRewards:
{
zone->SendReloadMessage("Veteran Rewards");
zone->LoadVeteranRewards();
break;
}
case ServerOP_ReloadWorld:
{
auto* reload_world = (ReloadWorld_Struct*)pack->pBuffer;
@@ -3084,12 +3135,12 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
zone->SetQuestHotReloadQueued(true);
} else if (request_zone_short_name == "all") {
std::string reload_quest_saylink = EQ::SayLinkEngine::GenerateQuestSaylink(
"#reloadquest",
"#reload quest",
false,
"Locally"
);
std::string reload_world_saylink = EQ::SayLinkEngine::GenerateQuestSaylink(
"#reloadworld",
"#reload world",
false,
"Globally"
);
@@ -3353,69 +3404,75 @@ bool WorldServer::RezzPlayer(EQApplicationPacket* rpack, uint32 rezzexp, uint32
return ret;
}
void WorldServer::SendReloadTasks(int Command, int TaskID) {
void WorldServer::SendReloadTasks(uint8 reload_type, uint32 task_id) {
auto pack = new ServerPacket(ServerOP_ReloadTasks, sizeof(ReloadTasks_Struct));
ReloadTasks_Struct* rts = (ReloadTasks_Struct*)pack->pBuffer;
auto rts = (ReloadTasks_Struct*) pack->pBuffer;
rts->Command = Command;
rts->Parameter = TaskID;
rts->reload_type = reload_type;
rts->task_id = task_id;
SendPacket(pack);
}
void WorldServer::HandleReloadTasks(ServerPacket *pack)
{
ReloadTasks_Struct* rts = (ReloadTasks_Struct*)pack->pBuffer;
auto rts = (ReloadTasks_Struct*) pack->pBuffer;
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Zone received ServerOP_ReloadTasks from World, Command %i", rts->Command);
LogTasks("Global reload of tasks received with Reload Type [{}] Task ID [{}]", rts->reload_type, rts->task_id);
switch (rts->Command) {
case RELOADTASKS:
entity_list.SaveAllClientsTaskState();
switch (rts->reload_type) {
case RELOADTASKS:
{
entity_list.SaveAllClientsTaskState();
// TODO: Reload at the world level for shared tasks
// TODO: Reload at the world level for shared tasks
if (rts->Parameter == 0) {
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Reload ALL tasks");
safe_delete(task_manager);
task_manager = new TaskManager;
task_manager->LoadTasks();
if (!rts->task_id) {
LogTasks("Global reload of all Tasks");
safe_delete(task_manager);
task_manager = new TaskManager;
task_manager->LoadTasks();
if (zone) {
task_manager->LoadProximities(zone->GetZoneID());
}
entity_list.ReloadAllClientsTaskState();
} else {
LogTasks("Global reload of Task ID [{}]", rts->task_id);
task_manager->LoadTasks(rts->task_id);
entity_list.ReloadAllClientsTaskState(rts->task_id);
}
break;
}
case RELOADTASKPROXIMITIES:
{
if (zone) {
LogTasks("Global reload of all Task Proximities");
task_manager->LoadProximities(zone->GetZoneID());
}
entity_list.ReloadAllClientsTaskState();
break;
}
else {
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Reload only task %i", rts->Parameter);
task_manager->LoadTasks(rts->Parameter);
entity_list.ReloadAllClientsTaskState(rts->Parameter);
case RELOADTASKGOALLISTS:
{
LogTasks("Global reload of all Task Goal Lists");
task_manager->ReloadGoalLists();
break;
}
break;
case RELOADTASKPROXIMITIES:
if (zone) {
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Reload task proximities");
task_manager->LoadProximities(zone->GetZoneID());
case RELOADTASKSETS:
{
LogTasks("Global reload of all Task Sets");
task_manager->LoadTaskSets();
break;
}
default:
{
LogTasks("Unhandled global reload of Tasks Reload Type [{}] Task ID [{}]", rts->reload_type, rts->task_id);
break;
}
break;
case RELOADTASKGOALLISTS:
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Reload task goal lists");
task_manager->ReloadGoalLists();
break;
case RELOADTASKSETS:
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Reload task sets");
task_manager->LoadTaskSets();
break;
default:
Log(Logs::General, Logs::Tasks, "[GLOBALLOAD] Unhandled ServerOP_ReloadTasks command %i", rts->Command);
}
}