[Quest API] Add Proximity Range Methods to Perl/Lua. (#2572)

# Perl
- Add `quest::set_proximity_range(x_range, y_range)`.
- Add `quest::set_proximity_range(x_range, y_range, z_range)`.
- Add `quest::set_proximity_range(x_range, y_range, z_range, enable_say)`.

# Lua
- Add `eq.set_proximity_range(x_range, y_range)`.
- Add `eq.set_proximity_range(x_range, y_range, z_range)`.
- Add `eq.set_proximity_range(x_range, y_range, z_range, enable_say)`.

# Notes
- Allows a shorthand for setting proximities.
- Automatically uses NPC's current location versus having to provide it.
This commit is contained in:
Alex King 2022-11-26 10:11:40 -05:00 committed by GitHub
parent 4423a9f160
commit 1d1ffc66fe
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 75 additions and 15 deletions

View File

@ -861,9 +861,9 @@ void Perl__set_proximity(float min_x, float max_x, float min_y, float max_y, flo
quest_manager.set_proximity(min_x, max_x, min_y, max_y, min_z, max_z);
}
void Perl__set_proximity(float min_x, float max_x, float min_y, float max_y, float min_z, float max_z, bool say)
void Perl__set_proximity(float min_x, float max_x, float min_y, float max_y, float min_z, float max_z, bool enable_say)
{
quest_manager.set_proximity(min_x, max_x, min_y, max_y, min_z, max_z, say);
quest_manager.set_proximity(min_x, max_x, min_y, max_y, min_z, max_z, enable_say);
}
void Perl__clear_proximity()
@ -3867,6 +3867,21 @@ void Perl__sethotzone(bool is_hotzone)
zone->SetIsHotzone(is_hotzone);
}
void Perl__set_proximity_range(float x_range, float y_range)
{
quest_manager.set_proximity_range(x_range, y_range);
}
void Perl__set_proximity_range(float x_range, float y_range, float z_range)
{
quest_manager.set_proximity_range(x_range, y_range, z_range);
}
void Perl__set_proximity_range(float x_range, float y_range, float z_range, bool enable_say)
{
quest_manager.set_proximity_range(x_range, y_range, z_range, enable_say);
}
void perl_register_quest()
{
perl::interpreter perl(PERL_GET_THX);
@ -4396,6 +4411,9 @@ void perl_register_quest()
package.add("set_proximity", (void(*)(float, float, float, float))&Perl__set_proximity);
package.add("set_proximity", (void(*)(float, float, float, float, float, float))&Perl__set_proximity);
package.add("set_proximity", (void(*)(float, float, float, float, float, float, bool))&Perl__set_proximity);
package.add("set_proximity_range", (void(*)(float, float))&Perl__set_proximity_range);
package.add("set_proximity_range", (void(*)(float, float, float))&Perl__set_proximity_range);
package.add("set_proximity_range", (void(*)(float, float, float, bool))&Perl__set_proximity_range);
package.add("set_zone_flag", &Perl__set_zone_flag);
package.add("setallskill", &Perl__setallskill);
package.add("setanim", &Perl__setanim);

View File

@ -542,8 +542,8 @@ void lua_set_proximity(float min_x, float max_x, float min_y, float max_y, float
quest_manager.set_proximity(min_x, max_x, min_y, max_y, min_z, max_z);
}
void lua_set_proximity(float min_x, float max_x, float min_y, float max_y, float min_z, float max_z, bool say) {
quest_manager.set_proximity(min_x, max_x, min_y, max_y, min_z, max_z, say);
void lua_set_proximity(float min_x, float max_x, float min_y, float max_y, float min_z, float max_z, bool enable_say) {
quest_manager.set_proximity(min_x, max_x, min_y, max_y, min_z, max_z, enable_say);
}
void lua_clear_proximity() {
@ -3579,6 +3579,21 @@ void lua_set_hotzone(bool is_hotzone)
zone->SetIsHotzone(is_hotzone);
}
void lua_set_proximity_range(float x_range, float y_range)
{
quest_manager.set_proximity_range(x_range, y_range);
}
void lua_set_proximity_range(float x_range, float y_range, float z_range)
{
quest_manager.set_proximity_range(x_range, y_range, z_range);
}
void lua_set_proximity_range(float x_range, float y_range, float z_range, bool enable_say)
{
quest_manager.set_proximity_range(x_range, y_range, z_range, enable_say);
}
#define LuaCreateNPCParse(name, c_type, default_value) do { \
cur = table[#name]; \
if(luabind::type(cur) != LUA_TNIL) { \
@ -3847,6 +3862,9 @@ luabind::scope lua_register_general() {
luabind::def("set_proximity", (void(*)(float,float,float,float))&lua_set_proximity),
luabind::def("set_proximity", (void(*)(float,float,float,float,float,float))&lua_set_proximity),
luabind::def("set_proximity", (void(*)(float,float,float,float,float,float,bool))&lua_set_proximity),
luabind::def("set_proximity_range", (void(*)(float,float))&lua_set_proximity_range),
luabind::def("set_proximity_range", (void(*)(float,float,float))&lua_set_proximity_range),
luabind::def("set_proximity_range", (void(*)(float,float,float,bool))&lua_set_proximity_range),
luabind::def("clear_proximity", &lua_clear_proximity),
luabind::def("enable_proximity_say", &lua_enable_proximity_say),
luabind::def("disable_proximity_say", &lua_disable_proximity_say),

View File

@ -1821,23 +1821,46 @@ void QuestManager::respawn(int npcTypeID, int grid) {
}
}
void QuestManager::set_proximity(float minx, float maxx, float miny, float maxy, float minz, float maxz, bool bSay)
void QuestManager::set_proximity_range(float x_range, float y_range, float z_range, bool enable_say)
{
QuestManagerCurrentQuestVars();
if (!owner || !owner->IsNPC()) {
return;
}
entity_list.AddProximity(owner->CastToNPC());
auto n = owner->CastToNPC();
owner->CastToNPC()->proximity->min_x = minx;
owner->CastToNPC()->proximity->max_x = maxx;
owner->CastToNPC()->proximity->min_y = miny;
owner->CastToNPC()->proximity->max_y = maxy;
owner->CastToNPC()->proximity->min_z = minz;
owner->CastToNPC()->proximity->max_z = maxz;
owner->CastToNPC()->proximity->say = bSay;
owner->CastToNPC()->proximity->proximity_set = true;
entity_list.AddProximity(n);
n->proximity->min_x = n->GetX() - x_range;
n->proximity->max_x = n->GetX() + x_range;
n->proximity->min_y = n->GetY() - y_range;
n->proximity->max_y = n->GetY() + y_range;
n->proximity->min_z = n->GetZ() - z_range;
n->proximity->max_z = n->GetZ() + z_range;
n->proximity->say = enable_say;
n->proximity->proximity_set = true;
}
void QuestManager::set_proximity(float min_x, float max_x, float min_y, float max_y, float min_z, float max_z, bool enable_say)
{
QuestManagerCurrentQuestVars();
if (!owner || !owner->IsNPC()) {
return;
}
auto n = owner->CastToNPC();
entity_list.AddProximity(n);
n->proximity->min_x = min_x;
n->proximity->max_x = max_x;
n->proximity->min_y = min_y;
n->proximity->max_y = max_y;
n->proximity->min_z = min_z;
n->proximity->max_z = max_z;
n->proximity->say = enable_say;
n->proximity->proximity_set = true;
}
void QuestManager::clear_proximity() {

View File

@ -177,7 +177,8 @@ public:
void setnexthpevent(int at);
void setnextinchpevent(int at);
void respawn(int npc_type, int grid);
void set_proximity(float minx, float maxx, float miny, float maxy, float minz=-999999, float maxz=999999, bool bSay = false);
void set_proximity(float min_x, float max_x, float min_y, float max_y, float min_z = -999999.0f, float max_z = 999999.0f, bool enable_say = false);
void set_proximity_range(float x_range, float y_range, float z_range = 999999.0f, bool enable_say = false);
void clear_proximity();
void enable_proximity_say();
void disable_proximity_say();