Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions classes.h
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
55 changes: 55 additions & 0 deletions natives.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<CEconLootListDefinition::static_attrib_t*>(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<CEconLootListDefinition::static_attrib_t*>(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<CEconLootListDefinition::static_attrib_t*>(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)
{
Expand Down Expand Up @@ -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<CEconItemDefinition*>(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<CEconItemDefinition*>(params[1]);

SM_NATIVE_ERROR_IF_NULL(pItemDefinition);

return reinterpret_cast<cell_t>(pItemDefinition->GetStaticAttribute(params[2]));
}

// CCStrike15ItemDefinition
static cell_t CEconItemDefinition_GetLoadoutSlot(IPluginContext* pContext, const cell_t* params)
{
Expand Down Expand Up @@ -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 },
Expand Down Expand Up @@ -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 },
Expand Down
33 changes: 33 additions & 0 deletions sourcemod/scripting/include/EconAPI.inc
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
/**
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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");
Expand Down Expand Up @@ -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");
Expand Down