From 0d66eb8fd65298a2ac8d74b6aaaa83c59722ae1c Mon Sep 17 00:00:00 2001 From: jamesbradleym Date: Tue, 4 Feb 2025 16:43:44 -0500 Subject: [PATCH] add getStatusEffectBysource to lua_basenetity --- src/map/lua/lua_baseentity.cpp | 35 ++++++++++++++++++++++++++++++++++ src/map/lua/lua_baseentity.h | 1 + 2 files changed, 36 insertions(+) diff --git a/src/map/lua/lua_baseentity.cpp b/src/map/lua/lua_baseentity.cpp index 3e3933345e6..f471a27ceb3 100644 --- a/src/map/lua/lua_baseentity.cpp +++ b/src/map/lua/lua_baseentity.cpp @@ -13234,6 +13234,40 @@ std::optional CLuaBaseEntity::getStatusEffect(uint16 StatusID, return std::nullopt; } +/************************************************************************ + * Function: getStatusEffectBySource() + * Purpose : Returns the Object of a specified Status ID by source type and param + * Example : local aiming_gloves_enchantment = target:getStatusEffectBySource(xi.effect.ENCHANTMENT, xi.effectSourceType.EQUIPPED_ITEM, xi.item.AIMING_GLOVES) + * Notes : + ************************************************************************/ + +std::optional CLuaBaseEntity::getStatusEffectBySource(uint16 StatusID, EffectSourceType SourceType, uint16 SourceTypeParam) +{ + if (m_PBaseEntity->objtype == TYPE_NPC) + { + ShowWarning("Invalid Entity (NPC: %s) calling function.", m_PBaseEntity->getName()); + return std::nullopt; + } + + auto* PBattleEntity = dynamic_cast(m_PBaseEntity); + if (!PBattleEntity) + { + return std::nullopt; + } + + CStatusEffect* PStatusEffect = nullptr; + auto effect_StatusID = static_cast(StatusID); + + PStatusEffect = PBattleEntity->StatusEffectContainer->GetStatusEffectBySource(effect_StatusID, SourceType, SourceTypeParam); + + if (PStatusEffect) + { + return std::optional(PStatusEffect); + } + + return std::nullopt; +} + /************************************************************************ * Function: getStatusEffects() * Purpose : Returns a Lua table of all Status Effects an Entity has @@ -19398,6 +19432,7 @@ void CLuaBaseEntity::Register() SOL_REGISTER("addStatusEffect", CLuaBaseEntity::addStatusEffect); SOL_REGISTER("addStatusEffectEx", CLuaBaseEntity::addStatusEffectEx); SOL_REGISTER("getStatusEffect", CLuaBaseEntity::getStatusEffect); + SOL_REGISTER("getStatusEffectBySource", CLuaBaseEntity::getStatusEffectBySource); SOL_REGISTER("getStatusEffects", CLuaBaseEntity::getStatusEffects); SOL_REGISTER("getStatusEffectElement", CLuaBaseEntity::getStatusEffectElement); SOL_REGISTER("canGainStatusEffect", CLuaBaseEntity::canGainStatusEffect); diff --git a/src/map/lua/lua_baseentity.h b/src/map/lua/lua_baseentity.h index 2bbc333b011..c4d60723851 100644 --- a/src/map/lua/lua_baseentity.h +++ b/src/map/lua/lua_baseentity.h @@ -656,6 +656,7 @@ class CLuaBaseEntity bool addStatusEffect(sol::variadic_args va); bool addStatusEffectEx(sol::variadic_args va); auto getStatusEffect(uint16 StatusID, sol::object const& SubType, sol::object const& SourceType, sol::object const& SourceTypeParam) -> std::optional; + auto getStatusEffectBySource(uint16 StatusID, EffectSourceType SourceType, uint16 SourceTypeParam) -> std::optional; auto getStatusEffects() -> sol::table; int16 getStatusEffectElement(uint16 statusId); bool canGainStatusEffect(uint16 effect, sol::object const& powerObj);