HTML-Kodu:
/* Plugin generated by AMXX-Studio */

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <xs>
#include <cstrike>
//#include <fakemeta_util>
#define PLUGIN "Laser/TripMine Entity"
#define VERSION "2.0"
#define AUTHOR "SandStriker"

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

#define LASERMINE_INT_TEAM	pev_iuser1 //EV_INT_iuser1
#define LASERMINE_STEP		pev_iuser2
#define LASERMINE_OWNER		pev_iuser3 //EV_INT_iuser3
#define LASERMINE_POWERUP	pev_fuser1
#define LASERMINE_BEAMTHINK	pev_fuser2

#define LASERMINE_BEAMENDPOINT	pev_vuser1
//#define MAX_MINES		10
#define MODE_LASERMINE		0

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[]	= "weapons/mine_activate.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[] 		= "[LaserMines]",
	//STR_MINEDETNATED[] 	= "Your mine has detonated.",
	//STR_MINEDETNATED2[]	= "detonated your mine.",
	STR_NOTACTIVE[] 	= "Lasermines are not currently active.",
	STR_DONTHAVEMINE[]	= "You don't have lasermine.",
	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 must plant the lasermine on a wall!",
	STR_REF[]		= "Refer to a lasermine rule with this server. say 'lasermine'",
	STR_CBT[]		= "Your team can't buying lasermine!",
	STR_HAVEMAX[]		= "You have a maximum lasermine.",
	STR_NOMONEY[]		= "You don't have enough money to buy a lasermine! ($",
	STR_NEEDED[]		= "needed)",
	STR_DELAY[]		= "You can buying and deploying lasermine in after",
	STR_SECONDS[]		= "seconds.",
	STR_BOUGHT[]		= "You have successfully bought a lasermine.",
	STR_STATE[]		= "LaserMines Ammo:";

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_LDELAY,/*g_LTHINK,*/g_LVISIBLE;

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

public plugin_init() {
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	// Add your code here...
	register_clcmd("+setlaser","CreateLaserMine_Progress");
   	register_clcmd("-setlaser","StopCreateLaserMine");
	register_clcmd("say","say_lasermine");
	register_clcmd("buy_lasermine","BuyLasermine");
	g_LENABLE = register_cvar("amx_ltm","1")

	g_LMODE = register_cvar("amx_ltm_mode","0")
	g_LAMMO = register_cvar("amx_ltm_ammo","2")
	g_LDMG = register_cvar("amx_ltm_dmg","10000")
	g_LCOST = register_cvar("amx_ltm_cost","2500")
	g_LFMONEY = register_cvar("amx_ltm_fragmoney","300")
	g_LHEALTH = register_cvar("amx_ltm_health","500")
	g_LTMAX = register_cvar("amx_ltm_teammax","10")
	g_LRADIUS = register_cvar("amx_ltm_radius","200.0")
	g_LRDMG = register_cvar("amx_ltm_rdmg","1000")
	g_LFF = register_cvar("amx_ltm_ff","0")
	g_LCBT = register_cvar("amx_ltm_cbt","ALL")
	g_LDELAY = register_cvar("amx_ltm_delay","15")
	//g_LTHINK = register_cvar("amx_ltm_think","0.01")
	g_LVISIBLE = register_cvar("amx_ltm_line","1")
	
	register_event("DeathMsg", "DeathEvent", "a")
 	register_event("CurWeapon", "standing", "be", "1=1")
	register_event("ResetHUD", "delaycount", "a")
	register_event("ResetHUD", "newround", "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")

	// -- Forward.
	register_forward( FM_Think, "ltm_Think" );
	register_forward( FM_PlayerPostThink, "ltm_PostThink" );
}

public plugin_precache() 
{
	precache_sound(ENT_SOUND1);
	precache_sound(ENT_SOUND2);
	precache_sound(ENT_SOUND3);
	precache_sound(ENT_SOUND4);
	precache_sound(ENT_SOUND5);
	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();
}

public delaycount()
{
	g_dcount = floatround(get_gametime())
}

bool:CheckTime()
{
	g_nowtime = floatround(get_gametime()) - g_dcount
	if(g_nowtime >= get_pcvar_num(g_LDELAY))
		return true
	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();


	new PID[1];
	PID[0] = id;
	set_task(1.2, "Spawn", (TASK_PLANT + id), PID, 1);

	return PLUGIN_HANDLED;
}

public StopCreateLaserMine(id)
{
	if (task_exists((TASK_PLANT + id)))
	{
		remove_task((TASK_PLANT + id));
	}
	g_settinglaser[id] = false

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

	return PLUGIN_HANDLED;
}

public Spawn( ids[] )
{
	new id = ids[0];
	// motor
	new i_Ent = engfunc(EngFunc_CreateNamedEntity,g_EntMine);
	if(!i_Ent) {
		client_print(id,print_chat,"[Laesrmine Debug] 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_pev(i_Ent,pev_health, float(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:{ -8.0, -8.0, -8.0 }, Float:{ 8.0, 8.0, 8.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_INT_TEAM,int:cs_get_user_team(id));

	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]--;
	g_settinglaser[id] = false
	ShowAmmo(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:CreateCheck( id )
{
	if( !get_pcvar_num( g_LENABLE ) )
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_NOTACTIVE)
		return false
	}
	if(g_settinglaser[id] || task_exists((TASK_PLANT + id))) return false
	if(!is_user_alive(id)) return false
	if(!CheckTime()){
		client_print(id,print_chat, "%s %s %d %s",CHATTAG,STR_DELAY,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS)
		return false
	}
	if(g_havemine[id] <= 0){
		client_print(id, print_chat, "%s %s",CHATTAG,STR_DONTHAVEMINE)
		return false
	}
	
	if (!CheckCanTeam(id))
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_CANTDEPLOY)	
		return false
	}
	if (g_deployed[id] >= get_pcvar_num(g_LAMMO))  //unhandled error
	{
		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)
	g_settinglaser[id] = false
	// -- Did not touched something. (not solid)
	return false;
}

public ltm_Think( i_Ent )
{
	if ( !pev_valid( i_Ent ) )
		return FMRES_IGNORED;
	new EntityName[sizeof(ENT_CLASS_NAME)+1];
	static const size = sizeof(ENT_CLASS_NAME);
	pev( i_Ent, pev_classname, EntityName, size);
	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 );
			}

			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.
				pev( iHit, pev_classname, EntityName, size );

				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
						set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK );
                        
					set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) );
				}
			}
                
			// -- Tripmine is still there.
			if ( pev_valid( i_Ent ) )
			{
				static Float:fHealth;
				pev( i_Ent, pev_health, fHealth );

				if( fHealth < 0 )
				{
					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) && pev(i_Ent, LASERMINE_STEP) != EXPLOSE_THINK)
				{
					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_num(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_INT_TEAM);
	switch(teamid){
		case 1:{
			tcolor[0] = 255
			tcolor[1] = 0
			tcolor[2] = 0
		}
		case 2:{
			tcolor[0] = 0
			tcolor[1] = 0
			tcolor[2] = 255
		}
	}
	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(11) //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(255)
	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_INT_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);
	Player = engfunc(EngFunc_FindEntityInSphere,Player,vOrigin,Radius);
	while(Player != 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:cs_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
}

CreateExplosion(iCurrent)
{
	
	new Float:vOrigin[3]
	pev(iCurrent,pev_origin,vOrigin)
	//entity_get_vector(iCurrent, EV_VEC_origin, vOrigin)

	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(99) //99 = KillBeam
	write_short(iCurrent)
	message_end()

	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(3)
	engfunc(EngFunc_WriteCoord,vOrigin[0])
	engfunc(EngFunc_WriteCoord,vOrigin[1])
	engfunc(EngFunc_WriteCoord,vOrigin[2])
	write_short(boom)
	write_byte(50)
	write_byte(15)
	write_byte(0)
	message_end()
	/*
	if (iHit == -1)
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_MINEDETNATED)
	} else 
	{
		szNetName[0] = '^0'
		engfunc(EngFunc_AllocString,iHit,szNetName)
		//entity_get_string(iHit, EV_SZ_netname, szNetName, 32)
		client_print(id, print_chat, "%s %s %s",CHATTAG,szNetName,STR_MINEDETNATED2)
	}
	*/
}

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

	//new isHit = fm_trace_line(iCurrent, vOrigin, vEnd, vTrace)
	new teamid = pev(iCurrent, LASERMINE_INT_TEAM)

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

	if(isHit < 0 ) return PLUGIN_CONTINUE
	
	szClassName[0] = '^0'
	pev(isHit,pev_classname,szClassName,32)
	
	if(equal(szClassName, "player"))
	{
		Alive = is_user_alive(isHit)
		God = get_user_godmode(isHit)
		if(!Alive || God) return PLUGIN_CONTINUE
			 
		iHitTeam = int:cs_get_user_team(isHit)
		//iHitHP = entity_get_float(isHit,EV_FL_health) - float(LASER_HIT_DMG)
		iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG)
		id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32]
		if( get_pcvar_num(g_LMODE) == MODE_LASERMINE)
		{
			if(iHitHP <= 0)
			{
				if(iHitTeam != teamid)
				{
					hitscore = 1
					cs_set_user_money(id,cs_get_user_money(id) + get_pcvar_num(g_LFMONEY))
					//set_user_health(iHit, 0)	
					//entity_set_float(iHit, EV_FL_health,0.0)
					emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM )
					set_score(id,isHit,hitscore,iHitHP)
					//entity_get_string(iHit, EV_SZ_netname, szNetName, 32)
					//client_print(id, print_chat, "[LaserMines] %s killed your mine.",szNetName)
				}else
				{
					if(get_pcvar_num(g_LFF))
					{
						hitscore = -1									
						cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LFMONEY))
						emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM )
						set_score(id,isHit,hitscore,iHitHP)
						//set_user_health(iHit, 0)
						//entity_set_float(iHit, EV_FL_health, 0.0)
						//entity_get_string(iHit, EV_SZ_netname, szNetName, 32)
						//client_print(id, print_chat, "[LaserMines] %s killed your mine.",szNetName)
					}
				}
			}else if(iHitTeam != teamid || get_pcvar_num(g_LFF))
			{
				//entity_set_float(isHit,EV_FL_health,iHitHP)
				//set_user_health(isHit, iHitHP)
				set_user_health(isHit,iHitHP)
				message_begin(MSG_ONE_UNRELIABLE, g_msgDamage, {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
		{
			CreateExplosion(iCurrent)
			CreateDamage(iCurrent,get_pcvar_num(g_LRDMG),get_pcvar_float(g_LRADIUS))
			RemoveEntity(iCurrent);
		}
	}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( !get_pcvar_num( g_LENABLE )  ){
		client_print(id, print_chat, "%s %s",CHATTAG,STR_NOTACTIVE)
		return PLUGIN_CONTINUE
	}
	if (!CheckCanTeam(id))
	{
		client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT)	
		return PLUGIN_HANDLED
	}
	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 PLUGIN_HANDLED
	}
	if (g_havemine[id] >= get_pcvar_num(g_LAMMO)){
		client_print(id, print_chat, "%s %s",CHATTAG,STR_HAVEMAX)	
		return PLUGIN_HANDLED
	}
	if(!CheckTime())
	{
		client_print(id,print_chat, "%s %s %d %s",CHATTAG,STR_DELAY,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS)
		return PLUGIN_HANDLED
	}
	cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LCOST))
	g_havemine[id]++;
	emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	client_print(id, print_chat, "%s %s",CHATTAG,STR_BOUGHT)
	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() 
} 

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
}

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

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

public client_disconnect(id){
	if(!get_pcvar_num( g_LENABLE ))
		return PLUGIN_CONTINUE
	g_settinglaser[id] = false
	RemoveAllTripmines(id);
	return PLUGIN_CONTINUE
}


public newround(id){
	if(!get_pcvar_num( g_LENABLE ))
		return PLUGIN_CONTINUE
	pev(id, pev_maxspeed,plspeed[id])
	g_settinglaser[id] = false
	RemoveAllTripmines(id);
	return PLUGIN_CONTINUE
}

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

	new id = read_data(2)
	if (task_exists(TASK_PLANT+id))
		remove_task(TASK_PLANT+id)
	g_settinglaser[id] = false
	return PLUGIN_CONTINUE
}

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;
}


---------- Alttaki Mesaj Zamani 09:13 ---------- Önceki Mesaj Zamani 09:12 ----------

Buda cfg dosyası

HTML-Kodu:
//lasermine ON/OFF (1 / 0)
amx_ltm "1"

//lasermine access level (0 is all, 1 is admin only)
amx_ltm_acs "0"

//lasermine mode (0 is killing laser, 1 is tripmine)
amx_ltm_mode "0"

//max have ammo and max deploy count.
amx_ltm_ammo "2"

//laser hit damage.
amx_ltm_dmg "1000"

//buying lasermine cost.
amx_ltm_cost "2500"

//kill enemy +money
amx_ltm_fragmoney "300"

//lasermines health. over 1000 is very hard mine :)
amx_ltm_health "500"

//max team deploy count.
amx_ltm_teammax "10"

//lasermine explode radius. ( it's float value)
amx_ltm_radius "320.0"

//lasermine explode damage. ( on center )
amx_ltm_rdmg "100"

//lasermine friendly fire.
amx_ltm_ff "0"

//lasermine can buying and deploying team.( ALL, T, CT )
amx_ltm_cbt "ALL"

//can say cmd buying. 0 is off, 1 is on . (/buy lasermine or /lm)
amx_ltm_buymode "1"

//lasermine round start deploying delay.
amx_ltm_delay "15"

//lasermine visible mode of laserline (0 is invisible, 1 is visible)
amx_ltm_line "1"

//glowing lasermine. (color is laser line color 0 is off, 1 is on )
amx_ltm_glow "0"

//laser line brightness.
amx_ltm_bright "255"

//laser line color mode. ( 0 is team color, 1 is green )
amx_ltm_color "0"

//laser hit damage mode. (0 is frame dmg, 1 is once dmg, 2 is seconds dmg)
amx_ltm_ldmgmode "0"

//seconds dmg. (dmg mode 2 only, damage / seconds default 1 sec)
amx_ltm_ldmgseconds "1"

//round start have ammo.
amx_ltm_startammo "1"

//command mode. (0 is +USE key, 1 is bind, 2 is each)
amx_ltm_cmdmode "1"

//Lasermine Configuration File
echo Executing Lasermine Configuration File