[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); 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() void Perl__clear_proximity()
@ -3867,6 +3867,21 @@ void Perl__sethotzone(bool is_hotzone)
zone->SetIsHotzone(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() void perl_register_quest()
{ {
perl::interpreter perl(PERL_GET_THX); 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))&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))&Perl__set_proximity);
package.add("set_proximity", (void(*)(float, float, float, float, float, float, bool))&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("set_zone_flag", &Perl__set_zone_flag);
package.add("setallskill", &Perl__setallskill); package.add("setallskill", &Perl__setallskill);
package.add("setanim", &Perl__setanim); 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); 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) { 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, say); quest_manager.set_proximity(min_x, max_x, min_y, max_y, min_z, max_z, enable_say);
} }
void lua_clear_proximity() { void lua_clear_proximity() {
@ -3579,6 +3579,21 @@ void lua_set_hotzone(bool is_hotzone)
zone->SetIsHotzone(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 { \ #define LuaCreateNPCParse(name, c_type, default_value) do { \
cur = table[#name]; \ cur = table[#name]; \
if(luabind::type(cur) != LUA_TNIL) { \ 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))&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))&lua_set_proximity),
luabind::def("set_proximity", (void(*)(float,float,float,float,float,float,bool))&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("clear_proximity", &lua_clear_proximity),
luabind::def("enable_proximity_say", &lua_enable_proximity_say), luabind::def("enable_proximity_say", &lua_enable_proximity_say),
luabind::def("disable_proximity_say", &lua_disable_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(); QuestManagerCurrentQuestVars();
if (!owner || !owner->IsNPC()) { if (!owner || !owner->IsNPC()) {
return; return;
} }
entity_list.AddProximity(owner->CastToNPC()); auto n = owner->CastToNPC();
owner->CastToNPC()->proximity->min_x = minx; entity_list.AddProximity(n);
owner->CastToNPC()->proximity->max_x = maxx;
owner->CastToNPC()->proximity->min_y = miny; n->proximity->min_x = n->GetX() - x_range;
owner->CastToNPC()->proximity->max_y = maxy; n->proximity->max_x = n->GetX() + x_range;
owner->CastToNPC()->proximity->min_z = minz; n->proximity->min_y = n->GetY() - y_range;
owner->CastToNPC()->proximity->max_z = maxz; n->proximity->max_y = n->GetY() + y_range;
owner->CastToNPC()->proximity->say = bSay; n->proximity->min_z = n->GetZ() - z_range;
owner->CastToNPC()->proximity->proximity_set = true; 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() { void QuestManager::clear_proximity() {

View File

@ -177,7 +177,8 @@ public:
void setnexthpevent(int at); void setnexthpevent(int at);
void setnextinchpevent(int at); void setnextinchpevent(int at);
void respawn(int npc_type, int grid); 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 clear_proximity();
void enable_proximity_say(); void enable_proximity_say();
void disable_proximity_say(); void disable_proximity_say();