Few tweaks to rules loading code - broadcast all zones that have loaded when #reloadallrules is used

This commit is contained in:
Akkadius 2018-05-27 23:44:09 -05:00
parent 7a7069959f
commit c8389103e3
2 changed files with 39 additions and 25 deletions

View File

@ -237,7 +237,7 @@ void RuleManager::SaveRules(Database *database, const char *ruleset_name) {
bool RuleManager::LoadRules(Database *database, const char *ruleset_name) {
int ruleset_id = GetRulesetID(database, ruleset_name);
int ruleset_id = this->GetRulesetID(database, ruleset_name);
if (ruleset_id < 0) {
Log(Logs::Detail, Logs::Rules, "Failed to find ruleset '%s' for load operation. Canceling.", ruleset_name);
return (false);
@ -253,12 +253,17 @@ bool RuleManager::LoadRules(Database *database, const char *ruleset_name) {
std::string default_ruleset_name = "default";
int default_ruleset_id = GetRulesetID(database, default_ruleset_name.c_str());
if (default_ruleset_id < 0) {
Log(Logs::Detail, Logs::Rules, "Failed to find default ruleset '%s' for load operation. Canceling.", default_ruleset_name.c_str());
Log(Logs::Detail, Logs::Rules, "Failed to find default ruleset '%s' for load operation. Canceling.",
default_ruleset_name.c_str());
return (false);
}
Log(Logs::Detail, Logs::Rules, "Loading rule set '%s' (%d)", default_ruleset_name.c_str(), default_ruleset_id);
std::string query = StringFormat("SELECT rule_name, rule_value FROM rule_values WHERE ruleset_id = %d", default_ruleset_id);
std::string query = StringFormat(
"SELECT rule_name, rule_value FROM rule_values WHERE ruleset_id = %d",
default_ruleset_id
);
auto results = database->QueryDatabase(query);
if (!results.Success())
return false;
@ -295,18 +300,22 @@ void RuleManager::_SaveRule(Database *database, RuleType type, uint16 index) {
break;
}
std::string query = StringFormat("REPLACE INTO rule_values "
std::string query = StringFormat(
"REPLACE INTO rule_values "
"(ruleset_id, rule_name, rule_value) "
" VALUES(%d, '%s', '%s')",
m_activeRuleset, _GetRuleName(type, index), value_string);
auto results = database->QueryDatabase(query);
m_activeRuleset,
_GetRuleName(type, index),
value_string
);
database->QueryDatabase(query);
}
int RuleManager::GetRulesetID(Database *database, const char *ruleset_name) {
uint32 len = strlen(ruleset_name);
uint32 len = static_cast<uint32>(strlen(ruleset_name));
auto rst = new char[2 * len + 1];
database->DoEscapeString(rst, ruleset_name, len);

View File

@ -1765,8 +1765,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
}
break;
}
case ServerOP_ReloadRules:
{
case ServerOP_ReloadRules: {
worldserver.SendEmoteMessage(
0, 0, 0, 15,
"Rules reloaded for Zone: '%s' Instance ID: %u",
zone->GetLongName(),
zone->GetInstanceID()
);
RuleManager::Instance()->LoadRules(&database, RuleManager::Instance()->GetActiveRuleset());
break;
}