Files
SMScripts/scripting/include/tf2attributes.inc
2025-04-15 22:27:20 -04:00

304 lines
11 KiB
SourcePawn

#if defined _tf2attributes_included
#endinput
#endif
#define _tf2attributes_included
/**
* Sets an attribute's value on an entity, adding it if it isn't on the entity.
*
* @param iEntity Entity index to set the attribute on. Must have m_AttributeList.
* @param strAttrib Name of the attribute, as from the "name" key in items_game.
* @param flValue Value to set the attribute to
*
* @return True if the attribute was added successfully, false if entity does not have m_AttributeList.
* @error Invalid entity index or attribute name passed.
*/
native bool TF2Attrib_SetByName(int iEntity, char[] strAttrib, float flValue);
/**
* Sets an attribute's value on an entity, adding it if it isn't on the entity.
*
* @param iEntity Entity index to set the attribute on. Must have m_AttributeList.
* @param iDefIndex Definition index of the attribute, as from the number on the attribute entry in items_game.
* @param flValue Value to set the attribute to
*
* @return True if the attribute was added successfully, false if entity does not have m_AttributeList.
* @error Invalid entity index or attribute name passed.
*/
native bool TF2Attrib_SetByDefIndex(int iEntity, int iDefIndex, float flValue);
/**
* Returns the address of an attribute on an entity.
*
* @param iEntity Entity index to get attribute from. Must have m_AttributeList.
* @param strAttrib Name of the attribute, as from the "name" key in items_game.
*
* @return Address of the attribute on the entity, or Address_Null if the attribute does not exist on the entity.
* @error Invalid entity index or attribute name passed.
*/
native Address TF2Attrib_GetByName(int iEntity, char[] strAttrib);
/**
* Returns the address of an attribute (by attribute index) on an entity.
*
* @param iEntity Entity index to get attribute from. Must have m_AttributeList.
* @param iDefIndex Definition index of the attribute, as from the number on the attribute entry in items_game.
*
* @return Address of the attribute on the entity, or Address_Null if the attribute does not exist on the entity.
* @error Invalid entity index or attribute index passed.
*/
native Address TF2Attrib_GetByDefIndex(int iEntity, int iDefIndex);
/**
* Removes an attribute from an entity.
*
* @param iEntity Entity index to remove attribute from. Must have m_AttributeList.
* @param strAttrib Name of the attribute, as from the "name" key in items_game.
*
* @return True if the SDKCall was made, false if entity had invalid address or m_AttributeList missing.
* @error Invalid entity index or attribute name passed.
*/
native bool TF2Attrib_RemoveByName(int iEntity, char[] strAttrib);
/**
* Removes an attribute from an entity.
*
* @param iEntity Entity index to remove attribute from. Must have m_AttributeList.
* @param iDefIndex Definition index of the attribute, as from the number on the attribute entry in items_game.
*
* @return True if the SDKCall was made, false if entity had invalid address or m_AttributeList missing.
* @error Invalid entity index or attribute index passed.
*/
native bool TF2Attrib_RemoveByDefIndex(int iEntity, int iDefIndex);
/**
* Removes all attributes from an entity.
*
* @param iEntity Entity index to remove attribute from. Must have m_AttributeList.
*
* @return True if the SDKCall was made, false if entity had invalid address or m_AttributeList missing.
* @error Invalid entity index passed.
*/
native bool TF2Attrib_RemoveAll(int iEntity);
/**
* Clears and presumably rebuilds the attribute cache for an entity, 'refreshing' attributes.
* Call this after making changes to an attribute with any of the TF2Attrib_Set*(Address pAttrib, arg) natives below.
* You may also need to call this on the entity's m_hOwnerEntity if it is a weapon or wearable.
* You do NOT need to call this after calls to TF2Attrib_SetByName, TF2Attrib_Remove, and TF2Attrib_RemoveAll.
*
* @param iEntity Entity index to remove attribute from. Must have m_AttributeList.
*
* @return True if the SDKCall was made, false if entity had invalid address or m_AttributeList missing.
* @error Invalid entity index passed.
*/
native bool TF2Attrib_ClearCache(int iEntity);
/**
* Sets the value of m_iAttributeDefinitionIndex (the attribute ID) on an attribute.
* Warning, this changes what GetByName/ID and SetByName 'see' as the name of the attribute,
* but will only change attribute's effects if TF2Attrib_ClearCache is called on the entity with the attribute after.
*
* @param pAttrib Address of the attribute.
* @param iDefIndex Value to set m_iAttributeDefinitionIndex to.
*
* @noreturn
*/
native void TF2Attrib_SetDefIndex(Address pAttrib, int iDefIndex);
/**
* Returns the value of m_iAttributeDefinitionIndex (the attribute ID) on an attribute.
*
* @param pAttrib Address of the attribute.
*
* @return The integer value of m_iAttributeDefinitionIndex on the attribute.
*/
native int TF2Attrib_GetDefIndex(Address pAttrib);
/**
* Sets the value of m_flValue on an attribute.
*
* @param pAttrib Address of the attribute.
* @param flValue Value to set m_flValue to.
*
* @noreturn
*/
native void TF2Attrib_SetValue(Address pAttrib, float flValue);
/**
* Returns the value of m_flValue on an attribute.
*
* @param pAttrib Address of the attribute.
*
* @return The floating point value of m_flValue on the attribute.
*/
native float TF2Attrib_GetValue(Address pAttrib);
/**
* Sets the value of m_nRefundableCurrency on an attribute.
*
* @param pAttrib Address of the attribute.
* @param nCurrency Value to set m_nRefundableCurrency to.
*
* @noreturn
*/
native void TF2Attrib_SetRefundableCurrency(Address pAttrib, int nCurrency);
/**
* Returns the value of m_nRefundableCurrency on an attribute.
*
* @param pAttrib Address of the attribute.
*
* @return The (unsigned) integer value of m_nRefundableCurrency on the attribute.
*/
native int TF2Attrib_GetRefundableCurrency(Address pAttrib);
/**
* Returns an array containing the attributes (as indices) present on an entity.
*
* @param iEntity Entity index to get attribute list from. Must have m_AttributeList.
* @param iDefIndices Array (max size 16) of attribute definition indices found on the entity.
*
* @return The number of attributes found on the entity's attribute list, or -1 if some error happened.
* @error Invalid entity index passed.
*/
native int TF2Attrib_ListDefIndices(int iEntity, int[] iDefIndices);
/**
* Returns arrays containing the static attributes and their values present on an item definition.
*
* @param iItemDefIndex Item definition index (e.g. 7 for Shovel) to get static attribute list from.
* @param iAttribIndices Array (max size 16) of attribute definition indices found on the item definition.
* @param flAttribValues Array (max size 16) of attribute values found on the item definition, corresponding to the indices.
*
* @return The number of attributes found on the item definition's static attribute list, or -1 if no schema or item definition found.
* @error Gamedata for this function failed to load.
*/
native int TF2Attrib_GetStaticAttribs(int iItemDefIndex, int[] iAttribIndices, float[] flAttribValues);
/**
* Returns arrays containing the item server (SOC) attributes and their values present on an item definition.
*
* @param iEntity Entity index to get the item server attribute list from.
* @param iAttribIndices Array (max size 16) of attribute definition indices found.
* @param flAttribValues Array (max size 16) of attribute values found, corresponding to the indices.
*
* @return The number of attributes found on the item's SOC attribute list, or -1 if some error happened.
* @error Invalid entity index passed or gamedata for this function failed to load.
*/
native int TF2Attrib_GetSOCAttribs(int iEntity, int[] iAttribIndices, float[] flAttribValues);
/**
* Gets whether an attribute is stored as an integer or as a float.
* Use TF2Attrib_SetValue(attribute, view_as<float>(intValue)) on attributes that store values as ints
* to avoid compiler tag mismatch warnings.
*
* @param iDefIndex Index of the attribute (as returned by TF2Attrib_GetDefIndex()).
*
* @return True if attribute value is supposed to be an int, false if float.
*/
native bool TF2Attrib_IsIntegerValue(int iDefIndex);
/**
* Gets whether the plugin loaded without ANY errors.
* For the purpose of allowing dependencies to ignore the plugin if this returns false.
* Check in OnAllPluginsLoaded() or something. I dunno.
*
* @return True if no errors while loading, false otherwise.
*/
native bool TF2Attrib_IsReady();
public SharedPlugin __pl_tf2attributes =
{
name = "tf2attributes",
file = "tf2attributes.smx",
#if defined REQUIRE_PLUGIN
required = 1,
#else
required = 0,
#endif
};
#if !defined REQUIRE_PLUGIN
public __pl_tf2attributes_SetNTVOptional()
{
MarkNativeAsOptional("TF2Attrib_SetByName");
MarkNativeAsOptional("TF2Attrib_SetByDefIndex");
MarkNativeAsOptional("TF2Attrib_GetByName");
MarkNativeAsOptional("TF2Attrib_GetByDefIndex");
MarkNativeAsOptional("TF2Attrib_RemoveByName");
MarkNativeAsOptional("TF2Attrib_RemoveByDefIndex");
MarkNativeAsOptional("TF2Attrib_RemoveAll");
MarkNativeAsOptional("TF2Attrib_ClearCache");
MarkNativeAsOptional("TF2Attrib_SetDefIndex");
MarkNativeAsOptional("TF2Attrib_GetDefIndex");
MarkNativeAsOptional("TF2Attrib_SetValue");
MarkNativeAsOptional("TF2Attrib_GetValue");
MarkNativeAsOptional("TF2Attrib_SetRefundableCurrency");
MarkNativeAsOptional("TF2Attrib_GetRefundableCurrency");
MarkNativeAsOptional("TF2Attrib_ListDefIndices");
MarkNativeAsOptional("TF2Attrib_GetStaticAttribs");
MarkNativeAsOptional("TF2Attrib_GetSOCAttribs");
MarkNativeAsOptional("TF2Attrib_ListDefIndices");
MarkNativeAsOptional("TF2Attrib_IsIntegerValue");
MarkNativeAsOptional("TF2Attrib_IsReady");
MarkNativeAsOptional("TF2Attrib_SetInitialValue");
MarkNativeAsOptional("TF2Attrib_GetInitialValue");
MarkNativeAsOptional("TF2Attrib_SetIsSetBonus");
MarkNativeAsOptional("TF2Attrib_GetIsSetBonus");
}
#endif
//OLD things lie here
//flInitialValue and bSetBonus don't exist anymore
/**
* Sets the value of m_flInitialValue on an attribute.
*
* @param pAttrib Address of the attribute.
* @param flValue Value to set m_flInitialValue to.
*
* @noreturn
*/
//native TF2Attrib_SetInitialValue(Address pAttrib, float flValue);
/**
* Returns the value of m_flInitialValue on an attribute.
*
* @param pAttrib Address of the attribute.
*
* @return The floating point value of m_flInitialValue on the attribute.
*/
//native float TF2Attrib_GetInitialValue(Address pAttrib);
/**
* Sets the boolean value of m_bSetBonus on an attribute.
*
* @param pAttrib Address of the attribute.
* @param bSetBonus Value to set m_bSetBonus to.
*
* @noreturn
*/
//native TF2Attrib_SetIsSetBonus(Address pAttrib, bool bSetBonus);
/**
* Returns the boolean value of m_bSetBonus on an attribute.
*
* @param pAttrib Address of the attribute.
*
* @return The boolean value of m_bSetBonus on the attribute.
*/
//native bool TF2Attrib_GetIsSetBonus(Address pAttrib);
//stock TF2Attrib_IsIntegerValue(iDefIndex)
//{
// switch (iDefIndex)
// {
// case 133, 143, 147, 152, 184, 185, 186, 192, 193, 194, 198, 211, 214, 227, 228, 229, 262, 294, 302, 372, 373, 374, 379, 381, 383, 403, 420:
// {
// return true;
// }
// }
// return false;
//}