/* Plugin generated by AMXX-Studio */
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#define PLUGIN "Wieksze magazynki"
#define VERSION "1.1"
#define AUTHOR "Soccdoodcss, edit: funfel5"
#define MAXPLAYERS 32
#pragma semicolon 1;
new g_iBuyAmmo[MAXPLAYERS + 1];
new g_iHasDead[MAXPLAYERS + 1];
new g_iTries[MAXPLAYERS + 1];
public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_event("DeathMsg", "evDeath", "a");
	register_event("AmmoX", "evReload", "be");
	register_event("AmmoPickup", "evAmmo", "be");
	register_event("CurWeapon", "evCurWeapon", "be");
	register_event("TextMsg", "evWillRestartRound", "a", "2=#Game_Commencing");
	
	register_logevent("evRestartRound", 2, "1=Restart_Round_(0_second)");
}
public evWillRestartRound()
{
	set_task(3.0, "evRestartRound");
}
public evRestartRound()
{
	new iPlayers[32], iNum;
	get_players(iPlayers, iNum);
	for(new g = 0 ; g < iNum ; g++)
	{		
		new id = iPlayers[g];
		
		if(is_user_connected(id))
			g_iHasDead[id] = 1;
		
		set_task(0.1, "taskSetKnife", id);
	}
}
public taskSetKnife(id)
{
	if(is_user_alive(id))
	{
		new WeapID = get_user_weap_index(id);
		new parm[2];
		
		parm[0] = id;
		parm[1] = WeapID;
		
		client_cmd(id, "weapon_knife");
		
		set_task(0.1, "taskReWeap", id + 96, parm, 2);
	}
}
public plugin_log() {
	if(read_logargc() != 2)
		return;
	
	new szArg[16];
	read_logargv(1, szArg, 15);
	
	if(equal(szArg, "Restart_Round_("))
	{
		new Time1 = get_cvar_num("sv_restart");
		new Time2 = get_cvar_num("sv_restartround");
		new Time3 = Time1 + Time2;
		new Float:flTime4 = float(Time3);
		set_task(flTime4, "evRestartRound");
	}
}
public evDeath()
{
	new iVictim = read_data(2);
	
	if(is_user_connected(iVictim))
	{
		g_iHasDead[iVictim] = 1;
		
	}
	
	return PLUGIN_CONTINUE;
}
public client_connect(id)
{
	g_iHasDead[id] = 1;
}
public client_disconnect(id)
{
	g_iHasDead[id] = 1;
}
public evCurWeapon(id)
{
	if(g_iHasDead[id] && is_user_alive(id))	
		set_task(0.5, "taskFullClip", id);
}
public taskFullClip(id)
{
	new WeapID = get_user_weap_index(id);
	if(!WeapID || WeapID == CSW_C4 || WeapID == CSW_KNIFE)
		return PLUGIN_HANDLED;
	
	if(get_user_weap_clip(id) == max_clip(WeapID))
	{
		g_iHasDead[id] = 0;
		
		return PLUGIN_CONTINUE;
	}
	
	new parm[2];
	parm[0] = id;
	parm[1] = WeapID;
	
	set_user_weap_clip(id, WeapID, max_clip(WeapID));
	set_task(0.1, "taskUnWeap", id + 64, parm, 2);
	
	g_iTries[id] = 0;
	
	return PLUGIN_CONTINUE;
}
public taskUnWeap(parm[])
{
	new id = parm[0];
	
	client_cmd(id, "weapon_knife");
	
	set_task(0.1, "taskReWeap", id +96, parm, 2);
}
public taskReWeap(parm[])
{
	new id = parm[0];
	new WeapID = parm[1];
	new szWeapName[33];
	
	get_weaponname(WeapID, szWeapName, 32);
	
	client_cmd(id, "%s", szWeapName);
	
	g_iHasDead[id] = 1;
	
	return PLUGIN_CONTINUE;
}
public evAmmo(id)
{
	if(!is_user_alive(id))
		return PLUGIN_HANDLED;
	
	g_iBuyAmmo[id] = 1;
	
	set_task(0.5, "taskResetAmmo", id);
	
	return PLUGIN_CONTINUE;
}
public taskResetAmmo(id)
{
	g_iBuyAmmo[id] = 0;
}
public evReload(id)
{
	if(!is_user_alive(id) || g_iBuyAmmo[id])
		return PLUGIN_HANDLED;
	
	new WeapID = get_user_weap_index(id);
	
	if(!WeapID)
		return PLUGIN_HANDLED;
	
	new Clip = get_user_weap_clip(id);
	new Ammo = get_user_weap_backpack(id);
	
	if(Clip != max_clip(WeapID))
	{			
		new ClipDif = Clip - get_max_clip(WeapID);
		new MissingClip = max_clip(WeapID) - Clip;
		new EndAmmo = Ammo - MissingClip - ClipDif;
		
		if(EndAmmo < 0)
		{
			MissingClip += EndAmmo;
			EndAmmo = 0;
		}
		
		new EndClip = Clip + MissingClip;
		
		set_user_weap_clip(id, WeapID, EndClip);
		set_user_weap_backpack(id, WeapID, EndAmmo);
	}
	else
	{
		return PLUGIN_HANDLED;
	}
	
	return PLUGIN_CONTINUE;
}
get_user_weap_index(id)
{
	new Clip, Ammo, WeapID;
	
	WeapID = get_user_weapon(id, Clip, Ammo);
	
	return WeapID;
}
get_user_weap_clip(id)
{
	new Clip, Ammo;
	
	get_user_weapon(id, Clip, Ammo);
	
	return Clip;
}
get_user_weap_backpack(id)
{
	new Clip, Ammo;
	
	get_user_weapon(id, Clip, Ammo);
	
	return Ammo;
}
set_user_weap_backpack(id, WeapID, Amount)
{
	if(WeapID == CSW_C4 || WeapID == CSW_KNIFE)
		return PLUGIN_HANDLED;
	
	fm_set_user_bpammo(id, WeapID, Amount);
	
	return PLUGIN_CONTINUE;
}
set_user_weap_clip(id, WeapID, Amount)
{
	if(WeapID == CSW_C4 || WeapID == CSW_KNIFE)
		return PLUGIN_HANDLED;
	fm_set_weapon_ammo(id, WeapID, Amount);
	
	return PLUGIN_CONTINUE;
}
eng_get_ent_by_class(EntID, szClassName[])
{
	return engfunc(EngFunc_FindEntityByString, EntID, "classname", szClassName);
}
get_max_clip(WeapID)
{	
	return reget_max_clip(WeapID);
}
reget_max_clip(WeapID)
{
	new MaxClip = 0;
	
	switch(WeapID)
	{
		case CSW_P228 : MaxClip = 13;
			
		case CSW_SCOUT : MaxClip = 10;
			
		case CSW_HEGRENADE : MaxClip = 1;
			
		case CSW_XM1014 : MaxClip = 7;
			
		case CSW_C4 : MaxClip = 1;
			
		case CSW_MAC10 : MaxClip = 30;
			
		case CSW_AUG : MaxClip = 30;
			
		case CSW_SMOKEGRENADE : MaxClip = 1;
			
		case CSW_ELITE : MaxClip = 30;
			
		case CSW_FIVESEVEN : MaxClip = 20;
			
		case CSW_UMP45 : MaxClip = 25;
			
		case CSW_SG550 : MaxClip = 30;
			
		case CSW_GALI : MaxClip = 35;
			
		case CSW_FAMAS : MaxClip = 25;
			
		case CSW_USP : MaxClip = 12;
			
		case CSW_GLOCK18 : MaxClip = 20;
			
		case CSW_AWP : MaxClip = 10;
			
		case CSW_MP5NAVY : MaxClip = 30;
			
		case CSW_M249 : MaxClip = 100;
			
		case CSW_M3 : MaxClip = 8;
			
		case CSW_M4A1 : MaxClip = 30;
			
		case CSW_TMP : MaxClip = 30;
			
		case CSW_G3SG1 : MaxClip = 20;
			
		case CSW_FLASHBANG : MaxClip = 2;
			
		case CSW_DEAGLE	: MaxClip = 7;
			
		case CSW_SG552 : MaxClip = 30;
			
		case CSW_AK47 : MaxClip = 30;
			
		case CSW_P90 : MaxClip = 50;
			
		default: return PLUGIN_HANDLED;
	}
	return MaxClip;
}
max_clip(WeapID) /* Tu zwiekszamy naboje */
{
	new MaxClip = 0;
	
	switch(WeapID)
	{
		case CSW_P228 : MaxClip = 13;
			
		case CSW_SCOUT : MaxClip = 10;
			
		case CSW_HEGRENADE : MaxClip = 1;
			
		case CSW_XM1014 : MaxClip = 7;
			
		case CSW_C4 : MaxClip = 1;
			
		case CSW_MAC10 : MaxClip = 30;
			
		case CSW_AUG : MaxClip = 30;
			
		case CSW_SMOKEGRENADE : MaxClip = 1;
			
		case CSW_ELITE : MaxClip = 30;
			
		case CSW_FIVESEVEN : MaxClip = 20;
			
		case CSW_UMP45 : MaxClip = 25;
			
		case CSW_SG550 : MaxClip = 30;
			
		case CSW_GALI : MaxClip = 35;
			
		case CSW_FAMAS : MaxClip = 25;
			
		case CSW_USP : MaxClip = 12;
			
		case CSW_GLOCK18 : MaxClip = 20;
			
		case CSW_AWP : MaxClip = 10;
			
		case CSW_MP5NAVY : MaxClip = 30;
			
		case CSW_M249 : MaxClip = 100;
			
		case CSW_M3 : MaxClip = 8;
			
		case CSW_M4A1 : MaxClip = 30;
			
		case CSW_TMP : MaxClip = 30;
			
		case CSW_G3SG1 : MaxClip = 20;
			
		case CSW_FLASHBANG : MaxClip = 2;
			
		case CSW_DEAGLE	: MaxClip = 7;
			
		case CSW_SG552 : MaxClip = 30;
			
		case CSW_AK47 : MaxClip = 30;
			
		case CSW_P90 : MaxClip = 50;
			
		default: return PLUGIN_HANDLED;
	}
	return MaxClip;
}
fm_set_user_bpammo(id, Weapon, Ammo)
{
	static sOffset;
	
	switch(Weapon)
	{
		case CSW_AWP : sOffset = 377;
		
		case CSW_SCOUT, CSW_AK47,CSW_G3SG1 : sOffset = 378;
		
		case CSW_M249 : sOffset = 379;
		
		case CSW_M4A1, CSW_FAMAS,CSW_AUG,CSW_SG550,CSW_GALI,CSW_SG552 : sOffset = 380;
		
		case CSW_M3, CSW_XM1014 : sOffset = 381;
		
		case CSW_USP, CSW_UMP45, CSW_MAC10 : sOffset = 382;
		
		case CSW_FIVESEVEN, CSW_P90 : sOffset = 383;
		
		case CSW_DEAGLE : sOffset = 384;
		
		case CSW_P228 : sOffset = 385;
		
		case CSW_GLOCK18, CSW_MP5NAVY, CSW_TMP, CSW_ELITE : sOffset = 386;
		
		case CSW_FLASHBANG : sOffset = 387;
		
		case CSW_HEGRENADE : sOffset = 388;
		
		case CSW_SMOKEGRENADE : sOffset = 389;
		
		case CSW_C4 : sOffset = 390;
		
		default : return;
	}
	
	set_pdata_int(id, sOffset, Ammo, 5);
}
fm_set_weapon_ammo(id, Weapon, Ammo)
{
	new szWeapName[32], WeapID = -1;
	get_weaponname(Weapon, szWeapName, 31);
	
	while((WeapID = eng_get_ent_by_class(WeapID, szWeapName)) != 0)
	{	
		if(pev(WeapID, pev_owner) == id)
		{
			set_pdata_int(WeapID, 51, Ammo, 4);
			
			return WeapID;
		}
	}
	return PLUGIN_HANDLED;
}