diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 0c8ef58b9..3026358c4 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -1543,7 +1543,7 @@ XS(XS__set_proximity) { dXSARGS; if (items != 4 && items != 6) - Perl_croak(aTHX_ "Usage: set_proximity(min_x, max_x, min_y, max_y [, min_z, max_z])"); + Perl_croak(aTHX_ "Usage: set_proximity(min_x, max_x, min_y, max_y [, min_z, max_z], [say])"); float min_x = (float)SvNV(ST(0)); float max_x = (float)SvNV(ST(1)); @@ -1555,7 +1555,10 @@ XS(XS__set_proximity) else { float min_z = (float)SvNV(ST(4)); float max_z = (float)SvNV(ST(5)); - quest_manager.set_proximity(min_x, max_x, min_y, max_y, min_z, max_z); + bool bSay = false; + if (items == 7) + bSay = (bool)SvTRUE(ST(6)); + quest_manager.set_proximity(min_x, max_x, min_y, max_y, min_z, max_z, bSay); } XSRETURN_EMPTY; diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index ec22fec1b..55f00bcf1 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -493,6 +493,10 @@ 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_clear_proximity() { quest_manager.clear_proximity(); } @@ -1581,6 +1585,7 @@ luabind::scope lua_register_general() { luabind::def("respawn", &lua_respawn), 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("clear_proximity", &lua_clear_proximity), luabind::def("enable_proximity_say", &lua_enable_proximity_say), luabind::def("disable_proximity_say", &lua_disable_proximity_say), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 569afcd42..f0276e25b 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -1670,7 +1670,7 @@ void QuestManager::respawn(int npcTypeID, int grid) { } } -void QuestManager::set_proximity(float minx, float maxx, float miny, float maxy, float minz, float maxz) { +void QuestManager::set_proximity(float minx, float maxx, float miny, float maxy, float minz, float maxz, bool bSay) { QuestManagerCurrentQuestVars(); if (!owner || !owner->IsNPC()) return; @@ -1683,6 +1683,7 @@ void QuestManager::set_proximity(float minx, float maxx, float miny, float maxy, owner->CastToNPC()->proximity->max_y = maxy; owner->CastToNPC()->proximity->min_z = minz; owner->CastToNPC()->proximity->max_z = maxz; + owner->CastToNPC()->proximity->say = bSay; } void QuestManager::clear_proximity() { diff --git a/zone/questmgr.h b/zone/questmgr.h index 0c846c013..df0f0b669 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -150,7 +150,7 @@ 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); + void set_proximity(float minx, float maxx, float miny, float maxy, float minz=-999999, float maxz=999999, bool bSay = false); void clear_proximity(); void enable_proximity_say(); void disable_proximity_say();