This commit is contained in:
Kinglykrab
2025-06-20 13:33:54 -04:00
parent 42eee010c8
commit 57ee6423eb
3 changed files with 92 additions and 68 deletions
+24 -16
View File
@@ -1680,7 +1680,7 @@ void PerlembParser::ExportEventVariables(
} }
if (extra_pointers && extra_pointers->size() == 2) { if (extra_pointers && extra_pointers->size() == 2) {
ExportVar(package_name.c_str(), "client", "Client", std::any_cast<Client*>(extra_pointers->at(1))); ExportVar(package_name.c_str(), "player", "Client", std::any_cast<Client*>(extra_pointers->at(1)));
} }
break; break;
@@ -1708,7 +1708,7 @@ void PerlembParser::ExportEventVariables(
} }
if (extra_pointers && extra_pointers->size() == 3) { if (extra_pointers && extra_pointers->size() == 3) {
ExportVar(package_name.c_str(), "client", "Client", std::any_cast<Client*>(extra_pointers->at(2))); ExportVar(package_name.c_str(), "player", "Client", std::any_cast<Client*>(extra_pointers->at(2)));
} }
break; break;
@@ -1787,7 +1787,7 @@ void PerlembParser::ExportEventVariables(
} }
if (extra_pointers && extra_pointers->size() == 2) { if (extra_pointers && extra_pointers->size() == 2) {
ExportVar(package_name.c_str(), "client", "Client", std::any_cast<Client*>(extra_pointers->at(1))); ExportVar(package_name.c_str(), "player", "Client", std::any_cast<Client*>(extra_pointers->at(1)));
} }
break; break;
@@ -1804,7 +1804,7 @@ void PerlembParser::ExportEventVariables(
ExportVar(package_name.c_str(), "popupid", data); ExportVar(package_name.c_str(), "popupid", data);
if (extra_pointers && extra_pointers->size() == 1) { if (extra_pointers && extra_pointers->size() == 1) {
ExportVar(package_name.c_str(), "client", "Client", std::any_cast<Client*>(extra_pointers->at(0))); ExportVar(package_name.c_str(), "player", "Client", std::any_cast<Client*>(extra_pointers->at(0)));
} }
break; break;
@@ -1975,7 +1975,7 @@ void PerlembParser::ExportEventVariables(
} }
if (extra_pointers && extra_pointers->size() == 2) { if (extra_pointers && extra_pointers->size() == 2) {
ExportVar(package_name.c_str(), "client", "Client", std::any_cast<Client*>(extra_pointers->at(1))); ExportVar(package_name.c_str(), "player", "Client", std::any_cast<Client*>(extra_pointers->at(1)));
} }
break; break;
@@ -2088,18 +2088,18 @@ void PerlembParser::ExportEventVariables(
case EVENT_SPAWN_ZONE: { case EVENT_SPAWN_ZONE: {
if (mob) { if (mob) {
ExportVar(package_name.c_str(), "spawned_entity_id", mob->GetID());
ExportVar(package_name.c_str(), "spawned_bot_id", mob->IsBot() ? mob->CastToBot()->GetBotID() : 0);
ExportVar(package_name.c_str(), "spawned_npc_id", mob->IsNPC() ? mob->GetNPCTypeID() : 0);
ExportVar(package_name.c_str(), "spawned", "Mob", mob); ExportVar(package_name.c_str(), "spawned", "Mob", mob);
ExportVar(package_name.c_str(), "spawned_bot_id", mob->IsBot() ? mob->CastToBot()->GetBotID() : 0);
ExportVar(package_name.c_str(), "spawned_entity_id", mob->GetID());
ExportVar(package_name.c_str(), "spawned_npc_id", mob->IsNPC() ? mob->GetNPCTypeID() : 0);
} }
if (extra_pointers && extra_pointers->size() == 1) { if (extra_pointers && extra_pointers->size() == 1) {
Mob* spawn_mob = std::any_cast<Mob*>(extra_pointers->at(0)); NPC* spawn_npc = std::any_cast<NPC*>(extra_pointers->at(0));
ExportVar(package_name.c_str(), "spawned_entity_id", spawn_mob->GetID()); ExportVar(package_name.c_str(), "spawned", "NPC", spawn_npc);
ExportVar(package_name.c_str(), "spawned_bot_id", spawn_mob->IsBot() ? spawn_mob->CastToBot()->GetBotID() : 0); ExportVar(package_name.c_str(), "spawned_bot_id", spawn_npc->IsBot() ? spawn_npc->CastToBot()->GetBotID() : 0);
ExportVar(package_name.c_str(), "spawned_npc_id", spawn_mob->IsNPC() ? spawn_mob->GetNPCTypeID() : 0); ExportVar(package_name.c_str(), "spawned_entity_id", spawn_npc->GetID());
ExportVar(package_name.c_str(), "spawned", "Mob", spawn_mob); ExportVar(package_name.c_str(), "spawned_npc_id", spawn_npc->IsNPC() ? spawn_npc->GetNPCTypeID() : 0);
} }
break; break;
@@ -2342,6 +2342,7 @@ void PerlembParser::ExportEventVariables(
} }
case EVENT_DESPAWN: { case EVENT_DESPAWN: {
ExportVar(package_name.c_str(), "despawned", "Mob", npc_mob);
ExportVar(package_name.c_str(), "despawned_entity_id", npc_mob->GetID()); ExportVar(package_name.c_str(), "despawned_entity_id", npc_mob->GetID());
ExportVar(package_name.c_str(), "despawned_bot_id", npc_mob->IsBot() ? npc_mob->CastToBot()->GetBotID() : 0); ExportVar(package_name.c_str(), "despawned_bot_id", npc_mob->IsBot() ? npc_mob->CastToBot()->GetBotID() : 0);
ExportVar(package_name.c_str(), "despawned_merc_id", npc_mob->IsMerc() ? npc_mob->CastToMerc()->GetMercenaryID() : 0); ExportVar(package_name.c_str(), "despawned_merc_id", npc_mob->IsMerc() ? npc_mob->CastToMerc()->GetMercenaryID() : 0);
@@ -2350,12 +2351,19 @@ void PerlembParser::ExportEventVariables(
} }
case EVENT_DESPAWN_ZONE: { case EVENT_DESPAWN_ZONE: {
ExportVar(package_name.c_str(), "despawned_entity_id", mob->GetID()); if (mob) {
ExportVar(package_name.c_str(), "despawned", "Mob", mob);
ExportVar(package_name.c_str(), "despawned_bot_id", mob->IsBot() ? mob->CastToBot()->GetBotID() : 0); ExportVar(package_name.c_str(), "despawned_bot_id", mob->IsBot() ? mob->CastToBot()->GetBotID() : 0);
ExportVar(package_name.c_str(), "despawned_entity_id", mob->GetID());
ExportVar(package_name.c_str(), "despawned_npc_id", mob->IsNPC() ? mob->GetNPCTypeID() : 0); ExportVar(package_name.c_str(), "despawned_npc_id", mob->IsNPC() ? mob->GetNPCTypeID() : 0);
}
if (extra_pointers && extra_pointers->size() == 1) { if (extra_pointers && extra_pointers->size() == 1) {
ExportVar(package_name.c_str(), "npc", "NPC", std::any_cast<NPC*>(extra_pointers->at(0))); NPC* spawn_npc = std::any_cast<NPC*>(extra_pointers->at(0));
ExportVar(package_name.c_str(), "despawned", "NPC", spawn_npc);
ExportVar(package_name.c_str(), "despawned_bot_id", spawn_npc->IsBot() ? spawn_npc->CastToBot()->GetBotID() : 0);
ExportVar(package_name.c_str(), "despawned_entity_id", spawn_npc->GetID());
ExportVar(package_name.c_str(), "despawned_npc_id", spawn_npc->IsNPC() ? spawn_npc->GetNPCTypeID() : 0);
} }
break; break;
@@ -2514,7 +2522,7 @@ void PerlembParser::ExportEventVariables(
case EVENT_ENTER_ZONE: { case EVENT_ENTER_ZONE: {
if (extra_pointers && extra_pointers->size() == 1) { if (extra_pointers && extra_pointers->size() == 1) {
ExportVar(package_name.c_str(), "client", "Client", std::any_cast<Client*>(extra_pointers->at(0))); ExportVar(package_name.c_str(), "player", "Client", std::any_cast<Client*>(extra_pointers->at(0)));
} }
break; break;
+3 -3
View File
@@ -2998,9 +2998,9 @@ void handle_zone_despawn(
uint32 extra_data, uint32 extra_data,
std::vector<std::any> *extra_pointers std::vector<std::any> *extra_pointers
) { ) {
Lua_Mob l_mob(std::any_cast<Mob*>(extra_pointers->at(0))); Lua_NPC l_npc(std::any_cast<NPC*>(extra_pointers->at(0)));
luabind::adl::object l_mob_o = luabind::adl::object(L, l_mob); luabind::adl::object l_npc_o = luabind::adl::object(L, l_npc);
l_mob_o.push(L); l_npc_o.push(L);
lua_setfield(L, -2, "other"); lua_setfield(L, -2, "other");
} }
+54 -38
View File
@@ -3392,21 +3392,37 @@ bool Zone::IsPausedTimer(std::string name)
void Zone::PauseTimer(std::string name) void Zone::PauseTimer(std::string name)
{ {
if (!IsLoaded() || zone_timers.empty()) { if (
!IsLoaded() ||
zone_timers.empty() ||
!HasTimer(name) ||
IsPausedTimer(name)
) {
return; return;
} }
uint32 remaining_time = 0; uint32 remaining_time = 0;
const bool has_pause_event = parse->ZoneHasQuestSub(EVENT_TIMER_PAUSE);
if (!zone_timers.empty()) { if (!zone_timers.empty()) {
for (auto e = zone_timers.begin(); e != zone_timers.end(); e++) { 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->timer_.GetRemainingTime();
zone_timers.erase(e); zone_timers.erase(e);
break;
} const std::string& export_string = fmt::format(
} "{} {}",
} name,
remaining_time
);
LogQuests(
"Pausing timer [{}] with [{}] ms remaining",
name,
remaining_time
);
paused_zone_timers.emplace_back( paused_zone_timers.emplace_back(
PausedZoneTimer{ PausedZoneTimer{
@@ -3414,11 +3430,24 @@ void Zone::PauseTimer(std::string name)
.remaining_time = remaining_time .remaining_time = remaining_time
} }
); );
if (has_pause_event) {
parse->EventZone(EVENT_TIMER_PAUSE, this, export_string);
}
break;
}
}
}
} }
void Zone::ResumeTimer(std::string name) void Zone::ResumeTimer(std::string name)
{ {
if (!IsLoaded() || paused_zone_timers.empty()) { if (
!IsLoaded() ||
paused_zone_timers.empty() ||
!IsPausedTimer(name)
) {
return; return;
} }
@@ -3428,11 +3457,8 @@ void Zone::ResumeTimer(std::string name)
for (auto e = paused_zone_timers.begin(); e != paused_zone_timers.end(); e++) { for (auto e = paused_zone_timers.begin(); e != paused_zone_timers.end(); e++) {
if (e->name == name) { if (e->name == name) {
remaining_time = e->remaining_time; remaining_time = e->remaining_time;
paused_zone_timers.erase(e); paused_zone_timers.erase(e);
break;
}
}
}
if (!remaining_time) { if (!remaining_time) {
LogQuests("Paused timer [{}] not found or has expired.", name); LogQuests("Paused timer [{}] not found or has expired.", name);
@@ -3445,42 +3471,27 @@ void Zone::ResumeTimer(std::string name)
remaining_time remaining_time
); );
const bool has_resume_event = parse->ZoneHasQuestSub(EVENT_TIMER_RESUME);
if (!zone_timers.empty()) {
for (auto e : zone_timers) {
if (e.name == name) {
e.timer_.Enable();
e.timer_.Start(remaining_time, false);
LogQuests(
"Resuming timer [{}] with [{}] ms remaining",
name,
remaining_time
);
if (has_resume_event) {
parse->EventZone(EVENT_TIMER_RESUME, this, export_string);
}
}
}
}
zone_timers.emplace_back(ZoneTimer(name, remaining_time));
if (has_resume_event) {
parse->EventZone(EVENT_TIMER_RESUME, this, export_string);
}
LogQuests( LogQuests(
"Creating a new timer and resuming [{}] with [{}] ms remaining", "Creating a new timer and resuming [{}] with [{}] ms remaining",
name, name,
remaining_time remaining_time
); );
zone_timers.emplace_back(ZoneTimer(name, remaining_time));
if (parse->ZoneHasQuestSub(EVENT_TIMER_RESUME)) {
parse->EventZone(EVENT_TIMER_RESUME, this, export_string);
}
break;
}
}
}
} }
void Zone::SetTimer(std::string name, uint32 duration) void Zone::SetTimer(std::string name, uint32 duration)
{ {
if (!IsLoaded()) { if (!IsLoaded() || HasTimer(name)) {
return; return;
} }
@@ -3494,7 +3505,12 @@ void Zone::SetTimer(std::string name, uint32 duration)
void Zone::StopTimer(std::string name) void Zone::StopTimer(std::string name)
{ {
if (!IsLoaded() || zone_timers.empty()) { if (
!IsLoaded() ||
zone_timers.empty() ||
!HasTimer(name) ||
IsPausedTimer(name)
) {
return; return;
} }