Page 1 of 1

[C] Modificare [rezolvat]

Posted: 09 Jul 2018, 18:39
by ImparctVirtual
as vrea daca se poate rog din suflet sa mi-se modifice pluginul acesta,
cand cumpar 1000 HP sa am limita maxim odata pe runda
| Afiseaza codul
#include < amxmodx >
#include amxmisc
#include cstrike
#include < fakemeta_util >
#include < fun >
#include < engine >
#include hamsandwich
#include nvault
#include < zombieplague63 >
#include chr_engine

#define FADE_IN      0x0000
#define FADE_OUT      0x0001
#define FADE_MODULATE   0x0002
#define FADE_STAYOUT   0x0004

#define MAX_ENTITIES		(global_get(glb_maxEntities))
#define MINE_ON			1
#define MINE_OFF			0
#define TASK_CREATE		847655612
#define TASK_REMOVE		867661231
#define MINE_COST			5
#define MINE_CLASSNAME		"zp_mine"
#define MINE_MODEL_EXPLODE	"sprites/zerogxplode.spr"
#define MINE_MODEL_VIEW		"models/zombie_plague/lasermine.mdl"
#define MINE_SOUND_ACTIVATE	"weapons/mine_activate.wav"
#define MINE_SOUND_CHARGE		"weapons/mine_charge.wav"
#define MINE_SOUND_DEPLOY		"weapons/mine_deploy.wav"
#define MINE_HEALTH		800.0
#define entity_get_owner(%0)		entity_get_int( %0, EV_INT_iuser2 )
#define entity_get_status(%0)		entity_get_int( %0, EV_INT_iuser1 )
#define entity_get_classname(%0,%1)	entity_get_string( %0, EV_SZ_classname, %1, charsmax( %1 ) )

new g_iTripMines[ 33 ];
new g_iPlantedMines[ 33 ];
new g_iPlanting[ 33 ];
new g_iRemoving[ 33 ];
new g_iMineIds[33][2];
new g_multijumps[33];
new g_hExplode;
new g_hud[3];
new g_itemid;
new g_armor100;
new g_armor200;
new g_armor300;
new g_multijump;
new g_zgravity;
new g_zmultijump;
new g_specialmultijump;
new g_health;
new g_gravity;
new g_moddeagle;
new g_modak;
new g_ak;
new g_deagle;
new g_buyassassin;
new g_buynemesis;
new g_jetpack;
new g_buysniper;
new g_buysurvivor;
new g_modjetpack;
new jumpnum[33] = 0
new bool:dojump[33] = false
new g_isingravity[33]
new g_goldenak[33]
new g_goldendeagle[33]
new g_clip
new g_jet[33]
new g_blink[33]
new g_iblink, g_imodblink
new g_enemy[33]
new Float:g_fuel[33], Float:g_rocket[33]
new g_shockwave
new g_trail
new g_flame
new g_rounds[512]
new g_tryder[33]
new g_tryderid
new g_modscount=0
new g_modgravity
new g_curround = 0
new g_inround = false

// CS Offsets
#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif
const OFFSET_LINUX_WEAPONS = 4

// Max Clip for weapons
new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20,
			10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }

setJetpack( Player)
{
	set_pev(Player, pev_viewmodel2, "models/v_egon.mdl")
	set_pev(Player, pev_weaponmodel2, "models/p_egon.mdl")
}

setKnife( Player)
{
	set_pev(Player, pev_viewmodel2, "models/v_knife.mdl")
	set_pev(Player, pev_weaponmodel2, "models/p_knife.mdl")
}

dropJetpack( Player,  Forced = false)
{
	new Float:origin[3];
	pev(Player, pev_origin, origin);

	new Float:vangle[3];
	pev(Player, pev_v_angle, vangle);
	engfunc(EngFunc_MakeVectors, vangle);
	
	new Float:fwd[3];
	global_get(glb_v_forward, fwd);
	fwd[0] *= 75.0;
	fwd[1] *= 75.0;
	fwd[2] *= 75.0;
	
	origin[0] += fwd[0]
	origin[1]+=fwd[1]

	new Trace=0;
	engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS | IGNORE_GLASS, HULL_HUMAN, 0, Trace);
	if (get_tr2(Trace, TR_StartSolid) || get_tr2(Trace, TR_AllSolid) || !get_tr2(Trace, TR_InOpen))
	{
		if (Forced)
		{
			g_jet[Player]=false

			if (is_user_alive(Player))
			{
				client_cmd(Player, "weapon_knife");
				setKnife(Player);
			}
		}
	}

	else
	{
		new pJetpack = create_entity("info_target");
		if (pev_valid(pJetpack))
		{
			engfunc(EngFunc_SetModel, pJetpack, "models/p_egon.mdl");
			engfunc(EngFunc_SetSize,pJetpack, Float:{-16.0, -16.0, -16.0},Float:{16.0, 16.0, 16.0});

			set_pev(pJetpack, pev_classname, "Jetpack")
			set_pev(pJetpack, pev_movetype, MOVETYPE_TOSS);
			set_pev(pJetpack, pev_solid, SOLID_TRIGGER);
			set_pev(pJetpack, pev_origin, origin);

			g_jet[Player] = false;

			if (is_user_alive(Player))
			{
				client_cmd(Player, "weapon_knife");
				setKnife(Player);
			}
		}
	}
}

public Drop(id)
{
	if (!is_user_connected(id))
		return 0;

	if (get_user_weapon(id)==CSW_KNIFE)
	{
		if (g_jet[id])
			dropJetpack(id, false)

		return 1;
	}
	
	return 0;
}

public plugin_init( )
{
	register_plugin( "[ZM] Extra Items [Especially Trip Mines]", "1.0", "Hattrick" );

	register_cvar("zp_limit_buy_mod_hours", "6") // a player can buy mod in how many hours?
	register_cvar("zp_map_mods_limit", "2") // how many mods can be purchased in map?
	
	register_cvar("zp_enable_bazooka_knockback", "0") // when bazooka's projectile explodes, change players position on map?
	register_cvar("zp_enable_bazooka_k_humans", "0") // if enabled above,   also include humans??
	register_cvar("zp_enable_bazooka_redfade", "0") // if enabled,   zombies get red screenfade if damaged by bazooka projectile?
	register_cvar("zp_enable_bazooka_flatline", "1") // if enabled,   zombies get sound while damaged by bazooka projectile?

	register_cvar("zp_enable_lasermine_knockback", "0") // when lasermine explodes, change players position on map?
	register_cvar("zp_enable_lasermine_k_humans", "0") // if enabled above,   also include humans??
	register_cvar("zp_enable_lasermine_redfade", "0") // if enabled,   zombies get red screenfade if damaged by lasermine?
	register_cvar("zp_enable_lasermine_flatline", "1") // if enabled,   zombies get sound while damaged by lasermine?

	register_forward(FM_Touch, "DispatchTouch");
	register_forward(FM_ClientDisconnect, "ClientDisconnect");
	
	register_clcmd( "say /lm", "Command_Buy" );
	register_clcmd( "say lm", "Command_Buy" );
	register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
	register_clcmd( "say_team /lm", "Command_Buy" );
	register_clcmd( "say_team lm", "Command_Buy" );
	
	register_clcmd("drop", "Drop");

	register_clcmd( "Plant_Mine", "Command_Plant" );
	register_clcmd( "Take_Mine", "Command_Take" );

	register_logevent( "Event_RoundStart", 2, "1=Round_Start" );
	register_logevent( "Event_RoundEnd", 2, "1=Round_End" );
	register_think( MINE_CLASSNAME, "Forward_Think" );
	
	// Health
	g_health = zp_register_extra_item("Health (+1,000 H.P.)", 25, ZP_TEAM_HUMAN|ZP_TEAM_SURVIVOR|ZP_TEAM_SNIPER);
	
	// Armors
	g_armor100 = zp_register_extra_item("Armor (100 A.P.)", 5, ZP_TEAM_HUMAN);
	g_armor200 = zp_register_extra_item("Armor (200 A.P.)", 9, ZP_TEAM_HUMAN);
	g_armor300 = zp_register_extra_item("Armor (300 A.P.)", 12, ZP_TEAM_HUMAN);
	
	// Clip
	g_clip = zp_register_extra_item("Unlimited Clip", 12, ZP_TEAM_HUMAN);
	
	// Jetpack
	g_jetpack = zp_register_extra_item("Jetpack + Bazooka", 32, ZP_TEAM_HUMAN);
	g_modjetpack = zp_register_extra_item("*MOD* Jetpack + Bazooka", 45, ZP_TEAM_SNIPER | ZP_TEAM_SURVIVOR);

	// Tryder
	g_tryderid=zp_register_extra_item("Tryder", 36, ZP_TEAM_HUMAN);
	
	// Laser
	g_itemid = zp_register_extra_item("Trip Mine (/LM)", MINE_COST, ZP_TEAM_HUMAN|ZP_TEAM_SURVIVOR|ZP_TEAM_SNIPER)
	
	// Jump
	g_multijump = zp_register_extra_item("Multi Jump (+1)", 3, ZP_TEAM_HUMAN);
	g_zmultijump = zp_register_extra_item("ZM Multi Jump (+1)", 5, ZP_TEAM_ZOMBIE);
	g_specialmultijump = zp_register_extra_item("*MOD* Multi Jump (+1)", 10, ZP_TEAM_SURVIVOR | ZP_TEAM_SNIPER | ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS);
	
	// Graviy
	g_gravity = zp_register_extra_item("Extra Gravity", 8, ZP_TEAM_HUMAN);
	g_zgravity = zp_register_extra_item("ZM Extra Gravity", 15, ZP_TEAM_ZOMBIE);
	g_modgravity = zp_register_extra_item("*MOD* Extra Gravity", 20, ZP_TEAM_SNIPER | ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS | ZP_TEAM_SURVIVOR);
	
	// AK
	g_ak = zp_register_extra_item("Gold Ak47 (More Damage)", 18, ZP_TEAM_HUMAN);
	g_modak = zp_register_extra_item("*MOD* Gold Ak47 (More Damage)", 24, ZP_TEAM_SURVIVOR);
	
	// Deagle
	g_deagle = zp_register_extra_item("Gold Deagle (More Damage)", 10, ZP_TEAM_HUMAN);
	g_moddeagle = zp_register_extra_item("*MOD* Gold Deagle (More Damage)", 12, ZP_TEAM_SURVIVOR);
	
	// Mod
	g_buyassassin = zp_register_extra_item("Buy Assassin", 190, ZP_TEAM_HUMAN);
	g_buynemesis = zp_register_extra_item("Buy Nemesis", 190, ZP_TEAM_HUMAN);
	g_buysniper = zp_register_extra_item("Buy Sniper", 300, ZP_TEAM_HUMAN);
	g_buysurvivor = zp_register_extra_item("Buy Survivor", 300, ZP_TEAM_HUMAN);

	// Blink
	g_iblink = zp_register_extra_item("Knife Blink (1s)", 5, ZP_TEAM_ZOMBIE);
	g_imodblink = zp_register_extra_item("*MOD* Knife Blink (1s)", 8, ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS);
	
	RegisterHam(Ham_Killed, "player", "onKilled");

	register_event("StatusValue", "event_show_status", "be", "1=2", "2!0")
	register_event("StatusValue", "event_hide_status", "be", "1=1", "2=0")
	
	g_hud[0] = CreateHudSyncObj();
	g_hud[1] = CreateHudSyncObj();
	g_hud[2] = CreateHudSyncObj();
}

public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
	// Player doesn't have the unlimited clip upgrade
	if (!g_tryder[msg_entity])
		return;
	
	// Player not alive or not an active weapon
	if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1)
		return;
	
	static weapon, clip
	weapon = get_msg_arg_int(2) // get weapon ID
	clip = get_msg_arg_int(3) // get weapon clip
	
	// Unlimited Clip Ammo
	if (MAXCLIP[weapon] > 2) // skip grenades
	{
		set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon]) // HUD should show full clip all the time
		
		if (clip < 2) // refill when clip is nearly empty
		{
			// Get the weapon entity
			static wname[32], weapon_ent
			get_weaponname(weapon, wname, sizeof wname - 1)
			weapon_ent = fm_find_ent_by_owner(-1, wname, msg_entity)
			
			// Set max clip on weapon
			if (pev_valid(weapon_ent)==2)
			fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon])
		}
	}
}

public zp_round_started(gamemode, id)
{
	g_rounds[g_curround++] = gamemode;
	g_inround=true
}

public zp_round_ended(winteam)
{
	g_inround=false
}

public event_show_status(id)
{
	if (is_user_alive(id) && g_blink[id])
	{
		new enemy = read_data(2)
		if (is_user_alive(enemy) && !zp_get_user_zombie(enemy))
			g_enemy[id] = enemy;
		else
			g_enemy[id] = 0
	}
}

public event_hide_status(id)
{
	if (is_user_alive(id) && g_blink[id])
	{
		g_enemy[id] = 0
	}
}

public Event_RoundEnd()
{
	for ( new i = 1; i <=get_maxplayers(); i++)
	{
		g_isingravity = false
		g_multijumps = 0
		jumpnum = 0
		dojump = false
		g_blink= false

		if (is_user_alive(i)&&!zp_get_user_zombie(i))
		{
			if (g_tryder)
				cs_set_user_armor(i, 0,CS_ARMOR_NONE)
			if (get_user_health(i)>get_cvar_num("zp_human_health"))
				set_user_health(i, get_cvar_num("zp_human_health"))
		}
		g_tryder=false
	}
}

public Event_RoundStart( )
{
	static iEntity, szClassName[ 32 ], iPlayer;
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) || equali(szClassName, "Jetpack") || equali(szClassName, "Rocket"))
			remove_entity( iEntity );
	}
	
	for( iPlayer = 1; iPlayer < 33; iPlayer++ )
	{
		g_iTripMines[ iPlayer ] = 0;
		g_iPlantedMines[ iPlayer ] = 0;
		g_iMineIds[iPlayer][0] = 0;
		g_iMineIds[iPlayer][1] = 0;
		g_fuel[iPlayer]=250.0;
		g_rocket[iPlayer]=get_gametime()+random_float(0.2, 2.0)
	}
}

public onKilled(victim, killer, gib)
{
	if (g_isingravity[victim])
	{
		if (get_user_gravity(victim) <= 0.5)
		{
			set_user_gravity(victim, 1.0)
		}
	}
	g_isingravity[victim] = false
	g_multijumps[victim] = 0
	jumpnum[victim] = 0
	dojump[victim] = false
	g_goldenak[victim]=false
	g_goldendeagle[victim]=false
	if (g_jet[victim])
		dropJetpack(victim,true)
	g_fuel[victim]=0.0
	g_rocket[victim]=0.0
	g_jet[victim]=false
	g_tryder[victim]=false
	g_blink[victim]= false
}

public zp_user_humanized_pre(id, survivor)
{
	g_isingravity[id]=false
	g_multijumps[id]=false
	g_blink[id]=false
	g_rocket[id]=0.0
	g_fuel[id]=0.0
}

public zp_user_infected_pre(id, infector, nemesis)
{
	g_goldenak[id]=false
	g_goldendeagle[id]=false
	if (g_jet[id])
		dropJetpack(id,true)
	g_isingravity[id]=false
	g_multijumps[id]=false
	g_rocket[id]=0.0
	g_fuel[id]=0.0
}

public client_disconnect( iPlayer )
{
	g_goldenak[iPlayer]=false
	g_goldendeagle[iPlayer]=false
	g_isingravity[iPlayer] = false
	g_multijumps[iPlayer] = 0
	jumpnum[iPlayer] = 0
	g_blink[iPlayer]= false
	dojump[iPlayer] = false
	g_rocket[iPlayer]=0.0
	g_tryder[iPlayer]=false
	g_fuel[iPlayer]=0.0
	
	if (g_iPlantedMines[ iPlayer ] > 0)
	{
		Func_RemoveMinesByOwner( iPlayer );
		g_iPlantedMines[ iPlayer ] = 0;
	}

	g_iTripMines[ iPlayer ] = 0;

	g_iPlanting[ iPlayer ] = false;
	g_iRemoving[ iPlayer ] = false;

	g_iMineIds[iPlayer][0] = 0;
	g_iMineIds[iPlayer][1] = 0;
	
	if (task_exists(iPlayer + TASK_REMOVE))
		remove_task( iPlayer + TASK_REMOVE );
	if (task_exists(iPlayer + TASK_CREATE))
		remove_task( iPlayer + TASK_CREATE );
}

public client_PreThink(id)
{
	if (is_user_alive(id))
	{
		if (g_isingravity[id])
		{
			if (zp_get_user_zombie(id))
			{
				if (!zp_frozen(id))
				{
					set_user_gravity(id, 0.25)
				}
			}

			else
			{
				set_user_gravity(id, 0.5)
			}
		}
		
		if (g_blink[id] && g_enemy[id] > 0 && (pev(id, pev_button) & IN_ATTACK || pev(id, pev_button) & IN_ATTACK2) && is_user_alive(g_enemy[id]) && !zp_get_user_zombie(g_enemy[id]))
		{
			new Float:origin[3];
			new Float:new_velocity[3];
			
			pev(g_enemy[id], pev_origin, origin);

			entity_set_aim(id, origin);
			get_speed_vector2(id, g_enemy[id], 1150.0, new_velocity)
			
			set_task(1.2, "disableBlink", id);
			set_pev(id, pev_velocity, new_velocity);
		}
		
		if (g_multijumps[id] > 0)
		{
			new nbut = get_user_button(id)
			new obut = get_user_oldbutton(id)
			if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
			{
				if(jumpnum[id] < g_multijumps[id])
				{
					dojump[id] = true
					jumpnum[id]++
					return
				}
			}
			if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
			{
				jumpnum[id] = 0
				return
			}
		}

		if (g_jet[id])
		{
			if (pev(id, pev_button) & IN_ATTACK2 && g_rocket[id] < get_gametime())
			{
				new pEntity = create_entity("info_target");
				if (pev_valid(pEntity))
				{
					engfunc(EngFunc_SetModel, pEntity, "models/rpgrocket.mdl");

					set_pev(pEntity, pev_classname, "Rocket");
					set_pev(pEntity, pev_movetype, MOVETYPE_FLY);
					set_pev(pEntity, pev_solid, SOLID_BBOX);
					set_pev(pEntity, pev_effects, EF_LIGHT | EF_BRIGHTLIGHT);
					set_pev(pEntity, pev_owner, id);

					new Float:VAngle[3];
					pev(id, pev_v_angle, VAngle);
					engfunc(EngFunc_MakeVectors, VAngle);

					new Float:Forward[3], Float:Velocity[3];
					global_get(glb_v_forward, Forward);
					Forward[0]*=64.0;
					Forward[1]*=64.0;
					Forward[2]*=64.0;
					
					global_get(glb_v_forward, Velocity);
					Velocity[0]*=1750.0;
					Velocity[1]*=1750.0;
					Velocity[2]*=1750.0;

					new Float:Origin[3];
					pev(id, pev_origin, Origin);
					Origin[0] += Forward[0];
					Origin[1] += Forward[1];

					set_pev(pEntity, pev_origin, Origin);
					set_pev(pEntity, pev_velocity, Velocity);

					new Float: Angles[3];
					engfunc(EngFunc_VecToAngles, Velocity, Angles);
					set_pev(pEntity, pev_angles, Angles);

					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_BEAMFOLLOW);
					write_short(pEntity);
					write_short(g_trail);
					write_byte(25);
					write_byte(5);
					write_byte(191);
					write_byte(191);
					write_byte(191);
					write_byte(random_num(150, 240));
					message_end();

					emit_sound(id, CHAN_WEAPON, "ZombieOutstanding/rocket_fire.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
					g_rocket[id] = get_gametime() + 15.0;
				}

				else
					g_rocket[id] = get_gametime() + 1.0;
			}

			if (pev(id, pev_button) & IN_DUCK && pev(id, pev_button) & IN_JUMP && !(pev(id, pev_flags) & FL_ONGROUND) && g_fuel[id] > 0.0)
			{
				new Float:Velocity[3], Float:Angles[3], Float:Forward[3], Float:dummy1[3], Float:dummy2[3];
				
				pev(id, pev_velocity, Velocity);
				pev(id, pev_angles, Angles);
				Angles[2] = 0.0;

				engfunc(EngFunc_AngleVectors, Angles, Forward,dummy1,dummy2);
				Angles[0] = Forward[0], Angles[1] = Forward[1], Angles[2] = Forward[2];
				Angles[0] *= 300.0;
				Angles[1] *= 300.0;

				Velocity[0] = Angles[0];
				Velocity[1] = Angles[1];

				if (Velocity[2] < 300.0)
					Velocity[2] += 35.0;

				set_pev(id, pev_velocity, Velocity)

				if (random_num(0, 3) == 0)
				{
					new Float:Origin[3];
					pev(id, pev_origin, Origin);

					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_SPRITE);
					engfunc(EngFunc_WriteCoord, Origin[0]);
					engfunc(EngFunc_WriteCoord, Origin[1]);
					engfunc(EngFunc_WriteCoord, Origin[2]);
					write_short(g_flame);
					write_byte(8);
					write_byte(200);
					message_end();
				}

				if (g_fuel[id] > 80.0)
					emit_sound(id, CHAN_ITEM, "ZombieOutstanding/jetpack_fly.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

				else
					emit_sound(id, CHAN_ITEM, "ZombieOutstanding/jetpack_blow.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

				g_fuel[id] -= 1.0;
			}

			else if (!(pev(id, pev_button) & IN_DUCK) && !(pev(id, pev_button) & IN_JUMP) && g_fuel[id] < 250.0)
				g_fuel[id] += 0.5;
		}
	}
}

public disableBlink(i)
{
	if (is_user_connected(i))
		g_blink = false
}

public client_PostThink(id)
{
	if(!is_user_alive(id))
		return

	if(dojump[id] == true)
	{
		new Float:velocity[3]	
		entity_get_vector(id,EV_VEC_velocity,velocity)
		velocity[2] = random_float(265.0, 285.0)
		entity_set_vector(id,EV_VEC_velocity,velocity)
		dojump[id] = false
	}
}

public plugin_natives()
{
	register_library("hatt_EI");
	register_native("zp_get_gold_ak", "zp_get_gold_ak", 1)
	register_native ("zp_get_gold_de", "zp_get_gold_de", 1)
	register_native("zp_get_jp", "zp_get_jp", 1)
}

public zp_get_jp(i)
{
	return g_jet;
}

public zp_get_gold_ak(i)
{
	return g_goldenak
}

public zp_get_gold_de(i)
{
	return g_goldendeagle[i];
}

public zp_extra_item_selected(id, itemid)
{
	static CsArmorType:tmp;
	static name[64];

	get_user_name(id, name, 63);
	set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.55,0, 6.0, 2.25, 0.1, 0.2,-1);

	if (itemid == g_itemid)
	{
		g_iTripMines[ id ]++;
		
		client_print_color( id, id, "^x04[ZM]^x01 You bought a^x03 Trip Mine^x01. Press^x04 P^x01 to plant it or^x04 V^x01 to take it" );
		
		client_cmd( id, "bind p Plant_Mine" );
		client_cmd( id, "bind v Take_Mine" );
		
		DCF( id, "bind p Plant_Mine" );
		DCF( id, "bind v Take_Mine" );

		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT A TRiP MiNE *");
	}
	
	else if (itemid == g_iblink)
	{
		g_blink[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW KNiFE BLiNK *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 Knife Blink", name);
	}

	else if (itemid == g_imodblink)
	{
		g_blink[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW *MOD* KNiFE BLiNK *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* Knife Blink", name);
	}

	else if (itemid == g_armor100)
	{
		if (get_user_armor(id) + 100 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 100, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (100 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (100 A.P.)" );
	}
	
	else if (itemid == g_clip)
	{
		g_tryder[id]=true
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT UNLiMiTED CLiP *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Unlimited Clip" );
	}
	
	else if (itemid == g_armor200)
	{
		if (get_user_armor(id) + 200 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 200, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (200 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (200 A.P.)" );
	}
	else if ( itemid ==g_armor300)
	{
		if (get_user_armor(id) + 300 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 300, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (300 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (300 A.P.)" );
	}
	else if (itemid==g_tryderid)
	{
		set_user_health(id, 720);
		cs_set_user_armor(id, 720, CS_ARMOR_VESTHELM)
		ShowSyncHudMsg(0, g_hud[2], "* %s BOUGHT TRYDER *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 TRYDER", name);
		g_tryder[id]=true
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90)
		}
		if (!user_has_weapon(id, CSW_M4A1))
		{
			give_item(id, "weapon_m4a1");
			cs_set_user_bpammo(id, CSW_M4A1, 90)
		}
		if (!user_has_weapon(id, CSW_G3SG1))
		{
			give_item(id, "weapon_g3sg1");
			cs_set_user_bpammo(id, CSW_G3SG1, 90)
		}
		if (!user_has_weapon(id, CSW_SG550))
		{
			give_item(id, "weapon_sg550");
			cs_set_user_bpammo(id, CSW_SG550, 90)
		}
		if (!user_has_weapon(id, CSW_XM1014))
		{
			give_item(id, "weapon_xm1014");
			cs_set_user_bpammo(id, CSW_XM1014, 32)
		}
		g_multijumps[id]++;
		g_isingravity[id]=true
		set_rendering(id, kRenderFxGlowShell, 204, 0, 204, kRenderNormal, 26)
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid ==g_health)
	{
		set_user_health(id, get_user_health(id) + 1000);
		ShowSyncHudMsg(0, g_hud[2], "* %s BOUGHT 1,000 HP *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 1,000 H.P.", name);
	}
	else if (itemid ==g_multijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* YOU CAN JUMP NOW %d TiMES *", g_multijumps[id] + 1);
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Multi Jump (+1)" );
	}
	else if (itemid ==g_zmultijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* YOU CAN JUMP NOW %d TiMES *", g_multijumps[id] + 1);
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Multi Jump (+1)" );
	}
	else if (itemid==g_specialmultijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* %s CAN JUMP NOW %d TiMES *", name, g_multijumps[id] + 1);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 can jump now^x04 %d TiMES", name, g_multijumps[id]+1);
	}
	else if (itemid == g_zgravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A BETTER GRAViTY *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 ZM Extra Gravity", name);
	}
	else if ( itemid==g_gravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* YOU HAVE NOW A BETTER GRAViTY *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Extra Gravity" );
	}
	else if (itemid==g_modgravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A BETTER GRAViTY *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* Extra Gravity", name);
	}
	else if ( itemid == g_jetpack)
	{
		if (g_jet[id])
			dropJetpack(id, true)
		g_jet[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A JETPACK *", name);
		client_cmd(id, "weapon_knife");
		setJetpack(id);
		client_cmd(id, "spk items/tr_kevlar")
		client_print_color(id, id, "^x04[ZM]^x01 PRESS^x03 CTRL+SPACE^x01 TO FLY. PRESS^x03 +attack2^x01 TO FIRE.");
	}
	else if (itemid == g_ak)
	{
		g_goldenak[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD AK47 *", name);
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90);
		}
		client_cmd(id, "weapon_ak47");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 GOLD AK47", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid == g_modak)
	{
		g_goldenak[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD AK47 *", name);
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90);
		}
		client_cmd(id, "weapon_ak47");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* GOLD AK47", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid==g_deagle)
	{
		g_goldendeagle[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD DEAGLE *", name);
		if (!user_has_weapon(id, CSW_DEAGLE))
		{
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo(id, CSW_DEAGLE, 35);
		}
		client_cmd(id, "weapon_deagle");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 GOLD DEAGLE", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid ==g_moddeagle)
	{
		g_goldendeagle[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD DEAGLE *", name);
		if (!user_has_weapon(id, CSW_DEAGLE))
		{
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo(id, CSW_DEAGLE, 35);
		}
		client_cmd(id, "spk items/tr_kevlar")
		client_cmd(id, "weapon_deagle");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* GOLD DEAGLE", name);
	}
	else if (itemid==g_modjetpack)
	{
		if (g_jet[id])
			dropJetpack(id, true)
		g_jet[id] = true
		client_cmd(id, "weapon_knife");
		setJetpack(id);
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A JETPACK *", name);
		client_cmd(id, "spk items/tr_kevlar")
		client_print_color(id, id, "^x04[ZM]^x01 PRESS^x03 CTRL+SPACE^x01 TO FLY. PRESS^x03 +attack2^x01 TO FIRE.");
	}
	else if (g_buyassassin == itemid)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT ASSASSiN *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 ASSASSiN", name);
		zp_make_user_assassin(id);
		g_modscount++
	}
	else if (itemid ==g_buynemesis)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has already started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait this round and 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait till the next round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT NEMESiS *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 NEMESiS", name);
		zp_make_user_nemesis(id);
		g_modscount++
	}
	else if (itemid == g_buysurvivor)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT SURViVOR *", name);
		zp_make_user_survivor(id);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 SURViVOR", name);
		g_modscount++
	}
	else if ( itemid ==g_buysniper)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT SNiPER *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 SNiPER", name);
		zp_make_user_sniper(id);
		g_modscount++
	}
	return 0;
}

public plugin_precache( )
{
	engfunc( EngFunc_PrecacheModel, MINE_MODEL_VIEW );
	
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_ACTIVATE );
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_CHARGE );
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_DEPLOY );
	
	precache_sound("ZombieOutstanding/gun_pickup.wav");
	
	g_hExplode = engfunc( EngFunc_PrecacheModel, MINE_MODEL_EXPLODE );

	precache_model("models/p_egon.mdl");
	precache_model("models/v_egon.mdl");
	precache_model("models/rpgrocket.mdl");

	precache_sound("ZombieOutstanding/jetpack_fly.wav");
	precache_sound("ZombieOutstanding/jetpack_blow.wav");
	precache_sound("ZombieOutstanding/rocket_fire.wav");
	
	g_shockwave = precache_model("sprites/shockwave.spr")
	g_trail = precache_model("sprites/laserbeam.spr");
	g_flame = precache_model("sprites/xfireball3.spr");
}

public DispatchTouch( pTouched, pToucher)
{
	static pTouchedClass[32], Plr,pToucherClass[32], owner, Float:Origin[3], Float:Velocity[3], Float:flHealth, Float:Damage;
	
	pTouchedClass[0] = '^0';
	pToucherClass[0] = '^0';

	if (pev_valid(pTouched)) pev(pTouched, pev_classname, pTouchedClass, 31);
	if (pev_valid(pToucher)) pev(pToucher, pev_classname, pToucherClass, 31);

	if (equali(pTouchedClass, "Rocket"))
	{
		owner=pev(pTouched, pev_owner);
		if (is_user_connected(owner))
		{
			for ( Plr = 1; Plr <= get_maxplayers(); Plr++)
			{
				if (!is_user_alive(Plr) || entity_range(Plr, pTouched) > 360.0)
					continue;

				flHealth = entity_get_float( Plr, EV_FL_health );

				if (get_cvar_num("zp_enable_bazooka_knockback"))
				{
					entity_get_vector( Plr, EV_VEC_velocity, Velocity );

					Velocity[ 2 ] += random_float(120.0, 240.0);

					if (random_num(0, 1) == 0)
						Velocity[ 1 ] += random_float(120.0, 240.0);
					else
						Velocity[1] += random_float(-240.0, -120.0);

					if (random_num(0, 1) == 0)
						Velocity[ 0 ] += random_float(120.0, 240.0);
					else
						Velocity[0] += random_float(-240.0, -120.0);

					if (!zp_frozen(Plr))
					{
						if (!zp_get_user_zombie(Plr) && !get_cvar_num("zp_enable_bazooka_k_humans"))
							continue;
						entity_set_vector( Plr, EV_VEC_velocity, Velocity );
					}
				}

				if( zp_get_user_zombie( Plr )&& !get_user_godmode(Plr) && !zp_get_user_no_damage(Plr) )
				{
					Damage = 1250.0 - entity_range(Plr, pTouched);

					if (get_cvar_num("zp_enable_bazooka_redfade"))
					{
						do_screen_fade(Plr, 0.45, 230, 0, 0, Damage > 999.0 ? 225 : 165)
					}
					if (get_cvar_num("zp_enable_bazooka_flatline") && Damage > 999.0)
					{
						client_cmd(Plr, "spk fvox/flatline")
					}

					if (!(flHealth - Damage > 0.0))
						ExecuteHamB(Ham_Killed, Plr, owner, 2)
					else
						ExecuteHamB(Ham_TakeDamage, Plr, pTouched, owner, Damage, DMG_MORTAR);
				}
			}
		}

		if (equali("func_breakable", pToucherClass))
			dllfunc(DLLFunc_Use, pToucher, pTouched);

		pev(pTouched, pev_origin, Origin);

		for (new Iter = 0; Iter < 4; Iter++)
		{
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_EXPLOSION);
			engfunc(EngFunc_WriteCoord, Origin[0] + random_float(-22.0, 22.0));
			engfunc(EngFunc_WriteCoord, Origin[1] + random_float(-22.0, 22.0));
			engfunc(EngFunc_WriteCoord, Origin[2] + random_float(-22.0, 22.0));
			write_short(g_hExplode);
			write_byte(random_num(15, 25));
			write_byte(15);
			write_byte(0);
			message_end();
		}

		for (new Iter = 0; Iter < 4; Iter++)
		{
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_BEAMCYLINDER);
			engfunc(EngFunc_WriteCoord, Origin[0]);
			engfunc(EngFunc_WriteCoord, Origin[1]);
			engfunc(EngFunc_WriteCoord, Origin[2]);
			engfunc(EngFunc_WriteCoord, Origin[0]);
			engfunc(EngFunc_WriteCoord, Origin[1]);
			engfunc(EngFunc_WriteCoord, Origin[2] + (450.0 + (Iter * 100.0)));
			write_short(g_shockwave);
			write_byte(0);
			write_byte(0);
			write_byte(4);
			write_byte(Iter * 40);
			write_byte(0);
			write_byte(121);
			write_byte(121);
			write_byte(121);
			write_byte(random_num(150, 240));
			write_byte(0);
			message_end();
		}

		remove_entity(pTouched);
	}

	else if (equali(pTouchedClass, "Jetpack"))
	{
		if (pToucher < 1 || pToucher > get_maxplayers() || !is_user_alive(pToucher) || g_jet[pToucher] || zp_get_user_zombie(pToucher))
		{
			return FMRES_SUPERCEDE;
		}

		if (g_fuel[pToucher] < 2.0)
			g_fuel[pToucher] = 250.0;

		g_jet[pToucher] = true;

		client_cmd(pToucher, "weapon_knife");
		setJetpack(pToucher);

		emit_sound(pToucher, CHAN_ITEM, "ZombieOutstanding/gun_pickup.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		remove_entity(pTouched);
	}

	return FMRES_IGNORED;
}

public ClientDisconnect(id)
{
	if (g_jet[id])
		dropJetpack(id, true);
}

public Command_Buy( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_ammo_packs( iPlayer ) < MINE_COST )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You need^x03 %i ammo packs", MINE_COST );
		return PLUGIN_CONTINUE;
	}

	zp_set_user_ammo_packs( iPlayer, zp_get_user_ammo_packs( iPlayer ) - MINE_COST );
	
	g_iTripMines[ iPlayer ]++;
	
	client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You bought a^x03 Trip Mine^x01. Press^x04 P^x01 to plant it or^x04 V^x01 to take it" );
	
	client_cmd( iPlayer, "bind p Plant_Mine" );
	client_cmd( iPlayer, "bind v Take_Mine" );
		
	DCF( iPlayer, "bind p Plant_Mine" );
	DCF( iPlayer, "bind v Take_Mine" );
	
	return PLUGIN_CONTINUE;
}

DCF(i, Msg[])
{
	message_begin(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, _, i)
	write_byte(strlen(Msg) + 2)
	write_byte(DRC_CMD_FADE)
	write_string(Msg)
	message_end()
}

public Command_Plant( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( !g_iTripMines[ iPlayer ] )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You don't have any trip mines." );
		return PLUGIN_CONTINUE;
	}
	
	if( g_iPlantedMines[ iPlayer ] > 1 )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You have reached the limit^x03 (2)" );
		return PLUGIN_CONTINUE;
	}

	if( g_iPlanting[ iPlayer ] || g_iRemoving[ iPlayer ] )
		return PLUGIN_CONTINUE;
	
	if( CanPlant( iPlayer ) )
	{
		g_iPlanting[ iPlayer ] = true;

		message_begin( MSG_ONE_UNRELIABLE, 108, _, iPlayer );
		write_byte( 1 );
		write_byte( 0 );
		message_end( );

		set_task( 1.2, "Func_Plant", iPlayer + TASK_CREATE );
	}

	return PLUGIN_CONTINUE;
}

public Command_Take( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( !g_iPlantedMines[ iPlayer ] )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You don't have a planted trip mine." );
		return PLUGIN_CONTINUE;
	}
	
	if( g_iPlanting[ iPlayer ] || g_iRemoving[ iPlayer ] )
		return PLUGIN_CONTINUE;
	
	if( CanTake( iPlayer ) )
	{
		g_iRemoving[ iPlayer ] = true;
		
		message_begin( MSG_ONE_UNRELIABLE, 108, _, iPlayer );
		write_byte( 1 );
		write_byte( 0 );
		message_end( );
		
		set_task( 1.2, "Func_Take", iPlayer + TASK_REMOVE );
	}
	
	return PLUGIN_CONTINUE;
}

public Func_Take( iPlayer )
{
	iPlayer -= TASK_REMOVE;
	g_iRemoving[ iPlayer ] = false;

	static iEntity, szClassName[ 32 ], Float: flOwnerOrigin[ 3 ], Float: flEntityOrigin[ 3 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;

		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );

		if( equali( szClassName, MINE_CLASSNAME ) )
		{
			if( entity_get_owner( iEntity ) == iPlayer )
			{
				entity_get_vector( iPlayer, EV_VEC_origin, flOwnerOrigin );
				entity_get_vector( iEntity, EV_VEC_origin, flEntityOrigin );

				if( get_distance_f( flOwnerOrigin, flEntityOrigin ) < 55.0 )
				{
					if (g_iMineIds[iPlayer][0] == iEntity)
						g_iMineIds[iPlayer][0] = 0;

					else if (g_iMineIds[iPlayer][1] == iEntity)
						g_iMineIds[iPlayer][1] = 0;

					g_iPlantedMines[ iPlayer ]--;
					g_iTripMines[ iPlayer ]++;

					remove_entity( iEntity );

					break;
				}
			}
		}
	}
}

public bool: CanTake( iPlayer )
{
	static iEntity, szClassName[ 32 ], Float: flOwnerOrigin[ 3 ], Float: flEntityOrigin[ 3 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) )
		{
			if( entity_get_owner( iEntity ) == iPlayer )
			{
				entity_get_vector( iPlayer, EV_VEC_origin, flOwnerOrigin );
				entity_get_vector( iEntity, EV_VEC_origin, flEntityOrigin );
				
				if( get_distance_f( flOwnerOrigin, flEntityOrigin ) < 55.0 )
					return true;
			}
		}
	}
	
	return false;
}

public bool: CanPlant( iPlayer )
{
	static Float: flOrigin[ 3 ];
	entity_get_vector( iPlayer, EV_VEC_origin, flOrigin );
	
	static Float: flTraceDirection[ 3 ], Float: flTraceEnd[ 3 ];
	velocity_by_aim( iPlayer, 64, flTraceDirection );
	flTraceEnd[ 0 ] = flTraceDirection[ 0 ] + flOrigin[ 0 ];
	flTraceEnd[ 1 ] = flTraceDirection[ 1 ] + flOrigin[ 1 ];
	flTraceEnd[ 2 ] = flTraceDirection[ 2 ] + flOrigin[ 2 ];
	
	static Float: flFraction, iTr;
	iTr = 0;
	engfunc( EngFunc_TraceLine, flOrigin, flTraceEnd, 0, iPlayer, iTr );
	get_tr2( iTr, TR_flFraction, flFraction );
	
	if( flFraction >= 1.0 )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You must plant the^x03 Trip Mine^x01 on a wall" );
		return false;
	}
	
	return true;
}

public Func_Plant( iPlayer )
{
	iPlayer -= TASK_CREATE;
	g_iPlanting[ iPlayer ] = false;
	
	static Float: flOrigin[ 3 ];
	entity_get_vector( iPlayer, EV_VEC_origin, flOrigin );
	
	static Float: flTraceDirection[ 3 ], Float: flTraceEnd[ 3 ], Float: flTraceResult[ 3 ], Float: flNormal[ 3 ];
	velocity_by_aim( iPlayer, 128, flTraceDirection );
	flTraceEnd[ 0 ] = flTraceDirection[ 0 ] + flOrigin[ 0 ];
	flTraceEnd[ 1 ] = flTraceDirection[ 1 ] + flOrigin[ 1 ];
	flTraceEnd[ 2 ] = flTraceDirection[ 2 ] + flOrigin[ 2 ];
	
	static iTr;
	iTr = 0;
	engfunc( EngFunc_TraceLine, flOrigin, flTraceEnd, 0, iPlayer, iTr );
	get_tr2( iTr, TR_vecEndPos, flTraceResult );
	get_tr2( iTr, TR_vecPlaneNormal, flNormal );

	static iEntity;
	iEntity = create_entity( "info_target" );
	
	if( !pev_valid(iEntity ))
		return;
	
	entity_set_string( iEntity, EV_SZ_classname, MINE_CLASSNAME );
	entity_set_model( iEntity, MINE_MODEL_VIEW );
	entity_set_size( iEntity, Float: { -4.0, -4.0, -4.0 }, Float: { 4.0, 4.0, 4.0 } );
	
	entity_set_int( iEntity, EV_INT_iuser2, iPlayer );
	
	g_iPlantedMines[ iPlayer ]++;
	if (g_iMineIds[iPlayer][0]==0)
		g_iMineIds[iPlayer][0] = iEntity;
	else
		g_iMineIds[iPlayer][1] = iEntity;
	
	entity_set_float( iEntity, EV_FL_frame, 0.0 );
	entity_set_float( iEntity, EV_FL_framerate, 0.0 );
	entity_set_int( iEntity, EV_INT_movetype, MOVETYPE_FLY );
	entity_set_int( iEntity, EV_INT_solid, SOLID_NOT );
	entity_set_int( iEntity, EV_INT_body, 3 );
	entity_set_int( iEntity, EV_INT_sequence, 7 );
	entity_set_float( iEntity, EV_FL_takedamage, DAMAGE_NO );
	entity_set_int( iEntity, EV_INT_iuser1, MINE_OFF );
	
	static Float: flNewOrigin[ 3 ], Float: flEntAngles[ 3 ];
	flNewOrigin[ 0 ] = flTraceResult[ 0 ] + ( flNormal[ 0 ] * 8.0 );
	flNewOrigin[ 1 ] = flTraceResult[ 1 ] + ( flNormal[ 1 ] * 8.0 );
	flNewOrigin[ 2 ] = flTraceResult[ 2 ] + ( flNormal[ 2 ] * 8.0 );
	
	fm_set_rendering(iEntity, kRenderFxGlowShell, random_num(0, 255), random_num(0, 255), random_num(0 , 255), kRenderNormal, 12)
	
	entity_set_origin( iEntity, flNewOrigin );
	
	vector_to_angle( flNormal, flEntAngles );
	entity_set_vector( iEntity, EV_VEC_angles, flEntAngles );
	flEntAngles[ 0 ] *= -1.0;
	flEntAngles[ 1 ] *= -1.0;
	flEntAngles[ 2 ] *= -1.0;
	entity_set_vector( iEntity, EV_VEC_v_angle, flEntAngles );
	
	g_iTripMines[ iPlayer ]--;
	
	emit_sound( iEntity, CHAN_WEAPON, MINE_SOUND_DEPLOY, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
	emit_sound( iEntity, CHAN_VOICE, MINE_SOUND_CHARGE, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
	
	entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 0.6 );
}

public Func_RemoveMinesByOwner( iPlayer )
{
	static iEntity, szClassName[ 32 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) )
			if( entity_get_int( iEntity, EV_INT_iuser2 ) == iPlayer )
				remove_entity( iEntity );
	}
}

Func_Explode( iEntity )
{
	new owner = entity_get_owner(iEntity);
	
	g_iPlantedMines[ owner ]--;
	if (g_iMineIds[owner][0] == iEntity)
		g_iMineIds[owner][0] = 0;
	else if (g_iMineIds[owner][1] == iEntity)
		g_iMineIds[owner][1] = 0;
	
	static Float: flOrigin[ 3 ], Float: flZombieOrigin[ 3 ], Float: flHealth, Float: flVelocity[ 3 ];
	entity_get_vector( iEntity, EV_VEC_origin, flOrigin );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0) );
	write_short( g_hExplode );
	write_byte( 55 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0));
	write_short( g_hExplode );
	write_byte( 65 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0));
	write_short( g_hExplode );
	write_byte( 85 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	static iZombie, Float:Damage;
	for( iZombie = 1; iZombie < get_maxplayers() + 1; iZombie++ )
	{
		if( is_user_connected( iZombie ) )
		{
			if( is_user_alive( iZombie ) )
			{
				entity_get_vector( iZombie, EV_VEC_origin, flZombieOrigin );
				
				if( get_distance_f( flOrigin, flZombieOrigin ) <= 360.0 )
				{
					flHealth = entity_get_float( iZombie, EV_FL_health );

					if (get_cvar_num("zp_enable_lasermine_knockback"))
					{
						entity_get_vector( iZombie, EV_VEC_velocity, flVelocity );

						flVelocity[ 2 ] += random_float(120.0, 240.0);

						if (random_num(0, 1) == 0)
							flVelocity[ 1 ] += random_float(120.0, 240.0);
						else
							flVelocity[1] += random_float(-240.0, -120.0);

						if (random_num(0, 1) == 0)
							flVelocity[ 0 ] += random_float(120.0, 240.0);
						else
							flVelocity[0] += random_float(-240.0, -120.0);

						if (!zp_frozen(iZombie))
						{
							if (!zp_get_user_zombie(iZombie) && !get_cvar_num("zp_enable_lasermine_k_humans"))
								continue;
							entity_set_vector( iZombie, EV_VEC_velocity, flVelocity );
						}
					}

					if (get_cvar_num("zp_enable_lasermine_flatline"))
					{
						client_cmd(iZombie, "spk fvox/flatline")
					}
					if( zp_get_user_zombie( iZombie )&& !get_user_godmode(iZombie) && !zp_get_user_no_damage(iZombie) )
					{
						Damage = 2250.0 - get_distance_f( flOrigin, flZombieOrigin );
						if (get_cvar_num("zp_enable_lasermine_redfade"))
						{
							do_screen_fade(iZombie, 0.45, 230, 0, 0, 200)
						}

						if (!(flHealth - Damage > 0.0))
							ExecuteHamB(Ham_Killed, iZombie, owner, 2)
						else
							ExecuteHamB(Ham_TakeDamage, iZombie, iEntity, owner, Damage, DMG_MORTAR);
					}
				}
			}
		}
	}
	
	remove_entity( iEntity );
}

public Forward_Think(iEntity)
{
	static Float: flGameTime, iStatus, Float: flHealth;
	flGameTime = get_gametime( );
	iStatus = entity_get_status( iEntity );
	new owner = entity_get_owner(iEntity);

	switch( iStatus )
	{
		case MINE_OFF:
		{
			entity_set_int( iEntity, EV_INT_iuser1, MINE_ON );
			entity_set_float( iEntity, EV_FL_takedamage, DAMAGE_YES );
			entity_set_int( iEntity, EV_INT_solid, SOLID_BBOX );
			entity_set_float( iEntity, EV_FL_health, MINE_HEALTH + 1000.0 );

			emit_sound( iEntity, CHAN_VOICE, MINE_SOUND_ACTIVATE, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
		}

		case MINE_ON:
		{
			flHealth = entity_get_float( iEntity, EV_FL_health );

			if( flHealth <= 1000.0 )
			{
				Func_Explode( iEntity );
				return FMRES_IGNORED;
			}
			
			else
			{
				if (g_iMineIds[owner][0] == iEntity)
				{
					set_hudmessage(210, 0, 0, 0.92, 0.34,0, 6.0, 0.11, 0.1, 0.2,-1);
					ShowSyncHudMsg(owner, g_hud[0], "Mine 1  %d HP", max(floatround(flHealth - 1000.0), 0));
				}
				else
				{
					set_hudmessage(210, 0, 0, 0.92, 0.38,0, 6.0, 0.11,  0.1, 0.2,-1);
					ShowSyncHudMsg(owner, g_hud[1], "Mine 2  %d HP", max(floatround(flHealth - 1000.0), 0));
				}
			}
		}
	}

	if( is_valid_ent( iEntity ) )
		entity_set_float( iEntity, EV_FL_nextthink, flGameTime + 0.1 );

	return FMRES_IGNORED;
}

stock fm_set_weapon_ammo(entity, amount)
{
	if (pev_valid(entity)==2)
		set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}

do_screen_fade(       id, Float:fadeTime,  red, green, blue, alpha, type = FADE_IN       )
{
   new  hold =floatround(         fadeTime *4096.0);
   message_begin(    MSG_ONE_UNRELIABLE, get_user_msgid(    "ScreenFade"           ), _, id          );
   write_short(          hold    );
   write_short(    hold    );
   write_short(    type   );
   write_byte(      red    );
   write_byte(  green    );
   write_byte(    blue    );
   write_byte(     alpha    );
   message_end(    );
}

#if AMXX_VERSION_NUM <= 182
client_print_color(const iIDTarget, const iIDSender = 0, const szMessage[], any:...)
{
	if (iIDTarget && !is_user_connected(iIDTarget))
		return;
	
	static szBuffer[192];
	vformat(szBuffer, charsmax(szBuffer), szMessage, 4)
	
/*	static const szChatTag[] = "^1[^4ZP^1] ";
	format(szBuffer, charsmax(szBuffer), "%s%s", szChatTag, szBuffer)
	*/
	static iIDMsgSayText;
	if (!iIDMsgSayText)
		iIDMsgSayText = get_user_msgid("SayText");
	
	if (iIDTarget)
		message_begin(MSG_ONE, iIDMsgSayText, _, iIDTarget)
	else
		message_begin(MSG_ALL, iIDMsgSayText)
	
	write_byte(!iIDSender ? iIDTarget : iIDSender)
	write_string(szBuffer)
	message_end()
}
#endif


include:
| Afiseaza codul
#if defined _hattei_included

	#endinput

#endif

#define _hattei_included



#pragma reqlib hatt_EI

#if !defined AMXMODX_NOAUTOLOAD

	#pragma loadlib hatt_EI

#endif



native zp_get_gold_ak(id);

native zp_get_gold_de(id);

native zp_get_jp(id);

Re: [C] Modificare

Posted: 12 Jul 2018, 12:55
by *Or!g!naL*
| Afiseaza codul
#include < amxmodx >
#include amxmisc
#include cstrike
#include < fakemeta_util >
#include < fun >
#include < engine >
#include hamsandwich
#include nvault
#include < zombieplague63 >
#include chr_engine

#define FADE_IN      0x0000
#define FADE_OUT      0x0001
#define FADE_MODULATE   0x0002
#define FADE_STAYOUT   0x0004

#define MAX_ENTITIES		(global_get(glb_maxEntities))
#define MINE_ON			1
#define MINE_OFF			0
#define TASK_CREATE		847655612
#define TASK_REMOVE		867661231
#define MINE_COST			5
#define MINE_CLASSNAME		"zp_mine"
#define MINE_MODEL_EXPLODE	"sprites/zerogxplode.spr"
#define MINE_MODEL_VIEW		"models/zombie_plague/lasermine.mdl"
#define MINE_SOUND_ACTIVATE	"weapons/mine_activate.wav"
#define MINE_SOUND_CHARGE		"weapons/mine_charge.wav"
#define MINE_SOUND_DEPLOY		"weapons/mine_deploy.wav"
#define MINE_HEALTH		800.0
#define entity_get_owner(%0)		entity_get_int( %0, EV_INT_iuser2 )
#define entity_get_status(%0)		entity_get_int( %0, EV_INT_iuser1 )
#define entity_get_classname(%0,%1)	entity_get_string( %0, EV_SZ_classname, %1, charsmax( %1 ) )

new g_iTripMines[ 33 ];
new g_iPlantedMines[ 33 ];
new g_iPlanting[ 33 ];
new g_iRemoving[ 33 ];
new g_iMineIds[33][2];
new g_multijumps[33];
new g_hExplode;
new g_hud[3];
new g_itemid;
new g_armor100;
new g_armor200;
new g_armor300;
new g_multijump;
new g_zgravity;
new g_zmultijump;
new g_specialmultijump;
new g_health;
new g_gravity;
new g_moddeagle;
new g_modak;
new g_ak;
new g_deagle;
new g_buyassassin;
new g_buynemesis;
new g_jetpack;
new g_buysniper;
new g_buysurvivor;
new g_modjetpack;
new jumpnum[33] = 0
new bool:dojump[33] = false
new g_isingravity[33]
new g_goldenak[33]
new g_goldendeagle[33]
new g_clip
new g_jet[33]
new g_blink[33]
new g_iblink, g_imodblink
new g_enemy[33]
new Float:g_fuel[33], Float:g_rocket[33]
new g_shockwave
new g_trail
new g_flame
new g_rounds[512]
new g_tryder[33]
new g_tryderid
new g_modscount=0
new g_modgravity
new g_curround = 0
new g_inround = false
new CountHP[33] = 0
// CS Offsets
#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif
const OFFSET_LINUX_WEAPONS = 4

// Max Clip for weapons
new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20,
			10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }

setJetpack( Player)
{
	set_pev(Player, pev_viewmodel2, "models/v_egon.mdl")
	set_pev(Player, pev_weaponmodel2, "models/p_egon.mdl")
}

setKnife( Player)
{
	set_pev(Player, pev_viewmodel2, "models/v_knife.mdl")
	set_pev(Player, pev_weaponmodel2, "models/p_knife.mdl")
}

dropJetpack( Player,  Forced = false)
{
	new Float:origin[3];
	pev(Player, pev_origin, origin);

	new Float:vangle[3];
	pev(Player, pev_v_angle, vangle);
	engfunc(EngFunc_MakeVectors, vangle);
	
	new Float:fwd[3];
	global_get(glb_v_forward, fwd);
	fwd[0] *= 75.0;
	fwd[1] *= 75.0;
	fwd[2] *= 75.0;
	
	origin[0] += fwd[0]
	origin[1]+=fwd[1]

	new Trace=0;
	engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS | IGNORE_GLASS, HULL_HUMAN, 0, Trace);
	if (get_tr2(Trace, TR_StartSolid) || get_tr2(Trace, TR_AllSolid) || !get_tr2(Trace, TR_InOpen))
	{
		if (Forced)
		{
			g_jet[Player]=false

			if (is_user_alive(Player))
			{
				client_cmd(Player, "weapon_knife");
				setKnife(Player);
			}
		}
	}

	else
	{
		new pJetpack = create_entity("info_target");
		if (pev_valid(pJetpack))
		{
			engfunc(EngFunc_SetModel, pJetpack, "models/p_egon.mdl");
			engfunc(EngFunc_SetSize,pJetpack, Float:{-16.0, -16.0, -16.0},Float:{16.0, 16.0, 16.0});

			set_pev(pJetpack, pev_classname, "Jetpack")
			set_pev(pJetpack, pev_movetype, MOVETYPE_TOSS);
			set_pev(pJetpack, pev_solid, SOLID_TRIGGER);
			set_pev(pJetpack, pev_origin, origin);

			g_jet[Player] = false;

			if (is_user_alive(Player))
			{
				client_cmd(Player, "weapon_knife");
				setKnife(Player);
			}
		}
	}
}

public Drop(id)
{
	if (!is_user_connected(id))
		return 0;

	if (get_user_weapon(id)==CSW_KNIFE)
	{
		if (g_jet[id])
			dropJetpack(id, false)

		return 1;
	}
	
	return 0;
}

public plugin_init( )
{
	register_plugin( "[ZM] Extra Items [Especially Trip Mines]", "1.0", "Hattrick" );

	register_cvar("zp_limit_buy_mod_hours", "6") // a player can buy mod in how many hours?
	register_cvar("zp_map_mods_limit", "2") // how many mods can be purchased in map?
	
	register_cvar("zp_enable_bazooka_knockback", "0") // when bazooka's projectile explodes, change players position on map?
	register_cvar("zp_enable_bazooka_k_humans", "0") // if enabled above,   also include humans??
	register_cvar("zp_enable_bazooka_redfade", "0") // if enabled,   zombies get red screenfade if damaged by bazooka projectile?
	register_cvar("zp_enable_bazooka_flatline", "1") // if enabled,   zombies get sound while damaged by bazooka projectile?

	register_cvar("zp_enable_lasermine_knockback", "0") // when lasermine explodes, change players position on map?
	register_cvar("zp_enable_lasermine_k_humans", "0") // if enabled above,   also include humans??
	register_cvar("zp_enable_lasermine_redfade", "0") // if enabled,   zombies get red screenfade if damaged by lasermine?
	register_cvar("zp_enable_lasermine_flatline", "1") // if enabled,   zombies get sound while damaged by lasermine?

	register_forward(FM_Touch, "DispatchTouch");
	register_forward(FM_ClientDisconnect, "ClientDisconnect");
	
	register_clcmd( "say /lm", "Command_Buy" );
	register_clcmd( "say lm", "Command_Buy" );
	register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
	register_clcmd( "say_team /lm", "Command_Buy" );
	register_clcmd( "say_team lm", "Command_Buy" );
	
	register_clcmd("drop", "Drop");

	register_clcmd( "Plant_Mine", "Command_Plant" );
	register_clcmd( "Take_Mine", "Command_Take" );

	register_logevent( "Event_RoundStart", 2, "1=Round_Start" );
	register_logevent( "Event_RoundEnd", 2, "1=Round_End" );
	register_think( MINE_CLASSNAME, "Forward_Think" );
	
	// Health
	g_health = zp_register_extra_item("Health (+1,000 H.P.)", 25, ZP_TEAM_HUMAN|ZP_TEAM_SURVIVOR|ZP_TEAM_SNIPER);
	
	// Armors
	g_armor100 = zp_register_extra_item("Armor (100 A.P.)", 5, ZP_TEAM_HUMAN);
	g_armor200 = zp_register_extra_item("Armor (200 A.P.)", 9, ZP_TEAM_HUMAN);
	g_armor300 = zp_register_extra_item("Armor (300 A.P.)", 12, ZP_TEAM_HUMAN);
	
	// Clip
	g_clip = zp_register_extra_item("Unlimited Clip", 12, ZP_TEAM_HUMAN);
	
	// Jetpack
	g_jetpack = zp_register_extra_item("Jetpack + Bazooka", 32, ZP_TEAM_HUMAN);
	g_modjetpack = zp_register_extra_item("*MOD* Jetpack + Bazooka", 45, ZP_TEAM_SNIPER | ZP_TEAM_SURVIVOR);

	// Tryder
	g_tryderid=zp_register_extra_item("Tryder", 36, ZP_TEAM_HUMAN);
	
	// Laser
	g_itemid = zp_register_extra_item("Trip Mine (/LM)", MINE_COST, ZP_TEAM_HUMAN|ZP_TEAM_SURVIVOR|ZP_TEAM_SNIPER)
	
	// Jump
	g_multijump = zp_register_extra_item("Multi Jump (+1)", 3, ZP_TEAM_HUMAN);
	g_zmultijump = zp_register_extra_item("ZM Multi Jump (+1)", 5, ZP_TEAM_ZOMBIE);
	g_specialmultijump = zp_register_extra_item("*MOD* Multi Jump (+1)", 10, ZP_TEAM_SURVIVOR | ZP_TEAM_SNIPER | ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS);
	
	// Graviy
	g_gravity = zp_register_extra_item("Extra Gravity", 8, ZP_TEAM_HUMAN);
	g_zgravity = zp_register_extra_item("ZM Extra Gravity", 15, ZP_TEAM_ZOMBIE);
	g_modgravity = zp_register_extra_item("*MOD* Extra Gravity", 20, ZP_TEAM_SNIPER | ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS | ZP_TEAM_SURVIVOR);
	
	// AK
	g_ak = zp_register_extra_item("Gold Ak47 (More Damage)", 18, ZP_TEAM_HUMAN);
	g_modak = zp_register_extra_item("*MOD* Gold Ak47 (More Damage)", 24, ZP_TEAM_SURVIVOR);
	
	// Deagle
	g_deagle = zp_register_extra_item("Gold Deagle (More Damage)", 10, ZP_TEAM_HUMAN);
	g_moddeagle = zp_register_extra_item("*MOD* Gold Deagle (More Damage)", 12, ZP_TEAM_SURVIVOR);
	
	// Mod
	g_buyassassin = zp_register_extra_item("Buy Assassin", 190, ZP_TEAM_HUMAN);
	g_buynemesis = zp_register_extra_item("Buy Nemesis", 190, ZP_TEAM_HUMAN);
	g_buysniper = zp_register_extra_item("Buy Sniper", 300, ZP_TEAM_HUMAN);
	g_buysurvivor = zp_register_extra_item("Buy Survivor", 300, ZP_TEAM_HUMAN);

	// Blink
	g_iblink = zp_register_extra_item("Knife Blink (1s)", 5, ZP_TEAM_ZOMBIE);
	g_imodblink = zp_register_extra_item("*MOD* Knife Blink (1s)", 8, ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS);
	
	RegisterHam(Ham_Killed, "player", "onKilled");

	register_event("StatusValue", "event_show_status", "be", "1=2", "2!0")
	register_event("StatusValue", "event_hide_status", "be", "1=1", "2=0")
	
	g_hud[0] = CreateHudSyncObj();
	g_hud[1] = CreateHudSyncObj();
	g_hud[2] = CreateHudSyncObj();
}

public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
	// Player doesn't have the unlimited clip upgrade
	if (!g_tryder[msg_entity])
		return;
	
	// Player not alive or not an active weapon
	if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1)
		return;
	
	static weapon, clip
	weapon = get_msg_arg_int(2) // get weapon ID
	clip = get_msg_arg_int(3) // get weapon clip
	
	// Unlimited Clip Ammo
	if (MAXCLIP[weapon] > 2) // skip grenades
	{
		set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon]) // HUD should show full clip all the time
		
		if (clip < 2) // refill when clip is nearly empty
		{
			// Get the weapon entity
			static wname[32], weapon_ent
			get_weaponname(weapon, wname, sizeof wname - 1)
			weapon_ent = fm_find_ent_by_owner(-1, wname, msg_entity)
			
			// Set max clip on weapon
			if (pev_valid(weapon_ent)==2)
			fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon])
		}
	}
}

public zp_round_started(gamemode, id)
{
	g_rounds[g_curround++] = gamemode;
	g_inround=true
}

public zp_round_ended(winteam)
{
	g_inround=false
}

public event_show_status(id)
{
	if (is_user_alive(id) && g_blink[id])
	{
		new enemy = read_data(2)
		if (is_user_alive(enemy) && !zp_get_user_zombie(enemy))
			g_enemy[id] = enemy;
		else
			g_enemy[id] = 0
	}
}

public event_hide_status(id)
{
	if (is_user_alive(id) && g_blink[id])
	{
		g_enemy[id] = 0
	}
}

public Event_RoundEnd()
{
	for ( new i = 1; i <=get_maxplayers(); i++)
	{
		g_isingravity = false
		g_multijumps = 0
		jumpnum = 0
		dojump = false
		g_blink= false

		if (is_user_alive(i)&&!zp_get_user_zombie(i))
		{
			if (g_tryder)
				cs_set_user_armor(i, 0,CS_ARMOR_NONE)
			if (get_user_health(i)>get_cvar_num("zp_human_health"))
				set_user_health(i, get_cvar_num("zp_human_health"))
		}
		g_tryder=false
	}
}

public Event_RoundStart( )
{
	static iEntity, szClassName[ 32 ], iPlayer;
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) || equali(szClassName, "Jetpack") || equali(szClassName, "Rocket"))
			remove_entity( iEntity );
	}
	
	for( iPlayer = 1; iPlayer < 33; iPlayer++ )
	{
		g_iTripMines[ iPlayer ] = 0;
		g_iPlantedMines[ iPlayer ] = 0;
		g_iMineIds[iPlayer][0] = 0;
		g_iMineIds[iPlayer][1] = 0;
		g_fuel[iPlayer]=250.0;
		g_rocket[iPlayer]=get_gametime()+random_float(0.2, 2.0)
	}
}

public onKilled(victim, killer, gib)
{
	if (g_isingravity[victim])
	{
		if (get_user_gravity(victim) <= 0.5)
		{
			set_user_gravity(victim, 1.0)
		}
	}
	g_isingravity[victim] = false
	g_multijumps[victim] = 0
	jumpnum[victim] = 0
	dojump[victim] = false
	g_goldenak[victim]=false
	g_goldendeagle[victim]=false
	if (g_jet[victim])
		dropJetpack(victim,true)
	g_fuel[victim]=0.0
	g_rocket[victim]=0.0
	g_jet[victim]=false
	g_tryder[victim]=false
	g_blink[victim]= false
}

public zp_user_humanized_pre(id, survivor)
{
	g_isingravity[id]=false
	g_multijumps[id]=false
	g_blink[id]=false
	g_rocket[id]=0.0
	g_fuel[id]=0.0
}

public zp_user_infected_pre(id, infector, nemesis)
{
	g_goldenak[id]=false
	g_goldendeagle[id]=false
	if (g_jet[id])
		dropJetpack(id,true)
	g_isingravity[id]=false
	g_multijumps[id]=false
	g_rocket[id]=0.0
	g_fuel[id]=0.0
}

public client_disconnect( iPlayer )
{
	g_goldenak[iPlayer]=false
	g_goldendeagle[iPlayer]=false
	g_isingravity[iPlayer] = false
	g_multijumps[iPlayer] = 0
	jumpnum[iPlayer] = 0
	g_blink[iPlayer]= false
	dojump[iPlayer] = false
	g_rocket[iPlayer]=0.0
	g_tryder[iPlayer]=false
	g_fuel[iPlayer]=0.0
	
	if (g_iPlantedMines[ iPlayer ] > 0)
	{
		Func_RemoveMinesByOwner( iPlayer );
		g_iPlantedMines[ iPlayer ] = 0;
	}

	g_iTripMines[ iPlayer ] = 0;

	g_iPlanting[ iPlayer ] = false;
	g_iRemoving[ iPlayer ] = false;

	g_iMineIds[iPlayer][0] = 0;
	g_iMineIds[iPlayer][1] = 0;
	
	if (task_exists(iPlayer + TASK_REMOVE))
		remove_task( iPlayer + TASK_REMOVE );
	if (task_exists(iPlayer + TASK_CREATE))
		remove_task( iPlayer + TASK_CREATE );
}

public client_PreThink(id)
{
	if (is_user_alive(id))
	{
		if (g_isingravity[id])
		{
			if (zp_get_user_zombie(id))
			{
				if (!zp_frozen(id))
				{
					set_user_gravity(id, 0.25)
				}
			}

			else
			{
				set_user_gravity(id, 0.5)
			}
		}
		
		if (g_blink[id] && g_enemy[id] > 0 && (pev(id, pev_button) & IN_ATTACK || pev(id, pev_button) & IN_ATTACK2) && is_user_alive(g_enemy[id]) && !zp_get_user_zombie(g_enemy[id]))
		{
			new Float:origin[3];
			new Float:new_velocity[3];
			
			pev(g_enemy[id], pev_origin, origin);

			entity_set_aim(id, origin);
			get_speed_vector2(id, g_enemy[id], 1150.0, new_velocity)
			
			set_task(1.2, "disableBlink", id);
			set_pev(id, pev_velocity, new_velocity);
		}
		
		if (g_multijumps[id] > 0)
		{
			new nbut = get_user_button(id)
			new obut = get_user_oldbutton(id)
			if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
			{
				if(jumpnum[id] < g_multijumps[id])
				{
					dojump[id] = true
					jumpnum[id]++
					return
				}
			}
			if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
			{
				jumpnum[id] = 0
				return
			}
		}

		if (g_jet[id])
		{
			if (pev(id, pev_button) & IN_ATTACK2 && g_rocket[id] < get_gametime())
			{
				new pEntity = create_entity("info_target");
				if (pev_valid(pEntity))
				{
					engfunc(EngFunc_SetModel, pEntity, "models/rpgrocket.mdl");

					set_pev(pEntity, pev_classname, "Rocket");
					set_pev(pEntity, pev_movetype, MOVETYPE_FLY);
					set_pev(pEntity, pev_solid, SOLID_BBOX);
					set_pev(pEntity, pev_effects, EF_LIGHT | EF_BRIGHTLIGHT);
					set_pev(pEntity, pev_owner, id);

					new Float:VAngle[3];
					pev(id, pev_v_angle, VAngle);
					engfunc(EngFunc_MakeVectors, VAngle);

					new Float:Forward[3], Float:Velocity[3];
					global_get(glb_v_forward, Forward);
					Forward[0]*=64.0;
					Forward[1]*=64.0;
					Forward[2]*=64.0;
					
					global_get(glb_v_forward, Velocity);
					Velocity[0]*=1750.0;
					Velocity[1]*=1750.0;
					Velocity[2]*=1750.0;

					new Float:Origin[3];
					pev(id, pev_origin, Origin);
					Origin[0] += Forward[0];
					Origin[1] += Forward[1];

					set_pev(pEntity, pev_origin, Origin);
					set_pev(pEntity, pev_velocity, Velocity);

					new Float: Angles[3];
					engfunc(EngFunc_VecToAngles, Velocity, Angles);
					set_pev(pEntity, pev_angles, Angles);

					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_BEAMFOLLOW);
					write_short(pEntity);
					write_short(g_trail);
					write_byte(25);
					write_byte(5);
					write_byte(191);
					write_byte(191);
					write_byte(191);
					write_byte(random_num(150, 240));
					message_end();

					emit_sound(id, CHAN_WEAPON, "ZombieOutstanding/rocket_fire.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
					g_rocket[id] = get_gametime() + 15.0;
				}

				else
					g_rocket[id] = get_gametime() + 1.0;
			}

			if (pev(id, pev_button) & IN_DUCK && pev(id, pev_button) & IN_JUMP && !(pev(id, pev_flags) & FL_ONGROUND) && g_fuel[id] > 0.0)
			{
				new Float:Velocity[3], Float:Angles[3], Float:Forward[3], Float:dummy1[3], Float:dummy2[3];
				
				pev(id, pev_velocity, Velocity);
				pev(id, pev_angles, Angles);
				Angles[2] = 0.0;

				engfunc(EngFunc_AngleVectors, Angles, Forward,dummy1,dummy2);
				Angles[0] = Forward[0], Angles[1] = Forward[1], Angles[2] = Forward[2];
				Angles[0] *= 300.0;
				Angles[1] *= 300.0;

				Velocity[0] = Angles[0];
				Velocity[1] = Angles[1];

				if (Velocity[2] < 300.0)
					Velocity[2] += 35.0;

				set_pev(id, pev_velocity, Velocity)

				if (random_num(0, 3) == 0)
				{
					new Float:Origin[3];
					pev(id, pev_origin, Origin);

					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_SPRITE);
					engfunc(EngFunc_WriteCoord, Origin[0]);
					engfunc(EngFunc_WriteCoord, Origin[1]);
					engfunc(EngFunc_WriteCoord, Origin[2]);
					write_short(g_flame);
					write_byte(8);
					write_byte(200);
					message_end();
				}

				if (g_fuel[id] > 80.0)
					emit_sound(id, CHAN_ITEM, "ZombieOutstanding/jetpack_fly.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

				else
					emit_sound(id, CHAN_ITEM, "ZombieOutstanding/jetpack_blow.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

				g_fuel[id] -= 1.0;
			}

			else if (!(pev(id, pev_button) & IN_DUCK) && !(pev(id, pev_button) & IN_JUMP) && g_fuel[id] < 250.0)
				g_fuel[id] += 0.5;
		}
	}
}

public disableBlink(i)
{
	if (is_user_connected(i))
		g_blink = false
}

public client_PostThink(id)
{
	if(!is_user_alive(id))
		return

	if(dojump[id] == true)
	{
		new Float:velocity[3]	
		entity_get_vector(id,EV_VEC_velocity,velocity)
		velocity[2] = random_float(265.0, 285.0)
		entity_set_vector(id,EV_VEC_velocity,velocity)
		dojump[id] = false
	}
}

public plugin_natives()
{
	register_library("hatt_EI");
	register_native("zp_get_gold_ak", "zp_get_gold_ak", 1)
	register_native ("zp_get_gold_de", "zp_get_gold_de", 1)
	register_native("zp_get_jp", "zp_get_jp", 1)
}

public zp_get_jp(i)
{
	return g_jet;
}

public zp_get_gold_ak(i)
{
	return g_goldenak
}

public zp_get_gold_de(i)
{
	return g_goldendeagle[i];
}

public zp_extra_item_selected(id, itemid)
{
	static CsArmorType:tmp;
	static name[64];

	get_user_name(id, name, 63);
	set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.55,0, 6.0, 2.25, 0.1, 0.2,-1);

	if (itemid == g_itemid)
	{
		g_iTripMines[ id ]++;
		
		client_print_color( id, id, "^x04[ZM]^x01 You bought a^x03 Trip Mine^x01. Press^x04 P^x01 to plant it or^x04 V^x01 to take it" );
		
		client_cmd( id, "bind p Plant_Mine" );
		client_cmd( id, "bind v Take_Mine" );
		
		DCF( id, "bind p Plant_Mine" );
		DCF( id, "bind v Take_Mine" );

		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT A TRiP MiNE *");
	}
	
	else if (itemid == g_iblink)
	{
		g_blink[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW KNiFE BLiNK *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 Knife Blink", name);
	}

	else if (itemid == g_imodblink)
	{
		g_blink[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW *MOD* KNiFE BLiNK *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* Knife Blink", name);
	}

	else if (itemid == g_armor100)
	{
		if (get_user_armor(id) + 100 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 100, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (100 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (100 A.P.)" );
	}
	
	else if (itemid == g_clip)
	{
		g_tryder[id]=true
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT UNLiMiTED CLiP *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Unlimited Clip" );
	}
	
	else if (itemid == g_armor200)
	{
		if (get_user_armor(id) + 200 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 200, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (200 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (200 A.P.)" );
	}
	else if ( itemid ==g_armor300)
	{
		if (get_user_armor(id) + 300 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 300, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (300 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (300 A.P.)" );
	}
	else if (itemid==g_tryderid)
	{
		set_user_health(id, 720);
		cs_set_user_armor(id, 720, CS_ARMOR_VESTHELM)
		ShowSyncHudMsg(0, g_hud[2], "* %s BOUGHT TRYDER *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 TRYDER", name);
		g_tryder[id]=true
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90)
		}
		if (!user_has_weapon(id, CSW_M4A1))
		{
			give_item(id, "weapon_m4a1");
			cs_set_user_bpammo(id, CSW_M4A1, 90)
		}
		if (!user_has_weapon(id, CSW_G3SG1))
		{
			give_item(id, "weapon_g3sg1");
			cs_set_user_bpammo(id, CSW_G3SG1, 90)
		}
		if (!user_has_weapon(id, CSW_SG550))
		{
			give_item(id, "weapon_sg550");
			cs_set_user_bpammo(id, CSW_SG550, 90)
		}
		if (!user_has_weapon(id, CSW_XM1014))
		{
			give_item(id, "weapon_xm1014");
			cs_set_user_bpammo(id, CSW_XM1014, 32)
		}
		g_multijumps[id]++;
		g_isingravity[id]=true
		set_rendering(id, kRenderFxGlowShell, 204, 0, 204, kRenderNormal, 26)
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid ==g_health)
	{
	CountHP[id]++;
		if(CountHP[id] == 1) {
			set_user_health(id, get_user_health(id) + 1000);
			ShowSyncHudMsg(0, g_hud[2], "* %s BOUGHT 1,000 HP *", name);
			client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 1,000 H.P.", name);
		}
	}
	else if (itemid ==g_multijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* YOU CAN JUMP NOW %d TiMES *", g_multijumps[id] + 1);
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Multi Jump (+1)" );
	}
	else if (itemid ==g_zmultijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* YOU CAN JUMP NOW %d TiMES *", g_multijumps[id] + 1);
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Multi Jump (+1)" );
	}
	else if (itemid==g_specialmultijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* %s CAN JUMP NOW %d TiMES *", name, g_multijumps[id] + 1);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 can jump now^x04 %d TiMES", name, g_multijumps[id]+1);
	}
	else if (itemid == g_zgravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A BETTER GRAViTY *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 ZM Extra Gravity", name);
	}
	else if ( itemid==g_gravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* YOU HAVE NOW A BETTER GRAViTY *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Extra Gravity" );
	}
	else if (itemid==g_modgravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A BETTER GRAViTY *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* Extra Gravity", name);
	}
	else if ( itemid == g_jetpack)
	{
		if (g_jet[id])
			dropJetpack(id, true)
		g_jet[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A JETPACK *", name);
		client_cmd(id, "weapon_knife");
		setJetpack(id);
		client_cmd(id, "spk items/tr_kevlar")
		client_print_color(id, id, "^x04[ZM]^x01 PRESS^x03 CTRL+SPACE^x01 TO FLY. PRESS^x03 +attack2^x01 TO FIRE.");
	}
	else if (itemid == g_ak)
	{
		g_goldenak[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD AK47 *", name);
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90);
		}
		client_cmd(id, "weapon_ak47");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 GOLD AK47", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid == g_modak)
	{
		g_goldenak[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD AK47 *", name);
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90);
		}
		client_cmd(id, "weapon_ak47");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* GOLD AK47", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid==g_deagle)
	{
		g_goldendeagle[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD DEAGLE *", name);
		if (!user_has_weapon(id, CSW_DEAGLE))
		{
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo(id, CSW_DEAGLE, 35);
		}
		client_cmd(id, "weapon_deagle");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 GOLD DEAGLE", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid ==g_moddeagle)
	{
		g_goldendeagle[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD DEAGLE *", name);
		if (!user_has_weapon(id, CSW_DEAGLE))
		{
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo(id, CSW_DEAGLE, 35);
		}
		client_cmd(id, "spk items/tr_kevlar")
		client_cmd(id, "weapon_deagle");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* GOLD DEAGLE", name);
	}
	else if (itemid==g_modjetpack)
	{
		if (g_jet[id])
			dropJetpack(id, true)
		g_jet[id] = true
		client_cmd(id, "weapon_knife");
		setJetpack(id);
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A JETPACK *", name);
		client_cmd(id, "spk items/tr_kevlar")
		client_print_color(id, id, "^x04[ZM]^x01 PRESS^x03 CTRL+SPACE^x01 TO FLY. PRESS^x03 +attack2^x01 TO FIRE.");
	}
	else if (g_buyassassin == itemid)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT ASSASSiN *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 ASSASSiN", name);
		zp_make_user_assassin(id);
		g_modscount++
	}
	else if (itemid ==g_buynemesis)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has already started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait this round and 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait till the next round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT NEMESiS *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 NEMESiS", name);
		zp_make_user_nemesis(id);
		g_modscount++
	}
	else if (itemid == g_buysurvivor)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT SURViVOR *", name);
		zp_make_user_survivor(id);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 SURViVOR", name);
		g_modscount++
	}
	else if ( itemid ==g_buysniper)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT SNiPER *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 SNiPER", name);
		zp_make_user_sniper(id);
		g_modscount++
	}
	return 0;
}

public plugin_precache( )
{
	engfunc( EngFunc_PrecacheModel, MINE_MODEL_VIEW );
	
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_ACTIVATE );
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_CHARGE );
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_DEPLOY );
	
	precache_sound("ZombieOutstanding/gun_pickup.wav");
	
	g_hExplode = engfunc( EngFunc_PrecacheModel, MINE_MODEL_EXPLODE );

	precache_model("models/p_egon.mdl");
	precache_model("models/v_egon.mdl");
	precache_model("models/rpgrocket.mdl");

	precache_sound("ZombieOutstanding/jetpack_fly.wav");
	precache_sound("ZombieOutstanding/jetpack_blow.wav");
	precache_sound("ZombieOutstanding/rocket_fire.wav");
	
	g_shockwave = precache_model("sprites/shockwave.spr")
	g_trail = precache_model("sprites/laserbeam.spr");
	g_flame = precache_model("sprites/xfireball3.spr");
}

public DispatchTouch( pTouched, pToucher)
{
	static pTouchedClass[32], Plr,pToucherClass[32], owner, Float:Origin[3], Float:Velocity[3], Float:flHealth, Float:Damage;
	
	pTouchedClass[0] = '^0';
	pToucherClass[0] = '^0';

	if (pev_valid(pTouched)) pev(pTouched, pev_classname, pTouchedClass, 31);
	if (pev_valid(pToucher)) pev(pToucher, pev_classname, pToucherClass, 31);

	if (equali(pTouchedClass, "Rocket"))
	{
		owner=pev(pTouched, pev_owner);
		if (is_user_connected(owner))
		{
			for ( Plr = 1; Plr <= get_maxplayers(); Plr++)
			{
				if (!is_user_alive(Plr) || entity_range(Plr, pTouched) > 360.0)
					continue;

				flHealth = entity_get_float( Plr, EV_FL_health );

				if (get_cvar_num("zp_enable_bazooka_knockback"))
				{
					entity_get_vector( Plr, EV_VEC_velocity, Velocity );

					Velocity[ 2 ] += random_float(120.0, 240.0);

					if (random_num(0, 1) == 0)
						Velocity[ 1 ] += random_float(120.0, 240.0);
					else
						Velocity[1] += random_float(-240.0, -120.0);

					if (random_num(0, 1) == 0)
						Velocity[ 0 ] += random_float(120.0, 240.0);
					else
						Velocity[0] += random_float(-240.0, -120.0);

					if (!zp_frozen(Plr))
					{
						if (!zp_get_user_zombie(Plr) && !get_cvar_num("zp_enable_bazooka_k_humans"))
							continue;
						entity_set_vector( Plr, EV_VEC_velocity, Velocity );
					}
				}

				if( zp_get_user_zombie( Plr )&& !get_user_godmode(Plr) && !zp_get_user_no_damage(Plr) )
				{
					Damage = 1250.0 - entity_range(Plr, pTouched);

					if (get_cvar_num("zp_enable_bazooka_redfade"))
					{
						do_screen_fade(Plr, 0.45, 230, 0, 0, Damage > 999.0 ? 225 : 165)
					}
					if (get_cvar_num("zp_enable_bazooka_flatline") && Damage > 999.0)
					{
						client_cmd(Plr, "spk fvox/flatline")
					}

					if (!(flHealth - Damage > 0.0))
						ExecuteHamB(Ham_Killed, Plr, owner, 2)
					else
						ExecuteHamB(Ham_TakeDamage, Plr, pTouched, owner, Damage, DMG_MORTAR);
				}
			}
		}

		if (equali("func_breakable", pToucherClass))
			dllfunc(DLLFunc_Use, pToucher, pTouched);

		pev(pTouched, pev_origin, Origin);

		for (new Iter = 0; Iter < 4; Iter++)
		{
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_EXPLOSION);
			engfunc(EngFunc_WriteCoord, Origin[0] + random_float(-22.0, 22.0));
			engfunc(EngFunc_WriteCoord, Origin[1] + random_float(-22.0, 22.0));
			engfunc(EngFunc_WriteCoord, Origin[2] + random_float(-22.0, 22.0));
			write_short(g_hExplode);
			write_byte(random_num(15, 25));
			write_byte(15);
			write_byte(0);
			message_end();
		}

		for (new Iter = 0; Iter < 4; Iter++)
		{
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_BEAMCYLINDER);
			engfunc(EngFunc_WriteCoord, Origin[0]);
			engfunc(EngFunc_WriteCoord, Origin[1]);
			engfunc(EngFunc_WriteCoord, Origin[2]);
			engfunc(EngFunc_WriteCoord, Origin[0]);
			engfunc(EngFunc_WriteCoord, Origin[1]);
			engfunc(EngFunc_WriteCoord, Origin[2] + (450.0 + (Iter * 100.0)));
			write_short(g_shockwave);
			write_byte(0);
			write_byte(0);
			write_byte(4);
			write_byte(Iter * 40);
			write_byte(0);
			write_byte(121);
			write_byte(121);
			write_byte(121);
			write_byte(random_num(150, 240));
			write_byte(0);
			message_end();
		}

		remove_entity(pTouched);
	}

	else if (equali(pTouchedClass, "Jetpack"))
	{
		if (pToucher < 1 || pToucher > get_maxplayers() || !is_user_alive(pToucher) || g_jet[pToucher] || zp_get_user_zombie(pToucher))
		{
			return FMRES_SUPERCEDE;
		}

		if (g_fuel[pToucher] < 2.0)
			g_fuel[pToucher] = 250.0;

		g_jet[pToucher] = true;

		client_cmd(pToucher, "weapon_knife");
		setJetpack(pToucher);

		emit_sound(pToucher, CHAN_ITEM, "ZombieOutstanding/gun_pickup.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		remove_entity(pTouched);
	}

	return FMRES_IGNORED;
}

public ClientDisconnect(id)
{
	if (g_jet[id])
		dropJetpack(id, true);
}

public Command_Buy( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_ammo_packs( iPlayer ) < MINE_COST )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You need^x03 %i ammo packs", MINE_COST );
		return PLUGIN_CONTINUE;
	}

	zp_set_user_ammo_packs( iPlayer, zp_get_user_ammo_packs( iPlayer ) - MINE_COST );
	
	g_iTripMines[ iPlayer ]++;
	
	client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You bought a^x03 Trip Mine^x01. Press^x04 P^x01 to plant it or^x04 V^x01 to take it" );
	
	client_cmd( iPlayer, "bind p Plant_Mine" );
	client_cmd( iPlayer, "bind v Take_Mine" );
		
	DCF( iPlayer, "bind p Plant_Mine" );
	DCF( iPlayer, "bind v Take_Mine" );
	
	return PLUGIN_CONTINUE;
}

DCF(i, Msg[])
{
	message_begin(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, _, i)
	write_byte(strlen(Msg) + 2)
	write_byte(DRC_CMD_FADE)
	write_string(Msg)
	message_end()
}

public Command_Plant( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( !g_iTripMines[ iPlayer ] )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You don't have any trip mines." );
		return PLUGIN_CONTINUE;
	}
	
	if( g_iPlantedMines[ iPlayer ] > 1 )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You have reached the limit^x03 (2)" );
		return PLUGIN_CONTINUE;
	}

	if( g_iPlanting[ iPlayer ] || g_iRemoving[ iPlayer ] )
		return PLUGIN_CONTINUE;
	
	if( CanPlant( iPlayer ) )
	{
		g_iPlanting[ iPlayer ] = true;

		message_begin( MSG_ONE_UNRELIABLE, 108, _, iPlayer );
		write_byte( 1 );
		write_byte( 0 );
		message_end( );

		set_task( 1.2, "Func_Plant", iPlayer + TASK_CREATE );
	}

	return PLUGIN_CONTINUE;
}

public Command_Take( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( !g_iPlantedMines[ iPlayer ] )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You don't have a planted trip mine." );
		return PLUGIN_CONTINUE;
	}
	
	if( g_iPlanting[ iPlayer ] || g_iRemoving[ iPlayer ] )
		return PLUGIN_CONTINUE;
	
	if( CanTake( iPlayer ) )
	{
		g_iRemoving[ iPlayer ] = true;
		
		message_begin( MSG_ONE_UNRELIABLE, 108, _, iPlayer );
		write_byte( 1 );
		write_byte( 0 );
		message_end( );
		
		set_task( 1.2, "Func_Take", iPlayer + TASK_REMOVE );
	}
	
	return PLUGIN_CONTINUE;
}

public Func_Take( iPlayer )
{
	iPlayer -= TASK_REMOVE;
	g_iRemoving[ iPlayer ] = false;

	static iEntity, szClassName[ 32 ], Float: flOwnerOrigin[ 3 ], Float: flEntityOrigin[ 3 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;

		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );

		if( equali( szClassName, MINE_CLASSNAME ) )
		{
			if( entity_get_owner( iEntity ) == iPlayer )
			{
				entity_get_vector( iPlayer, EV_VEC_origin, flOwnerOrigin );
				entity_get_vector( iEntity, EV_VEC_origin, flEntityOrigin );

				if( get_distance_f( flOwnerOrigin, flEntityOrigin ) < 55.0 )
				{
					if (g_iMineIds[iPlayer][0] == iEntity)
						g_iMineIds[iPlayer][0] = 0;

					else if (g_iMineIds[iPlayer][1] == iEntity)
						g_iMineIds[iPlayer][1] = 0;

					g_iPlantedMines[ iPlayer ]--;
					g_iTripMines[ iPlayer ]++;

					remove_entity( iEntity );

					break;
				}
			}
		}
	}
}

public bool: CanTake( iPlayer )
{
	static iEntity, szClassName[ 32 ], Float: flOwnerOrigin[ 3 ], Float: flEntityOrigin[ 3 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) )
		{
			if( entity_get_owner( iEntity ) == iPlayer )
			{
				entity_get_vector( iPlayer, EV_VEC_origin, flOwnerOrigin );
				entity_get_vector( iEntity, EV_VEC_origin, flEntityOrigin );
				
				if( get_distance_f( flOwnerOrigin, flEntityOrigin ) < 55.0 )
					return true;
			}
		}
	}
	
	return false;
}

public bool: CanPlant( iPlayer )
{
	static Float: flOrigin[ 3 ];
	entity_get_vector( iPlayer, EV_VEC_origin, flOrigin );
	
	static Float: flTraceDirection[ 3 ], Float: flTraceEnd[ 3 ];
	velocity_by_aim( iPlayer, 64, flTraceDirection );
	flTraceEnd[ 0 ] = flTraceDirection[ 0 ] + flOrigin[ 0 ];
	flTraceEnd[ 1 ] = flTraceDirection[ 1 ] + flOrigin[ 1 ];
	flTraceEnd[ 2 ] = flTraceDirection[ 2 ] + flOrigin[ 2 ];
	
	static Float: flFraction, iTr;
	iTr = 0;
	engfunc( EngFunc_TraceLine, flOrigin, flTraceEnd, 0, iPlayer, iTr );
	get_tr2( iTr, TR_flFraction, flFraction );
	
	if( flFraction >= 1.0 )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You must plant the^x03 Trip Mine^x01 on a wall" );
		return false;
	}
	
	return true;
}

public Func_Plant( iPlayer )
{
	iPlayer -= TASK_CREATE;
	g_iPlanting[ iPlayer ] = false;
	
	static Float: flOrigin[ 3 ];
	entity_get_vector( iPlayer, EV_VEC_origin, flOrigin );
	
	static Float: flTraceDirection[ 3 ], Float: flTraceEnd[ 3 ], Float: flTraceResult[ 3 ], Float: flNormal[ 3 ];
	velocity_by_aim( iPlayer, 128, flTraceDirection );
	flTraceEnd[ 0 ] = flTraceDirection[ 0 ] + flOrigin[ 0 ];
	flTraceEnd[ 1 ] = flTraceDirection[ 1 ] + flOrigin[ 1 ];
	flTraceEnd[ 2 ] = flTraceDirection[ 2 ] + flOrigin[ 2 ];
	
	static iTr;
	iTr = 0;
	engfunc( EngFunc_TraceLine, flOrigin, flTraceEnd, 0, iPlayer, iTr );
	get_tr2( iTr, TR_vecEndPos, flTraceResult );
	get_tr2( iTr, TR_vecPlaneNormal, flNormal );

	static iEntity;
	iEntity = create_entity( "info_target" );
	
	if( !pev_valid(iEntity ))
		return;
	
	entity_set_string( iEntity, EV_SZ_classname, MINE_CLASSNAME );
	entity_set_model( iEntity, MINE_MODEL_VIEW );
	entity_set_size( iEntity, Float: { -4.0, -4.0, -4.0 }, Float: { 4.0, 4.0, 4.0 } );
	
	entity_set_int( iEntity, EV_INT_iuser2, iPlayer );
	
	g_iPlantedMines[ iPlayer ]++;
	if (g_iMineIds[iPlayer][0]==0)
		g_iMineIds[iPlayer][0] = iEntity;
	else
		g_iMineIds[iPlayer][1] = iEntity;
	
	entity_set_float( iEntity, EV_FL_frame, 0.0 );
	entity_set_float( iEntity, EV_FL_framerate, 0.0 );
	entity_set_int( iEntity, EV_INT_movetype, MOVETYPE_FLY );
	entity_set_int( iEntity, EV_INT_solid, SOLID_NOT );
	entity_set_int( iEntity, EV_INT_body, 3 );
	entity_set_int( iEntity, EV_INT_sequence, 7 );
	entity_set_float( iEntity, EV_FL_takedamage, DAMAGE_NO );
	entity_set_int( iEntity, EV_INT_iuser1, MINE_OFF );
	
	static Float: flNewOrigin[ 3 ], Float: flEntAngles[ 3 ];
	flNewOrigin[ 0 ] = flTraceResult[ 0 ] + ( flNormal[ 0 ] * 8.0 );
	flNewOrigin[ 1 ] = flTraceResult[ 1 ] + ( flNormal[ 1 ] * 8.0 );
	flNewOrigin[ 2 ] = flTraceResult[ 2 ] + ( flNormal[ 2 ] * 8.0 );
	
	fm_set_rendering(iEntity, kRenderFxGlowShell, random_num(0, 255), random_num(0, 255), random_num(0 , 255), kRenderNormal, 12)
	
	entity_set_origin( iEntity, flNewOrigin );
	
	vector_to_angle( flNormal, flEntAngles );
	entity_set_vector( iEntity, EV_VEC_angles, flEntAngles );
	flEntAngles[ 0 ] *= -1.0;
	flEntAngles[ 1 ] *= -1.0;
	flEntAngles[ 2 ] *= -1.0;
	entity_set_vector( iEntity, EV_VEC_v_angle, flEntAngles );
	
	g_iTripMines[ iPlayer ]--;
	
	emit_sound( iEntity, CHAN_WEAPON, MINE_SOUND_DEPLOY, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
	emit_sound( iEntity, CHAN_VOICE, MINE_SOUND_CHARGE, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
	
	entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 0.6 );
}

public Func_RemoveMinesByOwner( iPlayer )
{
	static iEntity, szClassName[ 32 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) )
			if( entity_get_int( iEntity, EV_INT_iuser2 ) == iPlayer )
				remove_entity( iEntity );
	}
}

Func_Explode( iEntity )
{
	new owner = entity_get_owner(iEntity);
	
	g_iPlantedMines[ owner ]--;
	if (g_iMineIds[owner][0] == iEntity)
		g_iMineIds[owner][0] = 0;
	else if (g_iMineIds[owner][1] == iEntity)
		g_iMineIds[owner][1] = 0;
	
	static Float: flOrigin[ 3 ], Float: flZombieOrigin[ 3 ], Float: flHealth, Float: flVelocity[ 3 ];
	entity_get_vector( iEntity, EV_VEC_origin, flOrigin );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0) );
	write_short( g_hExplode );
	write_byte( 55 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0));
	write_short( g_hExplode );
	write_byte( 65 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0));
	write_short( g_hExplode );
	write_byte( 85 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	static iZombie, Float:Damage;
	for( iZombie = 1; iZombie < get_maxplayers() + 1; iZombie++ )
	{
		if( is_user_connected( iZombie ) )
		{
			if( is_user_alive( iZombie ) )
			{
				entity_get_vector( iZombie, EV_VEC_origin, flZombieOrigin );
				
				if( get_distance_f( flOrigin, flZombieOrigin ) <= 360.0 )
				{
					flHealth = entity_get_float( iZombie, EV_FL_health );

					if (get_cvar_num("zp_enable_lasermine_knockback"))
					{
						entity_get_vector( iZombie, EV_VEC_velocity, flVelocity );

						flVelocity[ 2 ] += random_float(120.0, 240.0);

						if (random_num(0, 1) == 0)
							flVelocity[ 1 ] += random_float(120.0, 240.0);
						else
							flVelocity[1] += random_float(-240.0, -120.0);

						if (random_num(0, 1) == 0)
							flVelocity[ 0 ] += random_float(120.0, 240.0);
						else
							flVelocity[0] += random_float(-240.0, -120.0);

						if (!zp_frozen(iZombie))
						{
							if (!zp_get_user_zombie(iZombie) && !get_cvar_num("zp_enable_lasermine_k_humans"))
								continue;
							entity_set_vector( iZombie, EV_VEC_velocity, flVelocity );
						}
					}

					if (get_cvar_num("zp_enable_lasermine_flatline"))
					{
						client_cmd(iZombie, "spk fvox/flatline")
					}
					if( zp_get_user_zombie( iZombie )&& !get_user_godmode(iZombie) && !zp_get_user_no_damage(iZombie) )
					{
						Damage = 2250.0 - get_distance_f( flOrigin, flZombieOrigin );
						if (get_cvar_num("zp_enable_lasermine_redfade"))
						{
							do_screen_fade(iZombie, 0.45, 230, 0, 0, 200)
						}

						if (!(flHealth - Damage > 0.0))
							ExecuteHamB(Ham_Killed, iZombie, owner, 2)
						else
							ExecuteHamB(Ham_TakeDamage, iZombie, iEntity, owner, Damage, DMG_MORTAR);
					}
				}
			}
		}
	}
	
	remove_entity( iEntity );
}

public Forward_Think(iEntity)
{
	static Float: flGameTime, iStatus, Float: flHealth;
	flGameTime = get_gametime( );
	iStatus = entity_get_status( iEntity );
	new owner = entity_get_owner(iEntity);

	switch( iStatus )
	{
		case MINE_OFF:
		{
			entity_set_int( iEntity, EV_INT_iuser1, MINE_ON );
			entity_set_float( iEntity, EV_FL_takedamage, DAMAGE_YES );
			entity_set_int( iEntity, EV_INT_solid, SOLID_BBOX );
			entity_set_float( iEntity, EV_FL_health, MINE_HEALTH + 1000.0 );

			emit_sound( iEntity, CHAN_VOICE, MINE_SOUND_ACTIVATE, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
		}

		case MINE_ON:
		{
			flHealth = entity_get_float( iEntity, EV_FL_health );

			if( flHealth <= 1000.0 )
			{
				Func_Explode( iEntity );
				return FMRES_IGNORED;
			}
			
			else
			{
				if (g_iMineIds[owner][0] == iEntity)
				{
					set_hudmessage(210, 0, 0, 0.92, 0.34,0, 6.0, 0.11, 0.1, 0.2,-1);
					ShowSyncHudMsg(owner, g_hud[0], "Mine 1  %d HP", max(floatround(flHealth - 1000.0), 0));
				}
				else
				{
					set_hudmessage(210, 0, 0, 0.92, 0.38,0, 6.0, 0.11,  0.1, 0.2,-1);
					ShowSyncHudMsg(owner, g_hud[1], "Mine 2  %d HP", max(floatround(flHealth - 1000.0), 0));
				}
			}
		}
	}

	if( is_valid_ent( iEntity ) )
		entity_set_float( iEntity, EV_FL_nextthink, flGameTime + 0.1 );

	return FMRES_IGNORED;
}

stock fm_set_weapon_ammo(entity, amount)
{
	if (pev_valid(entity)==2)
		set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}

do_screen_fade(       id, Float:fadeTime,  red, green, blue, alpha, type = FADE_IN       )
{
   new  hold =floatround(         fadeTime *4096.0);
   message_begin(    MSG_ONE_UNRELIABLE, get_user_msgid(    "ScreenFade"           ), _, id          );
   write_short(          hold    );
   write_short(    hold    );
   write_short(    type   );
   write_byte(      red    );
   write_byte(  green    );
   write_byte(    blue    );
   write_byte(     alpha    );
   message_end(    );
}

#if AMXX_VERSION_NUM <= 182
client_print_color(const iIDTarget, const iIDSender = 0, const szMessage[], any:...)
{
	if (iIDTarget && !is_user_connected(iIDTarget))
		return;
	
	static szBuffer[192];
	vformat(szBuffer, charsmax(szBuffer), szMessage, 4)
	
/*	static const szChatTag[] = "^1[^4ZP^1] ";
	format(szBuffer, charsmax(szBuffer), "%s%s", szChatTag, szBuffer)
	*/
	static iIDMsgSayText;
	if (!iIDMsgSayText)
		iIDMsgSayText = get_user_msgid("SayText");
	
	if (iIDTarget)
		message_begin(MSG_ONE, iIDMsgSayText, _, iIDTarget)
	else
		message_begin(MSG_ALL, iIDMsgSayText)
	
	write_byte(!iIDSender ? iIDTarget : iIDSender)
	write_string(szBuffer)
	message_end()
}
#endif

vezi daca merge

Re: [C] Modificare

Posted: 13 Jul 2018, 12:08
by ImparctVirtual
Original boos eu as dori Daca se poate odata pe runda tu mi-ai pus odata pe mapa :)))

EX: daca-s survivor am 5000 HP cumpar +1000 HP am total 6000 si daca vreau sa mai cumpar sa nu-mi mai dea voie si sa-mi scrie pe chat ai cumparat +1000 H.P runda aceasta

multumesc frumos de ajutor.

Re: [C] Modificare

Posted: 17 Jul 2018, 14:28
by EnTeR_
Vezi asa:
| Afiseaza codul
#include < amxmodx >
#include amxmisc
#include cstrike
#include < fakemeta_util >
#include < fun >
#include < engine >
#include hamsandwich
#include nvault
#include < zombieplague63 >
#include chr_engine

#define FADE_IN      0x0000
#define FADE_OUT      0x0001
#define FADE_MODULATE   0x0002
#define FADE_STAYOUT   0x0004

#define MAX_ENTITIES		(global_get(glb_maxEntities))
#define MINE_ON			1
#define MINE_OFF			0
#define TASK_CREATE		847655612
#define TASK_REMOVE		867661231
#define MINE_COST			5
#define MINE_CLASSNAME		"zp_mine"
#define MINE_MODEL_EXPLODE	"sprites/zerogxplode.spr"
#define MINE_MODEL_VIEW		"models/zombie_plague/lasermine.mdl"
#define MINE_SOUND_ACTIVATE	"weapons/mine_activate.wav"
#define MINE_SOUND_CHARGE		"weapons/mine_charge.wav"
#define MINE_SOUND_DEPLOY		"weapons/mine_deploy.wav"
#define MINE_HEALTH		800.0
#define entity_get_owner(%0)		entity_get_int( %0, EV_INT_iuser2 )
#define entity_get_status(%0)		entity_get_int( %0, EV_INT_iuser1 )
#define entity_get_classname(%0,%1)	entity_get_string( %0, EV_SZ_classname, %1, charsmax( %1 ) )

new g_iTripMines[ 33 ];
new g_iPlantedMines[ 33 ];
new g_iPlanting[ 33 ];
new g_iRemoving[ 33 ];
new g_iMineIds[33][2];
new g_multijumps[33];
new g_hExplode;
new g_hud[3];
new g_itemid;
new g_armor100;
new g_armor200;
new g_armor300;
new g_multijump;
new g_zgravity;
new g_zmultijump;
new g_specialmultijump;
new g_health;
new g_gravity;
new g_moddeagle;
new g_modak;
new g_ak;
new g_deagle;
new g_buyassassin;
new g_buynemesis;
new g_jetpack;
new g_buysniper;
new g_buysurvivor;
new g_modjetpack;
new jumpnum[33] = 0
new bool:dojump[33] = false
new g_isingravity[33]
new g_goldenak[33]
new g_goldendeagle[33]
new g_clip
new g_jet[33]
new g_blink[33]
new g_iblink, g_imodblink
new g_enemy[33]
new Float:g_fuel[33], Float:g_rocket[33]
new g_shockwave
new g_trail
new g_flame
new g_rounds[512]
new g_tryder[33]
new g_tryderid
new g_modscount=0
new g_modgravity
new g_curround = 0
new g_inround = false
new CountHP [33];

