I trying to make multiply attributes for weapons, but when i do that clients just crashing in all way that i tryed to do.
I tryed to use standart tf2 attributes library and
https://github.com/nosoop/SM-TFEconData/releases, but them both crashing clients.
Way 1
PHP Code:
int defIndixes[16];
float defValues[16];
int multiply = 100;
const int numWeaponSlots = 3;
int slot[numWeaponSlots] = {WeaponSlot_Primary, WeaponSlot_Secondary, WeaponSlot_Melee};
for (int i=0; i<numWeaponSlots; i++)
{
int weapIndex = GetPlayerWeaponSlot(client, slot[i]);
int numAttrs = TF2Attrib_GetStaticAttribs(GetItemDefinition(weapIndex), defIndixes, defValues);
for (int b = 0; b < numAttrs; b++)
{
char typedescription[32];
if ( TF2Econ_GetAttributeDefinitionString( defIndixes[b], "description_format", typedescription, 32 ) )
{
if ( StrEqual( typedescription, "value_is_additive" ) || StrEqual( typedescription, "value_is_percentage" ) &&
defValues[b] < 100.0 ) //for some reason some values are not Float
{
TF2Attrib_SetByDefIndex(weapIndex, defIndixes[b], defValues[b] * multiply);
}
}
}
if (numAttrs > 0)
TF2Attrib_ClearCache(weapIndex);
}
Way 2
PHP Code:
bool isCompatibleItem(char[] classname, int iItemDefinitionIndex)
{
return StrContains(classname, "tf_weapon") != -1 ||
StrEqual(classname, "saxxy") ||
StrEqual(classname, "tf_wearable_demoshield") ||
(StrEqual(classname, "tf_wearable") &&
(iItemDefinitionIndex == 133 ||
iItemDefinitionIndex == 444 ||
iItemDefinitionIndex == 405 ||
iItemDefinitionIndex == 608 ||
iItemDefinitionIndex == 57 ||
iItemDefinitionIndex == 231 ||
iItemDefinitionIndex == 642));
}
public int TF2Items_OnGiveNamedItem_Post(int client, char[] classname, int itemDefinitionIndex, int itemLevel, int itemQuality, int entityIndex)
{
int multiply = 100;
if (!isCompatibleItem(classname, itemDefinitionIndex)
|| (itemQuality == 5 && itemDefinitionIndex != 266)
|| itemQuality == 8 || itemQuality == 10)
{
return;
}
int defIndixes[16];
float defValues[16];
int numAttrs = TF2Attrib_GetStaticAttribs(GetItemDefinition(entityIndex), defIndixes, defValues);
for (int b = 0; b < numAttrs; b++)
{
char typedescription[32];
if ( TF2Econ_GetAttributeDefinitionString( defIndixes[b], "description_format", typedescription, 32 ) )
{
if ( StrEqual( typedescription, "value_is_additive" ) || StrEqual( typedescription, "value_is_percentage" ) && defValues[b] < 100.0 )
{
TF2Attrib_SetByDefIndex(entityIndex, defIndixes[b], defValues[b] * multiply);
}
}
}
}
What i do wrong?