From c8e6d031cf5e5b73eb13369ffa25a8dbc2da1207 Mon Sep 17 00:00:00 2001 From: Akkadius Date: Fri, 31 Jan 2020 21:51:05 -0600 Subject: [PATCH] Add more rule-driven behavior --- common/ruletypes.h | 6 ++++++ world/console.cpp | 2 +- zone/zone.cpp | 13 ++++++++----- zone/zone_reload.cpp | 17 ++++++++++++++--- 4 files changed, 29 insertions(+), 9 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index dab1d02e1..6a2ca7b57 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -762,6 +762,12 @@ RULE_CATEGORY(Logging) RULE_BOOL(Logging, PrintFileFunctionAndLine, false, "Ex: [World Server] [net.cpp::main:309] Loading variables...") RULE_CATEGORY_END() +RULE_CATEGORY(HotReload) +RULE_BOOL(HotReload, QuestsRepopWithReload, true, "When a hot reload is triggered, the zone will repop") +RULE_BOOL(HotReload, QuestsRepopWhenPlayersNotInCombat, true, "When a hot reload is triggered, the zone will repop when no clients are in combat") +RULE_BOOL(HotReload, QuestsResetTimersWithReload, true, "When a hot reload is triggered, the zone will repop") +RULE_CATEGORY_END() + #undef RULE_CATEGORY #undef RULE_INT #undef RULE_REAL diff --git a/world/console.cpp b/world/console.cpp index 26d42e4b4..b3f36c923 100644 --- a/world/console.cpp +++ b/world/console.cpp @@ -925,7 +925,7 @@ void RegisterConsoleFunctions(std::unique_ptr& console) console->RegisterCall("signalcharbyname", 50, "signalcharbyname charname ID", std::bind(ConsoleSignalCharByName, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("tell", 50, "tell [name] [message]", std::bind(ConsoleTell, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("unlock", 150, "unlock", std::bind(ConsoleUnlock, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); - console->RegisterCall("uptime", 50, "uptime [zoneID#]", std::bind(ConsoleUptime, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); + console->RegisterCall("uptime", 50, "uptime [zone_server_id]", std::bind(ConsoleUptime, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("version", 50, "version", std::bind(ConsoleVersion, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); console->RegisterCall("who", 50, "who", std::bind(ConsoleWho, 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)); diff --git a/zone/zone.cpp b/zone/zone.cpp index 90d624848..16cdc0af8 100755 --- a/zone/zone.cpp +++ b/zone/zone.cpp @@ -1239,11 +1239,14 @@ bool Zone::Process() { LogHotReloadDetail("Hot reload timer check..."); bool perform_reload = true; - for (auto &it : entity_list.GetClientList()) { - auto client = it.second; - if (client->GetAggroCount() > 0) { - perform_reload = false; - break; + + if (RuleB(HotReload, QuestsRepopWhenPlayersNotInCombat)) { + for (auto &it : entity_list.GetClientList()) { + auto client = it.second; + if (client->GetAggroCount() > 0) { + perform_reload = false; + break; + } } } diff --git a/zone/zone_reload.cpp b/zone/zone_reload.cpp index 914a67ebc..5a9aeda99 100644 --- a/zone/zone_reload.cpp +++ b/zone/zone_reload.cpp @@ -27,9 +27,20 @@ void ZoneReload::HotReloadQuests() timer.reset(); entity_list.ClearAreas(); - parse->ReloadQuests(); - zone->Repop(0); + + parse->ReloadQuests(RuleB(HotReload, QuestsResetTimersWithReload)); + + if (RuleB(HotReload, QuestsRepopWithReload)) { + zone->Repop(0); + } zone->SetQuestHotReloadQueued(false); - LogHotReload("[Quests] Reloading scripts in zone [{}] Time [{:.2f}]", zone->GetShortName(), timer.elapsed()); + LogHotReload( + "[Quests] Reloading scripts in zone [{}] repop_with_reload [{}] reset_timers [{}] when_not_in_combat [{}] Time [{:.4f}]", + zone->GetShortName(), + (RuleB(HotReload, QuestsRepopWithReload) ? "true" : "false"), + (RuleB(HotReload, QuestsResetTimersWithReload) ? "true" : "false"), + (RuleB(HotReload, QuestsRepopWhenPlayersNotInCombat) ? "true" : "false"), + timer.elapsed() + ); }