// CS Offsets
#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif
const OFFSET_LINUX_WEAPONS = 4

// Max Clip for weapons
new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20,
			10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }

setJetpack( Player)
{
	set_pev(Player, pev_viewmodel2, "models/v_egon.mdl")
	set_pev(Player, pev_weaponmodel2, "models/p_egon.mdl")
}

setKnife( Player)
{
	set_pev(Player, pev_viewmodel2, "models/v_knife.mdl")
	set_pev(Player, pev_weaponmodel2, "models/p_knife.mdl")
}

dropJetpack( Player,  Forced = false)
{
	new Float:origin[3];
	pev(Player, pev_origin, origin);

	new Float:vangle[3];
	pev(Player, pev_v_angle, vangle);
	engfunc(EngFunc_MakeVectors, vangle);
	
	new Float:fwd[3];
	global_get(glb_v_forward, fwd);
	fwd[0] *= 75.0;
	fwd[1] *= 75.0;
	fwd[2] *= 75.0;
	
	origin[0] += fwd[0]
	origin[1]+=fwd[1]

	new Trace=0;
	engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS | IGNORE_GLASS, HULL_HUMAN, 0, Trace);
	if (get_tr2(Trace, TR_StartSolid) || get_tr2(Trace, TR_AllSolid) || !get_tr2(Trace, TR_InOpen))
	{
		if (Forced)
		{
			g_jet[Player]=false

			if (is_user_alive(Player))
			{
				client_cmd(Player, "weapon_knife");
				setKnife(Player);
			}
		}
	}

	else
	{
		new pJetpack = create_entity("info_target");
		if (pev_valid(pJetpack))
		{
			engfunc(EngFunc_SetModel, pJetpack, "models/p_egon.mdl");
			engfunc(EngFunc_SetSize,pJetpack, Float:{-16.0, -16.0, -16.0},Float:{16.0, 16.0, 16.0});

			set_pev(pJetpack, pev_classname, "Jetpack")
			set_pev(pJetpack, pev_movetype, MOVETYPE_TOSS);
			set_pev(pJetpack, pev_solid, SOLID_TRIGGER);
			set_pev(pJetpack, pev_origin, origin);

			g_jet[Player] = false;

			if (is_user_alive(Player))
			{
				client_cmd(Player, "weapon_knife");
				setKnife(Player);
			}
		}
	}
}

public Drop(id)
{
	if (!is_user_connected(id))
		return 0;

	if (get_user_weapon(id)==CSW_KNIFE)
	{
		if (g_jet[id])
			dropJetpack(id, false)

		return 1;
	}
	
	return 0;
}

public plugin_init( )
{
	register_plugin( "[ZM] Extra Items [Especially Trip Mines]", "1.0", "Hattrick" );

	register_cvar("zp_limit_buy_mod_hours", "6") // a player can buy mod in how many hours?
	register_cvar("zp_map_mods_limit", "2") // how many mods can be purchased in map?
	
	register_cvar("zp_enable_bazooka_knockback", "0") // when bazooka's projectile explodes, change players position on map?
	register_cvar("zp_enable_bazooka_k_humans", "0") // if enabled above,   also include humans??
	register_cvar("zp_enable_bazooka_redfade", "0") // if enabled,   zombies get red screenfade if damaged by bazooka projectile?
	register_cvar("zp_enable_bazooka_flatline", "1") // if enabled,   zombies get sound while damaged by bazooka projectile?

	register_cvar("zp_enable_lasermine_knockback", "0") // when lasermine explodes, change players position on map?
	register_cvar("zp_enable_lasermine_k_humans", "0") // if enabled above,   also include humans??
	register_cvar("zp_enable_lasermine_redfade", "0") // if enabled,   zombies get red screenfade if damaged by lasermine?
	register_cvar("zp_enable_lasermine_flatline", "1") // if enabled,   zombies get sound while damaged by lasermine?

	register_forward(FM_Touch, "DispatchTouch");
	register_forward(FM_ClientDisconnect, "ClientDisconnect");
	
	register_clcmd( "say /lm", "Command_Buy" );
	register_clcmd( "say lm", "Command_Buy" );
	register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
	register_clcmd( "say_team /lm", "Command_Buy" );
	register_clcmd( "say_team lm", "Command_Buy" );
	
	register_clcmd("drop", "Drop");

	register_clcmd( "Plant_Mine", "Command_Plant" );
	register_clcmd( "Take_Mine", "Command_Take" );

	register_logevent( "Event_RoundStart", 2, "1=Round_Start" );
	register_logevent( "Event_RoundEnd", 2, "1=Round_End" );
	register_think( MINE_CLASSNAME, "Forward_Think" );
	
	// Health
	g_health = zp_register_extra_item("Health (+1,000 H.P.)", 25, ZP_TEAM_HUMAN|ZP_TEAM_SURVIVOR|ZP_TEAM_SNIPER);
	
	// Armors
	g_armor100 = zp_register_extra_item("Armor (100 A.P.)", 5, ZP_TEAM_HUMAN);
	g_armor200 = zp_register_extra_item("Armor (200 A.P.)", 9, ZP_TEAM_HUMAN);
	g_armor300 = zp_register_extra_item("Armor (300 A.P.)", 12, ZP_TEAM_HUMAN);
	
	// Clip
	g_clip = zp_register_extra_item("Unlimited Clip", 12, ZP_TEAM_HUMAN);
	
	// Jetpack
	g_jetpack = zp_register_extra_item("Jetpack + Bazooka", 32, ZP_TEAM_HUMAN);
	g_modjetpack = zp_register_extra_item("*MOD* Jetpack + Bazooka", 45, ZP_TEAM_SNIPER | ZP_TEAM_SURVIVOR);

	// Tryder
	g_tryderid=zp_register_extra_item("Tryder", 36, ZP_TEAM_HUMAN);
	
	// Laser
	g_itemid = zp_register_extra_item("Trip Mine (/LM)", MINE_COST, ZP_TEAM_HUMAN|ZP_TEAM_SURVIVOR|ZP_TEAM_SNIPER)
	
	// Jump
	g_multijump = zp_register_extra_item("Multi Jump (+1)", 3, ZP_TEAM_HUMAN);
	g_zmultijump = zp_register_extra_item("ZM Multi Jump (+1)", 5, ZP_TEAM_ZOMBIE);
	g_specialmultijump = zp_register_extra_item("*MOD* Multi Jump (+1)", 10, ZP_TEAM_SURVIVOR | ZP_TEAM_SNIPER | ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS);
	
	// Graviy
	g_gravity = zp_register_extra_item("Extra Gravity", 8, ZP_TEAM_HUMAN);
	g_zgravity = zp_register_extra_item("ZM Extra Gravity", 15, ZP_TEAM_ZOMBIE);
	g_modgravity = zp_register_extra_item("*MOD* Extra Gravity", 20, ZP_TEAM_SNIPER | ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS | ZP_TEAM_SURVIVOR);
	
	// AK
	g_ak = zp_register_extra_item("Gold Ak47 (More Damage)", 18, ZP_TEAM_HUMAN);
	g_modak = zp_register_extra_item("*MOD* Gold Ak47 (More Damage)", 24, ZP_TEAM_SURVIVOR);
	
	// Deagle
	g_deagle = zp_register_extra_item("Gold Deagle (More Damage)", 10, ZP_TEAM_HUMAN);
	g_moddeagle = zp_register_extra_item("*MOD* Gold Deagle (More Damage)", 12, ZP_TEAM_SURVIVOR);
	
	// Mod
	g_buyassassin = zp_register_extra_item("Buy Assassin", 190, ZP_TEAM_HUMAN);
	g_buynemesis = zp_register_extra_item("Buy Nemesis", 190, ZP_TEAM_HUMAN);
	g_buysniper = zp_register_extra_item("Buy Sniper", 300, ZP_TEAM_HUMAN);
	g_buysurvivor = zp_register_extra_item("Buy Survivor", 300, ZP_TEAM_HUMAN);

	// Blink
	g_iblink = zp_register_extra_item("Knife Blink (1s)", 5, ZP_TEAM_ZOMBIE);
	g_imodblink = zp_register_extra_item("*MOD* Knife Blink (1s)", 8, ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS);
	
	RegisterHam(Ham_Killed, "player", "onKilled");

	register_event("StatusValue", "event_show_status", "be", "1=2", "2!0")
	register_event("StatusValue", "event_hide_status", "be", "1=1", "2=0")
	
	g_hud[0] = CreateHudSyncObj();
	g_hud[1] = CreateHudSyncObj();
	g_hud[2] = CreateHudSyncObj();
}

public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
	// Player doesn't have the unlimited clip upgrade
	if (!g_tryder[msg_entity])
		return;
	
	// Player not alive or not an active weapon
	if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1)
		return;
	
	static weapon, clip
	weapon = get_msg_arg_int(2) // get weapon ID
	clip = get_msg_arg_int(3) // get weapon clip
	
	// Unlimited Clip Ammo
	if (MAXCLIP[weapon] > 2) // skip grenades
	{
		set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon]) // HUD should show full clip all the time
		
		if (clip < 2) // refill when clip is nearly empty
		{
			// Get the weapon entity
			static wname[32], weapon_ent
			get_weaponname(weapon, wname, sizeof wname - 1)
			weapon_ent = fm_find_ent_by_owner(-1, wname, msg_entity)
			
			// Set max clip on weapon
			if (pev_valid(weapon_ent)==2)
			fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon])
		}
	}
}

public zp_round_started(gamemode, id)
{
	g_rounds[g_curround++] = gamemode;
	g_inround=true
}

public zp_round_ended(winteam)
{
	g_inround=false
}

public event_show_status(id)
{
	if (is_user_alive(id) && g_blink[id])
	{
		new enemy = read_data(2)
		if (is_user_alive(enemy) && !zp_get_user_zombie(enemy))
			g_enemy[id] = enemy;
		else
			g_enemy[id] = 0
	}
}

public event_hide_status(id)
{
	if (is_user_alive(id) && g_blink[id])
	{
		g_enemy[id] = 0
	}
}

public Event_RoundEnd()
{
	for ( new i = 1; i <=get_maxplayers(); i++)
	{
		g_isingravity = false
		g_multijumps = 0
		jumpnum = 0
		dojump = false
		g_blink= false

		if (is_user_alive(i)&&!zp_get_user_zombie(i))
		{
			if (g_tryder)
				cs_set_user_armor(i, 0,CS_ARMOR_NONE)
			if (get_user_health(i)>get_cvar_num("zp_human_health"))
				set_user_health(i, get_cvar_num("zp_human_health"))
		}
		g_tryder=false
	}
}

public Event_RoundStart( )
{
	static iEntity, szClassName[ 32 ], iPlayer;
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) || equali(szClassName, "Jetpack") || equali(szClassName, "Rocket"))
			remove_entity( iEntity );
	}
	
	for( iPlayer = 1; iPlayer < 33; iPlayer++ )
	{
		g_iTripMines[ iPlayer ] = 0;
		g_iPlantedMines[ iPlayer ] = 0;
		g_iMineIds[iPlayer][0] = 0;
		g_iMineIds[iPlayer][1] = 0;
                CountHP [iPlayer] = 0;
		g_fuel[iPlayer]=250.0;
		g_rocket[iPlayer]=get_gametime()+random_float(0.2, 2.0)
	}
}

public onKilled(victim, killer, gib)
{
	if (g_isingravity[victim])
	{
		if (get_user_gravity(victim) <= 0.5)
		{
			set_user_gravity(victim, 1.0)
		}
	}
	g_isingravity[victim] = false
	g_multijumps[victim] = 0
	jumpnum[victim] = 0
	dojump[victim] = false
	g_goldenak[victim]=false
	g_goldendeagle[victim]=false
	if (g_jet[victim])
		dropJetpack(victim,true)
	g_fuel[victim]=0.0
	g_rocket[victim]=0.0
	g_jet[victim]=false
	g_tryder[victim]=false
	g_blink[victim]= false
}

public zp_user_humanized_pre(id, survivor)
{
	g_isingravity[id]=false
	g_multijumps[id]=false
	g_blink[id]=false
	g_rocket[id]=0.0
	g_fuel[id]=0.0
}

public zp_user_infected_pre(id, infector, nemesis)
{
	g_goldenak[id]=false
	g_goldendeagle[id]=false
	if (g_jet[id])
		dropJetpack(id,true)
	g_isingravity[id]=false
	g_multijumps[id]=false
	g_rocket[id]=0.0
	g_fuel[id]=0.0
}

public client_disconnect( iPlayer )
{
	g_goldenak[iPlayer]=false
	g_goldendeagle[iPlayer]=false
	g_isingravity[iPlayer] = false
	g_multijumps[iPlayer] = 0
	jumpnum[iPlayer] = 0
	g_blink[iPlayer]= false
	dojump[iPlayer] = false
	g_rocket[iPlayer]=0.0
	g_tryder[iPlayer]=false
	g_fuel[iPlayer]=0.0
	
	if (g_iPlantedMines[ iPlayer ] > 0)
	{
		Func_RemoveMinesByOwner( iPlayer );
		g_iPlantedMines[ iPlayer ] = 0;
	}

	g_iTripMines[ iPlayer ] = 0;

	g_iPlanting[ iPlayer ] = false;
	g_iRemoving[ iPlayer ] = false;

	g_iMineIds[iPlayer][0] = 0;
	g_iMineIds[iPlayer][1] = 0;
	
	if (task_exists(iPlayer + TASK_REMOVE))
		remove_task( iPlayer + TASK_REMOVE );
	if (task_exists(iPlayer + TASK_CREATE))
		remove_task( iPlayer + TASK_CREATE );
}

public client_PreThink(id)
{
	if (is_user_alive(id))
	{
		if (g_isingravity[id])
		{
			if (zp_get_user_zombie(id))
			{
				if (!zp_frozen(id))
				{
					set_user_gravity(id, 0.25)
				}
			}

			else
			{
				set_user_gravity(id, 0.5)
			}
		}
		
		if (g_blink[id] && g_enemy[id] > 0 && (pev(id, pev_button) & IN_ATTACK || pev(id, pev_button) & IN_ATTACK2) && is_user_alive(g_enemy[id]) && !zp_get_user_zombie(g_enemy[id]))
		{
			new Float:origin[3];
			new Float:new_velocity[3];
			
			pev(g_enemy[id], pev_origin, origin);

			entity_set_aim(id, origin);
			get_speed_vector2(id, g_enemy[id], 1150.0, new_velocity)
			
			set_task(1.2, "disableBlink", id);
			set_pev(id, pev_velocity, new_velocity);
		}
		
		if (g_multijumps[id] > 0)
		{
			new nbut = get_user_button(id)
			new obut = get_user_oldbutton(id)
			if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
			{
				if(jumpnum[id] < g_multijumps[id])
				{
					dojump[id] = true
					jumpnum[id]++
					return
				}
			}
			if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
			{
				jumpnum[id] = 0
				return
			}
		}

		if (g_jet[id])
		{
			if (pev(id, pev_button) & IN_ATTACK2 && g_rocket[id] < get_gametime())
			{
				new pEntity = create_entity("info_target");
				if (pev_valid(pEntity))
				{
					engfunc(EngFunc_SetModel, pEntity, "models/rpgrocket.mdl");

					set_pev(pEntity, pev_classname, "Rocket");
					set_pev(pEntity, pev_movetype, MOVETYPE_FLY);
					set_pev(pEntity, pev_solid, SOLID_BBOX);
					set_pev(pEntity, pev_effects, EF_LIGHT | EF_BRIGHTLIGHT);
					set_pev(pEntity, pev_owner, id);

					new Float:VAngle[3];
					pev(id, pev_v_angle, VAngle);
					engfunc(EngFunc_MakeVectors, VAngle);

					new Float:Forward[3], Float:Velocity[3];
					global_get(glb_v_forward, Forward);
					Forward[0]*=64.0;
					Forward[1]*=64.0;
					Forward[2]*=64.0;
					
					global_get(glb_v_forward, Velocity);
					Velocity[0]*=1750.0;
					Velocity[1]*=1750.0;
					Velocity[2]*=1750.0;

					new Float:Origin[3];
					pev(id, pev_origin, Origin);
					Origin[0] += Forward[0];
					Origin[1] += Forward[1];

					set_pev(pEntity, pev_origin, Origin);
					set_pev(pEntity, pev_velocity, Velocity);

					new Float: Angles[3];
					engfunc(EngFunc_VecToAngles, Velocity, Angles);
					set_pev(pEntity, pev_angles, Angles);

					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_BEAMFOLLOW);
					write_short(pEntity);
					write_short(g_trail);
					write_byte(25);
					write_byte(5);
					write_byte(191);
					write_byte(191);
					write_byte(191);
					write_byte(random_num(150, 240));
					message_end();

					emit_sound(id, CHAN_WEAPON, "ZombieOutstanding/rocket_fire.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
					g_rocket[id] = get_gametime() + 15.0;
				}

				else
					g_rocket[id] = get_gametime() + 1.0;
			}

			if (pev(id, pev_button) & IN_DUCK && pev(id, pev_button) & IN_JUMP && !(pev(id, pev_flags) & FL_ONGROUND) && g_fuel[id] > 0.0)
			{
				new Float:Velocity[3], Float:Angles[3], Float:Forward[3], Float:dummy1[3], Float:dummy2[3];
				
				pev(id, pev_velocity, Velocity);
				pev(id, pev_angles, Angles);
				Angles[2] = 0.0;

				engfunc(EngFunc_AngleVectors, Angles, Forward,dummy1,dummy2);
				Angles[0] = Forward[0], Angles[1] = Forward[1], Angles[2] = Forward[2];
				Angles[0] *= 300.0;
				Angles[1] *= 300.0;

				Velocity[0] = Angles[0];
				Velocity[1] = Angles[1];

				if (Velocity[2] < 300.0)
					Velocity[2] += 35.0;

				set_pev(id, pev_velocity, Velocity)

				if (random_num(0, 3) == 0)
				{
					new Float:Origin[3];
					pev(id, pev_origin, Origin);

					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_SPRITE);
					engfunc(EngFunc_WriteCoord, Origin[0]);
					engfunc(EngFunc_WriteCoord, Origin[1]);
					engfunc(EngFunc_WriteCoord, Origin[2]);
					write_short(g_flame);
					write_byte(8);
					write_byte(200);
					message_end();
				}

				if (g_fuel[id] > 80.0)
					emit_sound(id, CHAN_ITEM, "ZombieOutstanding/jetpack_fly.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

				else
					emit_sound(id, CHAN_ITEM, "ZombieOutstanding/jetpack_blow.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

				g_fuel[id] -= 1.0;
			}

			else if (!(pev(id, pev_button) & IN_DUCK) && !(pev(id, pev_button) & IN_JUMP) && g_fuel[id] < 250.0)
				g_fuel[id] += 0.5;
		}
	}
}

public disableBlink(i)
{
	if (is_user_connected(i))
		g_blink = false
}

public client_PostThink(id)
{
	if(!is_user_alive(id))
		return

	if(dojump[id] == true)
	{
		new Float:velocity[3]	
		entity_get_vector(id,EV_VEC_velocity,velocity)
		velocity[2] = random_float(265.0, 285.0)
		entity_set_vector(id,EV_VEC_velocity,velocity)
		dojump[id] = false
	}
}

public plugin_natives()
{
	register_library("hatt_EI");
	register_native("zp_get_gold_ak", "zp_get_gold_ak", 1)
	register_native ("zp_get_gold_de", "zp_get_gold_de", 1)
	register_native("zp_get_jp", "zp_get_jp", 1)
}

public zp_get_jp(i)
{
	return g_jet;
}

public zp_get_gold_ak(i)
{
	return g_goldenak
}

public zp_get_gold_de(i)
{
	return g_goldendeagle[i];
}

public zp_extra_item_selected(id, itemid)
{
	static CsArmorType:tmp;
	static name[64];

	get_user_name(id, name, 63);
	set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.55,0, 6.0, 2.25, 0.1, 0.2,-1);

	if (itemid == g_itemid)
	{
		g_iTripMines[ id ]++;
		
		client_print_color( id, id, "^x04[ZM]^x01 You bought a^x03 Trip Mine^x01. Press^x04 P^x01 to plant it or^x04 V^x01 to take it" );
		
		client_cmd( id, "bind p Plant_Mine" );
		client_cmd( id, "bind v Take_Mine" );
		
		DCF( id, "bind p Plant_Mine" );
		DCF( id, "bind v Take_Mine" );

		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT A TRiP MiNE *");
	}
	
	else if (itemid == g_iblink)
	{
		g_blink[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW KNiFE BLiNK *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 Knife Blink", name);
	}

	else if (itemid == g_imodblink)
	{
		g_blink[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW *MOD* KNiFE BLiNK *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* Knife Blink", name);
	}

	else if (itemid == g_armor100)
	{
		if (get_user_armor(id) + 100 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 100, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (100 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (100 A.P.)" );
	}
	
	else if (itemid == g_clip)
	{
		g_tryder[id]=true
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT UNLiMiTED CLiP *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Unlimited Clip" );
	}
	
	else if (itemid == g_armor200)
	{
		if (get_user_armor(id) + 200 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 200, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (200 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (200 A.P.)" );
	}
	else if ( itemid ==g_armor300)
	{
		if (get_user_armor(id) + 300 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 300, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (300 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (300 A.P.)" );
	}
	else if (itemid==g_tryderid)
	{
		set_user_health(id, 720);
		cs_set_user_armor(id, 720, CS_ARMOR_VESTHELM)
		ShowSyncHudMsg(0, g_hud[2], "* %s BOUGHT TRYDER *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 TRYDER", name);
		g_tryder[id]=true
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90)
		}
		if (!user_has_weapon(id, CSW_M4A1))
		{
			give_item(id, "weapon_m4a1");
			cs_set_user_bpammo(id, CSW_M4A1, 90)
		}
		if (!user_has_weapon(id, CSW_G3SG1))
		{
			give_item(id, "weapon_g3sg1");
			cs_set_user_bpammo(id, CSW_G3SG1, 90)
		}
		if (!user_has_weapon(id, CSW_SG550))
		{
			give_item(id, "weapon_sg550");
			cs_set_user_bpammo(id, CSW_SG550, 90)
		}
		if (!user_has_weapon(id, CSW_XM1014))
		{
			give_item(id, "weapon_xm1014");
			cs_set_user_bpammo(id, CSW_XM1014, 32)
		}
		g_multijumps[id]++;
		g_isingravity[id]=true
		set_rendering(id, kRenderFxGlowShell, 204, 0, 204, kRenderNormal, 26)
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid ==g_health)
	{
		if ( CountHP [id] >= 1 )
                {
                	client_print_color(id, id, "^x04[ZM]^x01 Acest item nu mai este disponibil runda aceasta." );
 
                        return ZP_PLUGIN_HANDLED;
		}

		CountHP [id] ++;		
           
		set_user_health(id, get_user_health(id) + 1000);
		ShowSyncHudMsg(0, g_hud[2], "* %s BOUGHT 1,000 HP *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 1,000 H.P.", name);
	}
	else if (itemid ==g_multijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* YOU CAN JUMP NOW %d TiMES *", g_multijumps[id] + 1);
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Multi Jump (+1)" );
	}
	else if (itemid ==g_zmultijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* YOU CAN JUMP NOW %d TiMES *", g_multijumps[id] + 1);
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Multi Jump (+1)" );
	}
	else if (itemid==g_specialmultijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* %s CAN JUMP NOW %d TiMES *", name, g_multijumps[id] + 1);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 can jump now^x04 %d TiMES", name, g_multijumps[id]+1);
	}
	else if (itemid == g_zgravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A BETTER GRAViTY *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 ZM Extra Gravity", name);
	}
	else if ( itemid==g_gravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* YOU HAVE NOW A BETTER GRAViTY *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Extra Gravity" );
	}
	else if (itemid==g_modgravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A BETTER GRAViTY *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* Extra Gravity", name);
	}
	else if ( itemid == g_jetpack)
	{
		if (g_jet[id])
			dropJetpack(id, true)
		g_jet[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A JETPACK *", name);
		client_cmd(id, "weapon_knife");
		setJetpack(id);
		client_cmd(id, "spk items/tr_kevlar")
		client_print_color(id, id, "^x04[ZM]^x01 PRESS^x03 CTRL+SPACE^x01 TO FLY. PRESS^x03 +attack2^x01 TO FIRE.");
	}
	else if (itemid == g_ak)
	{
		g_goldenak[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD AK47 *", name);
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90);
		}
		client_cmd(id, "weapon_ak47");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 GOLD AK47", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid == g_modak)
	{
		g_goldenak[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD AK47 *", name);
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90);
		}
		client_cmd(id, "weapon_ak47");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* GOLD AK47", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid==g_deagle)
	{
		g_goldendeagle[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD DEAGLE *", name);
		if (!user_has_weapon(id, CSW_DEAGLE))
		{
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo(id, CSW_DEAGLE, 35);
		}
		client_cmd(id, "weapon_deagle");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 GOLD DEAGLE", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid ==g_moddeagle)
	{
		g_goldendeagle[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD DEAGLE *", name);
		if (!user_has_weapon(id, CSW_DEAGLE))
		{
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo(id, CSW_DEAGLE, 35);
		}
		client_cmd(id, "spk items/tr_kevlar")
		client_cmd(id, "weapon_deagle");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* GOLD DEAGLE", name);
	}
	else if (itemid==g_modjetpack)
	{
		if (g_jet[id])
			dropJetpack(id, true)
		g_jet[id] = true
		client_cmd(id, "weapon_knife");
		setJetpack(id);
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A JETPACK *", name);
		client_cmd(id, "spk items/tr_kevlar")
		client_print_color(id, id, "^x04[ZM]^x01 PRESS^x03 CTRL+SPACE^x01 TO FLY. PRESS^x03 +attack2^x01 TO FIRE.");
	}
	else if (g_buyassassin == itemid)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT ASSASSiN *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 ASSASSiN", name);
		zp_make_user_assassin(id);
		g_modscount++
	}
	else if (itemid ==g_buynemesis)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has already started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait this round and 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait till the next round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT NEMESiS *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 NEMESiS", name);
		zp_make_user_nemesis(id);
		g_modscount++
	}
	else if (itemid == g_buysurvivor)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT SURViVOR *", name);
		zp_make_user_survivor(id);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 SURViVOR", name);
		g_modscount++
	}
	else if ( itemid ==g_buysniper)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT SNiPER *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 SNiPER", name);
		zp_make_user_sniper(id);
		g_modscount++
	}
	return 0;
}

public plugin_precache( )
{
	engfunc( EngFunc_PrecacheModel, MINE_MODEL_VIEW );
	
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_ACTIVATE );
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_CHARGE );
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_DEPLOY );
	
	precache_sound("ZombieOutstanding/gun_pickup.wav");
	
	g_hExplode = engfunc( EngFunc_PrecacheModel, MINE_MODEL_EXPLODE );

	precache_model("models/p_egon.mdl");
	precache_model("models/v_egon.mdl");
	precache_model("models/rpgrocket.mdl");

	precache_sound("ZombieOutstanding/jetpack_fly.wav");
	precache_sound("ZombieOutstanding/jetpack_blow.wav");
	precache_sound("ZombieOutstanding/rocket_fire.wav");
	
	g_shockwave = precache_model("sprites/shockwave.spr")
	g_trail = precache_model("sprites/laserbeam.spr");
	g_flame = precache_model("sprites/xfireball3.spr");
}

public DispatchTouch( pTouched, pToucher)
{
	static pTouchedClass[32], Plr,pToucherClass[32], owner, Float:Origin[3], Float:Velocity[3], Float:flHealth, Float:Damage;
	
	pTouchedClass[0] = '^0';
	pToucherClass[0] = '^0';

	if (pev_valid(pTouched)) pev(pTouched, pev_classname, pTouchedClass, 31);
	if (pev_valid(pToucher)) pev(pToucher, pev_classname, pToucherClass, 31);

	if (equali(pTouchedClass, "Rocket"))
	{
		owner=pev(pTouched, pev_owner);
		if (is_user_connected(owner))
		{
			for ( Plr = 1; Plr <= get_maxplayers(); Plr++)
			{
				if (!is_user_alive(Plr) || entity_range(Plr, pTouched) > 360.0)
					continue;

				flHealth = entity_get_float( Plr, EV_FL_health );

				if (get_cvar_num("zp_enable_bazooka_knockback"))
				{
					entity_get_vector( Plr, EV_VEC_velocity, Velocity );

					Velocity[ 2 ] += random_float(120.0, 240.0);

					if (random_num(0, 1) == 0)
						Velocity[ 1 ] += random_float(120.0, 240.0);
					else
						Velocity[1] += random_float(-240.0, -120.0);

					if (random_num(0, 1) == 0)
						Velocity[ 0 ] += random_float(120.0, 240.0);
					else
						Velocity[0] += random_float(-240.0, -120.0);

					if (!zp_frozen(Plr))
					{
						if (!zp_get_user_zombie(Plr) && !get_cvar_num("zp_enable_bazooka_k_humans"))
							continue;
						entity_set_vector( Plr, EV_VEC_velocity, Velocity );
					}
				}

				if( zp_get_user_zombie( Plr )&& !get_user_godmode(Plr) && !zp_get_user_no_damage(Plr) )
				{
					Damage = 1250.0 - entity_range(Plr, pTouched);

					if (get_cvar_num("zp_enable_bazooka_redfade"))
					{
						do_screen_fade(Plr, 0.45, 230, 0, 0, Damage > 999.0 ? 225 : 165)
					}
					if (get_cvar_num("zp_enable_bazooka_flatline") && Damage > 999.0)
					{
						client_cmd(Plr, "spk fvox/flatline")
					}

					if (!(flHealth - Damage > 0.0))
						ExecuteHamB(Ham_Killed, Plr, owner, 2)
					else
						ExecuteHamB(Ham_TakeDamage, Plr, pTouched, owner, Damage, DMG_MORTAR);
				}
			}
		}

		if (equali("func_breakable", pToucherClass))
			dllfunc(DLLFunc_Use, pToucher, pTouched);

		pev(pTouched, pev_origin, Origin);

		for (new Iter = 0; Iter < 4; Iter++)
		{
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_EXPLOSION);
			engfunc(EngFunc_WriteCoord, Origin[0] + random_float(-22.0, 22.0));
			engfunc(EngFunc_WriteCoord, Origin[1] + random_float(-22.0, 22.0));
			engfunc(EngFunc_WriteCoord, Origin[2] + random_float(-22.0, 22.0));
			write_short(g_hExplode);
			write_byte(random_num(15, 25));
			write_byte(15);
			write_byte(0);
			message_end();
		}

		for (new Iter = 0; Iter < 4; Iter++)
		{
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_BEAMCYLINDER);
			engfunc(EngFunc_WriteCoord, Origin[0]);
			engfunc(EngFunc_WriteCoord, Origin[1]);
			engfunc(EngFunc_WriteCoord, Origin[2]);
			engfunc(EngFunc_WriteCoord, Origin[0]);
			engfunc(EngFunc_WriteCoord, Origin[1]);
			engfunc(EngFunc_WriteCoord, Origin[2] + (450.0 + (Iter * 100.0)));
			write_short(g_shockwave);
			write_byte(0);
			write_byte(0);
			write_byte(4);
			write_byte(Iter * 40);
			write_byte(0);
			write_byte(121);
			write_byte(121);
			write_byte(121);
			write_byte(random_num(150, 240));
			write_byte(0);
			message_end();
		}

		remove_entity(pTouched);
	}

	else if (equali(pTouchedClass, "Jetpack"))
	{
		if (pToucher < 1 || pToucher > get_maxplayers() || !is_user_alive(pToucher) || g_jet[pToucher] || zp_get_user_zombie(pToucher))
		{
			return FMRES_SUPERCEDE;
		}

		if (g_fuel[pToucher] < 2.0)
			g_fuel[pToucher] = 250.0;

		g_jet[pToucher] = true;

		client_cmd(pToucher, "weapon_knife");
		setJetpack(pToucher);

		emit_sound(pToucher, CHAN_ITEM, "ZombieOutstanding/gun_pickup.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		remove_entity(pTouched);
	}

	return FMRES_IGNORED;
}

public ClientDisconnect(id)
{
	if (g_jet[id])
		dropJetpack(id, true);
}

public Command_Buy( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_ammo_packs( iPlayer ) < MINE_COST )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You need^x03 %i ammo packs", MINE_COST );
		return PLUGIN_CONTINUE;
	}

	zp_set_user_ammo_packs( iPlayer, zp_get_user_ammo_packs( iPlayer ) - MINE_COST );
	
	g_iTripMines[ iPlayer ]++;
	
	client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You bought a^x03 Trip Mine^x01. Press^x04 P^x01 to plant it or^x04 V^x01 to take it" );
	
	client_cmd( iPlayer, "bind p Plant_Mine" );
	client_cmd( iPlayer, "bind v Take_Mine" );
		
	DCF( iPlayer, "bind p Plant_Mine" );
	DCF( iPlayer, "bind v Take_Mine" );
	
	return PLUGIN_CONTINUE;
}

