diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 6d4f4f1c3..d97871c3d 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -4940,6 +4940,11 @@ void Perl__set_proximity_range(float x_range, float y_range, float z_range, bool quest_manager.set_proximity_range(x_range, y_range, z_range, enable_say); } +std::string Perl__varlink(EQ::ItemInstance* inst) +{ + return quest_manager.varlink(inst); +} + std::string Perl__varlink(uint32 item_id) { return quest_manager.varlink(item_id); @@ -6856,6 +6861,7 @@ void perl_register_quest() package.add("updatetaskactivity", (void(*)(int, int, int))&Perl__updatetaskactivity); package.add("updatetaskactivity", (void(*)(int, int, int, bool))&Perl__updatetaskactivity); package.add("UpdateZoneHeader", &Perl__UpdateZoneHeader); + package.add("varlink", (std::string(*)(EQ::ItemInstance*))&Perl__varlink); package.add("varlink", (std::string(*)(uint32))&Perl__varlink); package.add("varlink", (std::string(*)(uint32, int16))&Perl__varlink); package.add("varlink", (std::string(*)(uint32, int16, uint32))&Perl__varlink); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index f370f2135..10123f1c3 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -3991,6 +3991,10 @@ void lua_do_anim(int animation_id, int animation_speed, bool ackreq, int filter) quest_manager.doanim(animation_id, animation_speed, ackreq, static_cast(filter)); } +std::string lua_item_link(Lua_ItemInst inst) { + return quest_manager.varlink(inst); +} + std::string lua_item_link(uint32 item_id) { return quest_manager.varlink(item_id); } @@ -5922,6 +5926,7 @@ luabind::scope lua_register_general() { luabind::def("merchant_set_item", (void(*)(uint32,uint32))&lua_merchant_set_item), luabind::def("merchant_set_item", (void(*)(uint32,uint32,uint32))&lua_merchant_set_item), luabind::def("merchant_count_item", &lua_merchant_count_item), + luabind::def("item_link", (std::string(*)(Lua_ItemInst))&lua_item_link), luabind::def("item_link", (std::string(*)(uint32))&lua_item_link), luabind::def("item_link", (std::string(*)(uint32,int16))&lua_item_link), luabind::def("item_link", (std::string(*)(uint32,int16,uint32))&lua_item_link), diff --git a/zone/lua_iteminst.cpp b/zone/lua_iteminst.cpp index ba6d64087..ad9ed1405 100644 --- a/zone/lua_iteminst.cpp +++ b/zone/lua_iteminst.cpp @@ -337,6 +337,17 @@ luabind::object Lua_ItemInst::GetAugmentIDs(lua_State* L) return lua_table; } +std::string Lua_ItemInst::GetItemLink() +{ + Lua_Safe_Call_String(); + + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemInst); + linker.SetItemInst(self); + + return linker.GenerateLink(); +} + luabind::scope lua_register_iteminst() { return luabind::class_("ItemInst") .def(luabind::constructor<>()) @@ -363,6 +374,7 @@ luabind::scope lua_register_iteminst() { .def("GetItem", (Lua_Item(Lua_ItemInst::*)(void))&Lua_ItemInst::GetItem) .def("GetItem", (Lua_ItemInst(Lua_ItemInst::*)(uint8))&Lua_ItemInst::GetItem) .def("GetItemID", (uint32(Lua_ItemInst::*)(int))&Lua_ItemInst::GetItemID) + .def("GetItemLink", (std::string(Lua_ItemInst::*)(void))&Lua_ItemInst::GetItemLink) .def("GetItemScriptID", (uint32(Lua_ItemInst::*)(void))&Lua_ItemInst::GetItemScriptID) .def("GetKillsNeeded", (uint32(Lua_ItemInst::*)(int))&Lua_ItemInst::GetKillsNeeded) .def("GetMaxEvolveLvl", (int(Lua_ItemInst::*)(void))&Lua_ItemInst::GetMaxEvolveLvl) diff --git a/zone/lua_iteminst.h b/zone/lua_iteminst.h index 4a968c2ce..2ff99165c 100644 --- a/zone/lua_iteminst.h +++ b/zone/lua_iteminst.h @@ -90,6 +90,7 @@ public: void ItemSay(const char* text); void ItemSay(const char* text, uint8 language_id); luabind::object GetAugmentIDs(lua_State* L); + std::string GetItemLink(); private: bool cloned_; diff --git a/zone/perl_questitem.cpp b/zone/perl_questitem.cpp index fc57a8372..fea1bf061 100644 --- a/zone/perl_questitem.cpp +++ b/zone/perl_questitem.cpp @@ -288,6 +288,15 @@ perl::array Perl_QuestItem_GetAugmentIDs(EQ::ItemInstance* self) return result; } +std::string Perl_QuestItem_GetItemLink(EQ::ItemInstance* self) +{ + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemInst); + linker.SetItemInst(self); + + return linker.GenerateLink(); +} + void perl_register_questitem() { @@ -313,6 +322,7 @@ void perl_register_questitem() package.add("GetItem", (EQ::ItemData*(*)(EQ::ItemInstance*))&Perl_QuestItem_GetItem); package.add("GetItem", (EQ::ItemInstance*(*)(EQ::ItemInstance*, uint8))&Perl_QuestItem_GetItem); package.add("GetItemID", &Perl_QuestItem_GetItemID); + package.add("GetItemLink", &Perl_QuestItem_GetItemLink); package.add("GetItemScriptID", &Perl_QuestItem_GetItemScriptID); package.add("GetKillsNeeded", &Perl_QuestItem_GetKillsNeeded); package.add("GetMaxEvolveLevel", &Perl_QuestItem_GetMaxEvolveLevel); diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 02ff5bbc5..b57c738fa 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -3574,6 +3574,21 @@ uint32 QuestManager::MerchantCountItem(uint32 NPCid, uint32 itemid) { return Quant; // return the quantity of itemid (0 if it was never found) } +std::string QuestManager::varlink(EQ::ItemInstance* inst) +{ + QuestManagerCurrentQuestVars(); + + if (!inst) { + return "INVALID ITEM INSTANCE IN VARLINK"; + } + + EQ::SayLinkEngine linker; + linker.SetLinkType(EQ::saylink::SayLinkItemInst); + linker.SetItemInst(inst); + + return linker.GenerateLink(); +} + // Item Link for use in Variables - "my $example_link = quest::varlink(item_id);" std::string QuestManager::varlink( uint32 item_id, diff --git a/zone/questmgr.h b/zone/questmgr.h index f230ef2c7..4f381203c 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -284,6 +284,7 @@ public: void MovePCInstance(int zone_id, int instance_id, const glm::vec4& position); void FlagInstanceByGroupLeader(uint32 zone, int16 version); void FlagInstanceByRaidLeader(uint32 zone, int16 version); + std::string varlink(EQ::ItemInstance* inst); std::string varlink(uint32 item_id, int16 charges = 0, uint32 aug1 = 0, uint32 aug2 = 0, uint32 aug3 = 0, uint32 aug4 = 0, uint32 aug5 = 0, uint32 aug6 = 0, bool attuned = false); std::string getcharnamebyid(uint32 char_id); uint32 getcharidbyname(const char* name);