Raised This Month: $51 Target: $400
 12% 

LaserMines


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-22-2014 , 10:41   LaserMines
Reply With Quote #1

Hi ,i need help.Idk how to set that,When zombie kills the OWNER of the LaserMine,LM must be deleted when the owner is killed.
And just 1 thing. I need ,that 1 player can plant just 1 LM per round.
Code:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <fakemeta>
#include <xs>
#include <zombieplague.inc>



#if defined UL_MONEY_SUPPORT
	#include <money_ul>
#endif


#if AMXX_VERSION_NUM < 180
	#assert AMX Mod X v1.8.0 or greater library required!
#endif

#define PLUGIN "Laser/Tripmine Entity"
#define VERSION "2.3"


#define AUTHOR "SandStriker"

#define RemoveEntity(%1)	engfunc(EngFunc_RemoveEntity,%1)
//#define ACCESSLEVEL		ADMIN_LEVEL_H
#define TASK_PLANT		30100
#define TASK_RESET		15500
#define TASK_RELEASE		15900

#define LASERMINE_TEAM		pev_iuser1//EV_INT_iuser1
#define LASERMINE_OWNER		pev_iuser2 //EV_INT_iuser3
#define LASERMINE_STEP		pev_iuser3
#define LASERMINE_HITING	pev_iuser4
#define LASERMINE_COUNT		pev_fuser1

#define LASERMINE_POWERUP	pev_fuser2
#define LASERMINE_BEAMTHINK	pev_fuser3

#define LASERMINE_BEAMENDPOINT	pev_vuser1
#define MAX_MINES		10
#define MODE_LASERMINE		0
#define OFFSET_TEAM 		114
#define OFFSET_MONEY		115
#define OFFSET_DEATH	 	444

#define cs_get_user_team(%1)		CsTeams:get_offset_value(%1,OFFSET_TEAM)
#define cs_get_user_deaths(%1)		get_offset_value(%1,OFFSET_DEATH)
#define cs_get_user_money(%1)		get_offset_value(%1,OFFSET_MONEY)
#define cs_set_user_money(%1,%2)	set_offset_value(%1,OFFSET_MONEY,%2)


////////////// Define ZP EXTRA! //////////////////////
new const g_item_name[] = { "LaserMine" }
const g_item_lmines = 8
new g_itemid_lminas
//new id
//new proban;
//////////////////////////////////////////////////////

enum CsTeams {
	CS_TEAM_UNASSIGNED = 0,
	CS_TEAM_T = 1,
	CS_TEAM_CT = 2,
	CS_TEAM_SPECTATOR = 3
};

enum tripmine_e {
	TRIPMINE_IDLE1 = 0,
	TRIPMINE_IDLE2,
	TRIPMINE_ARM1,
	TRIPMINE_ARM2,
	TRIPMINE_FIDGET,
	TRIPMINE_HOLSTER,
	TRIPMINE_DRAW,
	TRIPMINE_WORLD,
	TRIPMINE_GROUND,
};

enum
{
	POWERUP_THINK,
	BEAMBREAK_THINK,
	EXPLOSE_THINK
};

enum
{
	POWERUP_SOUND,
	ACTIVATE_SOUND,
	STOP_SOUND
};

new const
	ENT_MODELS[]	= "models/v_tripmine.mdl",
	ENT_SOUND1[]	= "weapons/mine_deploy.wav",
	ENT_SOUND2[]	= "weapons/mine_charge.wav",
	ENT_SOUND3[]	= "weapons/mine_activate.wav",
	ENT_SOUND4[]	= "debris/beamstart9.wav",
	ENT_SOUND5[]	= "items/gunpickup2.wav",
	ENT_SOUND6[]	= "debris/bustglass1.wav",
	ENT_SOUND7[]	= "debris/bustglass2.wav",
	ENT_SPRITE1[] 	= "sprites/laserbeam.spr",
	ENT_SPRITE2[] 	= "sprites/zerogxplode.spr";

new const
	ENT_CLASS_NAME[]	= "lasermine",
	//ENT_CLASS_NAME2[]	= "info_target",
	ENT_CLASS_NAME3[]	= "func_breakable";

new const
	    CHATTAG[]         = "[ZP]",
	
	    //STR_MINEDETNATED[]     = "Your mine has detonated.",
	    //STR_MINEDETNATED2[]    = "detonated your mine.",
	    STR_NOTACTIVE[]     = "Lasermines are not currently active.",
	    STR_DONTHAVEMINE[]    = "You do not have LaserMines.",
	    //STR_CANTDEPLOY[]    = "Your team can't deploying lasermine!",
	    STR_MAXDEPLOY[]        = "Maximum mines have been deployed.",
	    STR_MANYPPL[]        = "Too many ppl on your team...",
	    STR_PLANTWALL[]        = "You have to plant the LaserMine on the wall!",
	    STR_REF[]        = "Refer to a lasermine rule with this server. say 'lasermine'",
	
	    STR_CBT[]        = "Your Zombie! Can't buy and deploying lasermine!",
	
	    STR_CANTBUY[]        = "Can't buying this server.",
	    STR_HAVEMAX[]        = "You have a maximum lasermine.",
	    STR_NOMONEY[]        = "You don't have enough money to buy a lasermine! ($",
	    STR_NEEDED[]        = "needed)",
	    STR_DELAY[]        = "To use lasermines, you have to wait until the first zombie",
	    //STR_SECONDS[]        = "seconds.",
	    STR_BOUGHT[]        = "You bought a LaserMine! You can plant with the key 'P'",
	    STR_BOUGHT2[]        = "You bought a LaserMine!. You can plant with +use key",
	    STR_BOUGHT3[]        = "You bought a LaserMine!. You can plant with bind +setlaser",
	    //STR_STATE[]        = "LaserMine Ammo:",
	    STR_NOACCESS[]        = "You have no access to this command."; 

new g_EntMine;
new beam, boom
new 
	g_LENABLE,g_LFMONEY,g_LAMMO,g_LDMG,
	g_LTMAX,g_LCOST,g_LHEALTH,g_LMODE,g_LRADIUS,g_LRDMG,g_LFF,g_LCBT,g_BINDMODE;
new
	/*g_LDELAY*, g_LTHINK,*/g_LVISIBLE,
	g_LSTAMMO,g_LACCESS,g_LGLOW,g_LDMGMODE,g_LCLMODE,g_LCBRIGHT,g_LDSEC,g_LCMDMODE,g_LBUYMODE;

new g_dcount[33],/*g_nowtime,*/g_MaxPL
new bool:g_settinglaser[33]
new g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgMoney;
new Float:plspeed[33]
new plsetting[33]
new g_havemine[33];
new g_deployed[33];

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR);
	
	register_plugin("[ZP] Extra: LaserMines", "1.4", "LARP")
	
	g_itemid_lminas = zp_register_extra_item(g_item_name, g_item_lmines, ZP_TEAM_HUMAN)
	// Add your code here...
	register_clcmd("say /lm","buy_lmines");
	register_clcmd("say /lasermine","buy_lmines");
	register_clcmd("+setlaser","CreateLaserMine_Progress_b");
   	register_clcmd("-setlaser","StopCreateLaserMine");
	register_clcmd("+dellaser","ReturnLaserMine_Progress");
   	register_clcmd("-dellaser","StopReturnLaserMine");
	//register_clcmd("say","say_lasermine");
	


	g_LENABLE	= register_cvar("zp_ltm","1");
	g_BINDMODE	= register_cvar("zp_ltm_bind","1");		//Auto bind P Key!
	g_LACCESS	= register_cvar("zp_ltm_acs","0");  		//0 all, 1 admin
	g_LMODE		= register_cvar("zp_ltm_mode","1"); 		//0 lasermine, 1 tripmine
	g_LAMMO		= register_cvar("zp_ltm_ammo","99999");
	g_LDMG		= register_cvar("zp_ltm_dmg","100"); 		//laser hit dmg
	g_LCOST		= register_cvar("zp_ltm_cost","0");
	g_LFMONEY	= register_cvar("zp_ltm_fragmoney","0");
	g_LHEALTH	= register_cvar("zp_ltm_health","500");
	g_LTMAX		= register_cvar("zp_ltm_teammax","20");
	g_LRADIUS	= register_cvar("zp_ltm_radius","800");
	g_LRDMG		= register_cvar("zp_ltm_rdmg","1200");		//radius damage
	g_LFF		= register_cvar("zp_ltm_ff","0");
	g_LCBT		= register_cvar("zp_ltm_team","ALL"); //NO MODIFY!!
	g_LBUYMODE	= register_cvar("zp_ltm_buymode","1");
	
	/******************** NONONONO!!! **************************/
	//g_LDELAY	= register_cvar("zp_delay",""); //NO CHANGE!!!
	/******************** NONONONO!!! **************************/
	
	//g_LTHINK = register_cvar("amx_ltm_think","0.01")
	g_LVISIBLE	= register_cvar("zp_ltm_line","1");
	g_LGLOW		= register_cvar("zp_ltm_glow","0");
	g_LCBRIGHT	= register_cvar("zp_ltm_bright","100");	//laser line brightness.
	g_LCLMODE	= register_cvar("zp_ltm_color","0"); 		//0 is team color,1 is green
	g_LDMGMODE	= register_cvar("zp_ltm_ldmgmode","0"); 	//0 - frame dmg, 1 - once dmg, 2 - 1 second dmg
	g_LDSEC		= register_cvar("zp_ltm_ldmgseconds","1");	//mode 2 only, damage / seconds. default 1 (sec)
	g_LSTAMMO	= register_cvar("zp_ltm_startammo","1");
	g_LCMDMODE	= register_cvar("zp_ltm_cmdmode","1");		//0 is +USE key, 1 is bind, 2 is each.
	//g_ACT		= register_cvar("zp_ltm_act","0");	
	register_event("DeathMsg", "DeathEvent", "a");
 	register_event("CurWeapon", "standing", "be", "1=1");
	register_event("ResetHUD", "delaycount", "a");
	register_event("ResetHUD", "newround", "b");
	register_event("Damage","CutDeploy_onDamage","b");
	g_msgDeathMsg 	= get_user_msgid("DeathMsg");
	g_msgScoreInfo	= get_user_msgid("ScoreInfo");
	g_msgDamage 	= get_user_msgid("Damage");
	//g_msgStatusText = get_user_msgid("StatusText");
	g_msgMoney	= get_user_msgid("Money");
	// -- Forward.
	register_forward(FM_Think, "ltm_Think" );
	register_forward(FM_PlayerPostThink, "ltm_PostThink" );
	register_forward(FM_PlayerPreThink, "ltm_PreThink");
}