DCF(i, Msg[])
{
	message_begin(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, _, i)
	write_byte(strlen(Msg) + 2)
	write_byte(DRC_CMD_FADE)
	write_string(Msg)
	message_end()
}

public Command_Plant( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( !g_iTripMines[ iPlayer ] )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You don't have any trip mines." );
		return PLUGIN_CONTINUE;
	}
	
	if( g_iPlantedMines[ iPlayer ] > 1 )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You have reached the limit^x03 (2)" );
		return PLUGIN_CONTINUE;
	}

	if( g_iPlanting[ iPlayer ] || g_iRemoving[ iPlayer ] )
		return PLUGIN_CONTINUE;
	
	if( CanPlant( iPlayer ) )
	{
		g_iPlanting[ iPlayer ] = true;

		message_begin( MSG_ONE_UNRELIABLE, 108, _, iPlayer );
		write_byte( 1 );
		write_byte( 0 );
		message_end( );

		set_task( 1.2, "Func_Plant", iPlayer + TASK_CREATE );
	}

	return PLUGIN_CONTINUE;
}

public Command_Take( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( !g_iPlantedMines[ iPlayer ] )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You don't have a planted trip mine." );
		return PLUGIN_CONTINUE;
	}
	
	if( g_iPlanting[ iPlayer ] || g_iRemoving[ iPlayer ] )
		return PLUGIN_CONTINUE;
	
	if( CanTake( iPlayer ) )
	{
		g_iRemoving[ iPlayer ] = true;
		
		message_begin( MSG_ONE_UNRELIABLE, 108, _, iPlayer );
		write_byte( 1 );
		write_byte( 0 );
		message_end( );
		
		set_task( 1.2, "Func_Take", iPlayer + TASK_REMOVE );
	}
	
	return PLUGIN_CONTINUE;
}

public Func_Take( iPlayer )
{
	iPlayer -= TASK_REMOVE;
	g_iRemoving[ iPlayer ] = false;

	static iEntity, szClassName[ 32 ], Float: flOwnerOrigin[ 3 ], Float: flEntityOrigin[ 3 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;

		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );

		if( equali( szClassName, MINE_CLASSNAME ) )
		{
			if( entity_get_owner( iEntity ) == iPlayer )
			{
				entity_get_vector( iPlayer, EV_VEC_origin, flOwnerOrigin );
				entity_get_vector( iEntity, EV_VEC_origin, flEntityOrigin );

				if( get_distance_f( flOwnerOrigin, flEntityOrigin ) < 55.0 )
				{
					if (g_iMineIds[iPlayer][0] == iEntity)
						g_iMineIds[iPlayer][0] = 0;

					else if (g_iMineIds[iPlayer][1] == iEntity)
						g_iMineIds[iPlayer][1] = 0;

					g_iPlantedMines[ iPlayer ]--;
					g_iTripMines[ iPlayer ]++;

					remove_entity( iEntity );

					break;
				}
			}
		}
	}
}

public bool: CanTake( iPlayer )
{
	static iEntity, szClassName[ 32 ], Float: flOwnerOrigin[ 3 ], Float: flEntityOrigin[ 3 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) )
		{
			if( entity_get_owner( iEntity ) == iPlayer )
			{
				entity_get_vector( iPlayer, EV_VEC_origin, flOwnerOrigin );
				entity_get_vector( iEntity, EV_VEC_origin, flEntityOrigin );
				
				if( get_distance_f( flOwnerOrigin, flEntityOrigin ) < 55.0 )
					return true;
			}
		}
	}
	
	return false;
}

public bool: CanPlant( iPlayer )
{
	static Float: flOrigin[ 3 ];
	entity_get_vector( iPlayer, EV_VEC_origin, flOrigin );
	
	static Float: flTraceDirection[ 3 ], Float: flTraceEnd[ 3 ];
	velocity_by_aim( iPlayer, 64, flTraceDirection );
	flTraceEnd[ 0 ] = flTraceDirection[ 0 ] + flOrigin[ 0 ];
	flTraceEnd[ 1 ] = flTraceDirection[ 1 ] + flOrigin[ 1 ];
	flTraceEnd[ 2 ] = flTraceDirection[ 2 ] + flOrigin[ 2 ];
	
	static Float: flFraction, iTr;
	iTr = 0;
	engfunc( EngFunc_TraceLine, flOrigin, flTraceEnd, 0, iPlayer, iTr );
	get_tr2( iTr, TR_flFraction, flFraction );
	
	if( flFraction >= 1.0 )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You must plant the^x03 Trip Mine^x01 on a wall" );
		return false;
	}
	
	return true;
}

public Func_Plant( iPlayer )
{
	iPlayer -= TASK_CREATE;
	g_iPlanting[ iPlayer ] = false;
	
	static Float: flOrigin[ 3 ];
	entity_get_vector( iPlayer, EV_VEC_origin, flOrigin );
	
	static Float: flTraceDirection[ 3 ], Float: flTraceEnd[ 3 ], Float: flTraceResult[ 3 ], Float: flNormal[ 3 ];
	velocity_by_aim( iPlayer, 128, flTraceDirection );
	flTraceEnd[ 0 ] = flTraceDirection[ 0 ] + flOrigin[ 0 ];
	flTraceEnd[ 1 ] = flTraceDirection[ 1 ] + flOrigin[ 1 ];
	flTraceEnd[ 2 ] = flTraceDirection[ 2 ] + flOrigin[ 2 ];
	
	static iTr;
	iTr = 0;
	engfunc( EngFunc_TraceLine, flOrigin, flTraceEnd, 0, iPlayer, iTr );
	get_tr2( iTr, TR_vecEndPos, flTraceResult );
	get_tr2( iTr, TR_vecPlaneNormal, flNormal );

	static iEntity;
	iEntity = create_entity( "info_target" );
	
	if( !pev_valid(iEntity ))
		return;
	
	entity_set_string( iEntity, EV_SZ_classname, MINE_CLASSNAME );
	entity_set_model( iEntity, MINE_MODEL_VIEW );
	entity_set_size( iEntity, Float: { -4.0, -4.0, -4.0 }, Float: { 4.0, 4.0, 4.0 } );
	
	entity_set_int( iEntity, EV_INT_iuser2, iPlayer );
	
	g_iPlantedMines[ iPlayer ]++;
	if (g_iMineIds[iPlayer][0]==0)
		g_iMineIds[iPlayer][0] = iEntity;
	else
		g_iMineIds[iPlayer][1] = iEntity;
	
	entity_set_float( iEntity, EV_FL_frame, 0.0 );
	entity_set_float( iEntity, EV_FL_framerate, 0.0 );
	entity_set_int( iEntity, EV_INT_movetype, MOVETYPE_FLY );
	entity_set_int( iEntity, EV_INT_solid, SOLID_NOT );
	entity_set_int( iEntity, EV_INT_body, 3 );
	entity_set_int( iEntity, EV_INT_sequence, 7 );
	entity_set_float( iEntity, EV_FL_takedamage, DAMAGE_NO );
	entity_set_int( iEntity, EV_INT_iuser1, MINE_OFF );
	
	static Float: flNewOrigin[ 3 ], Float: flEntAngles[ 3 ];
	flNewOrigin[ 0 ] = flTraceResult[ 0 ] + ( flNormal[ 0 ] * 8.0 );
	flNewOrigin[ 1 ] = flTraceResult[ 1 ] + ( flNormal[ 1 ] * 8.0 );
	flNewOrigin[ 2 ] = flTraceResult[ 2 ] + ( flNormal[ 2 ] * 8.0 );
	
	fm_set_rendering(iEntity, kRenderFxGlowShell, random_num(0, 255), random_num(0, 255), random_num(0 , 255), kRenderNormal, 12)
	
	entity_set_origin( iEntity, flNewOrigin );
	
	vector_to_angle( flNormal, flEntAngles );
	entity_set_vector( iEntity, EV_VEC_angles, flEntAngles );
	flEntAngles[ 0 ] *= -1.0;
	flEntAngles[ 1 ] *= -1.0;
	flEntAngles[ 2 ] *= -1.0;
	entity_set_vector( iEntity, EV_VEC_v_angle, flEntAngles );
	
	g_iTripMines[ iPlayer ]--;
	
	emit_sound( iEntity, CHAN_WEAPON, MINE_SOUND_DEPLOY, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
	emit_sound( iEntity, CHAN_VOICE, MINE_SOUND_CHARGE, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
	
	entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 0.6 );
}

public Func_RemoveMinesByOwner( iPlayer )
{
	static iEntity, szClassName[ 32 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) )
			if( entity_get_int( iEntity, EV_INT_iuser2 ) == iPlayer )
				remove_entity( iEntity );
	}
}

Func_Explode( iEntity )
{
	new owner = entity_get_owner(iEntity);
	
	g_iPlantedMines[ owner ]--;
	if (g_iMineIds[owner][0] == iEntity)
		g_iMineIds[owner][0] = 0;
	else if (g_iMineIds[owner][1] == iEntity)
		g_iMineIds[owner][1] = 0;
	
	static Float: flOrigin[ 3 ], Float: flZombieOrigin[ 3 ], Float: flHealth, Float: flVelocity[ 3 ];
	entity_get_vector( iEntity, EV_VEC_origin, flOrigin );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0) );
	write_short( g_hExplode );
	write_byte( 55 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0));
	write_short( g_hExplode );
	write_byte( 65 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0));
	write_short( g_hExplode );
	write_byte( 85 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	static iZombie, Float:Damage;
	for( iZombie = 1; iZombie < get_maxplayers() + 1; iZombie++ )
	{
		if( is_user_connected( iZombie ) )
		{
			if( is_user_alive( iZombie ) )
			{
				entity_get_vector( iZombie, EV_VEC_origin, flZombieOrigin );
				
				if( get_distance_f( flOrigin, flZombieOrigin ) <= 360.0 )
				{
					flHealth = entity_get_float( iZombie, EV_FL_health );

					if (get_cvar_num("zp_enable_lasermine_knockback"))
					{
						entity_get_vector( iZombie, EV_VEC_velocity, flVelocity );

						flVelocity[ 2 ] += random_float(120.0, 240.0);

						if (random_num(0, 1) == 0)
							flVelocity[ 1 ] += random_float(120.0, 240.0);
						else
							flVelocity[1] += random_float(-240.0, -120.0);

						if (random_num(0, 1) == 0)
							flVelocity[ 0 ] += random_float(120.0, 240.0);
						else
							flVelocity[0] += random_float(-240.0, -120.0);

						if (!zp_frozen(iZombie))
						{
							if (!zp_get_user_zombie(iZombie) && !get_cvar_num("zp_enable_lasermine_k_humans"))
								continue;
							entity_set_vector( iZombie, EV_VEC_velocity, flVelocity );
						}
					}

					if (get_cvar_num("zp_enable_lasermine_flatline"))
					{
						client_cmd(iZombie, "spk fvox/flatline")
					}
					if( zp_get_user_zombie( iZombie )&& !get_user_godmode(iZombie) && !zp_get_user_no_damage(iZombie) )
					{
						Damage = 2250.0 - get_distance_f( flOrigin, flZombieOrigin );
						if (get_cvar_num("zp_enable_lasermine_redfade"))
						{
							do_screen_fade(iZombie, 0.45, 230, 0, 0, 200)
						}

						if (!(flHealth - Damage > 0.0))
							ExecuteHamB(Ham_Killed, iZombie, owner, 2)
						else
							ExecuteHamB(Ham_TakeDamage, iZombie, iEntity, owner, Damage, DMG_MORTAR);
					}
				}
			}
		}
	}
	
	remove_entity( iEntity );
}

public Forward_Think(iEntity)
{
	static Float: flGameTime, iStatus, Float: flHealth;
	flGameTime = get_gametime( );
	iStatus = entity_get_status( iEntity );
	new owner = entity_get_owner(iEntity);

	switch( iStatus )
	{
		case MINE_OFF:
		{
			entity_set_int( iEntity, EV_INT_iuser1, MINE_ON );
			entity_set_float( iEntity, EV_FL_takedamage, DAMAGE_YES );
			entity_set_int( iEntity, EV_INT_solid, SOLID_BBOX );
			entity_set_float( iEntity, EV_FL_health, MINE_HEALTH + 1000.0 );

			emit_sound( iEntity, CHAN_VOICE, MINE_SOUND_ACTIVATE, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
		}

		case MINE_ON:
		{
			flHealth = entity_get_float( iEntity, EV_FL_health );

			if( flHealth <= 1000.0 )
			{
				Func_Explode( iEntity );
				return FMRES_IGNORED;
			}
			
			else
			{
				if (g_iMineIds[owner][0] == iEntity)
				{
					set_hudmessage(210, 0, 0, 0.92, 0.34,0, 6.0, 0.11, 0.1, 0.2,-1);
					ShowSyncHudMsg(owner, g_hud[0], "Mine 1  %d HP", max(floatround(flHealth - 1000.0), 0));
				}
				else
				{
					set_hudmessage(210, 0, 0, 0.92, 0.38,0, 6.0, 0.11,  0.1, 0.2,-1);
					ShowSyncHudMsg(owner, g_hud[1], "Mine 2  %d HP", max(floatround(flHealth - 1000.0), 0));
				}
			}
		}
	}

	if( is_valid_ent( iEntity ) )
		entity_set_float( iEntity, EV_FL_nextthink, flGameTime + 0.1 );

	return FMRES_IGNORED;
}

stock fm_set_weapon_ammo(entity, amount)
{
	if (pev_valid(entity)==2)
		set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}

do_screen_fade(       id, Float:fadeTime,  red, green, blue, alpha, type = FADE_IN       )
{
   new  hold =floatround(         fadeTime *4096.0);
   message_begin(    MSG_ONE_UNRELIABLE, get_user_msgid(    "ScreenFade"           ), _, id          );
   write_short(          hold    );
   write_short(    hold    );
   write_short(    type   );
   write_byte(      red    );
   write_byte(  green    );
   write_byte(    blue    );
   write_byte(     alpha    );
   message_end(    );
}

#if AMXX_VERSION_NUM <= 182
client_print_color(const iIDTarget, const iIDSender = 0, const szMessage[], any:...)
{
	if (iIDTarget && !is_user_connected(iIDTarget))
		return;
	
	static szBuffer[192];
	vformat(szBuffer, charsmax(szBuffer), szMessage, 4)
	
/*	static const szChatTag[] = "^1[^4ZP^1] ";
	format(szBuffer, charsmax(szBuffer), "%s%s", szChatTag, szBuffer)
	*/
	static iIDMsgSayText;
	if (!iIDMsgSayText)
		iIDMsgSayText = get_user_msgid("SayText");
	
	if (iIDTarget)
		message_begin(MSG_ONE, iIDMsgSayText, _, iIDTarget)
	else
		message_begin(MSG_ALL, iIDMsgSayText)
	
	write_byte(!iIDSender ? iIDTarget : iIDSender)
	write_string(szBuffer)
	message_end()
}
#endif

Re: [C] Modificare

Posted: 17 Jul 2018, 16:31
by ImparctVirtual
eroare la compliat
edit: uite eroarea.
https://imgur.com/a/s64fhOe

Re: [C] Modificare

Posted: 17 Jul 2018, 16:38
by EnTeR_
Incearca acum
EnTeR_ wrote:
| Afiseaza codul
#include < amxmodx >
#include amxmisc
#include cstrike
#include < fakemeta_util >
#include < fun >
#include < engine >
#include hamsandwich
#include nvault
#include < zombieplague63 >
#include chr_engine

#define FADE_IN      0x0000
#define FADE_OUT      0x0001
#define FADE_MODULATE   0x0002
#define FADE_STAYOUT   0x0004

#define MAX_ENTITIES		(global_get(glb_maxEntities))
#define MINE_ON			1
#define MINE_OFF			0
#define TASK_CREATE		847655612
#define TASK_REMOVE		867661231
#define MINE_COST			5
#define MINE_CLASSNAME		"zp_mine"
#define MINE_MODEL_EXPLODE	"sprites/zerogxplode.spr"
#define MINE_MODEL_VIEW		"models/zombie_plague/lasermine.mdl"
#define MINE_SOUND_ACTIVATE	"weapons/mine_activate.wav"
#define MINE_SOUND_CHARGE		"weapons/mine_charge.wav"
#define MINE_SOUND_DEPLOY		"weapons/mine_deploy.wav"
#define MINE_HEALTH		800.0
#define entity_get_owner(%0)		entity_get_int( %0, EV_INT_iuser2 )
#define entity_get_status(%0)		entity_get_int( %0, EV_INT_iuser1 )
#define entity_get_classname(%0,%1)	entity_get_string( %0, EV_SZ_classname, %1, charsmax( %1 ) )

new g_iTripMines[ 33 ];
new g_iPlantedMines[ 33 ];
new g_iPlanting[ 33 ];
new g_iRemoving[ 33 ];
new g_iMineIds[33][2];
new g_multijumps[33];
new g_hExplode;
new g_hud[3];
new g_itemid;
new g_armor100;
new g_armor200;
new g_armor300;
new g_multijump;
new g_zgravity;
new g_zmultijump;
new g_specialmultijump;
new g_health;
new g_gravity;
new g_moddeagle;
new g_modak;
new g_ak;
new g_deagle;
new g_buyassassin;
new g_buynemesis;
new g_jetpack;
new g_buysniper;
new g_buysurvivor;
new g_modjetpack;
new jumpnum[33] = 0
new bool:dojump[33] = false
new g_isingravity[33]
new g_goldenak[33]
new g_goldendeagle[33]
new g_clip
new g_jet[33]
new g_blink[33]
new g_iblink, g_imodblink
new g_enemy[33]
new Float:g_fuel[33], Float:g_rocket[33]
new g_shockwave
new g_trail
new g_flame
new g_rounds[512]
new g_tryder[33]
new g_tryderid
new g_modscount=0
new g_modgravity
new g_curround = 0
new g_inround = false
new CountHP [33];

// CS Offsets
#if cellbits == 32
const OFFSET_CLIPAMMO = 51
#else
const OFFSET_CLIPAMMO = 65
#endif
const OFFSET_LINUX_WEAPONS = 4

// Max Clip for weapons
new const MAXCLIP[] = { -1, 13, -1, 10, 1, 7, -1, 30, 30, 1, 30, 20, 25, 30, 35, 25, 12, 20,
			10, 30, 100, 8, 30, 30, 20, 2, 7, 30, 30, -1, 50 }

setJetpack( Player)
{
	set_pev(Player, pev_viewmodel2, "models/v_egon.mdl")
	set_pev(Player, pev_weaponmodel2, "models/p_egon.mdl")
}

setKnife( Player)
{
	set_pev(Player, pev_viewmodel2, "models/v_knife.mdl")
	set_pev(Player, pev_weaponmodel2, "models/p_knife.mdl")
}

dropJetpack( Player,  Forced = false)
{
	new Float:origin[3];
	pev(Player, pev_origin, origin);

	new Float:vangle[3];
	pev(Player, pev_v_angle, vangle);
	engfunc(EngFunc_MakeVectors, vangle);
	
	new Float:fwd[3];
	global_get(glb_v_forward, fwd);
	fwd[0] *= 75.0;
	fwd[1] *= 75.0;
	fwd[2] *= 75.0;
	
	origin[0] += fwd[0]
	origin[1]+=fwd[1]

	new Trace=0;
	engfunc(EngFunc_TraceHull, origin, origin, IGNORE_MONSTERS | IGNORE_GLASS, HULL_HUMAN, 0, Trace);
	if (get_tr2(Trace, TR_StartSolid) || get_tr2(Trace, TR_AllSolid) || !get_tr2(Trace, TR_InOpen))
	{
		if (Forced)
		{
			g_jet[Player]=false

			if (is_user_alive(Player))
			{
				client_cmd(Player, "weapon_knife");
				setKnife(Player);
			}
		}
	}

	else
	{
		new pJetpack = create_entity("info_target");
		if (pev_valid(pJetpack))
		{
			engfunc(EngFunc_SetModel, pJetpack, "models/p_egon.mdl");
			engfunc(EngFunc_SetSize,pJetpack, Float:{-16.0, -16.0, -16.0},Float:{16.0, 16.0, 16.0});

			set_pev(pJetpack, pev_classname, "Jetpack")
			set_pev(pJetpack, pev_movetype, MOVETYPE_TOSS);
			set_pev(pJetpack, pev_solid, SOLID_TRIGGER);
			set_pev(pJetpack, pev_origin, origin);

			g_jet[Player] = false;

			if (is_user_alive(Player))
			{
				client_cmd(Player, "weapon_knife");
				setKnife(Player);
			}
		}
	}
}

public Drop(id)
{
	if (!is_user_connected(id))
		return 0;

	if (get_user_weapon(id)==CSW_KNIFE)
	{
		if (g_jet[id])
			dropJetpack(id, false)

		return 1;
	}
	
	return 0;
}

public plugin_init( )
{
	register_plugin( "[ZM] Extra Items [Especially Trip Mines]", "1.0", "Hattrick" );

	register_cvar("zp_limit_buy_mod_hours", "6") // a player can buy mod in how many hours?
	register_cvar("zp_map_mods_limit", "2") // how many mods can be purchased in map?
	
	register_cvar("zp_enable_bazooka_knockback", "0") // when bazooka's projectile explodes, change players position on map?
	register_cvar("zp_enable_bazooka_k_humans", "0") // if enabled above,   also include humans??
	register_cvar("zp_enable_bazooka_redfade", "0") // if enabled,   zombies get red screenfade if damaged by bazooka projectile?
	register_cvar("zp_enable_bazooka_flatline", "1") // if enabled,   zombies get sound while damaged by bazooka projectile?

	register_cvar("zp_enable_lasermine_knockback", "0") // when lasermine explodes, change players position on map?
	register_cvar("zp_enable_lasermine_k_humans", "0") // if enabled above,   also include humans??
	register_cvar("zp_enable_lasermine_redfade", "0") // if enabled,   zombies get red screenfade if damaged by lasermine?
	register_cvar("zp_enable_lasermine_flatline", "1") // if enabled,   zombies get sound while damaged by lasermine?

	register_forward(FM_Touch, "DispatchTouch");
	register_forward(FM_ClientDisconnect, "ClientDisconnect");
	
	register_clcmd( "say /lm", "Command_Buy" );
	register_clcmd( "say lm", "Command_Buy" );
	register_message(get_user_msgid("CurWeapon"), "message_cur_weapon")
	register_clcmd( "say_team /lm", "Command_Buy" );
	register_clcmd( "say_team lm", "Command_Buy" );
	
	register_clcmd("drop", "Drop");

	register_clcmd( "Plant_Mine", "Command_Plant" );
	register_clcmd( "Take_Mine", "Command_Take" );

	register_logevent( "Event_RoundStart", 2, "1=Round_Start" );
	register_logevent( "Event_RoundEnd", 2, "1=Round_End" );
	register_think( MINE_CLASSNAME, "Forward_Think" );
	
	// Health
	g_health = zp_register_extra_item("Health (+1,000 H.P.)", 25, ZP_TEAM_HUMAN|ZP_TEAM_SURVIVOR|ZP_TEAM_SNIPER);
	
	// Armors
	g_armor100 = zp_register_extra_item("Armor (100 A.P.)", 5, ZP_TEAM_HUMAN);
	g_armor200 = zp_register_extra_item("Armor (200 A.P.)", 9, ZP_TEAM_HUMAN);
	g_armor300 = zp_register_extra_item("Armor (300 A.P.)", 12, ZP_TEAM_HUMAN);
	
	// Clip
	g_clip = zp_register_extra_item("Unlimited Clip", 12, ZP_TEAM_HUMAN);
	
	// Jetpack
	g_jetpack = zp_register_extra_item("Jetpack + Bazooka", 32, ZP_TEAM_HUMAN);
	g_modjetpack = zp_register_extra_item("*MOD* Jetpack + Bazooka", 45, ZP_TEAM_SNIPER | ZP_TEAM_SURVIVOR);

	// Tryder
	g_tryderid=zp_register_extra_item("Tryder", 36, ZP_TEAM_HUMAN);
	
	// Laser
	g_itemid = zp_register_extra_item("Trip Mine (/LM)", MINE_COST, ZP_TEAM_HUMAN|ZP_TEAM_SURVIVOR|ZP_TEAM_SNIPER)
	
	// Jump
	g_multijump = zp_register_extra_item("Multi Jump (+1)", 3, ZP_TEAM_HUMAN);
	g_zmultijump = zp_register_extra_item("ZM Multi Jump (+1)", 5, ZP_TEAM_ZOMBIE);
	g_specialmultijump = zp_register_extra_item("*MOD* Multi Jump (+1)", 10, ZP_TEAM_SURVIVOR | ZP_TEAM_SNIPER | ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS);
	
	// Graviy
	g_gravity = zp_register_extra_item("Extra Gravity", 8, ZP_TEAM_HUMAN);
	g_zgravity = zp_register_extra_item("ZM Extra Gravity", 15, ZP_TEAM_ZOMBIE);
	g_modgravity = zp_register_extra_item("*MOD* Extra Gravity", 20, ZP_TEAM_SNIPER | ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS | ZP_TEAM_SURVIVOR);
	
	// AK
	g_ak = zp_register_extra_item("Gold Ak47 (More Damage)", 18, ZP_TEAM_HUMAN);
	g_modak = zp_register_extra_item("*MOD* Gold Ak47 (More Damage)", 24, ZP_TEAM_SURVIVOR);
	
	// Deagle
	g_deagle = zp_register_extra_item("Gold Deagle (More Damage)", 10, ZP_TEAM_HUMAN);
	g_moddeagle = zp_register_extra_item("*MOD* Gold Deagle (More Damage)", 12, ZP_TEAM_SURVIVOR);
	
	// Mod
	g_buyassassin = zp_register_extra_item("Buy Assassin", 190, ZP_TEAM_HUMAN);
	g_buynemesis = zp_register_extra_item("Buy Nemesis", 190, ZP_TEAM_HUMAN);
	g_buysniper = zp_register_extra_item("Buy Sniper", 300, ZP_TEAM_HUMAN);
	g_buysurvivor = zp_register_extra_item("Buy Survivor", 300, ZP_TEAM_HUMAN);

	// Blink
	g_iblink = zp_register_extra_item("Knife Blink (1s)", 5, ZP_TEAM_ZOMBIE);
	g_imodblink = zp_register_extra_item("*MOD* Knife Blink (1s)", 8, ZP_TEAM_ASSASSIN | ZP_TEAM_NEMESIS);
	
	RegisterHam(Ham_Killed, "player", "onKilled");

	register_event("StatusValue", "event_show_status", "be", "1=2", "2!0")
	register_event("StatusValue", "event_hide_status", "be", "1=1", "2=0")
	
	g_hud[0] = CreateHudSyncObj();
	g_hud[1] = CreateHudSyncObj();
	g_hud[2] = CreateHudSyncObj();
}

public message_cur_weapon(msg_id, msg_dest, msg_entity)
{
	// Player doesn't have the unlimited clip upgrade
	if (!g_tryder[msg_entity])
		return;
	
	// Player not alive or not an active weapon
	if (!is_user_alive(msg_entity) || get_msg_arg_int(1) != 1)
		return;
	
	static weapon, clip
	weapon = get_msg_arg_int(2) // get weapon ID
	clip = get_msg_arg_int(3) // get weapon clip
	
	// Unlimited Clip Ammo
	if (MAXCLIP[weapon] > 2) // skip grenades
	{
		set_msg_arg_int(3, get_msg_argtype(3), MAXCLIP[weapon]) // HUD should show full clip all the time
		
		if (clip < 2) // refill when clip is nearly empty
		{
			// Get the weapon entity
			static wname[32], weapon_ent
			get_weaponname(weapon, wname, sizeof wname - 1)
			weapon_ent = fm_find_ent_by_owner(-1, wname, msg_entity)
			
			// Set max clip on weapon
			if (pev_valid(weapon_ent)==2)
			fm_set_weapon_ammo(weapon_ent, MAXCLIP[weapon])
		}
	}
}

public zp_round_started(gamemode, id)
{
	g_rounds[g_curround++] = gamemode;
	g_inround=true
}

public zp_round_ended(winteam)
{
	g_inround=false
}

public event_show_status(id)
{
	if (is_user_alive(id) && g_blink[id])
	{
		new enemy = read_data(2)
		if (is_user_alive(enemy) && !zp_get_user_zombie(enemy))
			g_enemy[id] = enemy;
		else
			g_enemy[id] = 0
	}
}

public event_hide_status(id)
{
	if (is_user_alive(id) && g_blink[id])
	{
		g_enemy[id] = 0
	}
}

public Event_RoundEnd()
{
	for ( new i = 1; i <=get_maxplayers(); i++)
	{
		g_isingravity = false
		g_multijumps = 0
		jumpnum = 0
		dojump = false
		g_blink= false

		if (is_user_alive(i)&&!zp_get_user_zombie(i))
		{
			if (g_tryder)
				cs_set_user_armor(i, 0,CS_ARMOR_NONE)
			if (get_user_health(i)>get_cvar_num("zp_human_health"))
				set_user_health(i, get_cvar_num("zp_human_health"))
		}
		g_tryder=false
	}
}

public Event_RoundStart( )
{
	static iEntity, szClassName[ 32 ], iPlayer;
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) || equali(szClassName, "Jetpack") || equali(szClassName, "Rocket"))
			remove_entity( iEntity );
	}
	
	for( iPlayer = 1; iPlayer < 33; iPlayer++ )
	{
		g_iTripMines[ iPlayer ] = 0;
		g_iPlantedMines[ iPlayer ] = 0;
		g_iMineIds[iPlayer][0] = 0;
		g_iMineIds[iPlayer][1] = 0;
                CountHP [iPlayer] = 0;
		g_fuel[iPlayer]=250.0;
		g_rocket[iPlayer]=get_gametime()+random_float(0.2, 2.0)
	}
}

public onKilled(victim, killer, gib)
{
	if (g_isingravity[victim])
	{
		if (get_user_gravity(victim) <= 0.5)
		{
			set_user_gravity(victim, 1.0)
		}
	}
	g_isingravity[victim] = false
	g_multijumps[victim] = 0
	jumpnum[victim] = 0
	dojump[victim] = false
	g_goldenak[victim]=false
	g_goldendeagle[victim]=false
	if (g_jet[victim])
		dropJetpack(victim,true)
	g_fuel[victim]=0.0
	g_rocket[victim]=0.0
	g_jet[victim]=false
	g_tryder[victim]=false
	g_blink[victim]= false
}

public zp_user_humanized_pre(id, survivor)
{
	g_isingravity[id]=false
	g_multijumps[id]=false
	g_blink[id]=false
	g_rocket[id]=0.0
	g_fuel[id]=0.0
}

public zp_user_infected_pre(id, infector, nemesis)
{
	g_goldenak[id]=false
	g_goldendeagle[id]=false
	if (g_jet[id])
		dropJetpack(id,true)
	g_isingravity[id]=false
	g_multijumps[id]=false
	g_rocket[id]=0.0
	g_fuel[id]=0.0
}

public client_disconnect( iPlayer )
{
	g_goldenak[iPlayer]=false
	g_goldendeagle[iPlayer]=false
	g_isingravity[iPlayer] = false
	g_multijumps[iPlayer] = 0
	jumpnum[iPlayer] = 0
	g_blink[iPlayer]= false
	dojump[iPlayer] = false
	g_rocket[iPlayer]=0.0
	g_tryder[iPlayer]=false
	g_fuel[iPlayer]=0.0
	
	if (g_iPlantedMines[ iPlayer ] > 0)
	{
		Func_RemoveMinesByOwner( iPlayer );
		g_iPlantedMines[ iPlayer ] = 0;
	}

	g_iTripMines[ iPlayer ] = 0;

	g_iPlanting[ iPlayer ] = false;
	g_iRemoving[ iPlayer ] = false;

	g_iMineIds[iPlayer][0] = 0;
	g_iMineIds[iPlayer][1] = 0;
	
	if (task_exists(iPlayer + TASK_REMOVE))
		remove_task( iPlayer + TASK_REMOVE );
	if (task_exists(iPlayer + TASK_CREATE))
		remove_task( iPlayer + TASK_CREATE );
}

public client_PreThink(id)
{
	if (is_user_alive(id))
	{
		if (g_isingravity[id])
		{
			if (zp_get_user_zombie(id))
			{
				if (!zp_frozen(id))
				{
					set_user_gravity(id, 0.25)
				}
			}

			else
			{
				set_user_gravity(id, 0.5)
			}
		}
		
		if (g_blink[id] && g_enemy[id] > 0 && (pev(id, pev_button) & IN_ATTACK || pev(id, pev_button) & IN_ATTACK2) && is_user_alive(g_enemy[id]) && !zp_get_user_zombie(g_enemy[id]))
		{
			new Float:origin[3];
			new Float:new_velocity[3];
			
			pev(g_enemy[id], pev_origin, origin);

			entity_set_aim(id, origin);
			get_speed_vector2(id, g_enemy[id], 1150.0, new_velocity)
			
			set_task(1.2, "disableBlink", id);
			set_pev(id, pev_velocity, new_velocity);
		}
		
		if (g_multijumps[id] > 0)
		{
			new nbut = get_user_button(id)
			new obut = get_user_oldbutton(id)
			if((nbut & IN_JUMP) && !(get_entity_flags(id) & FL_ONGROUND) && !(obut & IN_JUMP))
			{
				if(jumpnum[id] < g_multijumps[id])
				{
					dojump[id] = true
					jumpnum[id]++
					return
				}
			}
			if((nbut & IN_JUMP) && (get_entity_flags(id) & FL_ONGROUND))
			{
				jumpnum[id] = 0
				return
			}
		}

		if (g_jet[id])
		{
			if (pev(id, pev_button) & IN_ATTACK2 && g_rocket[id] < get_gametime())
			{
				new pEntity = create_entity("info_target");
				if (pev_valid(pEntity))
				{
					engfunc(EngFunc_SetModel, pEntity, "models/rpgrocket.mdl");

					set_pev(pEntity, pev_classname, "Rocket");
					set_pev(pEntity, pev_movetype, MOVETYPE_FLY);
					set_pev(pEntity, pev_solid, SOLID_BBOX);
					set_pev(pEntity, pev_effects, EF_LIGHT | EF_BRIGHTLIGHT);
					set_pev(pEntity, pev_owner, id);

					new Float:VAngle[3];
					pev(id, pev_v_angle, VAngle);
					engfunc(EngFunc_MakeVectors, VAngle);

					new Float:Forward[3], Float:Velocity[3];
					global_get(glb_v_forward, Forward);
					Forward[0]*=64.0;
					Forward[1]*=64.0;
					Forward[2]*=64.0;
					
					global_get(glb_v_forward, Velocity);
					Velocity[0]*=1750.0;
					Velocity[1]*=1750.0;
					Velocity[2]*=1750.0;

					new Float:Origin[3];
					pev(id, pev_origin, Origin);
					Origin[0] += Forward[0];
					Origin[1] += Forward[1];

					set_pev(pEntity, pev_origin, Origin);
					set_pev(pEntity, pev_velocity, Velocity);

					new Float: Angles[3];
					engfunc(EngFunc_VecToAngles, Velocity, Angles);
					set_pev(pEntity, pev_angles, Angles);

					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_BEAMFOLLOW);
					write_short(pEntity);
					write_short(g_trail);
					write_byte(25);
					write_byte(5);
					write_byte(191);
					write_byte(191);
					write_byte(191);
					write_byte(random_num(150, 240));
					message_end();

					emit_sound(id, CHAN_WEAPON, "ZombieOutstanding/rocket_fire.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
					g_rocket[id] = get_gametime() + 15.0;
				}

				else
					g_rocket[id] = get_gametime() + 1.0;
			}

			if (pev(id, pev_button) & IN_DUCK && pev(id, pev_button) & IN_JUMP && !(pev(id, pev_flags) & FL_ONGROUND) && g_fuel[id] > 0.0)
			{
				new Float:Velocity[3], Float:Angles[3], Float:Forward[3], Float:dummy1[3], Float:dummy2[3];
				
				pev(id, pev_velocity, Velocity);
				pev(id, pev_angles, Angles);
				Angles[2] = 0.0;

				engfunc(EngFunc_AngleVectors, Angles, Forward,dummy1,dummy2);
				Angles[0] = Forward[0], Angles[1] = Forward[1], Angles[2] = Forward[2];
				Angles[0] *= 300.0;
				Angles[1] *= 300.0;

				Velocity[0] = Angles[0];
				Velocity[1] = Angles[1];

				if (Velocity[2] < 300.0)
					Velocity[2] += 35.0;

				set_pev(id, pev_velocity, Velocity)

				if (random_num(0, 3) == 0)
				{
					new Float:Origin[3];
					pev(id, pev_origin, Origin);

					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_SPRITE);
					engfunc(EngFunc_WriteCoord, Origin[0]);
					engfunc(EngFunc_WriteCoord, Origin[1]);
					engfunc(EngFunc_WriteCoord, Origin[2]);
					write_short(g_flame);
					write_byte(8);
					write_byte(200);
					message_end();
				}

				if (g_fuel[id] > 80.0)
					emit_sound(id, CHAN_ITEM, "ZombieOutstanding/jetpack_fly.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

				else
					emit_sound(id, CHAN_ITEM, "ZombieOutstanding/jetpack_blow.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

				g_fuel[id] -= 1.0;
			}

			else if (!(pev(id, pev_button) & IN_DUCK) && !(pev(id, pev_button) & IN_JUMP) && g_fuel[id] < 250.0)
				g_fuel[id] += 0.5;
		}
	}
}

public disableBlink(i)
{
	if (is_user_connected(i))
		g_blink = false
}

public client_PostThink(id)
{
	if(!is_user_alive(id))
		return

	if(dojump[id] == true)
	{
		new Float:velocity[3]	
		entity_get_vector(id,EV_VEC_velocity,velocity)
		velocity[2] = random_float(265.0, 285.0)
		entity_set_vector(id,EV_VEC_velocity,velocity)
		dojump[id] = false
	}
}

public plugin_natives()
{
	register_library("hatt_EI");
	register_native("zp_get_gold_ak", "zp_get_gold_ak", 1)
	register_native ("zp_get_gold_de", "zp_get_gold_de", 1)
	register_native("zp_get_jp", "zp_get_jp", 1)
}

public zp_get_jp(i)
{
	return g_jet;
}

public zp_get_gold_ak(i)
{
	return g_goldenak
}

public zp_get_gold_de(i)
{
	return g_goldendeagle[i];
}

public zp_extra_item_selected(id, itemid)
{
	static CsArmorType:tmp;
	static name[64];

	get_user_name(id, name, 63);
	set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.55,0, 6.0, 2.25, 0.1, 0.2,-1);

	if (itemid == g_itemid)
	{
		g_iTripMines[ id ]++;
		
		client_print_color( id, id, "^x04[ZM]^x01 You bought a^x03 Trip Mine^x01. Press^x04 P^x01 to plant it or^x04 V^x01 to take it" );
		
		client_cmd( id, "bind p Plant_Mine" );
		client_cmd( id, "bind v Take_Mine" );
		
		DCF( id, "bind p Plant_Mine" );
		DCF( id, "bind v Take_Mine" );

		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT A TRiP MiNE *");
	}
	
	else if (itemid == g_iblink)
	{
		g_blink[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW KNiFE BLiNK *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 Knife Blink", name);
	}

	else if (itemid == g_imodblink)
	{
		g_blink[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW *MOD* KNiFE BLiNK *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* Knife Blink", name);
	}

	else if (itemid == g_armor100)
	{
		if (get_user_armor(id) + 100 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 100, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (100 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (100 A.P.)" );
	}
	
	else if (itemid == g_clip)
	{
		g_tryder[id]=true
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT UNLiMiTED CLiP *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Unlimited Clip" );
	}
	
	else if (itemid == g_armor200)
	{
		if (get_user_armor(id) + 200 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 200, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (200 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (200 A.P.)" );
	}
	else if ( itemid ==g_armor300)
	{
		if (get_user_armor(id) + 300 > 300)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You already have some armor." );
			return ZP_PLUGIN_HANDLED;
		}
		
		cs_set_user_armor(id, cs_get_user_armor(id, tmp) + 300, CS_ARMOR_VESTHELM);
		client_cmd(id, "spk items/tr_kevlar")
		ShowSyncHudMsg(id, g_hud[2], "* YOU BOUGHT ARMOR (300 A.P.) *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Armor (300 A.P.)" );
	}
	else if (itemid==g_tryderid)
	{
		set_user_health(id, 720);
		cs_set_user_armor(id, 720, CS_ARMOR_VESTHELM)
		ShowSyncHudMsg(0, g_hud[2], "* %s BOUGHT TRYDER *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 TRYDER", name);
		g_tryder[id]=true
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90)
		}
		if (!user_has_weapon(id, CSW_M4A1))
		{
			give_item(id, "weapon_m4a1");
			cs_set_user_bpammo(id, CSW_M4A1, 90)
		}
		if (!user_has_weapon(id, CSW_G3SG1))
		{
			give_item(id, "weapon_g3sg1");
			cs_set_user_bpammo(id, CSW_G3SG1, 90)
		}
		if (!user_has_weapon(id, CSW_SG550))
		{
			give_item(id, "weapon_sg550");
			cs_set_user_bpammo(id, CSW_SG550, 90)
		}
		if (!user_has_weapon(id, CSW_XM1014))
		{
			give_item(id, "weapon_xm1014");
			cs_set_user_bpammo(id, CSW_XM1014, 32)
		}
		g_multijumps[id]++;
		g_isingravity[id]=true
		set_rendering(id, kRenderFxGlowShell, 204, 0, 204, kRenderNormal, 26)
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid ==g_health)
	{
		if ( CountHP [id] >= 1 )
                {
                	client_print_color(id, id, "^x04[ZM]^x01 Acest item nu mai este disponibil runda aceasta." );
 
                        return ZP_PLUGIN_HANDLED;
		}

		CountHP [id] ++;		
           
		set_user_health(id, get_user_health(id) + 1000);
		ShowSyncHudMsg(0, g_hud[2], "* %s BOUGHT 1,000 HP *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 1,000 H.P.", name);
	}
	else if (itemid ==g_multijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* YOU CAN JUMP NOW %d TiMES *", g_multijumps[id] + 1);
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Multi Jump (+1)" );
	}
	else if (itemid ==g_zmultijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* YOU CAN JUMP NOW %d TiMES *", g_multijumps[id] + 1);
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Multi Jump (+1)" );
	}
	else if (itemid==g_specialmultijump)
	{
		g_multijumps[id]++;
		ShowSyncHudMsg(id, g_hud[2], "* %s CAN JUMP NOW %d TiMES *", name, g_multijumps[id] + 1);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 can jump now^x04 %d TiMES", name, g_multijumps[id]+1);
	}
	else if (itemid == g_zgravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A BETTER GRAViTY *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 ZM Extra Gravity", name);
	}
	else if ( itemid==g_gravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* YOU HAVE NOW A BETTER GRAViTY *");
		client_print_color( id, id, "^x04[ZM]^x01 You bought^x03 Extra Gravity" );
	}
	else if (itemid==g_modgravity)
	{
		g_isingravity[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A BETTER GRAViTY *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* Extra Gravity", name);
	}
	else if ( itemid == g_jetpack)
	{
		if (g_jet[id])
			dropJetpack(id, true)
		g_jet[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A JETPACK *", name);
		client_cmd(id, "weapon_knife");
		setJetpack(id);
		client_cmd(id, "spk items/tr_kevlar")
		client_print_color(id, id, "^x04[ZM]^x01 PRESS^x03 CTRL+SPACE^x01 TO FLY. PRESS^x03 +attack2^x01 TO FIRE.");
	}
	else if (itemid == g_ak)
	{
		g_goldenak[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD AK47 *", name);
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90);
		}
		client_cmd(id, "weapon_ak47");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 GOLD AK47", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid == g_modak)
	{
		g_goldenak[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD AK47 *", name);
		if (!user_has_weapon(id, CSW_AK47))
		{
			give_item(id, "weapon_ak47");
			cs_set_user_bpammo(id, CSW_AK47, 90);
		}
		client_cmd(id, "weapon_ak47");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* GOLD AK47", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid==g_deagle)
	{
		g_goldendeagle[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD DEAGLE *", name);
		if (!user_has_weapon(id, CSW_DEAGLE))
		{
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo(id, CSW_DEAGLE, 35);
		}
		client_cmd(id, "weapon_deagle");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 GOLD DEAGLE", name);
		client_cmd(id, "spk items/tr_kevlar")
	}
	else if (itemid ==g_moddeagle)
	{
		g_goldendeagle[id] = true
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A GOLD DEAGLE *", name);
		if (!user_has_weapon(id, CSW_DEAGLE))
		{
			give_item(id, "weapon_deagle");
			cs_set_user_bpammo(id, CSW_DEAGLE, 35);
		}
		client_cmd(id, "spk items/tr_kevlar")
		client_cmd(id, "weapon_deagle");
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 *MOD* GOLD DEAGLE", name);
	}
	else if (itemid==g_modjetpack)
	{
		if (g_jet[id])
			dropJetpack(id, true)
		g_jet[id] = true
		client_cmd(id, "weapon_knife");
		setJetpack(id);
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS NOW A JETPACK *", name);
		client_cmd(id, "spk items/tr_kevlar")
		client_print_color(id, id, "^x04[ZM]^x01 PRESS^x03 CTRL+SPACE^x01 TO FLY. PRESS^x03 +attack2^x01 TO FIRE.");
	}
	else if (g_buyassassin == itemid)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT ASSASSiN *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 ASSASSiN", name);
		zp_make_user_assassin(id);
		g_modscount++
	}
	else if (itemid ==g_buynemesis)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has already started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait this round and 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait till the next round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT NEMESiS *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 NEMESiS", name);
		zp_make_user_nemesis(id);
		g_modscount++
	}
	else if (itemid == g_buysurvivor)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT SURViVOR *", name);
		zp_make_user_survivor(id);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 SURViVOR", name);
		g_modscount++
	}
	else if ( itemid ==g_buysniper)
	{
		new vault = nvault_open("limitations")
		new stampname, stampip
		new ip[32]
		
		if (vault != INVALID_HANDLE)
		{
			stampname=nvault_get(vault,name)
			get_user_ip(id,ip,31,1)
			stampip=nvault_get(vault,ip)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}

		new timenow=get_systime()

		if (timenow < stampname || timenow < stampip)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait more^x03 %d hours^x01 between buying mods...",get_cvar_num("zp_limit_buy_mod_hours") );
			return ZP_PLUGIN_HANDLED;
		}

		if (g_modscount >= get_cvar_num("zp_map_mods_limit"))
		{
			client_print_color( id, id, "^x04[ZM]^x01 Maximum^x03 %d mods^x01 are allowed to be purchased on the same map...",get_cvar_num("zp_map_mods_limit") );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_inround)
		{
			client_print_color( id, id, "^x04[ZM]^x01 Round has started..." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_curround < 4)
		{
			client_print_color( id, id, "^x04[ZM]^x01 It is too early now." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 1] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 2 more rounds." );
			return ZP_PLUGIN_HANDLED;
		}
		if (g_rounds[g_curround - 2] != MODE_INFECTION)
		{
			client_print_color( id, id, "^x04[ZM]^x01 You must wait 1 more round." );
			return ZP_PLUGIN_HANDLED;
		}
		vault = nvault_open("limitations")
		if (vault != INVALID_HANDLE)
		{
			new string[32]
			num_to_str(timenow + (3600*get_cvar_num("zp_limit_buy_mod_hours")), string,31)
			nvault_set(vault,name,string)
			nvault_set(vault,ip,string)
			nvault_close(vault)
			vault=INVALID_HANDLE
		}
		ShowSyncHudMsg(id, g_hud[2], "* %s HAS BOUGHT SNiPER *", name);
		client_print_color(0, id, "^x04[ZM]^x03 %s^x01 bought^x04 SNiPER", name);
		zp_make_user_sniper(id);
		g_modscount++
	}
	return 0;
}

public plugin_precache( )
{
	engfunc( EngFunc_PrecacheModel, MINE_MODEL_VIEW );
	
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_ACTIVATE );
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_CHARGE );
	engfunc( EngFunc_PrecacheSound, MINE_SOUND_DEPLOY );
	
	precache_sound("ZombieOutstanding/gun_pickup.wav");
	
	g_hExplode = engfunc( EngFunc_PrecacheModel, MINE_MODEL_EXPLODE );

	precache_model("models/p_egon.mdl");
	precache_model("models/v_egon.mdl");
	precache_model("models/rpgrocket.mdl");

	precache_sound("ZombieOutstanding/jetpack_fly.wav");
	precache_sound("ZombieOutstanding/jetpack_blow.wav");
	precache_sound("ZombieOutstanding/rocket_fire.wav");
	
	g_shockwave = precache_model("sprites/shockwave.spr")
	g_trail = precache_model("sprites/laserbeam.spr");
	g_flame = precache_model("sprites/xfireball3.spr");
}

public DispatchTouch( pTouched, pToucher)
{
	static pTouchedClass[32], Plr,pToucherClass[32], owner, Float:Origin[3], Float:Velocity[3], Float:flHealth, Float:Damage;
	
	pTouchedClass[0] = '^0';
	pToucherClass[0] = '^0';

	if (pev_valid(pTouched)) pev(pTouched, pev_classname, pTouchedClass, 31);
	if (pev_valid(pToucher)) pev(pToucher, pev_classname, pToucherClass, 31);

	if (equali(pTouchedClass, "Rocket"))
	{
		owner=pev(pTouched, pev_owner);
		if (is_user_connected(owner))
		{
			for ( Plr = 1; Plr <= get_maxplayers(); Plr++)
			{
				if (!is_user_alive(Plr) || entity_range(Plr, pTouched) > 360.0)
					continue;

				flHealth = entity_get_float( Plr, EV_FL_health );

				if (get_cvar_num("zp_enable_bazooka_knockback"))
				{
					entity_get_vector( Plr, EV_VEC_velocity, Velocity );

					Velocity[ 2 ] += random_float(120.0, 240.0);

					if (random_num(0, 1) == 0)
						Velocity[ 1 ] += random_float(120.0, 240.0);
					else
						Velocity[1] += random_float(-240.0, -120.0);

					if (random_num(0, 1) == 0)
						Velocity[ 0 ] += random_float(120.0, 240.0);
					else
						Velocity[0] += random_float(-240.0, -120.0);

					if (!zp_frozen(Plr))
					{
						if (!zp_get_user_zombie(Plr) && !get_cvar_num("zp_enable_bazooka_k_humans"))
							continue;
						entity_set_vector( Plr, EV_VEC_velocity, Velocity );
					}
				}

				if( zp_get_user_zombie( Plr )&& !get_user_godmode(Plr) && !zp_get_user_no_damage(Plr) )
				{
					Damage = 1250.0 - entity_range(Plr, pTouched);

					if (get_cvar_num("zp_enable_bazooka_redfade"))
					{
						do_screen_fade(Plr, 0.45, 230, 0, 0, Damage > 999.0 ? 225 : 165)
					}
					if (get_cvar_num("zp_enable_bazooka_flatline") && Damage > 999.0)
					{
						client_cmd(Plr, "spk fvox/flatline")
					}

					if (!(flHealth - Damage > 0.0))
						ExecuteHamB(Ham_Killed, Plr, owner, 2)
					else
						ExecuteHamB(Ham_TakeDamage, Plr, pTouched, owner, Damage, DMG_MORTAR);
				}
			}
		}

		if (equali("func_breakable", pToucherClass))
			dllfunc(DLLFunc_Use, pToucher, pTouched);

		pev(pTouched, pev_origin, Origin);

		for (new Iter = 0; Iter < 4; Iter++)
		{
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_EXPLOSION);
			engfunc(EngFunc_WriteCoord, Origin[0] + random_float(-22.0, 22.0));
			engfunc(EngFunc_WriteCoord, Origin[1] + random_float(-22.0, 22.0));
			engfunc(EngFunc_WriteCoord, Origin[2] + random_float(-22.0, 22.0));
			write_short(g_hExplode);
			write_byte(random_num(15, 25));
			write_byte(15);
			write_byte(0);
			message_end();
		}

		for (new Iter = 0; Iter < 4; Iter++)
		{
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
			write_byte(TE_BEAMCYLINDER);
			engfunc(EngFunc_WriteCoord, Origin[0]);
			engfunc(EngFunc_WriteCoord, Origin[1]);
			engfunc(EngFunc_WriteCoord, Origin[2]);
			engfunc(EngFunc_WriteCoord, Origin[0]);
			engfunc(EngFunc_WriteCoord, Origin[1]);
			engfunc(EngFunc_WriteCoord, Origin[2] + (450.0 + (Iter * 100.0)));
			write_short(g_shockwave);
			write_byte(0);
			write_byte(0);
			write_byte(4);
			write_byte(Iter * 40);
			write_byte(0);
			write_byte(121);
			write_byte(121);
			write_byte(121);
			write_byte(random_num(150, 240));
			write_byte(0);
			message_end();
		}

		remove_entity(pTouched);
	}

	else if (equali(pTouchedClass, "Jetpack"))
	{
		if (pToucher < 1 || pToucher > get_maxplayers() || !is_user_alive(pToucher) || g_jet[pToucher] || zp_get_user_zombie(pToucher))
		{
			return FMRES_SUPERCEDE;
		}

		if (g_fuel[pToucher] < 2.0)
			g_fuel[pToucher] = 250.0;

		g_jet[pToucher] = true;

		client_cmd(pToucher, "weapon_knife");
		setJetpack(pToucher);

		emit_sound(pToucher, CHAN_ITEM, "ZombieOutstanding/gun_pickup.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		remove_entity(pTouched);
	}

	return FMRES_IGNORED;
}

public ClientDisconnect(id)
{
	if (g_jet[id])
		dropJetpack(id, true);
}

public Command_Buy( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_ammo_packs( iPlayer ) < MINE_COST )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You need^x03 %i ammo packs", MINE_COST );
		return PLUGIN_CONTINUE;
	}

	zp_set_user_ammo_packs( iPlayer, zp_get_user_ammo_packs( iPlayer ) - MINE_COST );
	
	g_iTripMines[ iPlayer ]++;
	
	client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You bought a^x03 Trip Mine^x01. Press^x04 P^x01 to plant it or^x04 V^x01 to take it" );
	
	client_cmd( iPlayer, "bind p Plant_Mine" );
	client_cmd( iPlayer, "bind v Take_Mine" );
		
	DCF( iPlayer, "bind p Plant_Mine" );
	DCF( iPlayer, "bind v Take_Mine" );
	
	return PLUGIN_CONTINUE;
}

DCF(i, Msg[])
{
	message_begin(MSG_ONE_UNRELIABLE, SVC_DIRECTOR, _, i)
	write_byte(strlen(Msg) + 2)
	write_byte(DRC_CMD_FADE)
	write_string(Msg)
	message_end()
}

public Command_Plant( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( !g_iTripMines[ iPlayer ] )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You don't have any trip mines." );
		return PLUGIN_CONTINUE;
	}
	
	if( g_iPlantedMines[ iPlayer ] > 1 )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You have reached the limit^x03 (2)" );
		return PLUGIN_CONTINUE;
	}

	if( g_iPlanting[ iPlayer ] || g_iRemoving[ iPlayer ] )
		return PLUGIN_CONTINUE;
	
	if( CanPlant( iPlayer ) )
	{
		g_iPlanting[ iPlayer ] = true;

		message_begin( MSG_ONE_UNRELIABLE, 108, _, iPlayer );
		write_byte( 1 );
		write_byte( 0 );
		message_end( );

		set_task( 1.2, "Func_Plant", iPlayer + TASK_CREATE );
	}

	return PLUGIN_CONTINUE;
}

public Command_Take( iPlayer )
{
	if( !is_user_alive( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be alive." );
		return PLUGIN_CONTINUE;
	}
	
	if( zp_get_user_zombie( iPlayer ) )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You should be human." );
		return PLUGIN_CONTINUE;
	}
	
	if( !g_iPlantedMines[ iPlayer ] )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You don't have a planted trip mine." );
		return PLUGIN_CONTINUE;
	}
	
	if( g_iPlanting[ iPlayer ] || g_iRemoving[ iPlayer ] )
		return PLUGIN_CONTINUE;
	
	if( CanTake( iPlayer ) )
	{
		g_iRemoving[ iPlayer ] = true;
		
		message_begin( MSG_ONE_UNRELIABLE, 108, _, iPlayer );
		write_byte( 1 );
		write_byte( 0 );
		message_end( );
		
		set_task( 1.2, "Func_Take", iPlayer + TASK_REMOVE );
	}
	
	return PLUGIN_CONTINUE;
}

public Func_Take( iPlayer )
{
	iPlayer -= TASK_REMOVE;
	g_iRemoving[ iPlayer ] = false;

	static iEntity, szClassName[ 32 ], Float: flOwnerOrigin[ 3 ], Float: flEntityOrigin[ 3 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;

		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );

		if( equali( szClassName, MINE_CLASSNAME ) )
		{
			if( entity_get_owner( iEntity ) == iPlayer )
			{
				entity_get_vector( iPlayer, EV_VEC_origin, flOwnerOrigin );
				entity_get_vector( iEntity, EV_VEC_origin, flEntityOrigin );

				if( get_distance_f( flOwnerOrigin, flEntityOrigin ) < 55.0 )
				{
					if (g_iMineIds[iPlayer][0] == iEntity)
						g_iMineIds[iPlayer][0] = 0;

					else if (g_iMineIds[iPlayer][1] == iEntity)
						g_iMineIds[iPlayer][1] = 0;

					g_iPlantedMines[ iPlayer ]--;
					g_iTripMines[ iPlayer ]++;

					remove_entity( iEntity );

					break;
				}
			}
		}
	}
}

public bool: CanTake( iPlayer )
{
	static iEntity, szClassName[ 32 ], Float: flOwnerOrigin[ 3 ], Float: flEntityOrigin[ 3 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) )
		{
			if( entity_get_owner( iEntity ) == iPlayer )
			{
				entity_get_vector( iPlayer, EV_VEC_origin, flOwnerOrigin );
				entity_get_vector( iEntity, EV_VEC_origin, flEntityOrigin );
				
				if( get_distance_f( flOwnerOrigin, flEntityOrigin ) < 55.0 )
					return true;
			}
		}
	}
	
	return false;
}

public bool: CanPlant( iPlayer )
{
	static Float: flOrigin[ 3 ];
	entity_get_vector( iPlayer, EV_VEC_origin, flOrigin );
	
	static Float: flTraceDirection[ 3 ], Float: flTraceEnd[ 3 ];
	velocity_by_aim( iPlayer, 64, flTraceDirection );
	flTraceEnd[ 0 ] = flTraceDirection[ 0 ] + flOrigin[ 0 ];
	flTraceEnd[ 1 ] = flTraceDirection[ 1 ] + flOrigin[ 1 ];
	flTraceEnd[ 2 ] = flTraceDirection[ 2 ] + flOrigin[ 2 ];
	
	static Float: flFraction, iTr;
	iTr = 0;
	engfunc( EngFunc_TraceLine, flOrigin, flTraceEnd, 0, iPlayer, iTr );
	get_tr2( iTr, TR_flFraction, flFraction );
	
	if( flFraction >= 1.0 )
	{
		client_print_color( iPlayer, iPlayer, "^x04[ZM]^x01 You must plant the^x03 Trip Mine^x01 on a wall" );
		return false;
	}
	
	return true;
}

public Func_Plant( iPlayer )
{
	iPlayer -= TASK_CREATE;
	g_iPlanting[ iPlayer ] = false;
	
	static Float: flOrigin[ 3 ];
	entity_get_vector( iPlayer, EV_VEC_origin, flOrigin );
	
	static Float: flTraceDirection[ 3 ], Float: flTraceEnd[ 3 ], Float: flTraceResult[ 3 ], Float: flNormal[ 3 ];
	velocity_by_aim( iPlayer, 128, flTraceDirection );
	flTraceEnd[ 0 ] = flTraceDirection[ 0 ] + flOrigin[ 0 ];
	flTraceEnd[ 1 ] = flTraceDirection[ 1 ] + flOrigin[ 1 ];
	flTraceEnd[ 2 ] = flTraceDirection[ 2 ] + flOrigin[ 2 ];
	
	static iTr;
	iTr = 0;
	engfunc( EngFunc_TraceLine, flOrigin, flTraceEnd, 0, iPlayer, iTr );
	get_tr2( iTr, TR_vecEndPos, flTraceResult );
	get_tr2( iTr, TR_vecPlaneNormal, flNormal );

	static iEntity;
	iEntity = create_entity( "info_target" );
	
	if( !pev_valid(iEntity ))
		return;
	
	entity_set_string( iEntity, EV_SZ_classname, MINE_CLASSNAME );
	entity_set_model( iEntity, MINE_MODEL_VIEW );
	entity_set_size( iEntity, Float: { -4.0, -4.0, -4.0 }, Float: { 4.0, 4.0, 4.0 } );
	
	entity_set_int( iEntity, EV_INT_iuser2, iPlayer );
	
	g_iPlantedMines[ iPlayer ]++;
	if (g_iMineIds[iPlayer][0]==0)
		g_iMineIds[iPlayer][0] = iEntity;
	else
		g_iMineIds[iPlayer][1] = iEntity;
	
	entity_set_float( iEntity, EV_FL_frame, 0.0 );
	entity_set_float( iEntity, EV_FL_framerate, 0.0 );
	entity_set_int( iEntity, EV_INT_movetype, MOVETYPE_FLY );
	entity_set_int( iEntity, EV_INT_solid, SOLID_NOT );
	entity_set_int( iEntity, EV_INT_body, 3 );
	entity_set_int( iEntity, EV_INT_sequence, 7 );
	entity_set_float( iEntity, EV_FL_takedamage, DAMAGE_NO );
	entity_set_int( iEntity, EV_INT_iuser1, MINE_OFF );
	
	static Float: flNewOrigin[ 3 ], Float: flEntAngles[ 3 ];
	flNewOrigin[ 0 ] = flTraceResult[ 0 ] + ( flNormal[ 0 ] * 8.0 );
	flNewOrigin[ 1 ] = flTraceResult[ 1 ] + ( flNormal[ 1 ] * 8.0 );
	flNewOrigin[ 2 ] = flTraceResult[ 2 ] + ( flNormal[ 2 ] * 8.0 );
	
	fm_set_rendering(iEntity, kRenderFxGlowShell, random_num(0, 255), random_num(0, 255), random_num(0 , 255), kRenderNormal, 12)
	
	entity_set_origin( iEntity, flNewOrigin );
	
	vector_to_angle( flNormal, flEntAngles );
	entity_set_vector( iEntity, EV_VEC_angles, flEntAngles );
	flEntAngles[ 0 ] *= -1.0;
	flEntAngles[ 1 ] *= -1.0;
	flEntAngles[ 2 ] *= -1.0;
	entity_set_vector( iEntity, EV_VEC_v_angle, flEntAngles );
	
	g_iTripMines[ iPlayer ]--;
	
	emit_sound( iEntity, CHAN_WEAPON, MINE_SOUND_DEPLOY, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
	emit_sound( iEntity, CHAN_VOICE, MINE_SOUND_CHARGE, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
	
	entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 0.6 );
}

public Func_RemoveMinesByOwner( iPlayer )
{
	static iEntity, szClassName[ 32 ];
	for( iEntity = 0; iEntity < MAX_ENTITIES + 1; iEntity++ )
	{
		if( !is_valid_ent( iEntity ) )
			continue;
		
		szClassName[ 0 ] = '^0';
		entity_get_classname( iEntity, szClassName );
		
		if( equali( szClassName, MINE_CLASSNAME ) )
			if( entity_get_int( iEntity, EV_INT_iuser2 ) == iPlayer )
				remove_entity( iEntity );
	}
}

Func_Explode( iEntity )
{
	new owner = entity_get_owner(iEntity);
	
	g_iPlantedMines[ owner ]--;
	if (g_iMineIds[owner][0] == iEntity)
		g_iMineIds[owner][0] = 0;
	else if (g_iMineIds[owner][1] == iEntity)
		g_iMineIds[owner][1] = 0;
	
	static Float: flOrigin[ 3 ], Float: flZombieOrigin[ 3 ], Float: flHealth, Float: flVelocity[ 3 ];
	entity_get_vector( iEntity, EV_VEC_origin, flOrigin );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0) );
	write_short( g_hExplode );
	write_byte( 55 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0) );
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0));
	write_short( g_hExplode );
	write_byte( 65 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte( TE_EXPLOSION );
	engfunc( EngFunc_WriteCoord, flOrigin[ 0 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 1 ] + random_float(-30.0, 30.0));
	engfunc( EngFunc_WriteCoord, flOrigin[ 2 ] + random_float(-30.0, 30.0));
	write_short( g_hExplode );
	write_byte( 85 );
	write_byte( 15 );
	write_byte( 0 );
	message_end( );
	
	static iZombie, Float:Damage;
	for( iZombie = 1; iZombie < get_maxplayers() + 1; iZombie++ )
	{
		if( is_user_connected( iZombie ) )
		{
			if( is_user_alive( iZombie ) )
			{
				entity_get_vector( iZombie, EV_VEC_origin, flZombieOrigin );
				
				if( get_distance_f( flOrigin, flZombieOrigin ) <= 360.0 )
				{
					flHealth = entity_get_float( iZombie, EV_FL_health );

					if (get_cvar_num("zp_enable_lasermine_knockback"))
					{
						entity_get_vector( iZombie, EV_VEC_velocity, flVelocity );

						flVelocity[ 2 ] += random_float(120.0, 240.0);

						if (random_num(0, 1) == 0)
							flVelocity[ 1 ] += random_float(120.0, 240.0);
						else
							flVelocity[1] += random_float(-240.0, -120.0);

						if (random_num(0, 1) == 0)
							flVelocity[ 0 ] += random_float(120.0, 240.0);
						else
							flVelocity[0] += random_float(-240.0, -120.0);

						if (!zp_frozen(iZombie))
						{
							if (!zp_get_user_zombie(iZombie) && !get_cvar_num("zp_enable_lasermine_k_humans"))
								continue;
							entity_set_vector( iZombie, EV_VEC_velocity, flVelocity );
						}
					}

					if (get_cvar_num("zp_enable_lasermine_flatline"))
					{
						client_cmd(iZombie, "spk fvox/flatline")
					}
					if( zp_get_user_zombie( iZombie )&& !get_user_godmode(iZombie) && !zp_get_user_no_damage(iZombie) )
					{
						Damage = 2250.0 - get_distance_f( flOrigin, flZombieOrigin );
						if (get_cvar_num("zp_enable_lasermine_redfade"))
						{
							do_screen_fade(iZombie, 0.45, 230, 0, 0, 200)
						}

						if (!(flHealth - Damage > 0.0))
							ExecuteHamB(Ham_Killed, iZombie, owner, 2)
						else
							ExecuteHamB(Ham_TakeDamage, iZombie, iEntity, owner, Damage, DMG_MORTAR);
					}
				}
			}
		}
	}
	
	remove_entity( iEntity );
}

public Forward_Think(iEntity)
{
	static Float: flGameTime, iStatus, Float: flHealth;
	flGameTime = get_gametime( );
	iStatus = entity_get_status( iEntity );
	new owner = entity_get_owner(iEntity);

	switch( iStatus )
	{
		case MINE_OFF:
		{
			entity_set_int( iEntity, EV_INT_iuser1, MINE_ON );
			entity_set_float( iEntity, EV_FL_takedamage, DAMAGE_YES );
			entity_set_int( iEntity, EV_INT_solid, SOLID_BBOX );
			entity_set_float( iEntity, EV_FL_health, MINE_HEALTH + 1000.0 );

			emit_sound( iEntity, CHAN_VOICE, MINE_SOUND_ACTIVATE, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
		}

		case MINE_ON:
		{
			flHealth = entity_get_float( iEntity, EV_FL_health );

			if( flHealth <= 1000.0 )
			{
				Func_Explode( iEntity );
				return FMRES_IGNORED;
			}
			
			else
			{
				if (g_iMineIds[owner][0] == iEntity)
				{
					set_hudmessage(210, 0, 0, 0.92, 0.34,0, 6.0, 0.11, 0.1, 0.2,-1);
					ShowSyncHudMsg(owner, g_hud[0], "Mine 1  %d HP", max(floatround(flHealth - 1000.0), 0));
				}
				else
				{
					set_hudmessage(210, 0, 0, 0.92, 0.38,0, 6.0, 0.11,  0.1, 0.2,-1);
					ShowSyncHudMsg(owner, g_hud[1], "Mine 2  %d HP", max(floatround(flHealth - 1000.0), 0));
				}
			}
		}
	}

	if( is_valid_ent( iEntity ) )
		entity_set_float( iEntity, EV_FL_nextthink, flGameTime + 0.1 );

	return FMRES_IGNORED;
}

stock fm_set_weapon_ammo(entity, amount)
{
	if (pev_valid(entity)==2)
		set_pdata_int(entity, OFFSET_CLIPAMMO, amount, OFFSET_LINUX_WEAPONS);
}

do_screen_fade(       id, Float:fadeTime,  red, green, blue, alpha, type = FADE_IN       )
{
   new  hold =floatround(         fadeTime *4096.0);
   message_begin(    MSG_ONE_UNRELIABLE, get_user_msgid(    "ScreenFade"           ), _, id          );
   write_short(          hold    );
   write_short(    hold    );
   write_short(    type   );
   write_byte(      red    );
   write_byte(  green    );
   write_byte(    blue    );
   write_byte(     alpha    );
   message_end(    );
}

#if AMXX_VERSION_NUM <= 182
client_print_color(const iIDTarget, const iIDSender = 0, const szMessage[], any:...)
{
	if (iIDTarget && !is_user_connected(iIDTarget))
		return;
	
	static szBuffer[192];
	vformat(szBuffer, charsmax(szBuffer), szMessage, 4)
	
/*	static const szChatTag[] = "^1[^4ZP^1] ";
	format(szBuffer, charsmax(szBuffer), "%s%s", szChatTag, szBuffer)
	*/
	static iIDMsgSayText;
	if (!iIDMsgSayText)
		iIDMsgSayText = get_user_msgid("SayText");
	
	if (iIDTarget)
		message_begin(MSG_ONE, iIDMsgSayText, _, iIDTarget)
	else
		message_begin(MSG_ALL, iIDMsgSayText)
	
	write_byte(!iIDSender ? iIDTarget : iIDSender)
	write_string(szBuffer)
	message_end()
}
#endif

Re: [C] Modificare

Posted: 17 Jul 2018, 16:45
by ImparctVirtual
Mulumesc Frumos, functioneaza perfect.