[Commands] Command Status Reload and Helper Method (#2377)

* [Commands] Command Status Reloading

Currently command status changes require a server restart to take effect, this will allow them to be changed and use `#reload commands` without needing a restart.

Added a helper method called GetCommandStatus() for future reference when sending command saylinks to people and making sure if they're high enough status for the command before sending the link.

* Update client.cpp

* Update command.h

* Saylink cleanup.

* Remove unnecessary packet sending.

* Revert "Remove unnecessary packet sending."

This reverts commit e7e77b83af02955e6cda97fae7901620e09f9ba1.
This commit is contained in:
Kinglykrab 2022-08-20 10:23:26 -04:00 committed by GitHub
parent 8e3ad529dc
commit 59691f39d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 95 additions and 61 deletions

View File

@ -226,25 +226,26 @@
#define ServerOP_ReloadAAData 0x4100
#define ServerOP_ReloadAlternateCurrencies 0x4101
#define ServerOP_ReloadBlockedSpells 0x4102
#define ServerOP_ReloadContentFlags 0x4103
#define ServerOP_ReloadDoors 0x4104
#define ServerOP_ReloadGroundSpawns 0x4105
#define ServerOP_ReloadLevelEXPMods 0x4106
#define ServerOP_ReloadLogs 0x4107
#define ServerOP_ReloadMerchants 0x4108
#define ServerOP_ReloadNPCEmotes 0x4109
#define ServerOP_ReloadObjects 0x4110
#define ServerOP_ReloadPerlExportSettings 0x4111
#define ServerOP_ReloadRules 0x4112
#define ServerOP_ReloadStaticZoneData 0x4113
#define ServerOP_ReloadTasks 0x4114
#define ServerOP_ReloadTitles 0x4115
#define ServerOP_ReloadTraps 0x4116
#define ServerOP_ReloadVariables 0x4117
#define ServerOP_ReloadVeteranRewards 0x4118
#define ServerOP_ReloadWorld 0x4119
#define ServerOP_ReloadZonePoints 0x4120
#define ServerOP_ReloadDzTemplates 0x4121
#define ServerOP_ReloadCommands 0x4103
#define ServerOP_ReloadContentFlags 0x4104
#define ServerOP_ReloadDoors 0x4105
#define ServerOP_ReloadGroundSpawns 0x4106
#define ServerOP_ReloadLevelEXPMods 0x4107
#define ServerOP_ReloadLogs 0x4108
#define ServerOP_ReloadMerchants 0x4109
#define ServerOP_ReloadNPCEmotes 0x4110
#define ServerOP_ReloadObjects 0x4111
#define ServerOP_ReloadPerlExportSettings 0x4112
#define ServerOP_ReloadRules 0x4113
#define ServerOP_ReloadStaticZoneData 0x4114
#define ServerOP_ReloadTasks 0x4115
#define ServerOP_ReloadTitles 0x4116
#define ServerOP_ReloadTraps 0x4117
#define ServerOP_ReloadVariables 0x4118
#define ServerOP_ReloadVeteranRewards 0x4119
#define ServerOP_ReloadWorld 0x4120
#define ServerOP_ReloadZonePoints 0x4121
#define ServerOP_ReloadDzTemplates 0x4122
#define ServerOP_CZDialogueWindow 0x4500
#define ServerOP_CZLDoNUpdate 0x4501

View File

@ -1307,6 +1307,7 @@ void ZoneServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p) {
case ServerOP_ReloadAAData:
case ServerOP_ReloadAlternateCurrencies:
case ServerOP_ReloadBlockedSpells:
case ServerOP_ReloadCommands:
case ServerOP_ReloadDoors:
case ServerOP_ReloadGroundSpawns:
case ServerOP_ReloadLevelEXPMods:

View File

@ -9533,6 +9533,7 @@ void Client::ShowDevToolsMenu()
std::string menu_reload_six;
std::string menu_reload_seven;
std::string menu_reload_eight;
std::string menu_reload_nine;
std::string menu_toggle;
/**
@ -9558,33 +9559,35 @@ void Client::ShowDevToolsMenu()
menu_reload_one += Saylink::Silent("#reload aa", "AAs");
menu_reload_one += " | " + Saylink::Silent("#reload alternate_currencies", "Alternate Currencies");
menu_reload_one += " | " + Saylink::Silent("#reload blocked_spells", "Blocked Spells");
menu_reload_one += " | " + Saylink::Silent("#reload content_flags", "Content Flags");
menu_reload_two += Saylink::Silent("#reload doors", "Doors");
menu_reload_two += " | " + Saylink::Silent("#reload ground_spawns", "Ground Spawns");
menu_reload_two += Saylink::Silent("#reload commands", "Commands");
menu_reload_two += " | " + Saylink::Silent("#reload content_flags", "Content Flags");
menu_reload_three += Saylink::Silent("#reload logs", "Level Based Experience Modifiers");
menu_reload_three += " | " + Saylink::Silent("#reload logs", "Log Settings");
menu_reload_three += Saylink::Silent("#reload doors", "Doors");
menu_reload_three += " | " + Saylink::Silent("#reload ground_spawns", "Ground Spawns");
menu_reload_four += Saylink::Silent("#reload merchants", "Merchants");
menu_reload_four += " | " + Saylink::Silent("#reload npc_emotes", "NPC Emotes");
menu_reload_four += " | " + Saylink::Silent("#reload objects", "Objects");
menu_reload_four += Saylink::Silent("#reload logs", "Level Based Experience Modifiers");
menu_reload_four += " | " + Saylink::Silent("#reload logs", "Log Settings");
menu_reload_five += Saylink::Silent("#reload perl_export", "Perl Event Export Settings");
menu_reload_five += " | " + Saylink::Silent("#reload quest", "Quests");
menu_reload_five += Saylink::Silent("#reload merchants", "Merchants");
menu_reload_five += " | " + Saylink::Silent("#reload npc_emotes", "NPC Emotes");
menu_reload_five += " | " + Saylink::Silent("#reload objects", "Objects");
menu_reload_six += Saylink::Silent("#reload rules", "Rules");
menu_reload_six += " | " + Saylink::Silent("#reload static", "Static Zone Data");
menu_reload_six += " | " + Saylink::Silent("#reload tasks", "Tasks");
menu_reload_six += Saylink::Silent("#reload perl_export", "Perl Event Export Settings");
menu_reload_six += " | " + Saylink::Silent("#reload quest", "Quests");
menu_reload_seven += Saylink::Silent("#reload titles", "Titles");
menu_reload_seven += " | " + Saylink::Silent("#reload traps 1", "Traps");
menu_reload_seven += " | " + Saylink::Silent("#reload variables", "Variables");
menu_reload_seven += " | " + Saylink::Silent("#reload veteran_rewards", "Veteran Rewards");
menu_reload_seven += Saylink::Silent("#reload rules", "Rules");
menu_reload_seven += " | " + Saylink::Silent("#reload static", "Static Zone Data");
menu_reload_seven += " | " + Saylink::Silent("#reload tasks", "Tasks");
menu_reload_eight += Saylink::Silent("#reload world", "World");
menu_reload_eight += " | " + Saylink::Silent("#reload zone", "Zone");
menu_reload_eight += " | " + Saylink::Silent("#reload zone_points", "Zone Points");
menu_reload_eight += Saylink::Silent("#reload titles", "Titles");
menu_reload_eight += " | " + Saylink::Silent("#reload traps 1", "Traps");
menu_reload_eight += " | " + Saylink::Silent("#reload variables", "Variables");
menu_reload_eight += " | " + Saylink::Silent("#reload veteran_rewards", "Veteran Rewards");
menu_reload_nine += Saylink::Silent("#reload world", "World");
menu_reload_nine += " | " + Saylink::Silent("#reload zone", "Zone");
menu_reload_nine += " | " + Saylink::Silent("#reload zone_points", "Zone Points");
/**
* Show window status
@ -9613,7 +9616,7 @@ void Client::ShowDevToolsMenu()
Chat::White,
fmt::format(
"Show Menu | {}",
Saylink::Silent("#dev", "#dev")
Saylink::Silent("#dev")
).c_str()
);
@ -9705,7 +9708,15 @@ void Client::ShowDevToolsMenu()
).c_str()
);
auto help_link = Saylink::Silent("#help", "#help");
Message(
Chat::White,
fmt::format(
"Reload | {}",
menu_reload_nine
).c_str()
);
auto help_link = Saylink::Silent("#help");
Message(
Chat::White,
@ -11301,6 +11312,16 @@ void Client::SendReloadCommandMessages() {
).c_str()
);
auto commands_link = Saylink::Silent("#reload commands");
Message(
Chat::White,
fmt::format(
"Usage: {} - Reloads Commands globally",
commands_link
).c_str()
);
auto content_flags_link = Saylink::Silent("#reload content_flags");
Message(

View File

@ -4265,7 +4265,7 @@ void Client::Handle_OP_ClickDoor(const EQApplicationPacket *app)
fmt::format(
"Door ({}) [{}]",
currentdoor->GetEntityID(),
Saylink::Silent("#door edit", "#door edit")
Saylink::Silent("#door edit")
).c_str()
);
}

View File

@ -53,6 +53,7 @@ int (*command_dispatch)(Client *,std::string) = command_notavail;
std::map<std::string, CommandRecord *> commandlist;
std::map<std::string, std::string> commandaliases;
std::vector<CommandRecord *> command_delete_list;
std::map<std::string, uint8> commands_map;
/*
* command_notavail
@ -82,7 +83,9 @@ int command_notavail(Client *c, std::string message)
int command_init(void)
{
commandaliases.clear();
if (!commandaliases.empty()) {
command_deinit();
}
if (
command_add("acceptrules", "[acceptrules] - Accept the EQEmu Agreement", AccountStatus::Player, command_acceptrules) ||
@ -469,8 +472,10 @@ int command_init(void)
*/
void command_deinit(void)
{
for (auto &c : command_delete_list)
for (auto &c : command_delete_list) {
delete c;
}
command_delete_list.clear();
commandlist.clear();
commandaliases.clear();
@ -521,6 +526,8 @@ int command_add(std::string command_name, std::string description, uint8 admin,
c->description = description;
c->function = function;
commands_map[command_name] = admin;
commandlist[command_name] = c;
commandaliases[command_name] = command_name;
command_delete_list.push_back(c);
@ -529,6 +536,11 @@ int command_add(std::string command_name, std::string description, uint8 admin,
return 0;
}
uint8 GetCommandStatus(Client *c, std::string command_name) {
auto command_status = commands_map[command_name];
return command_status;
}
/*
*
* command_realdispatch
@ -608,11 +620,6 @@ void command_help(Client *c, const Seperator *sep)
}
command_link = Saylink::Silent(
fmt::format(
"{}{}",
COMMAND_CHAR,
cur.first
),
fmt::format(
"{}{}",
COMMAND_CHAR,
@ -623,8 +630,9 @@ void command_help(Client *c, const Seperator *sep)
c->Message(
Chat::White,
fmt::format(
"{} | {}",
"{} | Status: {} | {}",
command_link,
cur.second->admin,
!cur.second->description.empty() ? cur.second->description : ""
).c_str()
);
@ -689,11 +697,6 @@ void command_findaliases(Client *c, const Seperator *sep)
}
auto current_commmand_link = Saylink::Silent(
fmt::format(
"{}{}",
COMMAND_CHAR,
command_iter->first
),
fmt::format(
"{}{}",
COMMAND_CHAR,
@ -713,11 +716,6 @@ void command_findaliases(Client *c, const Seperator *sep)
}
alias_link = Saylink::Silent(
fmt::format(
"{}{}",
COMMAND_CHAR,
a.first
),
fmt::format(
"{}{}",
COMMAND_CHAR,

View File

@ -27,6 +27,7 @@ int command_add(std::string command_name, std::string description, uint8 admin,
int command_notavail(Client *c, std::string message);
int command_realdispatch(Client *c, std::string message);
void command_logcommand(Client *c, std::string message);
uint8 GetCommandStatus(Client *c, std::string command_name);
// Commands
void command_acceptrules(Client *c, const Seperator *sep);

View File

@ -11,6 +11,7 @@ void command_reload(Client *c, const Seperator *sep)
bool is_aa = !strcasecmp(sep->arg[1], "aa");
bool is_alternate_currencies = !strcasecmp(sep->arg[1], "alternate_currencies");
bool is_blocked_spells = !strcasecmp(sep->arg[1], "blocked_spells");
bool is_commands = !strcasecmp(sep->arg[1], "commands");
bool is_content_flags = !strcasecmp(sep->arg[1], "content_flags");
bool is_doors = !strcasecmp(sep->arg[1], "doors");
bool is_dztemplates = !strcasecmp(sep->arg[1], "dztemplates");
@ -37,6 +38,7 @@ void command_reload(Client *c, const Seperator *sep)
!is_aa &&
!is_alternate_currencies &&
!is_blocked_spells &&
!is_commands &&
!is_content_flags &&
!is_doors &&
!is_dztemplates &&
@ -74,7 +76,10 @@ void command_reload(Client *c, const Seperator *sep)
} else if (is_blocked_spells) {
c->Message(Chat::White, "Attempting to reload Blocked Spells globally.");
pack = new ServerPacket(ServerOP_ReloadBlockedSpells, 0);
} else if (is_content_flags) {
} else if (is_commands) {
c->Message(Chat::White, "Attempting to reload Commands globally.");
pack = new ServerPacket(ServerOP_ReloadCommands, 0);
} else if (is_content_flags) {
c->Message(Chat::White, "Attempting to reload Content Flags globally.");
pack = new ServerPacket(ServerOP_ReloadContentFlags, 0);
} else if (is_doors) {

View File

@ -40,6 +40,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#include "../common/profanity_manager.h"
#include "client.h"
#include "command.h"
#include "corpse.h"
#include "entity.h"
#include "expedition.h"
@ -1915,6 +1916,12 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
zone->LoadZoneBlockedSpells();
break;
}
case ServerOP_ReloadCommands:
{
zone->SendReloadMessage("Commands");
command_init();
break;
}
case ServerOP_ReloadContentFlags:
{
zone->SendReloadMessage("Content Flags");