From b0297752dadcfe3d6178162e9241fd75fd4b2f64 Mon Sep 17 00:00:00 2001 From: Kinglykrab Date: Thu, 28 Apr 2022 09:36:23 -0400 Subject: [PATCH] [Quest API] Add multiple inventory method short hands to client. - Allows you to just directly use Client instead of having to grab reference to inventory. - Add $client->CountAugmentEquippedByID(item_id) to Perl. - Add $client->HasAugmentEquippedByID(item_id) to Perl. - Add $client->CountItemEquippedByID(item_id) to Perl. - Add $client->HasItemEquippedByID(item_id) to Perl. - Add client:CountAugmentEquippedByID(item_id) to Lua. - Add client:HasAugmentEquippedByID(item_id) to Lua - Add client:CountItemEquippedByID(item_id) to Lua. - Add client:HasItemEquippedByID(item_id) to Lua. --- zone/lua_client.cpp | 24 ++++++++++++++ zone/lua_client.h | 4 +++ zone/perl_client.cpp | 74 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) diff --git a/zone/lua_client.cpp b/zone/lua_client.cpp index b74a99b310..217d4de9d3 100644 --- a/zone/lua_client.cpp +++ b/zone/lua_client.cpp @@ -2397,6 +2397,26 @@ void Lua_Client::AddItem(luabind::object item_table) { ); } +int Lua_Client::CountAugmentEquippedByID(uint32 item_id) { + Lua_Safe_Call_Int(); + return self->GetInv().CountAugmentEquippedByID(item_id); +} + +bool Lua_Client::HasAugmentEquippedByID(uint32 item_id) { + Lua_Safe_Call_Bool(); + return self->GetInv().HasAugmentEquippedByID(item_id); +} + +int Lua_Client::CountItemEquippedByID(uint32 item_id) { + Lua_Safe_Call_Int(); + return self->GetInv().CountItemEquippedByID(item_id); +} + +bool Lua_Client::HasItemEquippedByID(uint32 item_id) { + Lua_Safe_Call_Bool(); + return self->GetInv().HasItemEquippedByID(item_id); +} + luabind::scope lua_register_client() { return luabind::class_("Client") .def(luabind::constructor<>()) @@ -2439,7 +2459,9 @@ luabind::scope lua_register_client() { .def("ClearCompassMark",(void(Lua_Client::*)(void))&Lua_Client::ClearCompassMark) .def("ClearZoneFlag", (void(Lua_Client::*)(int))&Lua_Client::ClearZoneFlag) .def("Connected", (bool(Lua_Client::*)(void))&Lua_Client::Connected) + .def("CountAugmentEquippedByID", (int(Lua_Client::*)(uint32))&Lua_Client::CountAugmentEquippedByID) .def("CountItem", (int(Lua_Client::*)(uint32))&Lua_Client::CountItem) + .def("CountItemEquippedByID", (int(Lua_Client::*)(uint32))&Lua_Client::CountItemEquippedByID) .def("CreateExpedition", (Lua_Expedition(Lua_Client::*)(luabind::object))&Lua_Client::CreateExpedition) .def("CreateExpedition", (Lua_Expedition(Lua_Client::*)(std::string, uint32, uint32, std::string, uint32, uint32))&Lua_Client::CreateExpedition) .def("CreateExpedition", (Lua_Expedition(Lua_Client::*)(std::string, uint32, uint32, std::string, uint32, uint32, bool))&Lua_Client::CreateExpedition) @@ -2587,8 +2609,10 @@ luabind::scope lua_register_client() { .def("GrantAlternateAdvancementAbility", (bool(Lua_Client::*)(int, int, bool))&Lua_Client::GrantAlternateAdvancementAbility) .def("GuildID", (uint32(Lua_Client::*)(void))&Lua_Client::GuildID) .def("GuildRank", (int(Lua_Client::*)(void))&Lua_Client::GuildRank) + .def("HasAugmentEquippedByID", (bool(Lua_Client::*)(uint32))&Lua_Client::HasAugmentEquippedByID) .def("HasDisciplineLearned", (bool(Lua_Client::*)(uint16))&Lua_Client::HasDisciplineLearned) .def("HasExpeditionLockout", (bool(Lua_Client::*)(std::string, std::string))&Lua_Client::HasExpeditionLockout) + .def("HasItemEquippedByID", (bool(Lua_Client::*)(uint32))&Lua_Client::HasItemEquippedByID) .def("HasSkill", (bool(Lua_Client::*)(int))&Lua_Client::HasSkill) .def("HasSpellScribed", (bool(Lua_Client::*)(int))&Lua_Client::HasSpellScribed) .def("HasZoneFlag", (bool(Lua_Client::*)(int))&Lua_Client::HasZoneFlag) diff --git a/zone/lua_client.h b/zone/lua_client.h index b7ebb06ad3..02758ff9e8 100644 --- a/zone/lua_client.h +++ b/zone/lua_client.h @@ -393,6 +393,10 @@ class Lua_Client : public Lua_Mob void RemoveItem(uint32 item_id, uint32 quantity); void SetGMStatus(uint32 newStatus); void AddItem(luabind::object item_table); + int CountAugmentEquippedByID(uint32 item_id); + int CountItemEquippedByID(uint32 item_id); + bool HasAugmentEquippedByID(uint32 item_id); + bool HasItemEquippedByID(uint32 item_id); int GetEnvironmentDamageModifier(); void SetEnvironmentDamageModifier(int value); diff --git a/zone/perl_client.cpp b/zone/perl_client.cpp index c45f46f9cf..b69762db24 100644 --- a/zone/perl_client.cpp +++ b/zone/perl_client.cpp @@ -6115,6 +6115,76 @@ XS(XS_Client_AddItem) { XSRETURN_EMPTY; } +XS(XS_Client_HasAugmentEquippedByID); +XS(XS_Client_HasAugmentEquippedByID) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::HasAugmentEquippedByID(THIS, uint32 item_id)"); + { + Client *THIS; + bool has_equipped = false; + uint32 item_id = (uint32) SvUV(ST(1)); + VALIDATE_THIS_IS_CLIENT; + has_equipped = THIS->GetInv().HasAugmentEquippedByID(item_id); + ST(0) = boolSV(has_equipped); + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + +XS(XS_Client_CountAugmentEquippedByID); +XS(XS_Client_CountAugmentEquippedByID) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::CountAugmentEquippedByID(THIS, uint32 item_id)"); + { + Client *THIS; + int quantity = 0; + uint32 item_id = (uint32) SvUV(ST(1)); + dXSTARG; + VALIDATE_THIS_IS_CLIENT; + quantity = THIS->GetInv().CountAugmentEquippedByID(item_id); + XSprePUSH; + PUSHi((IV)quantity); + } + XSRETURN(1); +} + +XS(XS_Client_HasItemEquippedByID); +XS(XS_Client_HasItemEquippedByID) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::HasItemEquippedByID(THIS, uint32 item_id)"); + { + Client *THIS; + bool has_equipped = false; + uint32 item_id = (uint32) SvUV(ST(1)); + VALIDATE_THIS_IS_CLIENT; + has_equipped = THIS->GetInv().HasItemEquippedByID(item_id); + ST(0) = boolSV(has_equipped); + sv_2mortal(ST(0)); + } + XSRETURN(1); +} + +XS(XS_Client_CountItemEquippedByID); +XS(XS_Client_CountItemEquippedByID) { + dXSARGS; + if (items != 2) + Perl_croak(aTHX_ "Usage: Client::CountItemEquippedByID(THIS, uint32 item_id)"); + { + Client *THIS; + int quantity = 0; + uint32 item_id = (uint32) SvUV(ST(1)); + dXSTARG; + VALIDATE_THIS_IS_CLIENT; + quantity = THIS->GetInv().CountItemEquippedByID(item_id); + XSprePUSH; + PUSHi((IV)quantity); + } + XSRETURN(1); +} + #ifdef __cplusplus extern "C" #endif @@ -6162,7 +6232,9 @@ XS(boot_Client) { newXSproto(strcpy(buf, "ClearCompassMark"), XS_Client_ClearCompassMark, file, "$"); newXSproto(strcpy(buf, "ClearZoneFlag"), XS_Client_ClearZoneFlag, file, "$$"); newXSproto(strcpy(buf, "Connected"), XS_Client_Connected, file, "$"); + newXSproto(strcpy(buf, "CountAugmentEquippedByID"), XS_Client_CountAugmentEquippedByID, file, "$$"); newXSproto(strcpy(buf, "CountItem"), XS_Client_CountItem, file, "$$"); + newXSproto(strcpy(buf, "CountItemEquippedByID"), XS_Client_CountItemEquippedByID, file, "$$"); newXSproto(strcpy(buf, "CreateExpedition"), XS_Client_CreateExpedition, file, "$$$$$$$;$"); newXSproto(strcpy(buf, "CreateTaskDynamicZone"), XS_Client_CreateTaskDynamicZone, file, "$$"); newXSproto(strcpy(buf, "DecreaseByID"), XS_Client_DecreaseByID, file, "$$$"); @@ -6291,8 +6363,10 @@ XS(boot_Client) { newXSproto(strcpy(buf, "GrantAlternateAdvancementAbility"), XS_Client_GrantAlternateAdvancementAbility, file, "$$$;$"); newXSproto(strcpy(buf, "GuildID"), XS_Client_GuildID, file, "$"); newXSproto(strcpy(buf, "GuildRank"), XS_Client_GuildRank, file, "$"); + newXSproto(strcpy(buf, "HasAugmentEquippedByID"), XS_Client_HasAugmentEquippedByID, file, "$$"); newXSproto(strcpy(buf, "HasDisciplineLearned"), XS_Client_HasDisciplineLearned, file, "$$"); newXSproto(strcpy(buf, "HasExpeditionLockout"), XS_Client_HasExpeditionLockout, file, "$$$"); + newXSproto(strcpy(buf, "HasItemEquippedByID"), XS_Client_HasItemEquippedByID, file, "$$"); newXSproto(strcpy(buf, "HasSkill"), XS_Client_HasSkill, file, "$$"); newXSproto(strcpy(buf, "HasSpellScribed"), XS_Client_HasSkill, file, "$$"); newXSproto(strcpy(buf, "HasZoneFlag"), XS_Client_HasZoneFlag, file, "$$");