/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #if defined _tf2itemsinfo_included #endinput #endif #define _tf2itemsinfo_included #include /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #define TF2_ATTRIBUTES_PER_ITEM 255 #define TF2II_ITEMNAME_LENGTH 255 #define TF2II_ITEMCLASS_LENGTH 255 #define TF2II_ITEMSLOT_LENGTH 255 #define TF2II_ITEMTOOL_LENGTH 255 #define TF2II_ITEMQUALITY_LENGTH 255 #define TF2II_ATTRIBNAME_LENGTH 255 #define TF2II_ATTRIBCLASS_LENGTH 255 #define TF2II_PROP_INVALID 0 // invalid property, not item // Items only #define TF2II_PROP_VALIDITEM (1<<0) #define TF2II_PROP_BASEITEM (1<<1) #define TF2II_PROP_PAINTABLE (1<<2) #define TF2II_PROP_UNUSUAL (1<<3) #define TF2II_PROP_VINTAGE (1<<4) #define TF2II_PROP_STRANGE (1<<5) #define TF2II_PROP_HAUNTED (1<<6) #define TF2II_PROP_HALLOWEEN (1<<7) // unused? #define TF2II_PROP_PROMOITEM (1<<8) #define TF2II_PROP_GENUINE (1<<9) #define TF2II_PROP_MEDIEVAL (1<<10) #define TF2II_PROP_BDAY_STRICT (1<<11) #define TF2II_PROP_HOFM_STRICT (1<<12) // Halloween Or Full Moon #define TF2II_PROP_XMAS_STRICT (1<<13) #define TF2II_PROP_PROPER_NAME (1<<14) // Attributes only #define TF2II_PROP_VALIDATTRIB (1<<20) #define TF2II_PROP_EFFECT_POSITIVE (1<<21) #define TF2II_PROP_EFFECT_NEUTRAL (1<<22) #define TF2II_PROP_EFFECT_NEGATIVE (1<<23) #define TF2II_PROP_HIDDEN (1<<24) #define TF2II_PROP_STORED_AS_INTEGER (1<<25) #define TF2II_CLASS_NONE 0 #define TF2II_CLASS_SCOUT (1<<0) #define TF2II_CLASS_SNIPER (1<<1) #define TF2II_CLASS_SOLDIER (1<<2) #define TF2II_CLASS_DEMOMAN (1<<3) #define TF2II_CLASS_MEDIC (1<<4) #define TF2II_CLASS_HEAVY (1<<5) #define TF2II_CLASS_PYRO (1<<6) #define TF2II_CLASS_SPY (1<<7) #define TF2II_CLASS_ENGINEER (1<<8) #define TF2II_CLASS_ALL (0b111111111) #define TF2II_CLASS_ANY TF2II_CLASS_ALL /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ enum TF2ItemQuality { TF2ItemQuality_Normal = 0, // 0 TF2ItemQuality_Rarity1, TF2ItemQuality_Genuine = 1, TF2ItemQuality_Rarity2, TF2ItemQuality_Vintage, TF2ItemQuality_Rarity3, TF2ItemQuality_Rarity4, TF2ItemQuality_Unusual = 5, TF2ItemQuality_Unique, TF2ItemQuality_Community, TF2ItemQuality_Developer, TF2ItemQuality_Selfmade, TF2ItemQuality_Customized, // 10 TF2ItemQuality_Strange, TF2ItemQuality_Completed, TF2ItemQuality_Haunted, TF2ItemQuality_ToborA }; static const TF2ItemQualityColors[] = { 0xB2B2B2, // normal 0x4D7455, // genuine 0x8D834B, // rarity2 0x476291, // vintage 0x70550F, // rarity3 0x38F3AB, // unusual 0xFFD700, // unique 0x70B04A, // community 0xA50F79, // developer 0x70B04A, // selfmade 0x00FF00, // customized 0xCF6A32, // strange 0x8650AC, // completed 0x38F3AB // haunted }; enum TF2ItemSlot { TF2ItemSlot_Primary = 0, TF2ItemSlot_Secondary = 1, TF2ItemSlot_Sapper = 1, TF2ItemSlot_Melee = 2, TF2ItemSlot_PDA = 3, TF2ItemSlot_PDA1 = 3, TF2ItemSlot_PDA2 = 4, TF2ItemSlot_Building = 5, TF2ItemSlot_Hat = 5, TF2ItemSlot_Head = 5, TF2ItemSlot_Misc = 6, TF2ItemSlot_Action = 7 }; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * @brief Is items_game.txt file precached * * @noparam * * @return True if is it, false otherwise **/ native bool:TF2II_IsItemSchemaPrecached(); /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * @brief Is item exists in items_game.txt * * @param iItemDefinitionIndex - * * @return True if it is, false otherwise **/ native bool:TF2II_IsValidItemID( iItemDefinitionIndex ); /** * @brief Get item name * * @param iItemDefinitionIndex - * @param strItemName String to store item name * @param iItemNameLength String length * * @return False is item doesn't exist, true otherwise **/ native TF2II_GetItemName( iItemDefinitionIndex, String:strItemName[], iItemNameLength ); /** * @brief Check if item has property(-ies) * * @param iItemDefinitionIndex - * @param iFlags Property flags * * @return False is item doesn't exist, true otherwise **/ native bool:TF2II_ItemHasProperty( iItemDefinitionIndex, iFlags ); /** * @brief Get item classname * * @param iItemDefinitionIndex - * @param strItemClass String to store item class * @param iItemClassLength String length * @param iPlayerClass Player class * * @return False is item doesn't exist, true otherwise **/ native TF2II_GetItemClass( iItemDefinitionIndex, String:strItemClass[], iItemClassLength, TFClassType:iPlayerClass = TFClass_Unknown ); /** * @brief Get item slot number * * @param iItemDefinitionIndex - * @param iPlayerClass Player class * * @return Item slot number **/ native TF2ItemSlot:TF2II_GetItemSlot( iItemDefinitionIndex, TFClassType:iPlayerClass = TFClass_Unknown ); /** * @brief Get item slot name * * @param iItemDefinitionIndex - * @param strItemSlot String to store item slot * @param iItemSlotLength String length * * @return False is item doesn't exist, true otherwise **/ native bool:TF2II_GetItemSlotName( iItemDefinitionIndex, String:strItemSlot[], iItemSlotLength ); /** * @brief Get item slot number (as in items_game.txt) * * @param iItemDefinitionIndex - * @param iPlayerClass Player class * * @return Item slot number **/ native TF2ItemSlot:TF2II_GetListedItemSlot( iItemDefinitionIndex, TFClassType:iPlayerClass = TFClass_Unknown ); /** * @brief Get item slot name (as in items_game.txt) * * @param iItemDefinitionIndex - * @param strItemSlot String to store item slot * @param iItemSlotLength String length * * @return False is item doesn't exist, true otherwise **/ native bool:TF2II_GetListedItemSlotName( iItemDefinitionIndex, String:strItemSlot[], iItemSlotLength ); /** * @brief Is item can be used by this class? * * @param iItemDefinitionIndex - * @param iClass - * * @return True if true, false otherwise. **/ native bool:TF2II_IsItemUsedByClass( iItemDefinitionIndex, TFClassType:iClass ); /** * @brief - * * @param iItemDefinitionIndex - * * @return Minimal item level **/ native _:TF2II_GetItemMinLevel( iItemDefinitionIndex ); /** * @brief - * * @param iItemDefinitionIndex - * * @return Maximal item level **/ native _:TF2II_GetItemMaxLevel( iItemDefinitionIndex ); /** * @brief Get item quality number * * @param iItemDefinitionIndex - * * @return Item quality number **/ native TF2ItemQuality:TF2II_GetItemQuality( iItemDefinitionIndex ); /** * @brief Get item quality name * * @param iItemDefinitionIndex - * @param strQuality String to store item slot * @param iQualityLength String length * * @return False is item doesn't exist, true otherwise **/ native bool:TF2II_GetItemQualityName( iItemDefinitionIndex, String:strQuality[], iQualityLength ); /** * @brief Get number of attributes * * @param iItemDefinitionIndex - * * @return Number of attributes **/ native _:TF2II_GetItemNumAttributes( iItemDefinitionIndex ); /** * @brief - * * @param iItemDefinitionIndex - * @param iSlotAttribute The attribute slot index, ranges from 0 to 15 * @param strAttributeName Buffer to store attribute name * @param iAttributeNameLength Buffer size * * @return True on success, false otherwise **/ native bool:TF2II_GetItemAttributeName( iItemDefinitionIndex, iSlotAttribute, String:strAttributeName[], iAttributeNameLength ); /** * @brief - * * @param iItemDefinitionIndex - * @param iSlotAttribute The attribute slot index, ranges from 0 to 15 * * @return The attribute ID; -1 on failure **/ native _:TF2II_GetItemAttributeID( iItemDefinitionIndex, iSlotAttribute ); /** * @brief - * * @param iItemDefinitionIndex - * @param iSlotAttribute The attribute slot index, ranges from 0 to 15 * * @return Attribute value **/ native Float:TF2II_GetItemAttributeValue( iItemDefinitionIndex, iSlotAttribute ); /** * @brief - * * @param iItemDefinitionIndex - * * @return Array of attributes **/ native Handle:TF2II_GetItemAttributes( iItemDefinitionIndex ); /** * @brief Get tool type * * @param iItemDefinitionIndex - * @param strTool String to store data * @param iToolLength String length * * @return Attribute ID on success, -1 otherwise **/ native bool:TF2II_GetToolType( iItemDefinitionIndex, String:strTool[], iToolLength ); /** * @brief Is item restricted by selected holiday? * * @param iItemDefinitionIndex - * @param holiday - * * @return True or false **/ native bool:TF2II_ItemHolidayRestriction( iItemDefinitionIndex, TFHoliday:holiday ); /** * @brief Get item equip regions * * @param iItemDefinitionIndex - * * @return Array or INVALID_HANDLE (if no equip regions presented) **/ native Handle:TF2II_GetItemEquipRegions( iItemDefinitionIndex ); /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * @brief Is attribute exists in items_game.txt * * @param iAttributeIndex - * * @return True if it is, false otherwise **/ native bool:TF2II_IsValidAttribID( iAttributeIndex ); /** * @brief Get attribute working name * * @param iAttributeIndex - * @param strAttributeName String to store name * @param iAttributeNameLength String length * * @return False is attribute doesn't exist, true otherwise **/ native bool:TF2II_GetAttribName( iAttributeIndex, String:strAttributeName[], iAttributeNameLength ); /** * @brief Get attribute class * * @param iAttributeIndex - * @param strAttributeClass String to store class * @param iAttributeClassLength String length * * @return False is attribute doesn't exist, true otherwise **/ native bool:TF2II_GetAttribClass( iAttributeIndex, String:strAttributeClass[], iAttributeClassLength ); /** * @brief Get attribute display name * * @param iAttributeIndex - * @param strAttributeName String to store name * @param iAttributeNameLength String length * * @return False is attribute doesn't exist, true otherwise **/ native bool:TF2II_GetAttribDispName( iAttributeIndex, String:strAttributeName[], iAttributeNameLength ); /** * @brief Get attribute MinValue * * @param iAttributeIndex - * * @return MinValue **/ native Float:TF2II_GetAttribMinValue( iAttributeIndex ); /** * @brief Get attribute MaxValue * * @param iAttributeIndex - * * @return MaxValue **/ native Float:TF2II_GetAttribMaxValue( iAttributeIndex ); /** * @brief Get attribute group * * @param iAttributeIndex - * @param strAttributeGroup String to store group * @param iAttributeGroupLength String length * * @return False is attribute doesn't exist, true otherwise **/ native bool:TF2II_GetAttribGroup( iAttributeIndex, String:strAttributeGroup[], iAttributeGroupLength ); /** * @brief Get attribute description string * * @param iAttributeIndex - * @param strAttribDescrString String to store string * @param iAttribDescrStringLength String length * * @return False is attribute doesn't exist, true otherwise **/ native bool:TF2II_GetAttribDescrString( iAttributeIndex, String:strAttribDescrString[], iAttribDescrStringLength ); /** * @brief Get attribute description string format * * @param iAttributeIndex - * @param strAttribDescrFormat String to store string format * @param iAttribDescrFormatLength String length * * @return False is attribute doesn't exist, true otherwise **/ native bool:TF2II_GetAttribDescrFormat( iAttributeIndex, String:strAttribDescrFormat[], iAttribDescrFormatLength ); /** * @brief Is it a hidden attribute * * @param iAttributeIndex - * * @return True/false **/ native bool:TF2II_HiddenAttrib( iAttributeIndex ); /** * @brief Get attribute effect type. 1 - positive, 0 - neutral, -1 - negative. * * @param iAttributeIndex - * * @return Number **/ native _:TF2II_GetAttribEffectType( iAttributeIndex ); /** * @brief Is attribute stored as integer * * @param iAttributeIndex - * * @return True/false **/ native bool:TF2II_AttribStoredAsInteger( iAttributeIndex ); /** * @brief Check if attribute has property(-ies) * * @param iAttributeIndex - * @param iFlags Property flags * * @return False is attribute doesn't exist, true otherwise **/ native bool:TF2II_AttribHasProperty( iAttributeIndex ); /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * @brief - * * @param iItemDefinitionIndex - * * @return KeyValues object **/ native Handle:TF2II_GetItemKeyValues( iItemDefinitionIndex ); /** * @brief - * * @param iItemDefinitionIndex - * @param strKey - * * @return Integer **/ native TF2II_GetItemKey( iItemDefinitionIndex, const String:strKey[] ); /** * @brief - * * @param iItemDefinitionIndex - * @param strKey - * * @return Float **/ native Float:TF2II_GetItemKeyFloat( iItemDefinitionIndex, const String:strKey[] ); /** * @brief - * * @param iItemDefinitionIndex - * @param strKey - * @param strBuffer - * @param iBufferSize - * * @noreturn **/ native TF2II_GetItemKeyString( iItemDefinitionIndex, const String:strKey[], String:strBuffer[], iBufferSize ); /** * @brief - * * @param iItemDefinitionIndex - * * @return KeyValues object **/ native Handle:TF2II_GetAttribKeyValues( iItemDefinitionIndex ); /** * @brief - * * @param iAttributeIndex - * @param strKey - * * @return Integer **/ native TF2II_GetAttribKey( iAttributeIndex, const String:strKey[] ); /** * @brief - * * @param iAttributeIndex - * @param strKey - * * @return Float **/ native Float:TF2II_GetAttribKeyFloat( iAttributeIndex, const String:strKey[] ); /** * @brief - * * @param iAttributeIndex - * @param strKey - * @param strBuffer - * @param iBufferSize - * * @noreturn **/ native TF2II_GetAttribKeyString( iAttributeIndex, const String:strKey[], String:strBuffer[], iBufferSize ); /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * @brief Check equip regions for conflicts * * @param strEquipRegionA First equip region * @param strEquipRegionB Second equip region * * @return Attribute ID on success, -1 otherwise **/ native bool:TF2II_IsConflictRegions( const String:strEquipRegionA[], const String:strEquipRegionB[] ); /** * @brief Get quality number by name * * @param strQualityName Quality name * * @return Quality number on success, -1 otherwise **/ native TF2ItemQuality:TF2II_GetQualityByName( const String:strAttributeName[] ); /** * @brief Get quality name * * @param iQuality - * @param strQualityName String to store quality name * @param iQualityNameLength String length * * @return True on success, false otherwise **/ native bool:TF2II_GetQualityName( iAttributeID, String:strAttributeName[], iAttributeNameLength ); /** * @brief Get attribute ID by name * * @param strAttributeName Attribute name * * @return Attribute ID on success, -1 otherwise **/ native _:TF2II_GetAttributeIDByName( const String:strAttributeName[] ); /** * @brief Get attribute name by ID * * @param iAttributeID - * @param strAttributeName String to store attribute name * @param iAttributeNameLength String length * * @return True on success, false otherwise **/ native bool:TF2II_GetAttributeNameByID( iAttributeID, String:strAttributeName[], iAttributeNameLength ); /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * @brief - * * @param strItemClass Item class name * @param iItemSlot Item slot number * @param strItemSlot Item slot name * @param bFilterClass Should we check for classes? * @param bUsedByClasses Array of classes with rights (example: bUsedByClasses[0]=true meaning that we should find items which scout can equip) * @param strTool Tool type * * @return Array of results **/ #pragma deprecated Use TF2II_FindItems instead. native Handle:TF2II_FindItemsIDsByCond( const String:strItemClass[] = "", iItemSlot = -1, const String:strItemSlot[] = "", bool:bFilterClass = false, bool:bUsedByClasses[10] = { false, ... }, const String:strTool[] = "" ); /** * @brief Note: all arguments are optional. Set them to detail your search query. * * @param strItemClass Item class name * @param strItemSlot Item slot name * @param iUsedByClasses Classes (bits) * @param strTool Tool type * * @return Array of item IDs **/ native Handle:TF2II_FindItems( const String:strItemClass[] = "", const String:strItemSlot[] = "", iUsedByClasses = TF2II_CLASS_NONE, const String:strTool[] = "" ); /** * @brief - * * @param bAllEffects Print valid or all effects? * * @return Array of results **/ native Handle:TF2II_ListAttachableEffects( bAllEffects = true ); native Handle:TF2II_ListEffects( bAllEffects = true ); /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * @brief Called when an item schema is parsed (or reloaded) **/ forward TF2II_OnItemSchemaUpdated(); /** * @brief Called when someone's trying to find items * * @param iClient Caller * @param strQuery Search query * @param hResults Array of results * @param bByClassname Is searching by classname? * * @noreturn **/ forward TF2II_OnSearchCommand( iClient, const String:strQuery[], &Handle:hResults, bool:bByClassname ); /** * @brief Called when some plugin's trying to find items * * @param strItemClass Item class name * @param strItemSlot Item slot name * @param iUsedByClasses Classes (bits) * @param strTool Tool type * @param hResults Array of results * * @noreturn **/ forward TF2II_OnFindItems( const String:strItemClass[], const String:strItemSlot[], iUsedByClasses, const String:strTool[], &Handle:hResults ); /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #pragma deprecated Use TF2II_ItemHasProperty() instead. native bool:TF2II_IsPromotionalItem( iItemDefinitionIndex, bool:bGenuineOnly = false ); #pragma deprecated Use TF2II_ItemHasProperty() instead. native bool:TF2II_IsUpgradeableStockWeapon( iItemDefinitionIndex ); #pragma deprecated Use TF2II_ItemHasProperty() instead. native bool:TF2II_IsFestiveStockWeapon( iItemDefinitionIndex ); /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /** * @brief - * * @param iItemDefinitionIndex - * * @return Level number **/ stock _:TF2II_GetItemLevelByID( iItemDefinitionIndex ) { new iLevel = 1; new iSlot = TF2II_GetItemSlotByID( iItemDefinitionIndex ); if( iSlot >= TF2ItemSlot_Hat && iSlot <= TF2ItemSlot_Misc ) iLevel = GetRandomInt( 1, 100 ); switch( iItemDefinitionIndex ) { case 125,262,335,336,360,434,435: iLevel = 1; case 164,343: iLevel = 5; case 115,116,126,165,240,261,268,269,270,271,272,273,274,275,276,277,263,279,346,347,486,408,409,410,470,473,490,491,492,514,515,516,517,518,519,520,537: iLevel = 10; case 422: iLevel = 13; case 166,333,392,443,483,484: iLevel = 15; case 170,189,295,299,296,345,420,432,454,1899: iLevel = 20; case 334: iLevel = 28; case 332: iLevel = 30; case 278,287,289,290,291: iLevel = 31; case 292,471: iLevel = 50; } return iLevel; } /** * @brief Get quality color by quality number * * @param nQuality - * * @return Hex code **/ stock _:TF2II_GetQualityColor( TF2ItemQuality:nQuality = TF2ItemQuality_Normal ) { if( _:nQuality < 0 || _:nQuality > sizeof( TF2ItemQualityColors ) ) return 0x000000; return TF2ItemQualityColors[_:nQuality]; } /** * @brief Get slot number by name * * @param strSlot Slot name * @param iClass Player class * * @return Item slot number **/ stock TF2ItemSlot:TF2II_GetSlotByName( const String:strSlot[], TFClassType:iClass = TFClass_Unknown ) { if( StrEqual( strSlot, "primary", false ) ) return TF2ItemSlot_Primary; else if( StrEqual( strSlot, "secondary", false ) ) return TF2ItemSlot_Secondary; else if( StrEqual( strSlot, "melee", false ) ) return TF2ItemSlot_Melee; else if( StrEqual( strSlot, "pda", false ) ) return TF2ItemSlot_PDA; else if( StrEqual( strSlot, "pda2", false ) ) return TF2ItemSlot_PDA2; else if( StrEqual( strSlot, "building", false ) ) { if( iClass == TFClass_Spy ) return TF2ItemSlot_Sapper; else return TF2ItemSlot_Building; } else if( StrEqual( strSlot, "head", false ) ) return TF2ItemSlot_Hat; else if( StrEqual( strSlot, "misc", false ) ) return TF2ItemSlot_Misc; else if( StrEqual( strSlot, "action", false ) ) return TF2ItemSlot_Action; else return TF2ItemSlot:-1; } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ stock bool:TF2II_IsBaseItem( iItemDefinitionIndex ) { return TF2II_ItemHasProperty( iItemDefinitionIndex, TF2II_PROP_BASEITEM ); } stock bool:TF2II_IsItemPaintable( iItemDefinitionIndex ) { return TF2II_ItemHasProperty( iItemDefinitionIndex, TF2II_PROP_PAINTABLE ); } stock bool:TF2II_ItemCanBeUnusual( iItemDefinitionIndex ) { return TF2II_ItemHasProperty( iItemDefinitionIndex, TF2II_PROP_UNUSUAL ); } stock bool:TF2II_ItemCanBeVintage( iItemDefinitionIndex ) { return TF2II_ItemHasProperty( iItemDefinitionIndex, TF2II_PROP_VINTAGE ); } stock bool:TF2II_IsHauntedItem( iItemDefinitionIndex ) { return TF2II_ItemHasProperty( iItemDefinitionIndex, TF2II_PROP_HAUNTED ); } stock bool:TF2II_IsHalloweenItem( iItemDefinitionIndex ) { return TF2II_ItemHasProperty( iItemDefinitionIndex, TF2II_PROP_HALLOWEEN ); } stock bool:TF2II_IsMedievalWeapon( iItemDefinitionIndex ) { return TF2II_ItemHasProperty( iItemDefinitionIndex, TF2II_PROP_MEDIEVAL ); } stock bool:TF2II_ItemCanBeStrange( iItemDefinitionIndex ) { return TF2II_ItemHasProperty( iItemDefinitionIndex, TF2II_PROP_STRANGE ); } /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ public SharedPlugin:__pl_tf2itemsinfo = { name = "tf2itemsinfo", file = "tf2itemsinfo.smx", #if defined REQUIRE_PLUGIN required = 1, #else required = 0, #endif }; /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #if !defined REQUIRE_PLUGIN public __pl_tf2itemsinfo_SetNTVOptional() { MarkNativeAsOptional("TF2II_IsItemSchemaPrecached"); MarkNativeAsOptional("TF2II_IsValidItemID"); MarkNativeAsOptional("TF2II_GetItemClass"); MarkNativeAsOptional("TF2II_GetItemSlot"); MarkNativeAsOptional("TF2II_GetItemSlotName"); MarkNativeAsOptional("TF2II_GetListedItemSlot"); MarkNativeAsOptional("TF2II_GetListedItemSlotName"); MarkNativeAsOptional("TF2II_GetItemQuality"); MarkNativeAsOptional("TF2II_GetItemQualityName"); MarkNativeAsOptional("TF2II_IsItemUsedByClass"); MarkNativeAsOptional("TF2II_GetItemMinLevel"); MarkNativeAsOptional("TF2II_GetItemMaxLevel"); MarkNativeAsOptional("TF2II_GetItemNumAttributes"); MarkNativeAsOptional("TF2II_GetItemAttributeName"); MarkNativeAsOptional("TF2II_GetItemAttributeID"); MarkNativeAsOptional("TF2II_GetItemAttributeValue"); MarkNativeAsOptional("TF2II_GetItemAttributes"); MarkNativeAsOptional("TF2II_GetToolType"); MarkNativeAsOptional("TF2II_ItemHolidayRestriction"); MarkNativeAsOptional("TF2II_GetItemEquipRegions"); MarkNativeAsOptional("TF2II_GetItemName"); MarkNativeAsOptional("TF2II_ItemHasProperty"); MarkNativeAsOptional("TF2II_IsValidAttribID"); MarkNativeAsOptional("TF2II_GetAttribName"); MarkNativeAsOptional("TF2II_GetAttribClass"); MarkNativeAsOptional("TF2II_GetAttribDispName"); MarkNativeAsOptional("TF2II_GetAttribMinValue"); MarkNativeAsOptional("TF2II_GetAttribMaxValue"); MarkNativeAsOptional("TF2II_GetAttribGroup"); MarkNativeAsOptional("TF2II_GetAttribDescrString"); MarkNativeAsOptional("TF2II_GetAttribDescrFormat"); MarkNativeAsOptional("TF2II_HiddenAttrib"); MarkNativeAsOptional("TF2II_GetAttribEffectType"); MarkNativeAsOptional("TF2II_AttribStoredAsInteger"); MarkNativeAsOptional("TF2II_AttribHasProperty"); MarkNativeAsOptional("TF2II_GetItemKeyValues"); MarkNativeAsOptional("TF2II_GetItemKey"); MarkNativeAsOptional("TF2II_GetItemKeyFloat"); MarkNativeAsOptional("TF2II_GetItemKeyString"); MarkNativeAsOptional("TF2II_GetAttribKeyValues"); MarkNativeAsOptional("TF2II_GetAttribKey"); MarkNativeAsOptional("TF2II_GetAttribKeyFloat"); MarkNativeAsOptional("TF2II_GetAttribKeyString"); MarkNativeAsOptional("TF2II_IsConflictRegions"); MarkNativeAsOptional("TF2II_GetQualityByName"); MarkNativeAsOptional("TF2II_GetQualityName"); MarkNativeAsOptional("TF2II_GetAttributeIDByName"); MarkNativeAsOptional("TF2II_GetAttributeNameByID"); MarkNativeAsOptional("TF2II_FindItems"); MarkNativeAsOptional("TF2II_ListAttachableEffects"); MarkNativeAsOptional("TF2II_ListEffects"); // Obsolete/deprecated functions MarkNativeAsOptional("TF2II_IsPromotionalItem"); MarkNativeAsOptional("TF2II_IsUpgradeableStockWeapon"); MarkNativeAsOptional("TF2II_IsFestiveStockWeapon"); MarkNativeAsOptional("TF2II_FindItemsIDsByCond"); } #endif /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */