#include <amxmodx>
#include <hamsandwich>
#include <reapi>
public stock const PluginName[] = "[Gameplay] Weaponstate remember";
public stock const PluginVersion[] = "1.1.0";
public stock const PluginAuthor[] = "ufame / improved";
new WeaponState:g_iWeaponState[MAX_PLAYERS + 1][WeaponIdType];
public plugin_init()
{
#if AMXX_VERSION_NUM < 200
register_plugin(PluginName, PluginVersion, PluginAuthor);
#endif
static const szWeaponList[][] =
{
"weapon_m4a1",
"weapon_usp",
"weapon_famas",
"weapon_glock18"
};
for (new i = 0; i < sizeof szWeaponList; i++)
{
RegisterHam(Ham_Item_AddToPlayer, szWeaponList[i], "OnItemAddToPlayerPost", true);
RegisterHam(Ham_Weapon_SecondaryAttack, szWeaponList[i], "OnWeaponSecondaryAttackPost", true);
}
}
public client_disconnected(id)
{
if (!IsPlayer(id))
return;
ClearPlayerWeaponStates(id);
}
public OnWeaponSecondaryAttackPost(const weapon)
{
if (is_nullent(weapon))
return HAM_IGNORED;
new player = get_member(weapon, m_pPlayer);
if (!IsPlayer(player))
return HAM_IGNORED;
new WeaponIdType:weaponId = get_member(weapon, m_iId);
if (!IsValidWeaponId(weaponId))
return HAM_IGNORED;
g_iWeaponState[player][weaponId] = get_member(weapon, m_Weapon_iWeaponState);
return HAM_IGNORED;
}
public OnItemAddToPlayerPost(const weapon, const player)
{
if (is_nullent(weapon))
return HAM_IGNORED;
if (!IsPlayer(player))
return HAM_IGNORED;
new WeaponIdType:weaponId = get_member(weapon, m_iId);
if (!IsValidWeaponId(weaponId))
return HAM_IGNORED;
set_member(weapon, m_Weapon_iWeaponState, g_iWeaponState[player][weaponId]);
return HAM_IGNORED;
}
stock ClearPlayerWeaponStates(const player)
{
arrayset(_:g_iWeaponState[player], 0, sizeof g_iWeaponState[]);
}
stock bool:IsPlayer(const index)
{
return (1 <= index <= MaxClients);
}
stock bool:IsValidWeaponId(const WeaponIdType:weaponId)
{
return (WEAPON_NONE < weaponId < WeaponIdType);
}