diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 76c7e3e4e..9cb0e0d38 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -3975,6 +3975,11 @@ std::string Perl__varlink(uint32 item_id, int16 charges, uint32 aug1, uint32 aug return quest_manager.varlink(item_id, charges, aug1, aug2, aug3, aug4, aug5, aug6, attuned); } +bool Perl__do_augment_slots_match(uint32 item_one, uint32 item_two) +{ + return quest_manager.DoAugmentSlotsMatch(item_one, item_two); +} + void perl_register_quest() { perl::interpreter perl(PERL_GET_THX); @@ -4321,6 +4326,7 @@ void perl_register_quest() package.add("doanim", (void(*)(int, int))&Perl__doanim); package.add("doanim", (void(*)(int, int, bool))&Perl__doanim); package.add("doanim", (void(*)(int, int, bool, int))&Perl__doanim); + package.add("do_augment_slots_match", &Perl__do_augment_slots_match); package.add("echo", &Perl__echo); package.add("emote", &Perl__emote); package.add("enable_proximity_say", &Perl__enable_proximity_say); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 1b6bcc1d2..b2f6f7766 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -3686,6 +3686,11 @@ std::string lua_item_link(uint32 item_id, int16 charges, uint32 aug1, uint32 aug return quest_manager.varlink(item_id, charges, aug1, aug2, aug3, aug4, aug5, aug6, attuned); } +bool lua_do_augment_slots_match(uint32 item_one, uint32 item_two) +{ + return quest_manager.DoAugmentSlotsMatch(item_one, item_two); +} + #define LuaCreateNPCParse(name, c_type, default_value) do { \ cur = table[#name]; \ if(luabind::type(cur) != LUA_TNIL) { \ @@ -4201,6 +4206,7 @@ luabind::scope lua_register_general() { luabind::def("do_anim", (void(*)(int,int))&lua_do_anim), luabind::def("do_anim", (void(*)(int,int,bool))&lua_do_anim), luabind::def("do_anim", (void(*)(int,int,bool,int))&lua_do_anim), + luabind::def("do_augment_slots_match", &lua_do_augment_slots_match), /* Cross Zone */ diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 323d5b267..c55911726 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -3946,3 +3946,23 @@ void QuestManager::marquee(uint32 type, uint32 priority, uint32 fade_in, uint32 initiator->SendMarqueeMessage(type, priority, fade_in, fade_out, duration, message); } + +bool QuestManager::DoAugmentSlotsMatch(uint32 item_one, uint32 item_two) { + const auto* inst_one = database.GetItem(item_one); + if (!inst_one) { + return false; + } + + const auto* inst_two = database.GetItem(item_two); + if (!inst_two) { + return false; + } + + for (auto i = EQ::invaug::SOCKET_BEGIN; i <= EQ::invaug::SOCKET_END; i++) { + if (inst_one->AugSlotType[i] != inst_two->AugSlotType[i]) { + return false; + } + } + + return true; +} diff --git a/zone/questmgr.h b/zone/questmgr.h index 058661f20..e5584a8f4 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -345,6 +345,7 @@ public: int GetRecipeMadeCount(uint32 recipe_id); std::string GetRecipeName(uint32 recipe_id); bool HasRecipeLearned(uint32 recipe_id); + bool DoAugmentSlotsMatch(uint32 item_one, uint32 item_two); #ifdef BOTS Bot *GetBot() const;