diff --git a/classes.h b/classes.h index 045d3d2..d91e56d 100644 --- a/classes.h +++ b/classes.h @@ -409,6 +409,14 @@ class CEconItemDefinition // other CEconItemDefinition* GetOwningPackBundle() const { return m_pOwningPackBundle; } + + // Static Attributes + int GetStaticAttributeCount() const { return m_vecStaticAttributes.Count(); } + const CEconLootListDefinition::static_attrib_t* GetStaticAttribute(int iIndex) const + { + return m_vecStaticAttributes.IsValidIndex(iIndex) ? &m_vecStaticAttributes[iIndex] : nullptr; + } + private: void* m_pVTable; // 0 (4) KeyValues* m_pKVItem; // 4 (4) diff --git a/natives.cpp b/natives.cpp index 8dd83c7..6861ac7 100644 --- a/natives.cpp +++ b/natives.cpp @@ -20,6 +20,35 @@ #include "natives.h" #include "classes.h" +// CEconStaticAttribute // +static cell_t CEconStaticAttribute_GetDefinitionIndex(IPluginContext* pContext, const cell_t* params) +{ + CEconLootListDefinition::static_attrib_t* pStaticAttr = reinterpret_cast(params[1]); + + SM_NATIVE_ERROR_IF_NULL(pStaticAttr); + + return pStaticAttr->iDefIndex; +} + +static cell_t CEconStaticAttribute_GetIntValue(IPluginContext* pContext, const cell_t* params) +{ + CEconLootListDefinition::static_attrib_t* pStaticAttr = reinterpret_cast(params[1]); + + SM_NATIVE_ERROR_IF_NULL(pStaticAttr); + + return pStaticAttr->m_value.asUint32; +} + +static cell_t CEconStaticAttribute_GetFloatValue(IPluginContext* pContext, const cell_t* params) +{ + CEconLootListDefinition::static_attrib_t* pStaticAttr = reinterpret_cast(params[1]); + + SM_NATIVE_ERROR_IF_NULL(pStaticAttr); + + return sp_ftoc(pStaticAttr->m_value.asFloat); +} + + // CEconItemDefinition // static cell_t CEconItemDefinition_Get(IPluginContext* pContext, const cell_t* params) { @@ -908,6 +937,24 @@ static cell_t CEconItemDefinition_GetModel(IPluginContext* pContext, const cell_ return numBytes; } +static cell_t CEconItemSetDefinition_GetStaticAttributeCount(IPluginContext* pContext, const cell_t* params) +{ + CEconItemDefinition* pItemDefinition = reinterpret_cast(params[1]); + + SM_NATIVE_ERROR_IF_NULL(pItemDefinition); + + return pItemDefinition->GetStaticAttributeCount(); +} + +static cell_t CEconItemSetDefinition_GetStaticAttribute(IPluginContext* pContext, const cell_t* params) +{ + CEconItemDefinition* pItemDefinition = reinterpret_cast(params[1]); + + SM_NATIVE_ERROR_IF_NULL(pItemDefinition); + + return reinterpret_cast(pItemDefinition->GetStaticAttribute(params[2])); +} + // CCStrike15ItemDefinition static cell_t CEconItemDefinition_GetLoadoutSlot(IPluginContext* pContext, const cell_t* params) { @@ -2724,6 +2771,11 @@ static cell_t CEconItemAttributeDefinition_GetAttributeClass(IPluginContext* pCo extern const sp_nativeinfo_t g_ExtensionNatives[] = { + // CEconStaticAttribute + { "CEconStaticAttribute.DefinitionIndex.get", CEconStaticAttribute_GetDefinitionIndex }, + { "CEconStaticAttribute.IntValue.get", CEconStaticAttribute_GetIntValue }, + { "CEconStaticAttribute.FloatValue.get", CEconStaticAttribute_GetFloatValue }, + // CEconItemDefinition { "CEconItemDefinition.Get", CEconItemDefinition_Get }, { "CEconItemDefinition.Count", CEconItemDefinition_Count }, @@ -2803,6 +2855,9 @@ extern const sp_nativeinfo_t g_ExtensionNatives[] = { "CEconItemDefinition.GetLoadoutSlot", CEconItemDefinition_GetLoadoutSlot }, { "CEconItemDefinition.GetModel", CEconItemDefinition_GetModel }, + { "CEconItemDefinition.StaticAttributeCount.get", CEconItemSetDefinition_GetStaticAttributeCount }, + { "CEconItemDefinition.GetStaticAttribute", CEconItemSetDefinition_GetStaticAttribute }, + // 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..83c4ef8 100644 --- a/sourcemod/scripting/include/EconAPI.inc +++ b/sourcemod/scripting/include/EconAPI.inc @@ -139,6 +139,24 @@ enum CEconItemListEntry CEconItemListEntry_NULL = 0 } +methodmap CEconStaticAttribute +{ + property int DefinitionIndex + { + public native get(); + } + + property int IntValue + { + public native get(); + } + + property float FloatValue + { + public native get(); + } +} + methodmap CEconItemDefinition { /** @@ -1015,6 +1033,13 @@ methodmap CEconItemDefinition * @error Invalid model_type or invalid CEconItemDefinition. (NULL) */ public native int GetModel(ModelType model_type, char[] buffer, int len); + + property int StaticAttributeCount + { + public native get(); + } + + public native CEconStaticAttribute GetStaticAttribute(int index); } methodmap CPaintKit @@ -1630,6 +1655,11 @@ public Extension __ext_EconAPI = #if !defined REQUIRE_EXTENSIONS public __ext_EconAPI_SetNTVOptional() { + // CEconStaticAttribute + MarkNativeAsOptional("CEconStaticAttribute.DefinitionIndex.get"); + MarkNativeAsOptional("CEconStaticAttribute.IntValue.get"); + MarkNativeAsOptional("CEconStaticAttribute.FloatValue.get"); + // CEconItemDefinition MarkNativeAsOptional("CEconItemDefinition.Get"); MarkNativeAsOptional("CEconItemDefinition.Count"); @@ -1709,6 +1739,9 @@ public __ext_EconAPI_SetNTVOptional() MarkNativeAsOptional("CEconItemDefinition.GetLoadoutSlot"); MarkNativeAsOptional("CEconItemDefinition.GetModel"); + MarkNativeAsOptional("CEconItemDefinition.StaticAttributeCount.get"); + MarkNativeAsOptional("CEconItemDefinition.GetStaticAttribute"); + // CPaintKit MarkNativeAsOptional("CPaintKit.Get"); MarkNativeAsOptional("CPaintKit.Count");