[Feature] Add optional is_forced parameter to Zone::Repop (#4046)

* [Feature] Add optional `is_force` parameter to Zone::Repop

# Perl
- Add `quest::repopzone(is_force)`.

# Lua
- Add `eq.repop_zone(is_force)`.

# Commands
- Cleanup `#repop` to use new parameter in `Zone::Repop`.

# Notes
- Allows operators to forcefully repop a zone without using a second method to clear the respawn timers.

* is_forced

* Update repop.cpp

* Update repop.cpp
This commit is contained in:
Alex King 2024-02-05 17:10:56 -05:00 committed by GitHub
parent c654c1d674
commit b6b779723e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 35 additions and 26 deletions

View File

@ -1042,6 +1042,11 @@ void Perl__repopzone()
quest_manager.repopzone();
}
void Perl__repopzone(bool is_forced)
{
quest_manager.repopzone(is_forced);
}
void Perl__processmobswhilezoneempty(bool on)
{
quest_manager.processmobswhilezoneempty(on);
@ -6547,7 +6552,8 @@ void perl_register_quest()
package.add("removeldonwin", &Perl__removeldonwin);
package.add("removetitle", &Perl__removetitle);
package.add("rename", &Perl__rename);
package.add("repopzone", &Perl__repopzone);
package.add("repopzone", (void(*)(void))&Perl__repopzone);
package.add("repopzone", (void(*)(bool))&Perl__repopzone);
package.add("resettaskactivity", &Perl__resettaskactivity);
package.add("respawn", &Perl__respawn);
package.add("resume", &Perl__resume);

View File

@ -2,23 +2,17 @@
void command_repop(Client *c, const Seperator *sep)
{
int arguments = sep->argnum;
if (!arguments) {
entity_list.ClearAreas();
c->Message(Chat::White, "Zone depopped, repopping now.");
zone->Repop();
return;
}
const bool is_forced = sep->argnum > 0 ? !strcasecmp(sep->arg[1], "force") : false;
bool is_force = !strcasecmp(sep->arg[1], "force");
c->Message(
Chat::White,
fmt::format(
"Zone depopped, {}repopping now.",
is_forced ? "forcefully " : ""
).c_str()
);
if (is_force) {
zone->ClearSpawnTimers();
c->Message(Chat::White, "Zone depopped, forcefully repopping now.");
} else {
c->Message(Chat::White, "Zone depopped, repopping now.");
}
zone->Repop();
entity_list.ClearAreas();
zone->Repop(is_forced);
}

View File

@ -403,6 +403,10 @@ void lua_repop_zone() {
quest_manager.repopzone();
}
void lua_repop_zone(bool is_forced) {
quest_manager.repopzone(is_forced);
}
void lua_process_mobs_while_zone_empty(bool on) {
quest_manager.processmobswhilezoneempty(on);
}
@ -5634,7 +5638,8 @@ luabind::scope lua_register_general() {
luabind::def("depop_all", (void(*)(void))&lua_depop_all),
luabind::def("depop_all", (void(*)(int))&lua_depop_all),
luabind::def("depop_zone", &lua_depop_zone),
luabind::def("repop_zone", &lua_repop_zone),
luabind::def("repop_zone", (void(*)(void))&lua_repop_zone),
luabind::def("repop_zone", (void(*)(bool))&lua_repop_zone),
luabind::def("process_mobs_while_zone_empty", &lua_process_mobs_while_zone_empty),
luabind::def("is_disc_tome", &lua_is_disc_tome),
luabind::def("get_race_name", (std::string(*)(uint16))&lua_get_race_name),

View File

@ -926,11 +926,11 @@ void QuestManager::depopzone(bool StartSpawnTimer) {
}
}
void QuestManager::repopzone() {
if(zone) {
zone->Repop();
}
else {
void QuestManager::repopzone(bool is_forced)
{
if (zone) {
zone->Repop(is_forced);
} else {
LogQuests("QuestManager::repopzone called with nullptr zone. Probably syntax error in quest file");
}
}

View File

@ -105,7 +105,7 @@ public:
void depop_withtimer(int npc_type = 0); // depop NPC and start spawn timer
void depopall(int npc_type = 0);
void depopzone(bool StartSpawnTimer = true);
void repopzone();
void repopzone(bool is_forced = false);
void processmobswhilezoneempty(bool quest_override_on);
void settarget(const char *type, int target_id);
void follow(int entity_id, int distance);

View File

@ -1888,7 +1888,7 @@ void Zone::ClearNPCTypeCache(int id) {
}
}
void Zone::Repop()
void Zone::Repop(bool is_forced)
{
if (!Depop()) {
return;
@ -1901,6 +1901,10 @@ void Zone::Repop()
iterator.RemoveCurrent();
}
if (is_forced) {
ClearSpawnTimers();
}
npc_scale_manager->LoadScaleData();
entity_list.ClearTrapPointers();

View File

@ -307,7 +307,7 @@ public:
void ReloadWorld(uint8 global_repop);
void RemoveAuth(const char *iCharName, const char *iLSKey);
void RemoveAuth(uint32 lsid);
void Repop();
void Repop(bool is_forced = false);
void RequestUCSServerStatus();
void ResetAuth();
void SetDate(uint16 year, uint8 month, uint8 day, uint8 hour, uint8 minute);