[Quest API] Cleanup Proximity Events (#2697)

* [Quest API] Cleanup Proximity Events

# Perl
- Add `$area_id` export to EVENT_ENTER_AREA.
- Add `$area_type` export to EVENT_ENTER_AREA.
- Add `$area_id` export to EVENT_LEAVE_AREA.
- Add `$area_type` export to EVENT_LEAVE_AREA.

# Notes
- This is so Spire will parse these events properly.

* Update entity.cpp

* Update entity.cpp

* Update entity.cpp

* Update entity.cpp
This commit is contained in:
Alex King 2023-01-01 19:07:14 -05:00 committed by GitHub
parent 039d4f09e3
commit 3e4231c662
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 8 deletions

View File

@ -2004,6 +2004,15 @@ void PerlembParser::ExportEventVariables(
break; break;
} }
case EVENT_ENTER_AREA:
case EVENT_LEAVE_AREA: {
if (extra_pointers && extra_pointers->size() >= 2) {
ExportVar(package_name.c_str(), "area_id", *std::any_cast<int*>(extra_pointers->at(0)));
ExportVar(package_name.c_str(), "area_type", *std::any_cast<int*>(extra_pointers->at(1)));
}
break;
}
default: { default: {
break; break;
} }

View File

@ -4007,14 +4007,31 @@ void EntityList::ProcessMove(Client *c, const glm::vec3& location)
for (auto iter = events.begin(); iter != events.end(); ++iter) { for (auto iter = events.begin(); iter != events.end(); ++iter) {
quest_proximity_event& evt = (*iter); quest_proximity_event& evt = (*iter);
std::vector<std::any> args;
args.push_back(&evt.area_id);
args.push_back(&evt.area_type);
if (evt.npc) { if (evt.npc) {
std::vector<std::any> args; if (evt.event_id == EVENT_ENTER) {
parse->EventNPC(evt.event_id, evt.npc, evt.client, "", 0, &args); parse->EventNPC(EVENT_ENTER, evt.npc, evt.client, "", 0);
} else if (evt.event_id == EVENT_EXIT) {
parse->EventNPC(EVENT_EXIT, evt.npc, evt.client, "", 0);
} else if (evt.event_id == EVENT_ENTER_AREA) {
parse->EventNPC(EVENT_ENTER_AREA, evt.npc, evt.client, "", 0, &args);
} else if (evt.event_id == EVENT_LEAVE_AREA) {
parse->EventNPC(EVENT_LEAVE_AREA, evt.npc, evt.client, "", 0, &args);
}
} else { } else {
std::vector<std::any> args; if (evt.event_id == EVENT_ENTER) {
args.push_back(&evt.area_id); parse->EventPlayer(EVENT_ENTER, evt.client, "", 0);
args.push_back(&evt.area_type); } else if (evt.event_id == EVENT_EXIT) {
parse->EventPlayer(evt.event_id, evt.client, "", 0, &args); parse->EventPlayer(EVENT_EXIT, evt.client, "", 0);
} else if (evt.event_id == EVENT_ENTER_AREA) {
parse->EventNPC(EVENT_ENTER_AREA, evt.npc, evt.client, "", 0, &args);
} else if (evt.event_id == EVENT_LEAVE_AREA) {
parse->EventNPC(EVENT_LEAVE_AREA, evt.npc, evt.client, "", 0, &args);
}
} }
} }
} }
@ -4067,10 +4084,20 @@ void EntityList::ProcessMove(NPC *n, float x, float y, float z) {
for (auto iter = events.begin(); iter != events.end(); ++iter) { for (auto iter = events.begin(); iter != events.end(); ++iter) {
quest_proximity_event &evt = (*iter); quest_proximity_event &evt = (*iter);
std::vector<std::any> args; std::vector<std::any> args;
args.push_back(&evt.area_id); args.push_back(&evt.area_id);
args.push_back(&evt.area_type); args.push_back(&evt.area_type);
parse->EventNPC(evt.event_id, evt.npc, evt.client, "", 0, &args);
if (evt.event_id == EVENT_ENTER) {
parse->EventNPC(EVENT_ENTER, evt.npc, evt.client, "", 0);
} else if (evt.event_id == EVENT_EXIT) {
parse->EventNPC(EVENT_EXIT, evt.npc, evt.client, "", 0);
} else if (evt.event_id == EVENT_ENTER_AREA) {
parse->EventNPC(EVENT_ENTER_AREA, evt.npc, evt.client, "", 0, &args);
} else if (evt.event_id == EVENT_LEAVE_AREA) {
parse->EventNPC(EVENT_LEAVE_AREA, evt.npc, evt.client, "", 0, &args);
}
} }
} }