This commit is contained in:
Chris Miles 2025-06-18 12:30:09 -05:00
parent a65db13ec3
commit b381a339f6
2 changed files with 34 additions and 29 deletions

View File

@ -1151,16 +1151,7 @@ bool Zone::Init(bool is_static) {
); );
} // if that fails, try the file name, then load defaults } // if that fails, try the file name, then load defaults
content_service.SetZoneId(GetZoneID()); LoadRules();
content_service.SetInstanceVersion(GetInstanceVersion());
RuleManager::Instance()->LoadRules(&database, RuleManager::Instance()->GetActiveRuleset(), true);
if (RuleManager::Instance()->GetActiveRulesetID() != default_ruleset) {
std::string r_name = RuleSetsRepository::GetRuleSetName(database, default_ruleset);
if (r_name.size() > 0) {
RuleManager::Instance()->LoadRules(&database, r_name, false);
}
}
if (!map_name) { if (!map_name) {
LogError("No map name found for zone [{}]", GetShortName()); LogError("No map name found for zone [{}]", GetShortName());
@ -3393,27 +3384,29 @@ bool Zone::IsPausedTimer(std::string name)
return e != paused_zone_timers.end(); return e != paused_zone_timers.end();
} }
void Zone::PauseTimer(std::string name) void Zone::ResumeTimer(std::string name)
{ {
if ( if (
!IsLoaded() || !IsLoaded() ||
zone_timers.empty() || paused_zone_timers.empty() ||
!HasTimer(name) || !IsPausedTimer(name)
IsPausedTimer(name)
) { ) {
return; return;
} }
uint32 remaining_time = 0; uint32 remaining_time = 0;
const bool has_pause_event = parse->ZoneHasQuestSub(EVENT_TIMER_PAUSE); if (!paused_zone_timers.empty()) {
for (auto e = paused_zone_timers.begin(); e != paused_zone_timers.end(); e++) {
if (!zone_timers.empty()) {
for (auto e = zone_timers.begin(); e != zone_timers.end(); e++) {
if (e->name == name) { if (e->name == name) {
remaining_time = e->timer_.GetRemainingTime(); remaining_time = e->remaining_time;
zone_timers.erase(e); paused_zone_timers.erase(e);
if (!remaining_time) {
LogQuests("Paused timer [{}] not found or has expired.", name);
return;
}
const std::string& export_string = fmt::format( const std::string& export_string = fmt::format(
"{} {}", "{} {}",
@ -3422,20 +3415,15 @@ void Zone::PauseTimer(std::string name)
); );
LogQuests( LogQuests(
"Pausing timer [{}] with [{}] ms remaining", "Creating a new timer and resuming [{}] with [{}] ms remaining",
name, name,
remaining_time remaining_time
); );
paused_zone_timers.emplace_back( zone_timers.emplace_back(ZoneTimer(name, remaining_time));
PausedZoneTimer{
.name = name,
.remaining_time = remaining_time
}
);
if (has_pause_event) { if (parse->ZoneHasQuestSub(EVENT_TIMER_RESUME)) {
parse->EventZone(EVENT_TIMER_PAUSE, this, export_string); parse->EventZone(EVENT_TIMER_RESUME, this, export_string);
} }
break; break;
@ -3562,4 +3550,20 @@ void Zone::SendPayload(int payload_id, std::string payload_value)
} }
} }
void Zone::LoadRules()
{
if (GetZoneID() > 0) {
content_service.SetZoneId(GetZoneID());
content_service.SetInstanceVersion(GetInstanceVersion());
}
const auto rm = RuleManager::Instance();
rm->LoadRules(&database, rm->GetActiveRuleset(), true);
if (rm->GetActiveRulesetID() != default_ruleset) {
std::string r_name = RuleSetsRepository::GetRuleSetName(database, default_ruleset);
if (r_name.size() > 0) {
rm->LoadRules(&database, r_name, false);
}
}
}
#include "zone_loot.cpp" #include "zone_loot.cpp"

View File

@ -485,6 +485,7 @@ public:
void SaveZoneState(); void SaveZoneState();
static void ClearZoneState(uint32 zone_id, uint32 instance_id); static void ClearZoneState(uint32 zone_id, uint32 instance_id);
void ReloadMaps(); void ReloadMaps();
void LoadRules();
void Signal(int signal_id); void Signal(int signal_id);
void SendPayload(int payload_id, std::string payload_value); void SendPayload(int payload_id, std::string payload_value);