diff --git a/classes.h b/classes.h index 045d3d2..d5d9e35 100644 --- a/classes.h +++ b/classes.h @@ -409,6 +409,14 @@ class CEconItemDefinition // other CEconItemDefinition* GetOwningPackBundle() const { return m_pOwningPackBundle; } + + // Item sets + int GetItemSetsCount() const { return m_iItemSets.Count(); } + int GetItemSet(int iIndex) const + { + return m_iItemSets.IsValidIndex(iIndex) ? m_iItemSets[iIndex] : -1; + } + private: void* m_pVTable; // 0 (4) KeyValues* m_pKVItem; // 4 (4) diff --git a/natives.cpp b/natives.cpp index 8dd83c7..9df04cf 100644 --- a/natives.cpp +++ b/natives.cpp @@ -1,4 +1,4 @@ -/** +/** * EconAPI * Copyright (C) 2021-2022 Natanel 'LuqS' Shitrit * @@ -908,6 +908,26 @@ static cell_t CEconItemDefinition_GetModel(IPluginContext* pContext, const cell_ return numBytes; } +static cell_t CEconItemSetDefinition_GetItemSetsCount(IPluginContext* pContext, const cell_t* params) +{ + CEconItemDefinition* pItemDefinition = reinterpret_cast(params[1]); + + SM_NATIVE_ERROR_IF_NULL(pItemDefinition); + + return pItemDefinition->GetItemSetsCount(); +} + +static cell_t CEconItemSetDefinition_GetItemSet(IPluginContext* pContext, const cell_t* params) +{ + SM_NATIVE_ERROR_IF_NULL(g_pCEconItemSchema); + + CEconItemDefinition* pItemDefinition = reinterpret_cast(params[1]); + + SM_NATIVE_ERROR_IF_NULL(pItemDefinition); + + return reinterpret_cast(g_pCEconItemSchema->GetItemSetDefinition(pItemDefinition->GetItemSet(params[2]))); +} + // CCStrike15ItemDefinition static cell_t CEconItemDefinition_GetLoadoutSlot(IPluginContext* pContext, const cell_t* params) { @@ -2803,6 +2823,9 @@ extern const sp_nativeinfo_t g_ExtensionNatives[] = { "CEconItemDefinition.GetLoadoutSlot", CEconItemDefinition_GetLoadoutSlot }, { "CEconItemDefinition.GetModel", CEconItemDefinition_GetModel }, + { "CEconItemDefinition.ItemSetsCount.get", CEconItemSetDefinition_GetItemSetsCount }, + { "CEconItemDefinition.GetItemSet", CEconItemSetDefinition_GetItemSet }, + // CPaintKit { "CPaintKit.Get", CPaintKit_Get }, { "CPaintKit.Count", CPaintKit_Count }, diff --git a/sourcemod/scripting/include/EconAPI.inc b/sourcemod/scripting/include/EconAPI.inc index 4aabc67..2b7ce8e 100644 --- a/sourcemod/scripting/include/EconAPI.inc +++ b/sourcemod/scripting/include/EconAPI.inc @@ -1015,6 +1015,13 @@ methodmap CEconItemDefinition * @error Invalid model_type or invalid CEconItemDefinition. (NULL) */ public native int GetModel(ModelType model_type, char[] buffer, int len); + + property int ItemSetsCount + { + public native get(); + } + + public native CEconItemSetDefinition GetItemSet(int index); } methodmap CPaintKit @@ -1709,6 +1716,9 @@ public __ext_EconAPI_SetNTVOptional() MarkNativeAsOptional("CEconItemDefinition.GetLoadoutSlot"); MarkNativeAsOptional("CEconItemDefinition.GetModel"); + MarkNativeAsOptional("CEconItemDefinition.ItemSetsCount.get"); + MarkNativeAsOptional("CEconItemDefinition.GetItemSet"); + // CPaintKit MarkNativeAsOptional("CPaintKit.Get"); MarkNativeAsOptional("CPaintKit.Count");