From 9333c1800f94c41ca8a6865067cadd8461b7ed78 Mon Sep 17 00:00:00 2001 From: Flibe Date: Thu, 29 May 2025 15:57:54 -0400 Subject: [PATCH] Fix bug for out of range slot ids in UnequipItem --- src/map/lua/lua_baseentity.cpp | 10 +++++----- src/map/lua/lua_baseentity.h | 2 +- src/map/utils/charutils.cpp | 12 ++++++++++++ 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/map/lua/lua_baseentity.cpp b/src/map/lua/lua_baseentity.cpp index 3b55f069672..461b7e2e432 100644 --- a/src/map/lua/lua_baseentity.cpp +++ b/src/map/lua/lua_baseentity.cpp @@ -4976,17 +4976,17 @@ void CLuaBaseEntity::equipItem(uint16 itemID, sol::object const& container) /************************************************************************ * Function: unequipItem() - * Purpose : Unequips an item from player - * Example : player:unequipItem(17845) - * Notes : + * Purpose : Unequips an item from player based on slot id + * Example : player:unequipItem(4) -- Head + * Notes : Range 0 - 15 ************************************************************************/ -void CLuaBaseEntity::unequipItem(uint8 itemID) +void CLuaBaseEntity::unequipItem(uint8 slotID) { if (m_PBaseEntity->objtype == TYPE_PC) { auto* PChar = static_cast(m_PBaseEntity); - charutils::UnequipItem(PChar, itemID); + charutils::UnequipItem(PChar, slotID); } } diff --git a/src/map/lua/lua_baseentity.h b/src/map/lua/lua_baseentity.h index 735f1233081..5ced6bfe6cb 100644 --- a/src/map/lua/lua_baseentity.h +++ b/src/map/lua/lua_baseentity.h @@ -264,7 +264,7 @@ class CLuaBaseEntity // Equipping bool canEquipItem(uint16 itemID, sol::object const& chkLevel); void equipItem(uint16 itemID, sol::object const& container); - void unequipItem(uint8 itemID); + void unequipItem(uint8 slotID); void setEquipBlock(uint16 equipBlock); void lockEquipSlot(uint8 slot); diff --git a/src/map/utils/charutils.cpp b/src/map/utils/charutils.cpp index 75baf9ca753..da05314c7e9 100644 --- a/src/map/utils/charutils.cpp +++ b/src/map/utils/charutils.cpp @@ -1678,6 +1678,18 @@ namespace charutils void UnequipItem(CCharEntity* PChar, uint8 equipSlotID, bool update) { + if (PChar == nullptr) + { + ShowWarning("PChar was null."); + return; + } + + if (equipSlotID > 15) + { + ShowWarning("Invalid slot ID. Must be between 0 and 15."); + return; + } + CItem* PItem = PChar->getEquip((SLOTTYPE)equipSlotID); if ((PItem != nullptr) && PItem->isType(ITEM_EQUIPMENT))