/*================================================================================
=================================================================================*/
 
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
 
#define PLUGIN_VERSION "1.0"
 
const m_iFOV = 363
const m_iPlayer = 41
const m_iClipAmmo = 51
const m_iExtraOffsetLinux = 4
const m_iExtraOffsetWindows = 0
 
#pragma semicolon 1
 
new model_ak47_sniper[] = "models/v_ak47.mdl";
 
new gAlive[33];
new gZoom[33];
new gReloading[33];
 
public plugin_precache()
	engfunc(EngFunc_PrecacheModel, model_ak47_sniper);
 
public plugin_init()
{
	register_plugin("AK super", PLUGIN_VERSION, "muzzaik");
 
	register_forward(FM_CmdStart, "fwCmdStart");
 
	RegisterHam(Ham_Spawn, "player", "fwPlayerSpawnPost", 1);
	RegisterHam(Ham_Killed, "player", "fwPlayerKilled");
	RegisterHam(Ham_Weapon_Reload, "weapon_ak47", "fwWeaponReload");
	RegisterHam(Ham_Item_Deploy, "weapon_ak47", "fwItemDeployPost", 1);
 
	register_cvar("ak47_sniper", PLUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY);
}
 
public fwCmdStart(id, uc_handle, seed)
{
	if (!gAlive[id]) return FMRES_IGNORED;
 
	static button, oldbuttons, weapon;
	button = get_uc(uc_handle, UC_Buttons);
	oldbuttons = pev(id, pev_oldbuttons);
	weapon = get_user_weapon(id);
 
	if ((button & IN_USE) && !(oldbuttons & IN_USE))
	{
		if (weapon == CSW_AK47)
		{
			if (!gZoom[id] && !gReloading[id])
			{
				gZoom[id] = true;
				set_pdata_int(id, m_iFOV, 35, 5);
				emit_sound(id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100);
			}
			else
			{
				if (gZoom[id])
				{
					gZoom[id] = false;
					set_pdata_int(id, m_iFOV, 90, 5);
				}
			}
		}
	}
	return FMRES_IGNORED;
}
 
public fwPlayerSpawnPost(id) if (is_user_alive(id)) gAlive[id] = true;
 
public fwPlayerKilled(victim, attacker, shouldgib) gAlive[victim] = false;
 
public fwWeaponReload(weapon)
{
	if (fm_get_weapon_ammo(weapon) != 100)
	{
		static id;
		id = get_pdata_cbase(weapon, m_iPlayer, 6);
 
		set_pdata_int(id, m_iFOV, 90, 5);
 
		gReloading[id] = true;
		set_task(2.3, "taskWeaponReloaded", id);
	}
}
 
public taskWeaponReloaded(id)
	gReloading[id] = false;
 
public fwItemDeployPost(weapon)
{
	static id;
	id = get_pdata_cbase(weapon, m_iPlayer, 4);
 
	set_pev(id, pev_viewmodel2, model_ak47_sniper);
}
 
// cs_to_fm
stock fm_get_weapon_ammo(weapon)
	return get_pdata_int(weapon, m_iClipAmmo, is_linux_server() ? m_iExtraOffsetLinux : m_iExtraOffsetWindows);