mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-08 14:12:27 +00:00
Few tweaks to rules loading code - broadcast all zones that have loaded when #reloadallrules is used
This commit is contained in:
parent
7a7069959f
commit
c8389103e3
@ -237,45 +237,50 @@ void RuleManager::SaveRules(Database *database, const char *ruleset_name) {
|
|||||||
|
|
||||||
bool RuleManager::LoadRules(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) {
|
if (ruleset_id < 0) {
|
||||||
Log(Logs::Detail, Logs::Rules, "Failed to find ruleset '%s' for load operation. Canceling.", ruleset_name);
|
Log(Logs::Detail, Logs::Rules, "Failed to find ruleset '%s' for load operation. Canceling.", ruleset_name);
|
||||||
return(false);
|
return (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
Log(Logs::Detail, Logs::Rules, "Loading rule set '%s' (%d)", ruleset_name, ruleset_id);
|
Log(Logs::Detail, Logs::Rules, "Loading rule set '%s' (%d)", ruleset_name, ruleset_id);
|
||||||
|
|
||||||
m_activeRuleset = ruleset_id;
|
m_activeRuleset = ruleset_id;
|
||||||
m_activeName = ruleset_name;
|
m_activeName = ruleset_name;
|
||||||
|
|
||||||
/* Load default ruleset values first if we're loading something other than default */
|
/* Load default ruleset values first if we're loading something other than default */
|
||||||
if (strcasecmp(ruleset_name, "default") != 0){
|
if (strcasecmp(ruleset_name, "default") != 0) {
|
||||||
std::string default_ruleset_name = "default";
|
std::string default_ruleset_name = "default";
|
||||||
int default_ruleset_id = GetRulesetID(database, default_ruleset_name.c_str());
|
int default_ruleset_id = GetRulesetID(database, default_ruleset_name.c_str());
|
||||||
if (default_ruleset_id < 0) {
|
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.",
|
||||||
return(false);
|
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);
|
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);
|
auto results = database->QueryDatabase(query);
|
||||||
if (!results.Success())
|
if (!results.Success())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (auto row = results.begin(); row != results.end(); ++row)
|
for (auto row = results.begin(); row != results.end(); ++row)
|
||||||
if (!SetRule(row[0], row[1], nullptr, false))
|
if (!SetRule(row[0], row[1], nullptr, false))
|
||||||
Log(Logs::Detail, Logs::Rules, "Unable to interpret rule record for %s", row[0]);
|
Log(Logs::Detail, Logs::Rules, "Unable to interpret rule record for %s", row[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string query = StringFormat("SELECT rule_name, rule_value FROM rule_values WHERE ruleset_id=%d", ruleset_id);
|
std::string query = StringFormat("SELECT rule_name, rule_value FROM rule_values WHERE ruleset_id=%d", ruleset_id);
|
||||||
auto results = database->QueryDatabase(query);
|
auto results = database->QueryDatabase(query);
|
||||||
if (!results.Success())
|
if (!results.Success())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (auto row = results.begin(); row != results.end(); ++row)
|
for (auto row = results.begin(); row != results.end(); ++row)
|
||||||
if (!SetRule(row[0], row[1], nullptr, false))
|
if (!SetRule(row[0], row[1], nullptr, false))
|
||||||
Log(Logs::Detail, Logs::Rules, "Unable to interpret rule record for %s", row[0]);
|
Log(Logs::Detail, Logs::Rules, "Unable to interpret rule record for %s", row[0]);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -283,7 +288,7 @@ bool RuleManager::LoadRules(Database *database, const char *ruleset_name) {
|
|||||||
void RuleManager::_SaveRule(Database *database, RuleType type, uint16 index) {
|
void RuleManager::_SaveRule(Database *database, RuleType type, uint16 index) {
|
||||||
char value_string[100];
|
char value_string[100];
|
||||||
|
|
||||||
switch(type) {
|
switch (type) {
|
||||||
case IntRule:
|
case IntRule:
|
||||||
sprintf(value_string, "%d", m_RuleIntValues[index]);
|
sprintf(value_string, "%d", m_RuleIntValues[index]);
|
||||||
break;
|
break;
|
||||||
@ -291,22 +296,26 @@ void RuleManager::_SaveRule(Database *database, RuleType type, uint16 index) {
|
|||||||
sprintf(value_string, "%.13f", m_RuleRealValues[index]);
|
sprintf(value_string, "%.13f", m_RuleRealValues[index]);
|
||||||
break;
|
break;
|
||||||
case BoolRule:
|
case BoolRule:
|
||||||
sprintf(value_string, "%s", m_RuleBoolValues[index]?"true":"false");
|
sprintf(value_string, "%s", m_RuleBoolValues[index] ? "true" : "false");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string query = StringFormat("REPLACE INTO rule_values "
|
std::string query = StringFormat(
|
||||||
"(ruleset_id, rule_name, rule_value) "
|
"REPLACE INTO rule_values "
|
||||||
" VALUES(%d, '%s', '%s')",
|
"(ruleset_id, rule_name, rule_value) "
|
||||||
m_activeRuleset, _GetRuleName(type, index), value_string);
|
" VALUES(%d, '%s', '%s')",
|
||||||
auto results = database->QueryDatabase(query);
|
m_activeRuleset,
|
||||||
|
_GetRuleName(type, index),
|
||||||
|
value_string
|
||||||
|
);
|
||||||
|
|
||||||
|
database->QueryDatabase(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int RuleManager::GetRulesetID(Database *database, const char *ruleset_name) {
|
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];
|
auto rst = new char[2 * len + 1];
|
||||||
database->DoEscapeString(rst, ruleset_name, len);
|
database->DoEscapeString(rst, ruleset_name, len);
|
||||||
|
|
||||||
|
|||||||
@ -1765,8 +1765,13 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
}
|
}
|
||||||
break;
|
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());
|
RuleManager::Instance()->LoadRules(&database, RuleManager::Instance()->GetActiveRuleset());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user