public plugin_precache() 
{
	precache_sound(ENT_SOUND1);
	precache_sound(ENT_SOUND2);
	precache_sound(ENT_SOUND3);
	precache_sound(ENT_SOUND4);
	precache_sound(ENT_SOUND5);
	precache_sound(ENT_SOUND6);
	precache_sound(ENT_SOUND7);
	precache_model(ENT_MODELS);
	beam = precache_model(ENT_SPRITE1);
	boom = precache_model(ENT_SPRITE2);
	
	return PLUGIN_CONTINUE;
}

public plugin_modules() 
{
	require_module("fakemeta");
	require_module("cstrike");
	//require_module("fun")
}

public plugin_cfg()
{
	g_EntMine = engfunc(EngFunc_AllocString,ENT_CLASS_NAME3);
	arrayset(g_havemine,0,sizeof(g_havemine));
	arrayset(g_deployed,0,sizeof(g_deployed));
	g_MaxPL = get_maxplayers();

	new file[64]; get_localinfo("amxx_configsdir",file,63);

	format(file, 63, "%s/ltm_cvars.cfg", file);

	if(file_exists(file)) server_cmd("exec %s", file), server_exec();

}

public delaycount(id)
{
	g_dcount[id] = floatround(get_gametime());
}

/*bool:CheckTime(id)
{
	g_nowtime = floatround(get_gametime()) - g_dcount[id];
	if(g_nowtime >= get_pcvar_num(g_LDELAY)+ 5)	//Check time of ZP_DELAY
		return true;
	return false;
}*/

public CreateLaserMine_Progress_b(id)
{
	/*if (!CheckTime(id))
	{
		client_print(id,print_chat, "%s %s",CHATTAG,STR_DELAY);
		return false;
	}*/
	
	if (!zp_has_round_started())
	{
		client_print(id,print_chat, "%s %s",CHATTAG,STR_DELAY);
		return false;
	}
	
	
	if (!zp_get_user_zombie(id))
	{
		
		if(get_pcvar_num(g_LCMDMODE) != 0)
		CreateLaserMine_Progress(id);
		return PLUGIN_HANDLED;
	}
	//client_print(id, print_chat, "[ZP] The zombies can not use this command");
	return false;
}

public CreateLaserMine_Progress(id)
{

	if (!CreateCheck(id))
		return PLUGIN_HANDLED;
	g_settinglaser[id] = true;

	message_begin( MSG_ONE, 108, {0,0,0}, id );
	write_byte(1);
	write_byte(0);
	message_end();

	set_task(1.2, "Spawn", (TASK_PLANT + id));

	return PLUGIN_HANDLED;
}

public ReturnLaserMine_Progress(id)
{

	if (!ReturnCheck(id))
		return PLUGIN_HANDLED;
	g_settinglaser[id] = true;

	message_begin( MSG_ONE, 108, {0,0,0}, id );
	write_byte(1);
	write_byte(0);
	message_end();

	set_task(1.2, "ReturnMine", (TASK_RELEASE + id));
	

	return PLUGIN_HANDLED;
}

public StopCreateLaserMine(id)
{

	DeleteTask(id);
	message_begin(MSG_ONE, 108, {0,0,0}, id);
	write_byte(0);
	write_byte(0);
	message_end();

	return PLUGIN_HANDLED;
}

public StopReturnLaserMine(id)
{

	DeleteTask(id);
	message_begin(MSG_ONE, 108, {0,0,0}, id);
	write_byte(0);
	write_byte(0);
	message_end();

	return PLUGIN_HANDLED;
}

public ReturnMine(id)
{
	id -= TASK_RELEASE;
	new tgt,body,Float:vo[3],Float:to[3];
	get_user_aiming(id,tgt,body);
	if(!pev_valid(tgt)) return;
	pev(id,pev_origin,vo);
	pev(tgt,pev_origin,to);
	if(get_distance_f(vo,to) > 70.0) return;
	
	new EntityName[32];
	pev(tgt, pev_classname, EntityName, 31);
	if(!equal(EntityName, ENT_CLASS_NAME)) return;
	if(pev(tgt,LASERMINE_OWNER) != id) return;
	RemoveEntity(tgt);

	g_havemine[id] ++;
	g_deployed[id] --;
	emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	//ShowAmmo(id)

	return;
}

public Spawn( id )
{
	id -= TASK_PLANT
	// motor
	new i_Ent = engfunc(EngFunc_CreateNamedEntity,g_EntMine);
	if(!i_Ent)
	{
		client_print(id,print_chat,"[ZP] Can't Create Entity");
		return PLUGIN_HANDLED_MAIN;
	}
	set_pev(i_Ent,pev_classname,ENT_CLASS_NAME);

	engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS);

	set_pev(i_Ent,pev_solid,SOLID_NOT);
	set_pev(i_Ent,pev_movetype,MOVETYPE_FLY);

	set_pev(i_Ent,pev_frame,0);
	set_pev(i_Ent,pev_body,3);
	set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD);
	set_pev(i_Ent,pev_framerate,0);
    
	set_pev(i_Ent,pev_takedamage,DAMAGE_YES);
	
	set_pev(i_Ent,pev_dmg,100.0);
	set_user_health(i_Ent,get_pcvar_num(g_LHEALTH));
	new Float:vOrigin[3];
	new	Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
		Float:vTraceEnd[3],Float:vEntAngles[3];
	pev( id, pev_origin, vOrigin );
	velocity_by_aim( id, 128, vTraceDirection );
	xs_vec_add( vTraceDirection, vOrigin, vTraceEnd );
	
	engfunc( EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0 );
	
	new Float:fFraction;
	get_tr2( 0, TR_flFraction, fFraction );
	

	// -- We hit something!
	if ( fFraction < 1.0 )
	{
		// -- Save results to be used later.
		get_tr2( 0, TR_vecEndPos, vTraceEnd );
		get_tr2( 0, TR_vecPlaneNormal, vNormal );
	}


	xs_vec_mul_scalar( vNormal, 8.0, vNormal );
	xs_vec_add( vTraceEnd, vNormal, vNewOrigin );

	engfunc(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 } );
	engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin );

	// -- Rotate tripmine.
	vector_to_angle(vNormal,vEntAngles );
	set_pev(i_Ent,pev_angles,vEntAngles );

	// -- Calculate laser end origin.
	new Float:vBeamEnd[3], Float:vTracedBeamEnd[3];
        
	xs_vec_mul_scalar(vNormal, 8192.0, vNormal );
	xs_vec_add( vNewOrigin, vNormal, vBeamEnd );

	engfunc( EngFunc_TraceLine, vNewOrigin, vBeamEnd, IGNORE_MONSTERS, -1, 0 );

	get_tr2( 0, TR_vecPlaneNormal, vNormal );
	get_tr2( 0, TR_vecEndPos, vTracedBeamEnd );

	// -- Save results to be used later.
	set_pev(i_Ent, LASERMINE_OWNER, id );
	set_pev(i_Ent,LASERMINE_BEAMENDPOINT,vTracedBeamEnd);
	set_pev(i_Ent,LASERMINE_TEAM,2);
	new Float:fCurrTime = get_gametime();

	set_pev(i_Ent,LASERMINE_POWERUP, fCurrTime + 2.5 );
   
	set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
	set_pev(i_Ent,pev_nextthink, fCurrTime + 0.2 );

	PlaySound(i_Ent,POWERUP_SOUND );
	g_deployed[id]++;
	g_havemine[id]--;
	DeleteTask(id);
	//ShowAmmo(id);
	client_print(id, print_chat, "[ZP] LaserMine has been planted, You have %i LaserMines Remaining", g_havemine[id])
	return 1;
}

stock TeamDeployedCount(id)
{
	//new tid[32];
	
	static i;
	static CsTeams:t;t = cs_get_user_team(id);
	static cnt;cnt=0;

	for(i = 1;i <= g_MaxPL;i++)
	{
		if(is_user_connected(i))
			if(t == cs_get_user_team(i))
				cnt += g_deployed[i];
	}

	return cnt;
}

bool:CheckCanTeam(id)
{
	new arg[5],CsTeam:num;
	get_pcvar_string(g_LCBT,arg,3);
	if(equali(arg,"T"))
	{
		num = CsTeam:CS_TEAM_T;
	}
	else if(equali(arg,"CT"))
	{
		num = CsTeam:CS_TEAM_CT;
	}
	else if(equali(arg,"ALL"))
	{
		num = CsTeam:CS_TEAM_UNASSIGNED;
	}	
	else
	{
		num = CsTeam:CS_TEAM_UNASSIGNED;
	}
	if(num != CsTeam:CS_TEAM_UNASSIGNED && num != CsTeam:cs_get_user_team(id))
		return false;
	return true;
}

bool:CanCheck(id,mode)
{
	if( !get_pcvar_num( g_LENABLE ) )
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_NOTACTIVE);
		return false;
	}
	if( get_pcvar_num(g_LACCESS) != 0)
		if(!(get_user_flags(id) & ADMIN_IMMUNITY))
		{
			client_print(id, print_chat, "%s %s",CHATTAG,STR_NOACCESS);
			return false;
		}
	if(!pev_user_alive(id)) return false;
	if (!CheckCanTeam(id))
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT);
		return false;
	}
	if( mode == 0)
	{
		if(g_havemine[id] <= 0)
		{
			client_print(id, print_chat, "%s %s",CHATTAG,STR_DONTHAVEMINE);
			return false;
		}
	}
	if (mode == 1)
	{
		if (get_pcvar_num(g_LBUYMODE) == 0)
		{
			client_print(id, print_chat, "%s %s",CHATTAG,STR_CANTBUY);
			return false;
		}
		if (g_havemine[id] >= get_pcvar_num(g_LAMMO))
		{
			client_print(id, print_chat, "%s %s",CHATTAG,STR_HAVEMAX);
			return false;
		}
		if (cs_get_user_money(id) < get_pcvar_num(g_LCOST))
		{
			client_print(id, print_chat, "%s %s%d %s",CHATTAG, STR_NOMONEY,get_pcvar_num(g_LCOST),STR_NEEDED);
			return false;
		}
	}
	/*if(!CheckTime(id))
	{
		client_print(id,print_chat, "%s %s %d %s",CHATTAG,STR_DELAY);
		return false;
	}*/

	return true;
}

bool:ReturnCheck( id )
{
	if(!CanCheck(id,-1)) return false;
	if(g_havemine[id] + 1 > get_pcvar_num(g_LAMMO)) return false;
	new tgt,body,Float:vo[3],Float:to[3];
	get_user_aiming(id,tgt,body);
	if(!pev_valid(tgt)) return false;
	pev(id,pev_origin,vo);
	pev(tgt,pev_origin,to);
	if(get_distance_f(vo,to) > 70.0) return false;
	
	new EntityName[32];
	pev(tgt, pev_classname, EntityName, 31);
	if(!equal(EntityName, ENT_CLASS_NAME)) return false;
	if(pev(tgt,LASERMINE_OWNER) != id) return false;
	
	return true;
}

bool:CreateCheck( id )
{
	if (!CanCheck(id,0)) return false;
	if (g_deployed[id] >= get_pcvar_num(g_LAMMO))
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_MAXDEPLOY);
		return false;
	}
	
	//client_print(id,print_chat,"[Lasermine] your team deployed %d",TeamDeployedCount(id))
	if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX))
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_MANYPPL);
		return false;
	}
	
	
	new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];
	
	pev( id, pev_origin, vOrigin );
	velocity_by_aim( id, 128, vTraceDirection );
	xs_vec_add( vTraceDirection, vOrigin, vTraceEnd );
	
	engfunc( EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0 );
	
	new Float:fFraction,Float:vTraceNormal[3];
	get_tr2( 0, TR_flFraction, fFraction );
	
	// -- We hit something!
	if ( fFraction < 1.0 )
	{
		// -- Save results to be used later.
		get_tr2( 0, TR_vecEndPos, vTraceEnd );
		get_tr2( 0, TR_vecPlaneNormal, vTraceNormal );

		//get_tr2( 0, TR_pHit );

		return true;
	}

	client_print(id, print_chat, "%s %s",CHATTAG,STR_PLANTWALL)
	DeleteTask(id);
	// -- Did not touched something. (not solid)
	return false;
}

public ltm_Think( i_Ent )
{
	if ( !pev_valid( i_Ent ) )
		return FMRES_IGNORED;
	new EntityName[32];
	pev( i_Ent, pev_classname, EntityName, 31);
	if(!get_pcvar_num(g_LENABLE)) return FMRES_IGNORED;
	// -- Entity is not a tripmine, ignoring the next...
	if ( !equal( EntityName, ENT_CLASS_NAME ) )
		return FMRES_IGNORED;


	static Float:fCurrTime;
	fCurrTime = get_gametime();
	

	switch( pev( i_Ent, LASERMINE_STEP ) )
	{
		case POWERUP_THINK :
		{
			new Float:fPowerupTime;
			pev( i_Ent, LASERMINE_POWERUP, fPowerupTime );

			if( fCurrTime > fPowerupTime )
			{
				set_pev( i_Ent, pev_solid, SOLID_BBOX );
				set_pev( i_Ent, LASERMINE_STEP, BEAMBREAK_THINK );

				PlaySound( i_Ent, ACTIVATE_SOUND );
			}
			if(get_pcvar_num(g_LGLOW)!=0)
			{
				if(get_pcvar_num(g_LCLMODE)==0)
				{
					switch (pev(i_Ent,LASERMINE_TEAM))
					{
						case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,255,0,0,kRenderNormal,5);
						case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,0,0,255,kRenderNormal,5);
					}
				}else
				{
					set_rendering(i_Ent,kRenderFxGlowShell,0,255,0,kRenderNormal,5);
				}
			}

			set_pev( i_Ent, pev_nextthink, fCurrTime + 0.1 );
		}
		case BEAMBREAK_THINK :
		{
			static Float:vEnd[3],Float:vOrigin[3];
			pev( i_Ent, pev_origin, vOrigin );
			pev( i_Ent, LASERMINE_BEAMENDPOINT, vEnd );

			static iHit, Float:fFraction;
			engfunc( EngFunc_TraceLine, vOrigin, vEnd, DONT_IGNORE_MONSTERS, i_Ent, 0 );

			get_tr2( 0, TR_flFraction, fFraction );
			iHit = get_tr2( 0, TR_pHit );

			// -- Something has passed the laser.
			if ( fFraction < 1.0 )
			{
				// -- Ignoring others tripmines entity.
				if(pev_valid(iHit))
				{
					pev( iHit, pev_classname, EntityName, 31 );
	
					if( !equal( EntityName, ENT_CLASS_NAME ) )
					{
						set_pev( i_Ent, pev_enemy, iHit );
						if(get_pcvar_num(g_LMODE) == MODE_LASERMINE)
							CreateLaserDamage(i_Ent,iHit);
						else
							if(get_pcvar_num(g_LFF) || CsTeams:pev(i_Ent,LASERMINE_TEAM) != cs_get_user_team(iHit))
								set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK );
				
						set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) );
					}
				}
			}
			if(get_pcvar_num(g_LDMGMODE)!=0)
				if(pev(i_Ent,LASERMINE_HITING) != iHit)
					set_pev(i_Ent,LASERMINE_HITING,iHit);
 
			// -- Tripmine is still there.
			if ( pev_valid( i_Ent ))
			{
				static Float:fHealth;
				pev( i_Ent, pev_health, fHealth );

				if( fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME))
				{
					set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK );
					set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) );
				}
                    
				static Float:fBeamthink;
				pev( i_Ent, LASERMINE_BEAMTHINK, fBeamthink );
                    
				if( fBeamthink < fCurrTime && get_pcvar_num(g_LVISIBLE))
				{
					DrawLaser(i_Ent, vOrigin, vEnd );
					set_pev( i_Ent, LASERMINE_BEAMTHINK, fCurrTime + 0.1 );
				}
				set_pev( i_Ent, pev_nextthink, fCurrTime + 0.01 );
			}
		}
		case EXPLOSE_THINK :
		{
			// -- Stopping entity to think
			set_pev( i_Ent, pev_nextthink, 0.0 );
			PlaySound( i_Ent, STOP_SOUND );
			g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;
			CreateExplosion( i_Ent );
			CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS))
			RemoveEntity   ( i_Ent );
		}
	}

	return FMRES_IGNORED;
}

PlaySound( i_Ent, i_SoundType )
{
	switch ( i_SoundType )
	{
		case POWERUP_SOUND :
		{
			emit_sound( i_Ent, CHAN_VOICE, ENT_SOUND1, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
			emit_sound( i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, 0, PITCH_NORM );
		}
		case ACTIVATE_SOUND :
		{
			emit_sound( i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, 1, 75 );
		}
		case STOP_SOUND :
		{
			emit_sound( i_Ent, CHAN_BODY , ENT_SOUND2, 0.2, ATTN_NORM, SND_STOP, PITCH_NORM );
			emit_sound( i_Ent, CHAN_VOICE, ENT_SOUND3, 0.5, ATTN_NORM, SND_STOP, 75 );
		}
	}
}

DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3] )
{
	new tcolor[3];
	new teamid = pev(i_Ent, LASERMINE_TEAM);
	if(get_pcvar_num(g_LCLMODE) == 0)
	{
		switch(teamid){
			case 1:{
				tcolor[0] = 255;
				tcolor[1] = 0;
				tcolor[2] = 0;
			}
			case 2:{
				tcolor[0] = 0;
				tcolor[1] = 0;
				tcolor[2] = 255;
			}
		}
	}else
	{
		tcolor[0] = 0;
		tcolor[1] = 255;
		tcolor[2] = 0;
	}
	message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
	write_byte(TE_BEAMPOINTS);
	engfunc(EngFunc_WriteCoord,v_Origin[0]);
	engfunc(EngFunc_WriteCoord,v_Origin[1]);
	engfunc(EngFunc_WriteCoord,v_Origin[2]);
	engfunc(EngFunc_WriteCoord,v_EndOrigin[0]); //Random
	engfunc(EngFunc_WriteCoord,v_EndOrigin[1]); //Random
	engfunc(EngFunc_WriteCoord,v_EndOrigin[2]); //Random
	write_short(beam);
	write_byte(0);
	write_byte(0);
	write_byte(1);	//Life
	write_byte(5);	//Width
	write_byte(0);	//wave
	write_byte(tcolor[0]); // r
	write_byte(tcolor[1]); // g
	write_byte(tcolor[2]); // b
	write_byte(get_pcvar_num(g_LCBRIGHT));
	write_byte(255);
	message_end();
}
/*
CreateDamage(iCurrent,DmgMAX,Float:Radius)
{
	new AtkID = pev(iCurrent,LASERMINE_OWNER)// entity_get_int(iCurrent,LASERMINE_OWNER)
	new TeamID= pev(iCurrent,LASERMINE_TEAM) //entity_get_int(iCurrent,LASERMINE_INT_TEAM)
	new Player = -1;
	new Float:distance,dmg;
	new Float:tOrigin[3];
	new Float:vOrigin[3];
	new iHitHP,iHitTeam;
	pev(iCurrent,pev_origin,vOrigin);
	while((Player = engfunc(EngFunc_FindEntityInSphere, Player, vOrigin, Radius)) != 0)
	{
		if(is_user_alive(Player))
		{
			pev(Player,pev_origin,tOrigin)
			distance = get_distance_f(vOrigin, tOrigin)
			dmg = floatround(DmgMAX - ((DmgMAX / Radius) * distance))
			iHitHP = pev_user_health(Player) - dmg
			iHitTeam = int:bio_get_user_team(Player)
			if(iHitHP <= 0)
			{
				if(iHitTeam != TeamID)
				{
					cs_set_user_money(AtkID,cs_get_user_money(AtkID) + get_pcvar_num(g_LFMONEY))
					set_score(AtkID,Player,1,iHitHP)
				}else
				{
					if(get_pcvar_num(g_LFF))
					{
						cs_set_user_money(AtkID,cs_get_user_money(AtkID) - get_pcvar_num(g_LFMONEY))
						set_score(AtkID,Player,-1,iHitHP)
					}
				}
			}else
			{
				if(iHitTeam != TeamID || get_pcvar_num(g_LFF))
				{
					//set_pev(Player,pev_health,iHitHP)
					set_user_health(Player, iHitHP)
					message_begin(MSG_ONE_UNRELIABLE, g_msgDamage, {0,0,0}, Player) 
					write_byte(dmg)
					write_byte(dmg)
					write_long(DMG_BULLET)
					engfunc(EngFunc_WriteCoord,vOrigin[0])
					engfunc(EngFunc_WriteCoord,vOrigin[1])
					engfunc(EngFunc_WriteCoord,vOrigin[2])
					message_end()
				}
			}
		}
		Player =  engfunc(EngFunc_FindEntityInSphere,Player,vOrigin,Radius)
	}
	return PLUGIN_CONTINUE
}
*/
CreateDamage(iCurrent,Float:DmgMAX,Float:Radius)
{
	// Get given parameters

	
	new Float:vecSrc[3];
	pev(iCurrent, pev_origin, vecSrc);

	new AtkID =pev(iCurrent,LASERMINE_OWNER);
	new TeamID=pev(iCurrent,LASERMINE_TEAM);

	new ent = -1;
	new Float:tmpdmg = DmgMAX;

	new Float:kickback = 0.0;
	
	// Needed for doing some nice calculations :P
	new Float:Tabsmin[3], Float:Tabsmax[3];
	new Float:vecSpot[3];
	new Float:Aabsmin[3], Float:Aabsmax[3];
	new Float:vecSee[3];
	new trRes;
	new Float:flFraction;
	new Float:vecEndPos[3];
	new Float:distance;
	new Float:origin[3], Float:vecPush[3];
	new Float:invlen;
	new Float:velocity[3];
	new iHitHP,iHitTeam;
	// Calculate falloff
	new Float:falloff;
	if (Radius > 0.0)
	{
		falloff = DmgMAX / Radius;
	} else {
		falloff = 1.0;
	}
	
	// Find monsters and players inside a specifiec radius
	while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0)
	{
		if(!pev_valid(ent)) continue;
		if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
		{
			// Entity is not a player or monster, ignore it
			continue;
		}
		if(!pev_user_alive(ent)) continue;
		// Reset data
		kickback = 1.0;
		tmpdmg = DmgMAX;
		
		// The following calculations are provided by Orangutanz, THANKS!
		// We use absmin and absmax for the most accurate information
		pev(ent, pev_absmin, Tabsmin);
		pev(ent, pev_absmax, Tabsmax);
		xs_vec_add(Tabsmin,Tabsmax,Tabsmin);
		xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
		
		pev(iCurrent, pev_absmin, Aabsmin);
		pev(iCurrent, pev_absmax, Aabsmax);
		xs_vec_add(Aabsmin,Aabsmax,Aabsmin);
		xs_vec_mul_scalar(Aabsmin,0.5,vecSee);
		
		engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes);
		get_tr2(trRes, TR_flFraction, flFraction);
		// Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD)
		if (flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent)
		{
			// Work out the distance between impact and entity
			get_tr2(trRes, TR_vecEndPos, vecEndPos);
			
			distance = get_distance_f(vecSrc, vecEndPos) * falloff;
			tmpdmg -= distance;
			if(tmpdmg < 0.0)
				tmpdmg = 0.0;
			
			// Kickback Effect
			if(kickback != 0.0)
			{
				xs_vec_sub(vecSpot,vecSee,origin);
				
				invlen = 1.0/get_distance_f(vecSpot, vecSee);

				xs_vec_mul_scalar(origin,invlen,vecPush);
				pev(ent, pev_velocity, velocity)
				xs_vec_mul_scalar(vecPush,tmpdmg,vecPush);
				xs_vec_mul_scalar(vecPush,kickback,vecPush);
				xs_vec_add(velocity,vecPush,velocity);
				
				if(tmpdmg < 60.0)
				{
					xs_vec_mul_scalar(velocity,12.0,velocity);
				} else {
					xs_vec_mul_scalar(velocity,4.0,velocity);
				}
				
				if(velocity[0] != 0.0 || velocity[1] != 0.0 || velocity[2] != 0.0)
				{
					// There's some movement todo :)
					set_pev(ent, pev_velocity, velocity)
				}
			}

			iHitHP = pev_user_health(ent) - floatround(tmpdmg)
			iHitTeam = int:cs_get_user_team(ent)
			if(iHitHP <= 0)
			{
				if(iHitTeam != TeamID)
				{
					cs_set_user_money(AtkID,cs_get_user_money(AtkID) + get_pcvar_num(g_LFMONEY))
					set_score(AtkID,ent,1,iHitHP)
				}else
				{
					if(get_pcvar_num(g_LFF))
					{
						cs_set_user_money(AtkID,cs_get_user_money(AtkID) - get_pcvar_num(g_LFMONEY))
						set_score(AtkID,ent,1,iHitHP)
					}
				}
			}else
			{
				if(iHitTeam != TeamID || get_pcvar_num(g_LFF))
				{
					//set_pev(Player,pev_health,iHitHP)
					set_user_health(ent, iHitHP)
					engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},ent);
					write_byte(floatround(tmpdmg))
					write_byte(floatround(tmpdmg))
					write_long(DMG_BULLET)
					engfunc(EngFunc_WriteCoord,vecSrc[0])
					engfunc(EngFunc_WriteCoord,vecSrc[1])
					engfunc(EngFunc_WriteCoord,vecSrc[2])
					message_end()
				}
			}	
		}
	}
	
	return
}

bool:pev_user_alive(ent)
{
	new deadflag = pev(ent,pev_deadflag);
	if(deadflag != DEAD_NO)
		return false;
	return true;
}

CreateExplosion(iCurrent)
{
	
	new Float:vOrigin[3];
	pev(iCurrent,pev_origin,vOrigin);
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
	write_byte(99); //99 = KillBeam
	write_short(iCurrent);
	message_end();

	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vOrigin, 0);
	write_byte(TE_EXPLOSION);
	engfunc(EngFunc_WriteCoord,vOrigin[0]);
	engfunc(EngFunc_WriteCoord,vOrigin[1]);
	engfunc(EngFunc_WriteCoord,vOrigin[2]);
	write_short(boom);
	write_byte(30);
	write_byte(15);
	write_byte(0);
	message_end();
	//client_print(0,print_chat,"asdasdasd")
}

CreateLaserDamage(iCurrent,isHit)
{
	if(isHit < 0 ) return PLUGIN_CONTINUE
	switch(get_pcvar_num(g_LDMGMODE))
	{
		case 1:
		{
			if(pev(iCurrent,LASERMINE_HITING) == isHit)
				return PLUGIN_CONTINUE
		}
		case 2:
		{
			if(pev(iCurrent,LASERMINE_HITING) == isHit)
			{
				static Float:cnt
				static now,htime;now = floatround(get_gametime())

				pev(iCurrent,LASERMINE_COUNT,cnt)
				htime = floatround(cnt)
				if(now - htime < get_pcvar_num(g_LDSEC))
				{
					return PLUGIN_CONTINUE;
				}else{
					set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
				}
			}else
			{
				set_pev(iCurrent,LASERMINE_COUNT,get_gametime())
			}
		}
	}

	new Float:vOrigin[3],Float:vEnd[3]
	pev(iCurrent,pev_origin,vOrigin)
	pev(iCurrent,pev_vuser1,vEnd)

	new teamid = pev(iCurrent, LASERMINE_TEAM)

	new szClassName[32]
	new Alive,God
	new iHitTeam,iHitHP,id
	new hitscore

	
	szClassName[0] = '^0'
	pev(isHit,pev_classname,szClassName,32)
	
	if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
	{
		Alive = pev_user_alive(isHit)
		God = get_user_godmode(isHit)
		if(!Alive || God) return PLUGIN_CONTINUE
			 
		iHitTeam = int:cs_get_user_team(isHit)
		iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG)
		id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32]
		if(iHitHP <= 0)
		{
			if(iHitTeam != teamid)
			{
				emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM )
				hitscore = 1
				cs_set_user_money(id,cs_get_user_money(id) + get_pcvar_num(g_LFMONEY))
				set_score(id,isHit,hitscore,iHitHP)
			}else
			{
				if(get_pcvar_num(g_LFF))
				{
					emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM )
					hitscore = -1									
					cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LFMONEY))
					set_score(id,isHit,hitscore,iHitHP)
				}
			}
		}else if(iHitTeam != teamid || get_pcvar_num(g_LFF))
		{
			emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM )
			set_user_health(isHit,iHitHP)
			set_pev(iCurrent,LASERMINE_HITING,isHit);
			
			engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},isHit);
			write_byte(get_pcvar_num(g_LDMG))
			write_byte(get_pcvar_num(g_LDMG))
			write_long(DMG_BULLET)
			engfunc(EngFunc_WriteCoord,vOrigin[0])
			engfunc(EngFunc_WriteCoord,vOrigin[1])
			engfunc(EngFunc_WriteCoord,vOrigin[2])
			message_end()
		}
	}else if(equal(szClassName, ENT_CLASS_NAME3))
	{
		new hl;
		hl = pev_user_health(isHit);
		set_user_health(isHit,hl-get_pcvar_num(g_LDMG));
	}
	return PLUGIN_CONTINUE
}

stock pev_user_health(id)
{
	new Float:health
	pev(id,pev_health,health)
	return floatround(health)
}

stock set_user_health(id,health)
{
	health > 0 ? set_pev(id, pev_health, float(health)) : dllfunc(DLLFunc_ClientKill, id);
}

stock get_user_godmode(index) {
	new Float:val
	pev(index, pev_takedamage, val)

	return (val == DAMAGE_NO)
}

stock set_user_frags(index, frags)
{
	set_pev(index, pev_frags, float(frags))

	return 1
}

stock pev_user_frags(index)
{
	new Float:frags;
	pev(index,pev_frags,frags);
	return floatround(frags);
}

set_score(id,target,hitscore,HP){

	new idfrags = pev_user_frags(id) + hitscore// get_user_frags(id) + hitscore	
	set_user_frags(id,idfrags)
	//set_user_frags(id, idfrags)
	//entity_set_float(id, EV_FL_frags, float(idfrags))
	
	new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1
	set_user_frags(target,tarfrags)
	//set_user_frags(target,tarfrags)
	//entity_set_float(target, EV_FL_frags, float(tarfrags))
	
	new idteam = int:cs_get_user_team(id)
	new iddeaths = cs_get_user_deaths(id)


	message_begin(MSG_ALL, g_msgDeathMsg, {0, 0, 0} ,0)
	write_byte(id)
	write_byte(target)
	write_byte(0)
	write_string(ENT_CLASS_NAME)
	message_end()

	message_begin(MSG_ALL, g_msgScoreInfo)
	write_byte(id)
	write_short(idfrags)
	write_short(iddeaths)
	write_short(0)
	write_short(idteam)
	message_end()

	set_msg_block(g_msgDeathMsg, BLOCK_ONCE)

	//entity_set_float(target, EV_FL_health,float(HP))
	set_user_health(target, HP)
	//set_pev(target,pev_health,HP)

}

public BuyLasermine(id)
{	
	if( !CanCheck(id,1) ) return PLUGIN_CONTINUE
	cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LCOST))
	g_havemine[id]++;
	//client_print(id, print_chat, "%s %s",CHATTAG,STR_BOUGHT)
	emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	//ShowAmmo(id)
	return PLUGIN_HANDLED
}

/*ShowAmmo(id)
{ 
    new ammo[51] 
    formatex(ammo, 50, "%s %i/%i",STR_STATE, g_havemine[id],get_pcvar_num(g_LAMMO))

    message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id) 
    write_byte(0) 
    write_string(ammo) 
    message_end() 
    set_hudmessage(0, 0, 255, 0.0, 0.27, 0, 6.0, 12.0)
    show_hudmessage(id, "%s %i/%i",STR_STATE, g_havemine[id],get_pcvar_num(g_LAMMO))
    
}
*/

public showInfo(id)
{
	client_print(id, print_chat, STR_REF)
}

public say_lasermine(id){
	new said[32]
	read_argv(1,said,31);
	if( !get_pcvar_num( g_LENABLE )  ){
//		client_print(id, print_chat, "%s Lasermines are not currently active.",CHATTAG)
		return PLUGIN_CONTINUE
	}
	
	if (equali(said,"/buy lasermine")||equali(said,"/lm")){
		BuyLasermine(id)
	}else if (equali(said, "lasermine") || equali(said, "/lasermine")){
		const SIZE = 1024
		new msg[SIZE+1],len = 0;
		len += formatex(msg[len], SIZE - len, "<html><body>")
		len += formatex(msg[len], SIZE - len, "<p><b>LaserMine</b></p><br/><br/>")
		len += formatex(msg[len], SIZE - len, "<p>You can be setting the mine on the wall.</p><br/>")
		len += formatex(msg[len], SIZE - len, "<p>That laser will give what touched it damage.</p><br/><br/>")
		len += formatex(msg[len], SIZE - len, "<p><b>LaserMine Commands</b></p><br/><br/>")
		len += formatex(msg[len], SIZE - len, "<p><b>Say /buy lasermine</b> or <b>Say /lm</b> //buying lasermine<br/>")
		len += formatex(msg[len], SIZE - len, "<b>buy_lasermine</b> //bind ^"F2^" buy_lasermine : using F2 buying lasermine<br/>")
		len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind mouse3 +setlaser : using mouse3 set lasermine on wall<br/>")
		len += formatex(msg[len], SIZE - len, "</body></html>")
		show_motd(id, msg, "Lasermine Entity help")
		return PLUGIN_CONTINUE
	}
	else if (containi(said, "laser") != -1) {
		//showInfo(id)
		return PLUGIN_CONTINUE
	}
	return PLUGIN_CONTINUE
}

public standing(id) 
{
	if (!g_settinglaser[id])
		return PLUGIN_CONTINUE

	set_pev(id, pev_maxspeed, 1.0)
//	ShowAmmo(id)

	return PLUGIN_CONTINUE
}

public ltm_PostThink(id) 
{
	if (!g_settinglaser[id] && plsetting[id]){
		resetspeed(id)
	}
	else if (g_settinglaser[id] && !plsetting[id]) {
		pev(id, pev_maxspeed,plspeed[id])
		set_pev(id, pev_maxspeed, 1.0)
	}
	plsetting[id] = g_settinglaser[id]
	return FMRES_IGNORED
}

public ltm_PreThink(id)
{
	if (!pev_user_alive(id) || g_settinglaser[id] == true || is_user_bot(id) || get_pcvar_num(g_LCMDMODE) == 1)
		return FMRES_IGNORED;

	if(pev(id, pev_button ) & IN_USE && !(pev(id, pev_oldbuttons ) & IN_USE ))
		//client_print(id,print_chat,"test");
		CreateLaserMine_Progress(id)
	return FMRES_IGNORED;
}

resetspeed(id)
{
	set_pev(id, pev_maxspeed, plspeed[id])
}

public client_putinserver(id){
	g_deployed[id] = 0;
	g_havemine[id] = 0;
	DeleteTask(id);
	return PLUGIN_CONTINUE
}

public client_disconnect(id){
	if(!get_pcvar_num( g_LENABLE ))
		return PLUGIN_CONTINUE
	DeleteTask(id);
	RemoveAllTripmines(id);
	return PLUGIN_CONTINUE
}


public newround(id){
	if(!get_pcvar_num( g_LENABLE ))
		return PLUGIN_CONTINUE
	pev(id, pev_maxspeed,plspeed[id])
	DeleteTask(id);
	RemoveAllTripmines(id);
	delaycount(id);
	SetStartAmmo(id);
	g_havemine[id] = 0
	return PLUGIN_CONTINUE
}

public DeathEvent(){
	if(!get_pcvar_num( g_LENABLE ))
		return PLUGIN_CONTINUE

	new id = read_data(2)
	if(is_user_connected(id)) DeleteTask(id);
	return PLUGIN_CONTINUE
}

public RemoveAllTripmines( i_Owner )
{
	new iEnt = g_MaxPL + 1;
	new clsname[32];
	while( ( iEnt = engfunc( EngFunc_FindEntityByString, iEnt, "classname", ENT_CLASS_NAME ) ) )
	{
		if ( i_Owner )
		{
			if( pev( iEnt, LASERMINE_OWNER ) != i_Owner )
				continue;
			clsname[0] = '^0'
			pev( iEnt, pev_classname, clsname, sizeof(clsname)-1 );
                
			if ( equali( clsname, ENT_CLASS_NAME ) )
			{
				PlaySound( iEnt, STOP_SOUND );
				RemoveEntity( iEnt );
			}
		}
		else
			set_pev( iEnt, pev_flags, FL_KILLME );
	}
	g_deployed[i_Owner]=0;
}

SetStartAmmo(id)
{
	new stammo = get_pcvar_num(g_LSTAMMO);
	if(stammo <= 0) return PLUGIN_CONTINUE;
	g_havemine[id] = (g_havemine[id] <= stammo) ? stammo : g_havemine[id];
	return PLUGIN_CONTINUE;
}

public CutDeploy_onDamage(id)
{
	if(get_user_health(id) < 1)
		DeleteTask(id);
}


DeleteTask(id)
{
	if (task_exists((TASK_PLANT + id)))
	{
		remove_task((TASK_PLANT + id))
	}
	if (task_exists((TASK_RELEASE + id)))
	{
		remove_task((TASK_RELEASE + id))
	}
	g_settinglaser[id] = false
	return PLUGIN_CONTINUE;
}

stock set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
	static Float:RenderColor[3];
	RenderColor[0] = float(r);
	RenderColor[1] = float(g);
	RenderColor[2] = float(b);

	set_pev(entity, pev_renderfx, fx);
	set_pev(entity, pev_rendercolor, RenderColor);
	set_pev(entity, pev_rendermode, render);
	set_pev(entity, pev_renderamt, float(amount));

	return 1
}

// Gets offset data
get_offset_value(id, type)
{
	new key = -1;
	switch(type)
	{
		case OFFSET_TEAM: key = OFFSET_TEAM;
		case OFFSET_MONEY:
		{
#if defined UL_MONEY_SUPPORT
			return cs_get_user_money_ul(id);
#else
			key = OFFSET_MONEY;
#endif
		}
		case OFFSET_DEATH: key = OFFSET_DEATH;
	}
	
	if(key != -1)
	{
		if(is_amd64_server()) key += 25;
		return get_pdata_int(id, key);
	}
	
	return -1;
}

// Sets offset data
set_offset_value(id, type, value)
{
	new key = -1;
	switch(type)
	{
		case OFFSET_TEAM: key = OFFSET_TEAM;
		case OFFSET_MONEY:
		{
#if defined UL_MONEY_SUPPORT
			return cs_set_user_money_ul(id, value);
#else
			key = OFFSET_MONEY;
			
			// Send Money message to update player's HUD
			message_begin(MSG_ONE_UNRELIABLE, g_msgMoney, {0,0,0}, id);
			write_long(value);
			write_byte(1);	// Flash (difference between new and old money)
			message_end();
#endif
		}
		case OFFSET_DEATH: key = OFFSET_DEATH;
	}
	
	if(key != -1)
	{
		if(is_amd64_server()) key += 25;
		set_pdata_int(id, key, value);
	}
	
	return PLUGIN_CONTINUE;
}



public zp_extra_item_selected(player, itemid)
{
	if (itemid == g_itemid_lminas)
	{
		cmd_bind(player)
		BuyLasermine(player)
	}

}
public cmd_bind(id)
{
	//new Lcount
	//Lcount = g_havemine[id]
	if ( get_pcvar_num(g_LCMDMODE) == 1 )
	{
		if ( get_pcvar_num(g_BINDMODE) == 1 )
		{
			client_print(id, print_chat, "%s %s",CHATTAG,STR_BOUGHT)
			client_print(id, print_chat, "[ZP] You have %i Laser Mines", g_havemine[id]+1)
			client_cmd(id,"bind p +setlaser");
			return PLUGIN_HANDLED
		}
		client_print(id, print_chat, "%s %s",CHATTAG,STR_BOUGHT3)
		client_print(id, print_chat, "[ZP] You have %i Laser Mines", g_havemine[id]+1)
		return PLUGIN_HANDLED
	
	}
	if ( get_pcvar_num(g_LCMDMODE) == 0 )
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_BOUGHT2)
		client_print(id, print_chat, "[ZP] You have %i Laser Mines", g_havemine[id]+1)
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public buy_lmines(id)
{
	if ( get_pcvar_num(g_LENABLE) == 0 )
	{
		client_print(id, print_chat, "[ZP] LaserMines plugin is disabled.")
		return PLUGIN_HANDLED
	}

	
	if (!zp_get_user_survivor(id) && !zp_get_user_zombie(id))
	{
		new money = zp_get_user_ammo_packs(id)
		new cost = g_item_lmines
	
		if ( money < cost )
		{
			client_print(id, print_chat, "[ZP] You don't have enough ammo packs to buy a LaserMines. ($%i needed).", g_item_lmines)
			return PLUGIN_CONTINUE
		}
		zp_set_user_ammo_packs(id, money - g_item_lmines)
		cmd_bind(id)
		BuyLasermine(id)
		return PLUGIN_CONTINUE

	}
	
	if ( !zp_get_user_zombie(id) ){	
		client_print(id,print_chat,"[ZP] You can't buy LaserMines because You are Survivor!")
		return PLUGIN_HANDLED
	}
	
	if ( !zp_get_user_survivor(id) ){	
		client_print(id,print_chat,"[ZP] You can't buy LaserMines because You are Zombie!")
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

Last edited by RiseOfZombies; 08-22-2014 at 10:42.
RiseOfZombies is offline
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-23-2014 , 07:05   Re: LaserMines
Reply With Quote #2

help!!!
RiseOfZombies is offline
wicho
Veteran Member
Join Date: Feb 2012
Location: GuateAmala
Old 08-23-2014 , 07:20   Re: LaserMines
Reply With Quote #3

You mean remove when zombie infect human or when the zombie kill the last human?

P.S: and dont make double post read the rules..
wicho is offline
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-23-2014 , 08:41   Re: LaserMines
Reply With Quote #4

When zombie infect human
RiseOfZombies is offline
wicho
Veteran Member
Join Date: Feb 2012
Location: GuateAmala
Old 08-23-2014 , 12:45   Re: LaserMines
Reply With Quote #5

Add this in some part of the code and try:

PHP Code:
public zp_user_infected_post(idinfector)
{
        
RemoveAllTripmines(id)


Last edited by wicho; 08-23-2014 at 12:47.
wicho is offline
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-23-2014 , 14:24   Re: LaserMines
Reply With Quote #6

Works ,but can u make ,that player can buy 1 lasermine per round..?
RiseOfZombies is offline
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-24-2014 , 06:59   Re: LaserMines
Reply With Quote #7

helpp pleaseeee.!
RiseOfZombies is offline
BLacking98
Veteran Member
Join Date: Oct 2012
Location: California
Old 08-24-2014 , 10:06   Re: LaserMines
Reply With Quote #8

I'm pretty sure there's a CVAR somewhere..

#define MAX_MINES 10
__________________
BLacking98 is offline
RiseOfZombies
Member
Join Date: Aug 2014
Old 08-24-2014 , 10:25   Re: LaserMines
Reply With Quote #9

Ok ,can u make that the Owner of sandbags can go trough it...And when Zombie(enemy) destroys sandbags,he earn 5 ammopacks..Thanks.Code:
Code:
#include <amxmodx> 
#include <amxmisc> 
#include <fakemeta> 
#include <hamsandwich> 
#include <engine> 
#include <xs> 
#include <fun> 
#include <zombieplague> 

// The sizes of models 
#define PALLET_MINS Float:{ -27.260000, -22.280001, -22.290001 } 
#define PALLET_MAXS Float:{  27.340000,  26.629999,  29.020000 } 


// from fakemeta util by VEN 
#define fm_find_ent_by_class(%1,%2) engfunc(EngFunc_FindEntityByString, %1, "classname", %2) 
#define fm_remove_entity(%1) engfunc(EngFunc_RemoveEntity, %1) 
// this is mine 
#define fm_drop_to_floor(%1) engfunc(EngFunc_DropToFloor,%1) 

#define fm_get_user_noclip(%1) (pev(%1, pev_movetype) == MOVETYPE_NOCLIP) 

// cvars 
new pnumplugin, remove_nrnd, maxpallets, phealth; 

// num of pallets with bags 
new palletscout = 0; 

new bool:done[33] 

/* Models for pallets with bags . 
  Are available 2 models, will be set a random of them  */ 
new g_models[][] = 
{ 
    "models/pallet_with_bags2.mdl", 
    "models/pallet_with_bags.mdl" 
} 

new stuck[33] 
new g_bolsas[33]; 
new cvar[3] 

new const Float:size[][3] = { 
    {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {-1.0, 1.0, 1.0}, {1.0, 1.0, 1.0}, {1.0, -1.0, 1.0}, {1.0, 1.0, -1.0}, {-1.0, -1.0, 1.0}, {1.0, -1.0, -1.0}, {-1.0, 1.0, -1.0}, {-1.0, -1.0, -1.0}, 
    {0.0, 0.0, 2.0}, {0.0, 0.0, -2.0}, {0.0, 2.0, 0.0}, {0.0, -2.0, 0.0}, {2.0, 0.0, 0.0}, {-2.0, 0.0, 0.0}, {-2.0, 2.0, 2.0}, {2.0, 2.0, 2.0}, {2.0, -2.0, 2.0}, {2.0, 2.0, -2.0}, {-2.0, -2.0, 2.0}, {2.0, -2.0, -2.0}, {-2.0, 2.0, -2.0}, {-2.0, -2.0, -2.0}, 
    {0.0, 0.0, 3.0}, {0.0, 0.0, -3.0}, {0.0, 3.0, 0.0}, {0.0, -3.0, 0.0}, {3.0, 0.0, 0.0}, {-3.0, 0.0, 0.0}, {-3.0, 3.0, 3.0}, {3.0, 3.0, 3.0}, {3.0, -3.0, 3.0}, {3.0, 3.0, -3.0}, {-3.0, -3.0, 3.0}, {3.0, -3.0, -3.0}, {-3.0, 3.0, -3.0}, {-3.0, -3.0, -3.0}, 
    {0.0, 0.0, 4.0}, {0.0, 0.0, -4.0}, {0.0, 4.0, 0.0}, {0.0, -4.0, 0.0}, {4.0, 0.0, 0.0}, {-4.0, 0.0, 0.0}, {-4.0, 4.0, 4.0}, {4.0, 4.0, 4.0}, {4.0, -4.0, 4.0}, {4.0, 4.0, -4.0}, {-4.0, -4.0, 4.0}, {4.0, -4.0, -4.0}, {-4.0, 4.0, -4.0}, {-4.0, -4.0, -4.0}, 
    {0.0, 0.0, 5.0}, {0.0, 0.0, -5.0}, {0.0, 5.0, 0.0}, {0.0, -5.0, 0.0}, {5.0, 0.0, 0.0}, {-5.0, 0.0, 0.0}, {-5.0, 5.0, 5.0}, {5.0, 5.0, 5.0}, {5.0, -5.0, 5.0}, {5.0, 5.0, -5.0}, {-5.0, -5.0, 5.0}, {5.0, -5.0, -5.0}, {-5.0, 5.0, -5.0}, {-5.0, -5.0, -5.0} 
} 

new const g_item_name[] = { "Sandbags" } 
const g_item_bolsas = 30 
new g_itemid_bolsas 
new ZPSTUCK 

/************************************************************* 
************************* AMXX PLUGIN ************************* 
**************************************************************/ 


public plugin_init()  
{ 
    /* Register the plugin */ 
     
    register_plugin("[ZP] Extra: SandBags", "1.1", "LARP") 
    set_task(0.1,"checkstuck",0,"",0,"b") 
    g_itemid_bolsas = zp_register_extra_item(g_item_name, g_item_bolsas, ZP_TEAM_HUMAN) 
    /* Register the cvars */ 
    ZPSTUCK = register_cvar("zp_pb_stuck","1") 
    pnumplugin = register_cvar("zp_pb_enable","1"); // 1 = ON ; 0 = OFF 
    remove_nrnd = register_cvar("zp_pb_remround","1"); 
    maxpallets = register_cvar("zp_pb_limit","200"); // max number of pallets with bags 
    phealth = register_cvar("zp_pb_health","3000"); // set the health to a pallet with bags 
     
    /* Game Events */ 
    register_event("HLTV","event_newround", "a","1=0", "2=0"); // it's called every on new round 
     
    /* This is for menuz: */ 
    register_menucmd(register_menuid("\ySand Bags:"), 1023, "menu_command" ); 
    register_clcmd("say /sandbags","show_the_menu"); 
    register_clcmd("say_team /sandbags","show_the_menu"); 
   
    register_clcmd("say /sb","gbuy"); 
    register_clcmd("say_team /sb","gbuy");
      
    //RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage");  
    //cvar[0] = register_cvar("zp_autounstuck","1") 
    cvar[1] = register_cvar("zp_pb_stuckeffects","1") 
    cvar[2] = register_cvar("zp_pb_stuckwait","7") 
     
     
    RegisterHam(Ham_TakeDamage,"func_wall","fw_TakeDamage"); 

     
} 
//Here is what I am tryin to make just owner and zombie to be able to destroy sandbags 
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type) 
{ 
    //Victim is not lasermine. 
    new sz_classname[32] 
    entity_get_string( victim , EV_SZ_classname , sz_classname, 31 ) 
    if( !equali(sz_classname,"amxx_pallets") ) 
        return HAM_IGNORED; 
     
    //Attacker is zombie 
    if( zp_get_user_zombie( attacker ) )  
        return HAM_IGNORED; 
     
    //Block Damage 
    return HAM_SUPERCEDE; 
} 


public plugin_precache() 
{ 
    for(new i;i < sizeof g_models;i++) 
        engfunc(EngFunc_PrecacheModel,g_models[i]); 
} 

public show_the_menu(id,level,cid) 
{ 
    // check if user doesen't have admin  
    /*if( ! cmd_access( id,level, cid , 0 )) 
        return PLUGIN_HANDLED; 
    */ 
     
    // check if the plugin cvar is turned off 
    if( ! get_pcvar_num( pnumplugin ) ) 
        return PLUGIN_HANDLED; 
         
         
    // check if user isn't alive 
    if( ! is_user_alive( id ) ) 
    { 
        client_print( id, print_chat, "" ); //msg muerto 
        return PLUGIN_HANDLED; 
    } 
             
    if ( !zp_get_user_zombie(id) ) 
    {         
        new szMenuBody[256]; 
        new keys; 
         
        new nLen = format( szMenuBody, 255, "\ySand Bags:^n" ); 
        nLen += format( szMenuBody[nLen], 255-nLen, "^n\w1. Place a Sandbags" ); 
        //nLen += format( szMenuBody[nLen], 255-nLen, "^n\w2. Remove a pallet with bags" ); 
        nLen += format( szMenuBody[nLen], 255-nLen, "^n^n\w0. Exit" ); 

        keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<9) 

        show_menu( id, keys, szMenuBody, -1 ); 

        // depends what you want, if is continue will appear on chat what the admin sayd 
        return PLUGIN_HANDLED; 
    } 
    client_print(id, print_chat, "[ZP] The zombies can not use this command!") 
    return PLUGIN_HANDLED; 
} 


public menu_command(id,key,level,cid) 
{ 
     
    switch( key ) 
    { 
        // place a pallet with bags 
        case 0:  
        { 
            if ( !zp_get_user_zombie(id) ) 
            { 
                new money = g_bolsas[id] 
                if ( money < 1 ) 
                { 
                    client_print(id, print_chat, "[ZP] You do not have to place sandbags!") 
                    return PLUGIN_CONTINUE 
                } 
                g_bolsas[id]-= 1 
                place_palletwbags(id); 
                show_the_menu(id,level,cid); 
                return PLUGIN_CONTINUE     
            } 
            client_print(id, print_chat, "[ZP] The zombies can not use this!!") 
            return PLUGIN_CONTINUE     
        } 
         
        // remove a pallet with bags 
        /*case 1: 
        { 
            if ( !zp_get_user_zombie(id) ) 
            { 
                new ent, body, class[32]; 
                get_user_aiming(id, ent, body); 
                if (pev_valid(ent))  
                { 
                    pev(ent, pev_classname, class, 31); 
                     
                    if (equal(class, "amxx_pallets"))  
                    { 
                        g_bolsas[id]+= 1 
                        fm_remove_entity(ent); 
                    } 
                     
                    else 
                        client_print(id, print_chat, "[ZP] You are not aiming at a pallet with bags"); 
                } 
                else 
                    client_print(id, print_chat, "[ZP] You are not aiming at a valid entity !"); 
                     
                show_the_menu(id,level,cid); 
            } 
        } 
        */ 
         
        // remove all pallets with bags 
        /*case 2: 
        { 
            g_bolsas[id]= 0 
            remove_allpalletswbags(); 
            client_print(id,print_chat,"[AMXX] You removed all pallets with bags !"); 
            show_the_menu(id,level,cid); 
        } 
            */ 
             
    } 
     
    return PLUGIN_HANDLED; 
} 



public place_palletwbags(id) 
{ 
     
    if( palletscout == get_pcvar_num(maxpallets) ) 
    { 
        client_print(id,print_chat,"[ZP] For security reasons only allow %d Sandbags on the server!",get_pcvar_num 

(maxpallets)); 
        return PLUGIN_HANDLED; 
    } 
     
    // create a new entity  
    new ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "func_wall")); 
     
     
    // set a name to the entity 
    set_pev(ent,pev_classname,"amxx_pallets"); 

     
    // set model         
    engfunc(EngFunc_SetModel,ent,g_models[random(sizeof g_models)]); 
     
    // register a new var. for origin 
    static Float:xorigin[3]; 
    get_user_hitpoint(id,xorigin); 
     
     
    // check if user is aiming at the air  
    if(engfunc(EngFunc_PointContents,xorigin) == CONTENTS_SKY) 
    { 
        client_print(id,print_chat,"[ZP] You can not put sandbags in the sky!"); 
        return PLUGIN_HANDLED; 
    } 
     
     
    // set sizes 
    static Float:p_mins[3], Float:p_maxs[3]; 
    p_mins = PALLET_MINS; 
    p_maxs = PALLET_MAXS; 
    engfunc(EngFunc_SetSize, ent, p_mins, p_maxs); 
    set_pev(ent, pev_mins, p_mins); 
    set_pev(ent, pev_maxs, p_maxs ); 
    set_pev(ent, pev_absmin, p_mins); 
    set_pev(ent, pev_absmax, p_maxs ); 

     
    // set the rock of origin where is user placed 
    engfunc(EngFunc_SetOrigin, ent, xorigin); 
     
     
    // make the rock solid 
    set_pev(ent,pev_solid,SOLID_BBOX); // touch on edge, block 
     
    // set the movetype 
    set_pev(ent,pev_movetype,MOVETYPE_FLY); // no gravity, but still collides with stuff 
     
    // now the damage stuff, to set to take it or no 
    // if you set the cvar "pallets_wbags_health" 0, you can't destroy a pallet with bags 
    // else, if you want to make it destroyable, just set the health > 0 and will be 
    // destroyable. 
    new Float:p_cvar_health = get_pcvar_float(phealth); 
    switch(p_cvar_health) 
    { 
        case 0.0 : 
        { 
            set_pev(ent,pev_takedamage,DAMAGE_NO); 
        } 
         
        default : 
        { 
            set_pev(ent,pev_health,p_cvar_health); 
            set_pev(ent,pev_takedamage,DAMAGE_YES); 
        } 
    } 
     
             
    static Float:rvec[3]; 
    pev(id,pev_v_angle,rvec); 
     
    rvec[0] = 0.0; 
     
    set_pev(ent,pev_angles,rvec); 
     
    // drop entity to floor 
    fm_drop_to_floor(ent); 
     
    // num .. 
    palletscout++; 
     
    // confirm message 
    client_print(id, print_chat, "[ZP] You have placed a Sandbags, you have %i remaining", g_bolsas[id]) 
    
    return PLUGIN_HANDLED; 
} 
     
/* ==================================================== 
get_user_hitpoin stock . Was maked by P34nut, and is  
like get_user_aiming but is with floats and better :o 
====================================================*/     
stock get_user_hitpoint(id, Float:hOrigin[3])  
{ 
    if ( ! is_user_alive( id )) 
        return 0; 
     
    new Float:fOrigin[3], Float:fvAngle[3], Float:fvOffset[3], Float:fvOrigin[3], Float:feOrigin[3]; 
    new Float:fTemp[3]; 
     
    pev(id, pev_origin, fOrigin); 
    pev(id, pev_v_angle, fvAngle); 
    pev(id, pev_view_ofs, fvOffset); 
     
    xs_vec_add(fOrigin, fvOffset, fvOrigin); 
     
    engfunc(EngFunc_AngleVectors, fvAngle, feOrigin, fTemp, fTemp); 
     
    xs_vec_mul_scalar(feOrigin, 9999.9, feOrigin); 
    xs_vec_add(fvOrigin, feOrigin, feOrigin); 
     
    engfunc(EngFunc_TraceLine, fvOrigin, feOrigin, 0, id); 
    global_get(glb_trace_endpos, hOrigin); 
     
    return 1; 
}  


/* ==================================================== 
This is called on every round, at start up, 
with HLTV logevent. So if the "pallets_wbags_nroundrem" 
cvar is set to 1, all placed pallets with bugs will be 
removed. 
====================================================*/ 
public event_newround() 
{ 
  for ( new id; id <= get_maxplayers(); id++) 
{ 
    if( get_pcvar_num ( remove_nrnd ) == 1) 
        remove_allpalletswbags(); 

    done[id] = false 
    g_bolsas[id] = 0  
  } 
         
}  


/* ==================================================== 
This is a stock to help for remove all pallets with 
bags placed . Is called on new round if the cvar 
"pallets_wbags_nroundrem" is set 1. 
====================================================*/ 
stock remove_allpalletswbags() 
{ 
    new pallets = -1; 
    while((pallets = fm_find_ent_by_class(pallets, "amxx_pallets"))) 
        fm_remove_entity(pallets); 
         
    palletscout = 0; 
} 

public checkstuck() { 
    if ( get_pcvar_num(ZPSTUCK) == 1 ) 
    { 
        static players[32], pnum, player 
        get_players(players, pnum) 
        static Float:origin[3] 
        static Float:mins[3], hull 
        static Float:vec[3] 
        static o,i 
        for(i=0; i<pnum; i++){ 
            player = players[i] 
            if (is_user_connected(player) && is_user_alive(player)) { 
                pev(player, pev_origin, origin) 
                hull = pev(player, pev_flags) & FL_DUCKING ? HULL_HEAD : HULL_HUMAN 
                if (!is_hull_vacant(origin, hull,player) && !fm_get_user_noclip(player) && !(pev(player,pev_solid) &  

SOLID_NOT)) { 
                    ++stuck[player] 
                    if(stuck[player] >= get_pcvar_num(cvar[2])) { 
                        pev(player, pev_mins, mins) 
                        vec[2] = origin[2] 
                        for (o=0; o < sizeof size; ++o) { 
                            vec[0] = origin[0] - mins[0] * size[o][0] 
                            vec[1] = origin[1] - mins[1] * size[o][1] 
                            vec[2] = origin[2] - mins[2] * size[o][2] 
                            if (is_hull_vacant(vec, hull,player)) { 
                                engfunc(EngFunc_SetOrigin, player, vec) 
                                effects(player) 
                                set_pev(player,pev_velocity,{0.0,0.0,0.0}) 
                                o = sizeof size 
                            } 
                        } 
                    } 
                } 
                else 
                { 
                    stuck[player] = 0 
                } 
            } 
        } 
     
    } 
     
} 

stock bool:is_hull_vacant(const Float:origin[3], hull,id) { 
    static tr 
    engfunc(EngFunc_TraceHull, origin, origin, 0, hull, id, tr) 
    if (!get_tr2(tr, TR_StartSolid) || !get_tr2(tr, TR_AllSolid)) //get_tr2(tr, TR_InOpen)) 
        return true 
     
    return false 
} 

public effects(id) { 
    if(get_pcvar_num(cvar[1])) { 
        set_hudmessage(255,150,50, -1.0, 0.65, 0, 6.0, 1.5,0.1,0.7) // HUDMESSAGE 
        show_hudmessage(id,"Automatic Unstuck!") // HUDMESSAGE 
        message_begin(MSG_ONE_UNRELIABLE,105,{0,0,0},id )       
        write_short(1<<10)   // fade lasts this long duration 
        write_short(1<<10)   // fade lasts this long hold time 
        write_short(1<<1)   // fade type (in / out) 
        write_byte(20)            // fade red 
        write_byte(255)    // fade green 
        write_byte(255)        // fade blue 
        write_byte(255)    // fade alpha 
        message_end() 
        client_cmd(id,"spk fvox/blip.wav") 
    } 
} 

public zp_extra_item_selected(id, itemid) 
{ 
  if (itemid == g_itemid_bolsas) 
  {  
    if(!done[id]) 
    { 
    g_bolsas[id]+= 2 
    set_task(0.3,"show_the_menu",id) 
    client_print(id, print_chat, "[ZP] You have %i sandbags, to use type 'say / sb'", g_bolsas[id]) 
    done[id] = true 
    
    return PLUGIN_CONTINUE

    }

    
    else { 
   
    client_print(id, print_chat, "Max Sandbags reached !!!") 
    return PLUGIN_HANDLED
    } 
  
  } 
  return PLUGIN_CONTINUE 
}  
public gbuy(id)
{
       if ( zp_get_user_zombie(id) || !is_user_alive(id) ){    
       return PLUGIN_HANDLED
       }

       if (zp_get_user_ammo_packs(id) < g_item_bolsas) {
       client_print(id, print_chat, "Sorry... you don't have enough ammo pack.")    
       return PLUGIN_HANDLED
       }

       if(!zp_core_is_zombie(id) && is_user_alive(id))
       {
       if(!done[id]) 
       { 
       g_bolsas[id]+= 2 
       set_task(0.3,"show_the_menu",id) 
       client_print(id, print_chat, "[ZP] You have %i sandbags, to use type 'say / sb'", g_bolsas[id]) 
       done[id] = true 
       zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - g_item_bolsas)
       return PLUGIN_CONTINUE
       }

    
       else { 
     
       client_print(id, print_chat, "Max Sandbags reached !!!") 
       return PLUGIN_HANDLED
       } 
 
       }

       return PLUGIN_CONTINUE   

}
RiseOfZombies is offline
BLacking98
Veteran Member
Join Date: Oct 2012
Location: California
Old 09-07-2014 , 09:34   Re: LaserMines
Reply With Quote #10

Start a new thread.
__________________
BLacking98 is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 21:10.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode