PHP Code:
// TF2 Weapon Loadout Slots
enum
{
TFWeaponSlot_DisguiseKit = 3,
TFWeaponSlot_Watch = 4,
TFWeaponSlot_DestroyKit = 4,
TFWeaponSlot_BuildKit = 5
}
// TF2 Weapon qualities
enum
{
TFQual_None = -1,
TFQual_Normal = 0,
TFQual_Rarity1,
TFQual_Rarity2,
TFQual_Vintage,
TFQual_Rarity3, // Is actually 4
TFQual_Rarity4,
TFQual_Unusual = 5,
TFQual_Unique,
TFQual_Community,
TFQual_Developer,
TFQual_Selfmade,
TFQual_Customized,
TFQual_Strange,
TFQual_Completed,
TFQual_Haunted, // 13
TFQual_Collectors
}
#if defined _tf2items_included
stock SpawnDefault(iClient, iSlot)
{
switch (iSlot)
{
case TFWeaponSlot_Primary:
{
switch (TF2_GetPlayerClass(iClient))
{
case TFClass_Soldier: return SpawnWeapon(iClient, "tf_weapon_rocketlauncher", 18, 9, 0, "");
case TFClass_DemoMan: return SpawnWeapon(iClient, "tf_weapon_grenadelauncher", 19, 9, 0, "");
case TFClass_Medic: return SpawnWeapon(iClient, "tf_weapon_syringegun_medic", 17, 9, 0, "");
case TFClass_Pyro: return SpawnWeapon(iClient, "tf_weapon_flamethrower", 21, 9, 0, "");
case TFClass_Engineer: return SpawnWeapon(iClient, "tf_weapon_shotgun_primary", 9, 9, 0, "");
case TFClass_Sniper: return SpawnWeapon(iClient, "tf_weapon_sniperrifle", 14, 9, 0, "");
case TFClass_Scout: return SpawnWeapon(iClient, "tf_weapon_scattergun", 13, 9, 0, "");
case TFClass_Spy: return SpawnWeapon(iClient, "tf_weapon_revolver", 24, 9, 0, "");
case TFClass_Heavy: return SpawnWeapon(iClient, "tf_weapon_minigun", 15, 9, 0, "");
}
}
case TFWeaponSlot_Secondary:
{
switch (TF2_GetPlayerClass(iClient))
{
case TFClass_Soldier: return SpawnWeapon(iClient, "tf_weapon_shotgun_soldier", 10, 9, 0, "");
case TFClass_DemoMan: return SpawnWeapon(iClient, "tf_weapon_pipebomblauncher", 20, 9, 0, "");
case TFClass_Medic: return SpawnWeapon(iClient, "tf_weapon_medigun", 35, 9, 0, "");
case TFClass_Pyro: return SpawnWeapon(iClient, "tf_weapon_shotgun_pyro", 12, 9, 0, "");
case TFClass_Engineer: return SpawnWeapon(iClient, "tf_weapon_pistol", 22, 9, 0, "");
case TFClass_Sniper: return SpawnWeapon(iClient, "tf_weapon_smg", 16, 9, 0, "");
case TFClass_Scout: return SpawnWeapon(iClient, "tf_weapon_pistol_scout", 23, 9, 0, "");
case TFClass_Spy:
{
new iWeapon = SpawnWeapon(iClient, "tf_weapon_builder", 735, 9, 0, "");
SetEntProp(iWeapon, Prop_Send, "m_iObjectType", 3);
SetEntProp(iWeapon, Prop_Data, "m_iSubType", 3);
SetEntProp(iWeapon, Prop_Send, "m_aBuildableObjectTypes", 0, _, 0);
SetEntProp(iWeapon, Prop_Send, "m_aBuildableObjectTypes", 0, _, 1);
SetEntProp(iWeapon, Prop_Send, "m_aBuildableObjectTypes", 0, _, 2);
SetEntProp(iWeapon, Prop_Send, "m_aBuildableObjectTypes", 1, _, 3);
return iWeapon;
}
case TFClass_Heavy: return SpawnWeapon(iClient, "tf_weapon_shotgun_hwg", 11, 9, 0, "");
}
}
case TFWeaponSlot_Melee:
{
switch (TF2_GetPlayerClass(iClient))
{
case TFClass_Soldier: return SpawnWeapon(iClient, "tf_weapon_shovel", 6, 9, 0, "");
case TFClass_DemoMan: return SpawnWeapon(iClient, "tf_weapon_bottle", 1, 9, 0, "");
case TFClass_Medic: return SpawnWeapon(iClient, "tf_weapon_bonesaw", 37, 9, 0, "");
case TFClass_Pyro: return SpawnWeapon(iClient, "tf_weapon_fireaxe", 2, 9, 0, "");
case TFClass_Engineer: return SpawnWeapon(iClient, "tf_weapon_wrench", 7, 9, 0, "");
case TFClass_Sniper: return SpawnWeapon(iClient, "tf_weapon_club", 3, 9, 0, "");
case TFClass_Scout: return SpawnWeapon(iClient, "tf_weapon_bat", 0, 9, 0, "");
case TFClass_Spy: return SpawnWeapon(iClient, "tf_weapon_knife", 4, 9, 0, "");
case TFClass_Heavy: return SpawnWeapon(iClient, "tf_weapon_fists", 5, 9, 0, "");
}
}
case TFWeaponSlot_Watch:
{
switch (TF2_GetPlayerClass(iClient))
{
case TFClass_Spy: return SpawnWeapon(iClient, "tf_weapon_invis", 4, 9, 0, "");
default: return -1;
}
}
}
return -1;
}
stock SpawnWeapon(client, String:name[], index, level, qual, String:att[])
{
new Handle:hWeapon = TF2Items_CreateItem(OVERRIDE_ALL | FORCE_GENERATION);
if (hWeapon == INVALID_HANDLE)
{
return -1;
}
TF2Items_SetClassname(hWeapon, name);
TF2Items_SetItemIndex(hWeapon, index);
TF2Items_SetLevel(hWeapon, level);
TF2Items_SetQuality(hWeapon, qual);
new String:atts[32][32];
new count = ExplodeString(att, " ; ", atts, 32, 32);
if (count > 1)
{
TF2Items_SetNumAttributes(hWeapon, count / 2);
new i2 = 0;
for (new i = 0; i < count; i += 2)
{
TF2Items_SetAttribute(hWeapon, i2, StringToInt(atts[i]), StringToFloat(atts[i + 1]));
i2++;
}
}
else
{
TF2Items_SetNumAttributes(hWeapon, 0);
}
new entity = TF2Items_GiveNamedItem(client, hWeapon);
CloseHandle(hWeapon);
EquipPlayerWeapon(client, entity);
return entity;
}
#endif
#if defined _tf2attributes_included
/*
@return
-1 if no weapon found
0 if weapon found but attribute wasn't added
1 if weapon was found and the attribute was added
*/
stock TF2Attrib_SetToSlotByName(iClient, iSlot, String:szAttrib[], Float:flValue)
{
new iWeapon = GetPlayerWeaponSlot(iClient, iSlot);
if (iWeapon != -1)
{
if (TF2Attrib_SetByName(iWeapon, szAttrib, flValue))
{
return 1;
}
return 0;
}
return -1;
}
/*
@return
-1 if no weapon found
0 if weapon found but attribute wasn't removed
1 if weapon was found and the attribute was added
*/
stock TF2Attrib_RemoveFromSlotByName(iClient, iSlot, String:szAttrib[])
{
new iWeapon = GetPlayerWeaponSlot(iClient, iSlot);
if (iWeapon != -1)
{
if (TF2Attrib_RemoveByName(iWeapon, szAttrib))
{
return 1;
}
return 0;
}
return -1;
}
/*
@return
-1 if no weapon found
0 if weapon found but attribute wasn't added
1 if weapon was found and the attribute was added
*/
stock TF2Attrib_SetToSlotByDefIndex(iClient, iSlot, iDefIndex, Float:flValue)
{
new iWeapon = GetPlayerWeaponSlot(iClient, iSlot);
if (iWeapon != -1)
{
if (TF2Attrib_SetByDefIndex(iWeapon, iDefIndex, flValue))
{
return 1;
}
return 0;
}
return -1;
}
/*
@return
-1 if no weapon found
0 if weapon found but attribute wasn't removed
1 if weapon was found and the attribute was added
*/
stock TF2Attrib_RemoveFromSlotByDefIndex(iClient, iSlot, iDefIndex)
{
new iWeapon = GetPlayerWeaponSlot(iClient, iSlot);
if (iWeapon != -1)
{
if (TF2Attrib_RemoveByDefIndex(iWeapon, iDefIndex))
{
return 1;
}
return 0;
}
return -1;
}
stock SetNoAirblast(iEnt, bool:bApply)
{
if (bApply)
{
TF2Attrib_SetByDefIndex(iEnt, 329, 0.0);
TF2Attrib_SetByDefIndex(iEnt, 405, 0.0);
// TF2Attrib_SetByName(iEnt, "airblast vulnerability multiplier", 0.0);
// TF2Attrib_SetByName(iEnt, "airblast vertical vulnerability multiplier", 0.0);
}
else
{
TF2Attrib_RemoveByDefIndex(iEnt, 329);
TF2Attrib_RemoveByDefIndex(iEnt, 405);
// TF2Attrib_RemoveByName(iEnt, "airblast vulnerability multiplier");
// TF2Attrib_RemoveByName(iEnt, "airblast vertical vulnerability multiplier");
}
}
/*
Prints out the attribute definition index and its float value to console, based on the weapon slot.
-1 means to list the attributes on the player himself.
Returns false if no weapon was found in the slot.
*/
stock bool:TF2_AttribListAttributesBySlot(iClient, iSlot = -1)
{
new iAttribList[16];
new Float:flAttribValues[16];
new Address:aAttr;
decl iEntity;
switch (iSlot)
{
case -1:
{
iEntity = iClient;
}
default:
{
iEntity = GetPlayerWeaponSlot(iClient, iSlot);
if (!IsValidEnt(iEntity))
{
PrintToConsole(iClient, "----- No weapon found for (%N) in slot (%i) -----", iClient, iSlot);
return false;
}
}
}
PrintToConsole(iClient, "----- Listing attributes for (%N) in slot (%i) -----", iClient, iSlot);
new iCount = TF2Attrib_ListDefIndices(iEntity, iAttribList);
if (iCount > 0)
{
for (new i = 0; i < iCount; i++)
{
aAttr = TF2Attrib_GetByDefIndex(iEntity, iAttribList[i]);
flAttribValues[i] = TF2Attrib_GetValue(aAttr);
PrintToConsole(iClient, "Attrib %i: %i ; %0.2f", i+1, iAttribList[i], flAttribValues[i]);
}
}
else
{
PrintToConsole(iClient, "----- No attributes found for (%N) in slot (%i) -----", iClient, iSlot);
}
PrintToConsole(iClient, "----- Listing attributes for (%N) in slot (%i) -----", iClient, iSlot);
return true;
}
#endif