Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
Zombie Mod

Edycja laserminy.

zombie mod

  • Zamknięty Temat jest zamknięty
1 odpowiedź w tym temacie

#1 lewyb

    Życzliwy

  • Użytkownik

Reputacja: 0
Nowy

  • Postów:25
  • Imię:Pan J
Offline

Napisano 05.08.2021 17:15

Witam bardzo serdecznie

 

Potrzebowal bym edycji tej laserminy.

Chce aby po najechaniu na laser mine pokazywalo sie info w postaci HP danej laserminy.

 

Oraz dodanie opcji gdzie po zniszczeniu laserminy gracz otrzymuje nagrode w postaci Exp'a oraz AP

 

Kod LM'a:

/* Plugin generated by AMXX-Studio */

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

#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! //////////////////////
const g_item_lmines = 10
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_newtripmine.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 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,g_NEMROUND;
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("ML_LASERMINE", 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","1000"); 		//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","22");
	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");
	g_NEMROUND	= register_cvar("zp_ltm_nemround","0");
	
	/******************** 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");
	
	register_dictionary("zombie_plague.txt")
}

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))
	{
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_ZOMBIE" )
		return false;
	}*/
	
	if (!zp_has_round_started())
	{
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_ZOMBIE" )
		return false;
	}
	
	
	if (!zp_get_user_zombie(id))
	{
		
		if(get_pcvar_num(g_LCMDMODE) != 0)
		CreateLaserMine_Progress(id);
		return PLUGIN_HANDLED;
	}
	//ColorChat(id,GREEN,"[ZP]^x01 Zombie nie moga uzywac tej komendy!");
	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)
	{
		ColorChat(id,GREEN,"[ZP]^x01 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);
	ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_PLANTED", 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 ) )
	{
		ColorChat(id,GREEN,"[ZP]^x01 Lasermines are not currently active.");
		return false;
	}
	if( get_pcvar_num(g_LACCESS) != 0)
		if(!(get_user_flags(id) & ADMIN_IMMUNITY))
		{
			ColorChat(id,GREEN,"[ZP]^x01 You have no access to this command.");
			return false;
		}
	if(!pev_user_alive(id)) return false;
	if (!CheckCanTeam(id))
	{
		ColorChat(id,GREEN,"[ZP]^x01 Your Zombie! Can't buy and deploying lasermine!");
		return false;
	}
	if( mode == 0)
	{
		if(g_havemine[id] <= 0)
		{
			ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_NOT" );
			return false;
		}
	}
	if (mode == 1)
	{
		if (get_pcvar_num(g_LBUYMODE) == 0)
		{
			ColorChat(id,GREEN,"[ZP]^x01 Can't buying this server.");
			return false;
		}
		if (g_havemine[id] >= get_pcvar_num(g_LAMMO))
		{
			ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_END" )
			return false;
		}
		if (cs_get_user_money(id) < get_pcvar_num(g_LCOST))
		{
			ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_AP" )
			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))
	{
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_END" )
		return false;
	}
	if(zp_is_nemesis_round() && get_pcvar_num(g_NEMROUND))
	{
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_NEMESIS" )
		return false;
	}
	
	//client_print(id,print_chat,"[Lasermine] your team deployed %d",TeamDeployedCount(id))
	if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX))
	{
		ColorChat(id,GREEN,"[ZP]^x01 Too many ppl on your team...");
		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;
	}

	ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_WALL" );
	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 = 0.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
	
	cmd_bind(id)
	zp_set_user_ammo_packs(id, zp_get_user_ammo_packs(id) - g_item_lmines)
	g_havemine[id]++;
	emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	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)
{
	ColorChat(id,GREEN,"[ZP]^x01 Refer to a lasermine rule with this server. say 'lasermine'")
}

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(id, itemid)
{
	if (itemid == g_itemid_lminas)
	{
		if( !CanCheck(id,1) ) return PLUGIN_CONTINUE
		cmd_bind(id)
		g_havemine[id]++;
		emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE;
}

public cmd_bind(id)
{
	//new Lcount
	//Lcount = g_havemine[id]
	if ( get_pcvar_num(g_LCMDMODE) == 1 )
	{
		if ( get_pcvar_num(g_BINDMODE) == 1 )
		{
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_READY" )
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_HAVE", g_havemine[id]+1)
		client_cmd(id, "bind ^"p^" ^"+setlaser^"")
		return PLUGIN_HANDLED
		}
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_READY" )
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_HAVE", g_havemine[id]+1)
		return PLUGIN_HANDLED
	
	}
	if ( get_pcvar_num(g_LCMDMODE) == 0 )
	{
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_READY" )
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_HAVE", g_havemine[id]+1)
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public buy_lmines(id)
{
	if ( get_pcvar_num(g_LENABLE) == 0 )
	{
		ColorChat(id,GREEN,"[ZP]^x01 LaserMiny sa wylaczone.")
		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 )
		{
			ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_AP", g_item_lmines)
			return PLUGIN_CONTINUE
		}
		BuyLasermine(id)
		return PLUGIN_CONTINUE

	}
	
	if ( !zp_get_user_zombie(id) ){	
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_SURVIVOR" )
		return PLUGIN_HANDLED
	}
	
	if ( !zp_get_user_survivor(id) ){	
		ColorChat(id,GREEN,"[ZP]^x01 %L", id, "LASERMINE_ZOMBIES" )
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

Kod Leveling Systemu:

#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <fun>
#include <fakemeta_util>
#include <hamsandwich>
#include <dhudmessage>
#include <zombieplague>

#define PLUGIN "[ZP] Level System 3.2c"
#define VERSION "3.2c"
#define AUTHOR "Re.Act!ve"

const ACCESS = ADMIN_CVAR;

new SayText;
new bool:g_FreezeTime;
new g_level[32], g_level_data, g_frags_level, g_ScreenFade;
new g_level_max, g_give_ammo, g_give_ammopacks, g_level_num, g_level_info, g_player_name, g_levels[32], g_h_damage;
new g_h_health, g_h_speed, g_z_damage, h_health[32], h_speed[32], h_damage[32], z_damage[32], level_exp[32];
new g_level_exp[32], g_exp_data, g_Players, nameid[32];
new bool:g_bonus[32], g_trime[33];
new sound_level_up[] = { "misc/zp_level_up.wav"};
new sound_health[] = { "items/medshot4.wav" };
// Zombie Classes MUST be registered on plugin_precache

public plugin_precache()
{
	precache_sound( sound_level_up );
	precache_sound( sound_health );
}

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);

	g_frags_level = register_cvar("zp_level_frags", "40");
	g_level_max  = register_cvar("zp_level_max", "50");
	g_give_ammo = register_cvar("zp_level_give_ammo", "1");
	g_give_ammopacks = register_cvar("zp_level_ammo", "50");
	
	g_h_damage = register_cvar("zp_level_h_damage", "1");
	g_h_health = register_cvar("zp_level_h_health", "5");
	g_h_speed = register_cvar("zp_level_h_speed", "1.0");
	g_z_damage = register_cvar("zp_level_z_damage", "2");
	
	g_level_info = register_cvar("zp_level_info", "1");
	g_player_name = register_cvar("zp_player_name", "1");
	g_level_num = register_cvar("zp_level_number", "100");
	
	g_level_data = nvault_open("Leveling_Save");
	g_exp_data = nvault_open("Exp_Save");
	register_clcmd("say","say_info");
	register_clcmd("say_team","say_info");
	register_clcmd("zp_levelexp","expa_give", ADMIN_CVAR, "use to give Exp");
	register_clcmd("zp_level_is","level_give", ADMIN_CVAR, "use to give Level");
	SayText = get_user_msgid("SayText");
	g_Players = get_maxplayers();
	register_event("HLTV", "Round_Start", "a", "1=0", "2=0");
	register_event("DeathMsg", "Frags_Manager", "a", "1>0");
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage");
	register_event("StatusValue","show_status","be","1=2","2!0");
	register_event("StatusValue","hide_status","be","1=1","2=0");
	g_ScreenFade = get_user_msgid( "ScreenFade" );
	RegisterHam(Ham_Item_PreFrame, "player", "fw_Player_ResetMaxSpeed", 1);
	register_logevent("logevent_round_start", 2, "1=Round_Start");

}

public plugin_natives()
{
	register_native("zp_get_user_level", "native_get_level", 1);
	register_native("zp_add_user_level", "native_add_level", 1);
	register_native("zp_get_user_exp", "native_get_exp", 1);
	register_native("zp_add_user_exp", "native_add_exp", 1);
}

public native_get_level(index)
{
	return g_level[index];
}

public native_add_level(index, amount)
{
	g_level[index] += amount;
}

public native_get_exp(index)
{
	return level_exp[index];
}

public native_add_exp(index, amount)
{
	level_exp[index] += amount;
}

public Round_Start()
{
	for(new id = 0; id < g_Players; id++)
	{
		set_task(3.0, "Level", id);
	}
}

public fw_Player_ResetMaxSpeed(id)
{
	if(is_user_alive(id) && !zp_get_user_zombie(id))
	{
		fw_Player_ResetMaxSpeedVip(id);
	}
}

public logevent_round_start()
{
	g_FreezeTime = false;
}

public event_new_round()
{
	g_FreezeTime = true;
}

public fw_Player_ResetMaxSpeedVip(id)
{
	if(!g_FreezeTime)
	{
		set_user_maxspeed(id,get_user_maxspeed(id) + h_speed[id]);
	}
}

public Level(id)
{
	if( !zp_get_user_zombie(id) && is_user_alive(id) )
	{
		g_trime[id] = false;
		new n = 1;
		while( n < g_level[id] )
		{
			h_health[id] = n * get_pcvar_num(g_h_health);
			h_damage[id] = n * get_pcvar_num(g_h_damage);
			z_damage[id] = n * get_pcvar_num(g_z_damage);
			h_speed[id] = n * get_pcvar_num(g_h_speed);
			n = n + 1;
		}
		new Float:speed[32];
		speed[id] = fm_get_user_maxspeed(id) + h_speed[id];
		fm_set_user_health( id, get_user_health(id) + h_health[id] );
		set_pev(id, pev_maxspeed, speed[id] );
		//set_user_maxspeed(id, speed[id])
		emit_sound(id, CHAN_STREAM, sound_health, 1.0, ATTN_NORM, 0, PITCH_HIGH );
	}
}

public expa_give(id, level, cid)
{
	if (!cmd_access(id, level, cid, 2))
	{				
		console_print(id, "Nie mozesz uzyc tej komendy");
		return PLUGIN_HANDLED;
	}
	new target[32];
	new count[32];
	
	read_argv(1, target, charsmax(target));
	read_argv(2, count, charsmax(count));

	new target_id, name[32], nameid[32];

	target_id = find_player("bl", target);
	get_user_name(target_id, name, sizeof name - 1);
	get_user_name(id, nameid, sizeof nameid - 1);
	if(!target_id) 
	{
		console_print(id, "Nie ma takiego gracza");

		return PLUGIN_HANDLED;
	}

	if(read_argc() != 3)
	{
		return PLUGIN_HANDLED;
	}
	
	if(str_to_num(count) < (g_level_exp[target_id] - level_exp[target_id]) )
	{
		if(str_to_num(count) == 0)
		{
			console_print(id, "Exp Player %s in %i / %i", name, level_exp[target_id], g_level_exp[target_id]);
		}
		else
		{
			console_print(id, "Gracz %s otrzymal exp za %i exp, Jego maksymalny exp %i", name, str_to_num(count), g_level_exp[target_id]);
			level_exp[target_id] = level_exp[target_id] + str_to_num(count);
		}
	}
	else
	{
		console_print(id, "Minimalny exp dla gracza %i", g_level_exp[target_id]);
	}
	return PLUGIN_HANDLED;
}

public level_give(id, level, cid)
{
	if (!cmd_access(id, level, cid, 2))
	{				
		console_print(id, "Nie mozesz uzyc tej komendy");

		return PLUGIN_HANDLED;
	}

	new target[32];
	new count[32];
	
	read_argv(1, target, charsmax(target));
	read_argv(2, count, charsmax(count));

	new target_id, name[32], level_id;

	level_id = str_to_num(count);
	target_id = find_player("bl", target);
	get_user_name(target_id, name, sizeof name - 1);

	if(!target_id) 
	{
		console_print(id, "Nie ma takiego gracza");
		return PLUGIN_HANDLED;
	}

	if(read_argc() != 3)
	{
		return PLUGIN_HANDLED;
	}
	
	if( ((g_level[target_id] + level_id) <=get_pcvar_num(g_level_max)) && (level_id != 0) && ((g_level[target_id] + level_id) > 0 ) )
	{
		if(level_id > 0)
		{
			g_level[target_id] = g_level[target_id] + level_id;
			message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, target_id);
			write_short(1<<12); // duration
			write_short(1); // hold time
			write_short(0x0000); // fade type
			write_byte(1); // red
			write_byte(200); // green
			write_byte(0); // blue
			write_byte(205); // alpha
			message_end();
			emit_sound(target_id, CHAN_STREAM, sound_level_up, 1.0, ATTN_NORM, 0, PITCH_HIGH );
		}
		else
		{
			g_level[target_id] = g_level[target_id] + level_id;
			message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, target_id);
			write_short(1<<12); // duration
			write_short(1); // hold time
			write_short(0x0000); // fade type
			write_byte(200); // red
			write_byte(40); // green
			write_byte(0); // blue
			write_byte(205); // alpha
			message_end();
		}
		console_print(id, "Gracz %s otrzymal %i Level.", name, level_id);
	}
	else
	{
		console_print(id, "Operation Invalid");
	}
	return PLUGIN_HANDLED;
}

public client_putinserver(id)
{
	Level_Load(id);

	new name[32];

	g_trime[id] = false;
	g_bonus[id] = true;

	nameid[id] = get_user_name(id, name, sizeof name - 1);

	if( !zp_get_user_zombie(id) && is_user_alive(id))
	{
		g_trime[id] = false;
		new n = 1;
		while( n != g_level[id] )
		{
			h_health[id] = n * get_pcvar_num(g_h_health);
			h_damage[id] = n * get_pcvar_num(g_h_damage);
			z_damage[id] = n * get_pcvar_num(g_z_damage);
			h_speed[id] = n * get_pcvar_num(g_h_speed);
			n = n + 1;
		}
		new Float:speed[32];
		speed[id] = fm_get_user_maxspeed(id) + h_speed[id];
		fm_set_user_health( id, get_user_health(id) + h_health[id] );
		set_pev(id, pev_maxspeed, speed[id] );
		//set_user_maxspeed(id, speed[id])
		emit_sound(id, CHAN_STREAM, sound_health, 1.0, ATTN_NORM, 0, PITCH_HIGH );
	}
	
	if( g_level[id] == 0) 
	{
		g_level[id] = 1;
	}

	if( level_exp[id] == g_level[id] ) 
	{
		level_exp[id] = 0;
	}

	if(g_level[id] < get_pcvar_num(g_level_num))
	{
		g_levels[id] = get_pcvar_num(g_level_num);
	}
	else
	{
		if(g_level[id] != g_levels[id])
		{
			new x = 1;
			while( g_level[id] > ( x * get_pcvar_num(g_level_num)) )
			{
				x = x + 1;
				g_levels[id] = x * get_pcvar_num(g_level_num);
			}
		}
	}

	new y = 1;

	while( g_level[id] != y )
	{
		y = y + 1;
		g_level_exp[id] = y * get_pcvar_num(g_frags_level);
	}
}

public client_disconnect(id)
{
	new name[32], 
		player_nick[32];

	player_nick[id] = get_user_name(id, name, sizeof name - 1);

	if(player_nick[id] == nameid[id])
	{
		Level_Save(id);
	}
	
	g_trime[id] = false;
}

public hide_status(id)
{
	set_hudmessage(0,0,0,0.0,0.0,0, 0.0, 0.01, 0.0, 0.0, 4);
	show_hudmessage(id, "");
}

public show_status(id)
{
	new name[32],
		pid = read_data(2);

	get_user_name(pid, name, charsmax(name));

	if (!zp_get_user_zombie(pid) && !zp_get_user_zombie(id) && (get_pcvar_num(g_player_name) == 1) )
	{
		set_hudmessage(0,0,255,-1.0,0.60,1, 0.01, 3.0, 0.01, 0.01, 4);
		show_hudmessage(id,"", name, g_level[pid], get_user_health(pid), get_user_armor(pid), zp_get_user_ammo_packs(pid));
	}
	if(zp_get_user_zombie(id) && zp_get_user_zombie(pid) && (get_pcvar_num(g_player_name) == 1) )
	{
		set_hudmessage(255,0,0,-1.0,0.60,1, 0.01, 3.0, 0.01, 0.01, 4);
		show_hudmessage(id,"", name, g_level[pid], get_user_health(pid), zp_get_user_ammo_packs(pid));
	}
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_bits)
{   
	if (!(1 <= attacker <= 23))
	{
		return;
	}
	
	if ( !zp_get_user_zombie(attacker) && is_user_alive(attacker) )
	{
		SetHamParamFloat(4, damage + h_damage[attacker]);
	}
	else
	{
		if ( zp_get_user_zombie(attacker) && is_user_alive(attacker) && !zp_get_user_nemesis(attacker))
		{
			SetHamParamFloat(4, damage + z_damage[attacker]);
		}
	}
}

public say_info(id)
{
	new text[70], arg1[32], target[32], count[32]

	read_args(text, sizeof(text)-1);

	remove_quotes(text);

	arg1[0] = '^0';
	target[0] = '^0';
	count[0] = '^0';

	parse(text, arg1, sizeof(arg1)-1, target, sizeof(target)-1, count, sizeof(count)-1);

	if ( equali(arg1, "info", 4) )
	{
		info_player(id, target);
	}

	if ( equali(arg1, "level", 7) && (get_pcvar_num(g_level_info) == 1))
	{
		expa_player(id);
	}

	return PLUGIN_CONTINUE;
}

public zp_extra_item_selected(id, itemid)
{
	Level_Save(id)
}

public zp_user_infected_pre(id, infector)
{
	if( is_user_alive(infector) && (level_exp[infector] < (g_level_exp[infector] - 1)) && zp_get_user_zombie(infector))
	{
		level_exp[infector] = level_exp[infector] + 1;
		Level_Save(infector);
	}
}

public info_player(id, target[])
{
	new target_2;

	target_2 = find_player("bl", target);

	static name[32], 
		nameid[32];

	get_user_name(target_2, name, sizeof name - 1);
	get_user_name(id, nameid, sizeof nameid - 1);

	if(!target_2)
	{
		ChatColor(id, "!g[L4D2]!y Taki nick nie zostal znaleziony na serwerze lub nie istnieje");

		return PLUGIN_HANDLED;
	}
	
	if(zp_get_user_zombie(id))
	{
		if(id != target_2)
		{
			ChatColor(id, "!g[L4D2]!y Statystyki Gracza !g%s !y| Level : !g%i !y, !yExp : !g%i !y| Posiada aktualnie : !g%i !yAmmo Packow", name, g_level[target_2], level_exp[target_2], zp_get_user_ammo_packs(target_2) );
			ChatColor(target_2, "!g[L4D2]!y Gracz %s sprawdzil twoje statystyki", nameid);
		}
		else
		{
			ChatColor(id, "!g[L4D2]!y Wiecej obrazen z lapy !tzombie!y : !g+%i", z_damage[target_2] );
		}
	}
	else
	{
		if(id != target_2)
		{
			ChatColor(id, "!g[L4D2]!y Statystyki Gracza !g%s !y| Level : !g%i !y, !yExp : !g%i !y| Posiada aktualnie : !g%i !yAmmo Packow", name, g_level[target_2], level_exp[target_2], zp_get_user_ammo_packs(target_2) );
			ChatColor(target_2, "!g[L4D2]!y Gracz %s sprawdzil twoje statystyki", nameid);
		}
		else
		{
			ChatColor(id, "!g[L4D2]!y Wiecej obrazen z !tbroni!y : !g+%i !y, !tszybkosci!y : !g+%i !y, !tHP!y : !g+%i", h_damage[target_2], h_speed[target_2], h_health[target_2] );
		}
	}
	return PLUGIN_HANDLED;
}

public expa_player(id)
{
	ChatColor(id, "!g[L4D2]!y Twoj Exp: !g%i !y/ !g%i", level_exp[id], g_level_exp[id]);

	return PLUGIN_HANDLED;
}

public level_status(id)
{
	if( is_user_alive(id))
	{
		if( !zp_get_user_zombie(id) )
		{
			set_hudmessage(200, 250, 0, -1.0, 0.90, 0, 1.0, 1.1, 0.0, 0.0, -1);
			show_hudmessage(id,"[Level: %i/60] | [Exp: %i/%i]", g_level[id], level_exp[id], g_level_exp[id]);
		}
		else
		{
			set_hudmessage(200, 250, 0, -1.0, 0.90, 0, 1.0, 1.1, 0.0, 0.0, -1);
			show_hudmessage(id,"[Level: %i/60] | Exp: %i/%i]", g_level[id], level_exp[id], g_level_exp[id]);			
		}
	}
}

public Level_Save(id)
{
	new key[64], data[256], data_exp[256], key_exp[64];
	new name[33];

	get_user_name(id,name,charsmax(name));
	
	format(key, charsmax(key), "%s-/", name);
	format(data, charsmax(data), "%i#", g_level[id]);
	
	format(key_exp, charsmax(key_exp), "%s-/", name);
	format(data_exp, charsmax(data_exp), "%i#", level_exp[id]);
	
	nvault_set(g_level_data, key, data);
	nvault_set(g_exp_data, key_exp, data_exp);

	return PLUGIN_CONTINUE;
}

public Level_Load(id)
{
	new key[64], data[256], data_exp[256], key_exp[64];
	new name[33];

	get_user_name(id,name,charsmax(name));
	
	format(key, charsmax(key), "%s-/", name);
	format(data, charsmax(data), "%i#", g_level[id]);
	
	format(key_exp, charsmax(key_exp), "%s-/", name);
	format(data_exp, charsmax(data_exp), "%i#", level_exp[id]);
	
	nvault_get(g_level_data, key, data, charsmax(data));
	nvault_get(g_exp_data, key_exp, data_exp, charsmax(data_exp));
	replace_all(data, charsmax(data), "#", " ");
	replace_all(data_exp, charsmax(data_exp), "#", " ");
	
	new givelevel[32], 
		give_exp[32];

	parse(data, givelevel, charsmax(givelevel));
	parse(data_exp, give_exp, charsmax(give_exp));

	g_level[id] = str_to_num(givelevel);
	level_exp[id] = str_to_num(give_exp);
	
	set_task(1.0, "level_status", id, _, _, "b");

	return PLUGIN_CONTINUE;
}

public Frags_Manager()
{
	new aname[32], 
		attacker,

		y; 

	attacker = read_data(1);

	get_user_name(attacker, aname, sizeof aname - 1)

	if( ( level_exp[attacker] >= (g_level_exp[attacker] - 1) ) && (g_level[attacker] <= get_pcvar_num(g_level_max)) && is_user_alive(attacker) )
	{
		g_bonus[attacker] = true;
		g_level[attacker] = g_level[attacker] + 1;
		level_exp[attacker] = 0;

		while( g_level[attacker] != y )
		{
			y = y + 1;
			g_level_exp[attacker] = y * get_pcvar_num(g_frags_level);
		}

		message_begin(MSG_ONE_UNRELIABLE, g_ScreenFade, _, attacker);
		write_short(1<<12); // duration
		write_short(1); // hold time
		write_short(0x0000); // fade type
		write_byte(1); // red
		write_byte(200); // green
		write_byte(0); // blue
		write_byte(205); // alpha
		message_end();
		emit_sound(attacker, CHAN_STREAM, sound_level_up, 1.0, ATTN_NORM, 0, PITCH_HIGH );

		set_dhudmessage(0, 200, 0, -1.0, 0.12, 0, 0.0, 3.0, 2.0, 1.0);
		show_dhudmessage(0, "%s awansowal na %i level", aname, g_level[attacker]);

		if(get_pcvar_num(g_give_ammo) == 1)
		{
			ChatColor(attacker, "!g[L4D2]!y Zdobyles bonus w postaci !g%i !yAmmo Packow za nowy level", get_pcvar_num(g_give_ammopacks) );

			zp_set_user_ammo_packs(attacker, zp_get_user_ammo_packs(attacker) + get_pcvar_num(g_give_ammopacks));
		}
		Level_Save(attacker);
	}
	else
	{
		
		if(g_level[attacker] == get_pcvar_num(g_level_max))
		{
			ChatColor(attacker, "!g[L4D2]!y Osiagneles maksymalny level:!g%i !yGratulujemy !", g_level[attacker]);
		}

		level_exp[attacker] = level_exp[attacker] + 1;

		Level_Save(attacker);
	}
}

public zp_round_ended(winteam)
{
	for(new id = 0; id < g_Players; id++)
	{
		g_trime[id] = true;
	}
}

stock ChatColor(const id, const input[], any:...) 
{
	new count = 1, 
		players[32];

	static msg[191];

	vformat(msg, charsmax(msg), input, 3);
	
	replace_all(msg, charsmax(msg), "!g", "^4"); // Green Color
	replace_all(msg, charsmax(msg), "!y", "^1"); // Default Color
	replace_all(msg, charsmax(msg), "!t", "^3"); // Team Color
	replace_all(msg, charsmax(msg), "!t2", "^0"); // Team2 Color
	
	if (id) 
	{
		players[0] = id; 
	}
	else 
	{
		get_players(players, count, "ch");
	}
	
	for (new i = 0; i < count; i++)
	{
		if (is_user_connected(players[i]))
		{
			message_begin(MSG_ONE_UNRELIABLE, SayText, _, players[i]);
			write_byte(players[i]);
			write_string(msg);
			message_end();
		}
	}
	
}

  • +
  • -
  • 0

#2 DarkGL

    Nie oddam ciasteczka !

  • Administrator

Reputacja: 6 553
Godlike

  • Postów:11 976
  • GG:
  • Steam:steam
  • Imię:Rafał
  • Lokalizacja:Warszawa
Offline

Napisano 05.08.2021 20:58

Wiadomość wygenerowana automatycznie


Ten temat został zamknięty przez moderatora.

Powód: Nieodpowiednio umieszczony kod. Skorzystaj z Umieszczanie kodu na forum

Z pozdrowieniami,
Zespół AMXX.PL
  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: zombie mod

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych