Modificare plugin lasermine

Modificari necesare ale pluginurilor

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
sammi1
Membru, skill 0
Membru, skill 0
Posts: 49
Joined: 30 Jan 2021, 22:38
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Detinator server CS: Zm.CsPower.Ro
Fond eXtream: 0
Has thanked: 23 times

06 Feb 2021, 01:58

As dori daca se poate sa mi se puna in sursa o functie in care daca scrii in chat /takelm, sa ia automat laserele inapoi, deoarece daca pun laser intr-o parte a mapei si plec in cealalta parte, sa nu mai merg toata mapa sa pierd timp, sa scriu doar /takelm si sa le ia automat, daca se poate, mersi anticipat.

Sursa:

Code: Select all

/* Plugin generated by AMXX-Studio */   

//#define BIOHAZARD_SUPPORT   

//#define UL_MONEY_SUPPORT   





#include <amxmodx>   

#include <cstrike>  

#include <fakemeta>   

#include <xs>   

#include <hamsandwich>  
#include <biohazard>


#if defined _colorchat_included  

#endinput  	

#endif  	

#define _colorchat_included  



enum Color  

{ 



NORMAL = 1, // clients scr_concolor cvar color  

GREEN, // Green Color  

TEAM_COLOR, // Red, grey, blue  

GREY, // grey  

RED, // Red  

BLUE, // Blue  

}  



new TeamName[][] =   

{ 



"",  

"TERRORIST",  

"CT",  

"SPECTATOR"  

}  



ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)  

{ 



if( !get_playersnum() ) return;  



new message[256];  



switch(type)  

{ 



case NORMAL: // clients scr_concolor cvar color  

{ 



message[0] = 0x01;  

}  

case GREEN: // Green  

{ 



message[0] = 0x04;  

}  

default: // White, Red, Blue  

{ 



message[0] = 0x03;  

}  

}  



vformat(message[1], 251, msg, 4);  



// Make sure message is not longer than 192 character. Will crash the server.  

message[192] = '^0';  



new team, ColorChange, index, MSG_Type;  



if(id)  

{ 



MSG_Type = MSG_ONE;  

index = id;  

} else {  

index = FindPlayer();  

MSG_Type = MSG_ALL;  

}  



team = get_user_team(index);  

ColorChange = ColorSelection(index, MSG_Type, type);  



ShowColorMessage(index, MSG_Type, message);  



if(ColorChange)  

{ 



Team_Info(index, MSG_Type, TeamName[team]);  

}  

}  



ShowColorMessage(id, type, message[])  

{ 



static bool:saytext_used;  

static get_user_msgid_saytext;  

if(!saytext_used)  

{ 



get_user_msgid_saytext = get_user_msgid("SayText");  

saytext_used = true;  

}  

message_begin(type, get_user_msgid_saytext, _, id);  

write_byte(id)          

write_string(message);  

message_end();      

}  



Team_Info(id, type, team[])  

{ 



static bool:teaminfo_used;  

static get_user_msgid_teaminfo;  

if(!teaminfo_used)  

{ 



get_user_msgid_teaminfo = get_user_msgid("TeamInfo");  

teaminfo_used = true;  

}  

message_begin(type, get_user_msgid_teaminfo, _, id);  

write_byte(id);  

write_string(team);  

message_end();  



return 1;  

}  



ColorSelection(index, type, Color:Type)  

{ 



switch(Type)  

{ 



case RED:  

{ 



return Team_Info(index, type, TeamName[1]);  

}  

case BLUE:  

{ 



return Team_Info(index, type, TeamName[2]);  

}  

case GREY:  

{ 



return Team_Info(index, type, TeamName[0]);  

}  

}  



return 0;  

}  



FindPlayer()  

{ 



new i = -1;  



while(i <= get_maxplayers())  

{ 



if(is_user_connected(++i))  

return i;  

}  



return -1;  

}  



#if defined BIOHAZARD_SUPPORT   

#include <biohazard>   

#endif   



#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   



#if defined BIOHAZARD_SUPPORT   

#define PLUGIN "LTM for BIOHAZARD"   

#else   

#define PLUGIN "Laser/Tripmine Entity"   

#endif   

#define AUTHOR "SandStriker, Crunch98" // 



#define RemoveEntity(%1)    engfunc(EngFunc_RemoveEntity,%1)   

//#define ACCESSLEVEL        ADMIN_LEVEL_H   

#define TASK_PLANT        15100   

#define TASK_RESET        15500   

#define TASK_RELEASE        15900   

#define VERSION "2.8.3"   



#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)   







/*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_laser_mine.mdl",   

ENT_SOUND1[]    = "weapons/mine_deploy.wav",   

ENT_SOUND2[]    = "weapons/mine_charge.wav",   

ENT_SOUND3[]    = "weapons/mine_activate.wav",   

ENT_SOUND4[]    = "weapons/electro5.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   

#if defined BIOHAZARD_SUPPORT   

CHATTAG[]         = "[Biohazard]",   

#else   

CHATTAG[]         = "[Biohazard]",   

#endif   

//STR_MINEDETNATED[]     = "Your lasermine was destroyed.",   

//STR_MINEDETNATED2[]    = "destroyed your lasermine..",   

STR_NOTACTIVE[]     = "Lasermines are inactive.",   

STR_DONTHAVEMINE[]    = "You don't have lasermines.",   

//STR_CANTDEPLOY[]    = "Your team can't plant lasermines!",   

STR_MAXDEPLOY[]        = "You've planted the maximum number of lasermines.",   

STR_MANYPPL[]        = "Prea multe lasere in echipa ta...",   

STR_PLANTWALL[]        = "You need to plant the lasermine on the wall.",   

STR_REF[]        = "Refer to a lasermine rule with this server. say 'lasermine'",   

#if defined BIOHAZARD_SUPPORT       

STR_CBT[]        = "Esti un zombie, nu poti cumpara lasere !",   

#else   

STR_CBT[]        = "Echipa ta nu poate cumpara lasere !",   

#endif   

STR_CANTBUY[]        = "Nu poti cumpara pe acest server.",   

STR_HAVEMAX[]        = "The maximum number of lasermines is 2/2.",   

STR_NOMONEY[]        = "You don't have enough money to buy lasermines! ($",   

STR_NEEDED[]        = "needed)",   

STR_DELAY[]        = "You can buy and plant lasermines in",   

STR_SECONDS[]        = "seconds.",   

STR_BOUGHT[]        = "You just bought 1 lasermine.",   

STR_STATE[]        = "LaserMines Ammo:",   

STR_NOACCESS[]        = "You have no acces to this command.";   



new g_EntMine   

new beam, boom   

new g_msgid_bartime   

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;   

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_msgStatusText,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);   



// Add your code here...   

RegisterHam(Ham_Killed, "player", "fw_PlayerKilled");    
RegisterHam(Ham_TakeDamage, "func_breakable", "Lasermine_TakeDamagePre")

register_clcmd("+setlaser","CreateLaserMine_Progress_b");   

register_clcmd("-setlaser","StopCreateLaserMine");   

register_clcmd("+dellaser","ReturnLaserMine_Progress");   

register_clcmd("-dellaser","StopReturnLaserMine");   

register_clcmd("say","say_lasermine");   

register_clcmd("buy_lasermine","BuyLasermine");   

register_logevent("logevent_round_end", 2, "1=Round_End")  

//    register_logevent("logevent_round_start", 2, "1=Round_Start")  



#if defined BIOHAZARD_SUPPORT   

g_LENABLE    = register_cvar("bio_ltm","1");   

g_LACCESS    = register_cvar("bio_ltm_acs","0");          //0 all, 1 admin   

g_LMODE        = register_cvar("bio_ltm_mode","0");         //0 lasermine, 1 tripmine   

g_LAMMO        = register_cvar("bio_ltm_ammo","2");   

g_LDMG        = register_cvar("bio_ltm_dmg","60");        //laser hit dmg   

g_LCOST        = register_cvar("bio_ltm_cost","2500");   

g_LFMONEY    = register_cvar("bio_ltm_fragmoney","300");   

g_LHEALTH    = register_cvar("bio_ltm_health","1000");   

g_LTMAX        = register_cvar("bio_ltm_teammax","200");   

g_LRADIUS    = register_cvar("bio_ltm_radius","320.0");   

g_LRDMG        = register_cvar("bio_ltm_rdmg","100");         //radius damage   

g_LFF        = register_cvar("bio_ltm_ff","0");   

g_LCBT        = register_cvar("bio_ltm_cbt","ALL");   

g_LBUYMODE    = register_cvar("bio_ltm_buymode","0");   

//g_LDELAY    = register_cvar("bio_ltm_delay","15");   

g_LTHINK = register_cvar("bio_ltm_think","0.01");   

g_LVISIBLE    = register_cvar("bio_ltm_line","1");   

g_LGLOW        = register_cvar("bio_ltm_glow","1");   

g_LCBRIGHT    = register_cvar("bio_ltm_bright","255");    //laser line brightness.   

g_LCLMODE    = register_cvar("bio_ltm_color","0");        //0 is team color,1 is green   

g_LDMGMODE    = register_cvar("bio_ltm_ldmgmode","0");     //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg   

g_LDSEC        = register_cvar("bio_ltm_ldmgseconds","1");    //mode 2 only, damage / seconds. default 1 (sec)   

g_LSTAMMO    = register_cvar("bio_ltm_startammo","2");   

g_LCMDMODE    = register_cvar("bio_ltm_cmdmode","1");        //0 is +USE key, 1 is bind, 2 is each.   

#else   

g_LENABLE    = register_cvar("amx_ltm","1");   

g_LACCESS    = register_cvar("amx_ltm_acs","0");          //0 all, 1 admin   

g_LMODE        = register_cvar("amx_ltm_mode","0");         //0 lasermine, 1 tripmine   

g_LAMMO        = register_cvar("amx_ltm_ammo","2");   

g_LDMG        = register_cvar("amx_ltm_dmg","60");         //laser hit dmg   

g_LCOST        = register_cvar("amx_ltm_cost","2500");   

g_LFMONEY    = register_cvar("amx_ltm_fragmoney","300");   

g_LHEALTH    = register_cvar("amx_ltm_health","1000");   

g_LTMAX        = register_cvar("amx_ltm_teammax","200");   

g_LRADIUS    = register_cvar("amx_ltm_radius","320.0");   

g_LRDMG        = register_cvar("amx_ltm_rdmg","100");        //radius damage   

g_LFF        = register_cvar("amx_ltm_ff","0");   

g_LCBT        = register_cvar("amx_ltm_cbt","ALL");   

g_LBUYMODE    = register_cvar("amx_ltm_buymode","0");   

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");   

g_LGLOW        = register_cvar("amx_ltm_glow","1");   

g_LCBRIGHT    = register_cvar("amx_ltm_bright","255");    //laser line brightness.   

g_LCLMODE    = register_cvar("amx_ltm_color","0");         //0 is team color,1 is green   

g_LDMGMODE    = register_cvar("amx_ltm_ldmgmode","0");     //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg   

g_LDSEC        = register_cvar("amx_ltm_ldmgseconds","1");    //mode 2 only, damage / seconds. default 1 (sec)   

g_LSTAMMO    = register_cvar("amx_ltm_startammo","2");   

g_LCMDMODE    = register_cvar("amx_ltm_cmdmode","0");        //0 is +USE key, 1 is bind, 2 is each.   

#endif   

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");   

g_msgid_bartime = get_user_msgid("BarTime")   

// -- Forward.   

register_forward(FM_Think, "ltm_Think" );   

register_forward(FM_PlayerPostThink, "ltm_PostThink" );   

register_forward(FM_PlayerPreThink, "ltm_PreThink");   

register_forward( FM_TraceLine , "fw_TraceLine" );  

}   



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

precache_sound("buttons/button2.wav")  



return PLUGIN_CONTINUE;   

}   





public fw_PlayerKilled(id)   

{ 



RemoveAllTripmines(id);  

DeleteTask(id);  

}    



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

#if defined BIOHAZARD_SUPPORT   

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

#else   

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

#endif   

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))   

return true;   

return false;   

}   




public event_infect(id, att)
{ 
	DeleteTask(id);
	RemoveAllTripmines(id);
	delaycount(id);
	SetStartAmmo(id);
}    

  



public logevent_round_end(id)  

{ 



RemoveAllTripmines(id)  

}  



/*  

public logevent_round_start()  

{ 



server_cmd("amx_cvar amx_ltm 1")  

}  

*/  



public CreateLaserMine_Progress_b(id)   

{ 



if(get_pcvar_num(g_LCMDMODE) != 0)   

CreateLaserMine_Progress(id);   

return PLUGIN_HANDLED;   

}   



public CreateLaserMine_Progress(id)   

{ 



if (!CreateCheck(id))  

return PLUGIN_HANDLED;   

g_settinglaser[id] = true;   



message_begin( MSG_ONE_UNRELIABLE, g_msgid_bartime, {0,0,0}, id );   

write_short(1);   

message_end();   



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

client_cmd(id, "spk buttons/button3.wav");  



return PLUGIN_HANDLED;   

}   



public ReturnLaserMine_Progress(id)   

{ 



if (!ReturnCheck(id))  

return PLUGIN_HANDLED;   

g_settinglaser[id] = true;   



message_begin( MSG_ONE_UNRELIABLE, g_msgid_bartime, {0,0,0}, id );   

write_short(1);   

message_end();  

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

client_cmd(id, "spk buttons/button3.wav");  



return PLUGIN_HANDLED;   

}   



public StopCreateLaserMine(id)   

{ 





DeleteTask(id);   

message_begin( MSG_ONE_UNRELIABLE, g_msgid_bartime, {0,0,0}, id );   

write_short(0);   

message_end();   



return PLUGIN_HANDLED;   

}   



public StopReturnLaserMine(id)   

{ 





DeleteTask(id);   

message_begin( MSG_ONE_UNRELIABLE, g_msgid_bartime, {0,0,0}, id );   

write_short(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) > 90.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,"[Lasermine 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_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,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]--;   

DeleteTask(id);   

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:CanCheck(id,mode)   

{ 



if( !get_pcvar_num( g_LENABLE ) )   

{ 



//        client_print(id, print_chat, "%s %s",CHATTAG,STR_NOTACTIVE);  

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_NOTACTIVE);  

client_cmd(id, "spk buttons/button2.wav");  

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

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_NOACCESS);              

return false;   

}   

if(!pev_user_alive(id)) return false;   

#if defined BIOHAZARD_SUPPORT   

if(is_user_zombie(id))   

{ 



//        client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT);   

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_CBT);  

return false;   

}   

#endif   

if (!CheckCanTeam(id))   

{ 



//       client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT);   

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_CBT);   

return false;   

}   

if( mode == 0)   

{ 



if(g_havemine[id] <= 0)   

{ 



//            client_print(id, print_chat, "%s %s",CHATTAG,STR_DONTHAVEMINE);  

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_DONTHAVEMINE);  

client_cmd(id, "spk buttons/button2.wav");  

return false;   

}   

}   

if (mode == 1)   

{ 



if (get_pcvar_num(g_LBUYMODE) == 0)   

{ 



//            client_print(id, print_chat, "%s %s",CHATTAG,STR_CANTBUY);   

ColorChat(id, NORMAL, "^4%s ^3%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);   

ColorChat(id, NORMAL, "^4%s ^3%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,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS);  

ColorChat(id,NORMAL, "^4%s ^3%s ^1%d ^3%s",CHATTAG,STR_DELAY,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS);  

client_cmd(id, "spk buttons/button2.wav");  

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) > 90.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);   

ColorChat(id, NORMAL, "^4%s ^3%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);   

ColorChat(id, NORMAL, "^4%s ^3%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)  

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_PLANTWALL)  

client_cmd(id, "spk buttons/button2.wav");      

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] = 20;   

tcolor[2] = 0;   

}   

case 2:{   

tcolor[0] = 0;   

tcolor[1] = 0;   

tcolor[2] = 255;   

}   

}   

}else   

{ 



tcolor[0] = 200;   

tcolor[1] = 50;   

tcolor[2] = 100;   

}   

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)))   

{ 



// 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();   

}   



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)) && !equal(szClassName, ENT_CLASS_NAME))   

{ 



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)   

{ 



client_cmd(isHit, "spk %s", ENT_SOUND4)   

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))   

{ 



client_cmd(isHit, "spk %s", ENT_SOUND4)   

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))   

{ 



client_cmd(isHit, "spk %s", ENT_SOUND4)   

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_BROADCAST, 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_BROADCAST, 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)   

ColorChat(id, NORMAL, "^4%s ^3%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_UNRELIABLE, 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, "<font size=4 color=#FA2C00><b><center>*Zm.CsPower.Ro*</center></b></font><br />")

len += formatex(msg[len], SIZE - len, "<font size=3 color=#FA2C00>RO</LI><br>")

len += formatex(msg[len], SIZE - len, "<font color=#0000ff>Bind-uri Lasermine. </LI><br>")

len += formatex(msg[len], SIZE - len, "<font color=#00FF00>Plantare Lasermine: scrie in consola bind <font color=#FA2C00>v <font color=#00FF00>+setlaser. Tine apasat (<font color=#FA2C00>V<font color=#00FF00>) la Perete.</LI><br>")

len += formatex(msg[len], SIZE - len, "<font color=#00FF00>Deplantare Lasermine: scrie in consola bind <font color=#FA2C00>c <font color=#00FF00>+dellaser. Tine apasat (<font color=#FA2C00>C<font color=#00FF00>) la Lasermine.</UL><br>")

len += formatex(msg[len], SIZE - len, "<font color=#FA2C00>EN</LI><br>") 

len += formatex(msg[len], SIZE - len, "<font color=#0000ff>Lasermines Binds. </LI><br>")

len += formatex(msg[len], SIZE - len, "<font color=#00FF00>Plant Lasermine: write in the console bind <font color=#FA2C00>v <font color=#00FF00>+setlaser. Press and Hold (<font color=#FA2C00>V<font color=#00FF00>) to Wall.</LI><br>")   

len += formatex(msg[len], SIZE - len, "<font color=#00FF00>Deplant Lasermine: write in the console bind <font color=#FA2C00>c <font color=#00FF00>+dellaser. Press and Hold (<font color=#FA2C00>C<font color=#00FF00>) to Lasermine. </UL><br>")    

len += formatex(msg[len], SIZE - len, "</body></html>")   

//show_motd(id, msg, "Lasermine")   

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_disconnected(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);   

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 fw_TraceLine( Float:fStart[3] , Float:fEnd[3] , Conditions , id , iTrace )  

{  

static ent, szClassName[33], szPlayerName[32], playerid, Float: fHealth; 



if( pev_valid( ( ent = get_tr2( iTrace , TR_pHit ) ) ) )  

{  

pev(ent, pev_classname, szClassName, szClassName,32) 

pev(ent, pev_health, fHealth ) 



if(equal(szClassName, ENT_CLASS_NAME))  

{ 

playerid = pev(ent, LASERMINE_OWNER) 

get_user_name(playerid, szPlayerName, 31) 



if(cs_get_user_team(playerid) == CS_TEAM_T) {

set_hudmessage(255, 0, 0, -1.0, 0.55, 0, 0.1, 0.1, 0.1, 0.1);  

show_hudmessage(id, "Owner: %s^n Health: %0.1f%%", szPlayerName, fHealth * 100 / get_pcvar_num(g_LHEALTH));

} 

if(cs_get_user_team(playerid) == CS_TEAM_CT) {

set_hudmessage(0, 0, 255, -1.0, 0.55, 0, 0.1, 0.1, 0.1, 0.1);  

show_hudmessage(id, "Owner: %s^n Health: %0.1f%%", szPlayerName, fHealth * 100 / get_pcvar_num(g_LHEALTH));

} 

}

}

}

public Lasermine_TakeDamagePre(victim, inflictor, attacker, Float:f_Damage, bit_Damage)
{ 
	if(!pev_valid(victim)) 
		return HAM_IGNORED;

	static EntityName[32], Owner; 

	pev(victim, pev_classname, EntityName, 31);
	if(!equal(EntityName, ENT_CLASS_NAME))
		return HAM_IGNORED;
	
	Owner = pev(victim, LASERMINE_OWNER) 
	if(Owner != attacker &&  (!is_user_zombie(attacker) && !is_user_zombie(Owner) || is_user_zombie(attacker) && is_user_zombie(Owner)))
		return HAM_SUPERCEDE;
	
	return HAM_IGNORED 
Ps. pluginul este cam dezordonat (cel putin asa mi se pare), sper sa va descurcati, mersi inca o data
RoyalServer 2
User avatar
levin
Scripter eXtreamCS
Scripter eXtreamCS
Posts: 3844
Joined: 24 Aug 2011, 12:24
Detinator Steam: Da
CS Status:
Detinator server CS: ☯∴
SteamID: riseofevo
Reputatie: Scripter eXtreamCS
Nume anterior: Adryyy
Location: ҳ̸Ҳ̸ҳ
Discord: devilclass
Has thanked: 36 times
Been thanked: 594 times
Contact:

06 Feb 2021, 23:18

Code: Select all

/* Plugin generated by AMXX-Studio */   

//#define BIOHAZARD_SUPPORT   

//#define UL_MONEY_SUPPORT   





#include <amxmodx>   

#include <cstrike>  

#include <fakemeta>   

#include <xs>   

#include <hamsandwich>  
#include <biohazard>


#if defined _colorchat_included  

#endinput  	

#endif  	

#define _colorchat_included  



enum Color  

{ 



NORMAL = 1, // clients scr_concolor cvar color  

GREEN, // Green Color  

TEAM_COLOR, // Red, grey, blue  

GREY, // grey  

RED, // Red  

BLUE, // Blue  

}  



new TeamName[][] =   

{ 



"",  

"TERRORIST",  

"CT",  

"SPECTATOR"  

}  



ColorChat(id, Color:type, const msg[], {Float,Sql,Result,_}:...)  

{ 



if( !get_playersnum() ) return;  



new message[256];  



switch(type)  

{ 



case NORMAL: // clients scr_concolor cvar color  

{ 



message[0] = 0x01;  

}  

case GREEN: // Green  

{ 



message[0] = 0x04;  

}  

default: // White, Red, Blue  

{ 



message[0] = 0x03;  

}  

}  



vformat(message[1], 251, msg, 4);  



// Make sure message is not longer than 192 character. Will crash the server.  

message[192] = '^0';  



new team, ColorChange, index, MSG_Type;  



if(id)  

{ 



MSG_Type = MSG_ONE;  

index = id;  

} else {  

index = FindPlayer();  

MSG_Type = MSG_ALL;  

}  



team = get_user_team(index);  

ColorChange = ColorSelection(index, MSG_Type, type);  



ShowColorMessage(index, MSG_Type, message);  



if(ColorChange)  

{ 



Team_Info(index, MSG_Type, TeamName[team]);  

}  

}  



ShowColorMessage(id, type, message[])  

{ 



static bool:saytext_used;  

static get_user_msgid_saytext;  

if(!saytext_used)  

{ 



get_user_msgid_saytext = get_user_msgid("SayText");  

saytext_used = true;  

}  

message_begin(type, get_user_msgid_saytext, _, id);  

write_byte(id)          

write_string(message);  

message_end();      

}  



Team_Info(id, type, team[])  

{ 



static bool:teaminfo_used;  

static get_user_msgid_teaminfo;  

if(!teaminfo_used)  

{ 



get_user_msgid_teaminfo = get_user_msgid("TeamInfo");  

teaminfo_used = true;  

}  

message_begin(type, get_user_msgid_teaminfo, _, id);  

write_byte(id);  

write_string(team);  

message_end();  



return 1;  

}  



ColorSelection(index, type, Color:Type)  

{ 



switch(Type)  

{ 



case RED:  

{ 



return Team_Info(index, type, TeamName[1]);  

}  

case BLUE:  

{ 



return Team_Info(index, type, TeamName[2]);  

}  

case GREY:  

{ 



return Team_Info(index, type, TeamName[0]);  

}  

}  



return 0;  

}  



FindPlayer()  

{ 



new i = -1;  



while(i <= get_maxplayers())  

{ 



if(is_user_connected(++i))  

return i;  

}  



return -1;  

}  



#if defined BIOHAZARD_SUPPORT   

#include <biohazard>   

#endif   



#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   



#if defined BIOHAZARD_SUPPORT   

#define PLUGIN "LTM for BIOHAZARD"   

#else   

#define PLUGIN "Laser/Tripmine Entity"   

#endif   

#define AUTHOR "SandStriker, Crunch98" // 



#define RemoveEntity(%1)    engfunc(EngFunc_RemoveEntity,%1)   

//#define ACCESSLEVEL        ADMIN_LEVEL_H   

#define TASK_PLANT        15100   

#define TASK_RESET        15500   

#define TASK_RELEASE        15900   

#define VERSION "2.8.3"   



#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)   







/*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_laser_mine.mdl",   

ENT_SOUND1[]    = "weapons/mine_deploy.wav",   

ENT_SOUND2[]    = "weapons/mine_charge.wav",   

ENT_SOUND3[]    = "weapons/mine_activate.wav",   

ENT_SOUND4[]    = "weapons/electro5.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   

#if defined BIOHAZARD_SUPPORT   

CHATTAG[]         = "[Biohazard]",   

#else   

CHATTAG[]         = "[Biohazard]",   

#endif   

//STR_MINEDETNATED[]     = "Your lasermine was destroyed.",   

//STR_MINEDETNATED2[]    = "destroyed your lasermine..",   

STR_NOTACTIVE[]     = "Lasermines are inactive.",   

STR_DONTHAVEMINE[]    = "You don't have lasermines.",   

//STR_CANTDEPLOY[]    = "Your team can't plant lasermines!",   

STR_MAXDEPLOY[]        = "You've planted the maximum number of lasermines.",   

STR_MANYPPL[]        = "Prea multe lasere in echipa ta...",   

STR_PLANTWALL[]        = "You need to plant the lasermine on the wall.",   

STR_REF[]        = "Refer to a lasermine rule with this server. say 'lasermine'",   

#if defined BIOHAZARD_SUPPORT       

STR_CBT[]        = "Esti un zombie, nu poti cumpara lasere !",   

#else   

STR_CBT[]        = "Echipa ta nu poate cumpara lasere !",   

#endif   

STR_CANTBUY[]        = "Nu poti cumpara pe acest server.",   

STR_HAVEMAX[]        = "The maximum number of lasermines is 2/2.",   

STR_NOMONEY[]        = "You don't have enough money to buy lasermines! ($",   

STR_NEEDED[]        = "needed)",   

STR_DELAY[]        = "You can buy and plant lasermines in",   

STR_SECONDS[]        = "seconds.",   

STR_BOUGHT[]        = "You just bought 1 lasermine.",   

STR_STATE[]        = "LaserMines Ammo:",   

STR_NOACCESS[]        = "You have no acces to this command.";   



new g_EntMine   

new beam, boom   

new g_msgid_bartime   

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;   

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_msgStatusText,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);   



// Add your code here...   

RegisterHam(Ham_Killed, "player", "fw_PlayerKilled");    
RegisterHam(Ham_TakeDamage, "func_breakable", "Lasermine_TakeDamagePre")

register_clcmd("+setlaser","CreateLaserMine_Progress_b");   

register_clcmd("-setlaser","StopCreateLaserMine");   

register_clcmd("+dellaser","ReturnLaserMine_Progress");   

register_clcmd("-dellaser","StopReturnLaserMine");   

register_clcmd("say","say_lasermine");   

register_clcmd("buy_lasermine","BuyLasermine");   

register_clcmd("say /takelm","TL")
register_clcmd("say_team /takelm","TL")

register_logevent("logevent_round_end", 2, "1=Round_End")  

//    register_logevent("logevent_round_start", 2, "1=Round_Start")  



#if defined BIOHAZARD_SUPPORT   

g_LENABLE    = register_cvar("bio_ltm","1");   

g_LACCESS    = register_cvar("bio_ltm_acs","0");          //0 all, 1 admin   

g_LMODE        = register_cvar("bio_ltm_mode","0");         //0 lasermine, 1 tripmine   

g_LAMMO        = register_cvar("bio_ltm_ammo","2");   

g_LDMG        = register_cvar("bio_ltm_dmg","60");        //laser hit dmg   

g_LCOST        = register_cvar("bio_ltm_cost","2500");   

g_LFMONEY    = register_cvar("bio_ltm_fragmoney","300");   

g_LHEALTH    = register_cvar("bio_ltm_health","1000");   

g_LTMAX        = register_cvar("bio_ltm_teammax","200");   

g_LRADIUS    = register_cvar("bio_ltm_radius","320.0");   

g_LRDMG        = register_cvar("bio_ltm_rdmg","100");         //radius damage   

g_LFF        = register_cvar("bio_ltm_ff","0");   

g_LCBT        = register_cvar("bio_ltm_cbt","ALL");   

g_LBUYMODE    = register_cvar("bio_ltm_buymode","0");   

//g_LDELAY    = register_cvar("bio_ltm_delay","15");   

g_LTHINK = register_cvar("bio_ltm_think","0.01");   

g_LVISIBLE    = register_cvar("bio_ltm_line","1");   

g_LGLOW        = register_cvar("bio_ltm_glow","1");   

g_LCBRIGHT    = register_cvar("bio_ltm_bright","255");    //laser line brightness.   

g_LCLMODE    = register_cvar("bio_ltm_color","0");        //0 is team color,1 is green   

g_LDMGMODE    = register_cvar("bio_ltm_ldmgmode","0");     //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg   

g_LDSEC        = register_cvar("bio_ltm_ldmgseconds","1");    //mode 2 only, damage / seconds. default 1 (sec)   

g_LSTAMMO    = register_cvar("bio_ltm_startammo","2");   

g_LCMDMODE    = register_cvar("bio_ltm_cmdmode","1");        //0 is +USE key, 1 is bind, 2 is each.   

#else   

g_LENABLE    = register_cvar("amx_ltm","1");   

g_LACCESS    = register_cvar("amx_ltm_acs","0");          //0 all, 1 admin   

g_LMODE        = register_cvar("amx_ltm_mode","0");         //0 lasermine, 1 tripmine   

g_LAMMO        = register_cvar("amx_ltm_ammo","2");   

g_LDMG        = register_cvar("amx_ltm_dmg","60");         //laser hit dmg   

g_LCOST        = register_cvar("amx_ltm_cost","2500");   

g_LFMONEY    = register_cvar("amx_ltm_fragmoney","300");   

g_LHEALTH    = register_cvar("amx_ltm_health","1000");   

g_LTMAX        = register_cvar("amx_ltm_teammax","200");   

g_LRADIUS    = register_cvar("amx_ltm_radius","320.0");   

g_LRDMG        = register_cvar("amx_ltm_rdmg","100");        //radius damage   

g_LFF        = register_cvar("amx_ltm_ff","0");   

g_LCBT        = register_cvar("amx_ltm_cbt","ALL");   

g_LBUYMODE    = register_cvar("amx_ltm_buymode","0");   

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");   

g_LGLOW        = register_cvar("amx_ltm_glow","1");   

g_LCBRIGHT    = register_cvar("amx_ltm_bright","255");    //laser line brightness.   

g_LCLMODE    = register_cvar("amx_ltm_color","0");         //0 is team color,1 is green   

g_LDMGMODE    = register_cvar("amx_ltm_ldmgmode","0");     //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg   

g_LDSEC        = register_cvar("amx_ltm_ldmgseconds","1");    //mode 2 only, damage / seconds. default 1 (sec)   

g_LSTAMMO    = register_cvar("amx_ltm_startammo","2");   

g_LCMDMODE    = register_cvar("amx_ltm_cmdmode","0");        //0 is +USE key, 1 is bind, 2 is each.   

#endif   

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");   

g_msgid_bartime = get_user_msgid("BarTime")   

// -- Forward.   

register_forward(FM_Think, "ltm_Think" );   

register_forward(FM_PlayerPostThink, "ltm_PostThink" );   

register_forward(FM_PlayerPreThink, "ltm_PreThink");   

register_forward( FM_TraceLine , "fw_TraceLine" );  

}   



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

precache_sound("buttons/button2.wav")  



return PLUGIN_CONTINUE;   

}   


public TL(id){
	if(!g_deployed[id]||!g_havemine[id])	return
	DeleteTask(id);
	RemoveAllTripmines( id )
	SetStartAmmo(id);
}


public fw_PlayerKilled(id)   

{ 



RemoveAllTripmines(id);  

DeleteTask(id);  

}    



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

#if defined BIOHAZARD_SUPPORT   

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

#else   

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

#endif   

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))   

return true;   

return false;   

}   




public event_infect(id, att)
{ 
	DeleteTask(id);
	RemoveAllTripmines(id);
	delaycount(id);
	SetStartAmmo(id);
}    

  



public logevent_round_end(id)  

{ 



RemoveAllTripmines(id)  

}  



/*  

public logevent_round_start()  

{ 



server_cmd("amx_cvar amx_ltm 1")  

}  

*/  



public CreateLaserMine_Progress_b(id)   

{ 



if(get_pcvar_num(g_LCMDMODE) != 0)   

CreateLaserMine_Progress(id);   

return PLUGIN_HANDLED;   

}   



public CreateLaserMine_Progress(id)   

{ 



if (!CreateCheck(id))  

return PLUGIN_HANDLED;   

g_settinglaser[id] = true;   



message_begin( MSG_ONE_UNRELIABLE, g_msgid_bartime, {0,0,0}, id );   

write_short(1);   

message_end();   



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

client_cmd(id, "spk buttons/button3.wav");  



return PLUGIN_HANDLED;   

}   



public ReturnLaserMine_Progress(id)   

{ 



if (!ReturnCheck(id))  

return PLUGIN_HANDLED;   

g_settinglaser[id] = true;   



message_begin( MSG_ONE_UNRELIABLE, g_msgid_bartime, {0,0,0}, id );   

write_short(1);   

message_end();  

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

client_cmd(id, "spk buttons/button3.wav");  



return PLUGIN_HANDLED;   

}   



public StopCreateLaserMine(id)   

{ 





DeleteTask(id);   

message_begin( MSG_ONE_UNRELIABLE, g_msgid_bartime, {0,0,0}, id );   

write_short(0);   

message_end();   



return PLUGIN_HANDLED;   

}   



public StopReturnLaserMine(id)   

{ 





DeleteTask(id);   

message_begin( MSG_ONE_UNRELIABLE, g_msgid_bartime, {0,0,0}, id );   

write_short(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) > 90.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,"[Lasermine 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_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,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]--;   

DeleteTask(id);   

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:CanCheck(id,mode)   

{ 



if( !get_pcvar_num( g_LENABLE ) )   

{ 



//        client_print(id, print_chat, "%s %s",CHATTAG,STR_NOTACTIVE);  

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_NOTACTIVE);  

client_cmd(id, "spk buttons/button2.wav");  

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

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_NOACCESS);              

return false;   

}   

if(!pev_user_alive(id)) return false;   

#if defined BIOHAZARD_SUPPORT   

if(is_user_zombie(id))   

{ 



//        client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT);   

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_CBT);  

return false;   

}   

#endif   

if (!CheckCanTeam(id))   

{ 



//       client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT);   

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_CBT);   

return false;   

}   

if( mode == 0)   

{ 



if(g_havemine[id] <= 0)   

{ 



//            client_print(id, print_chat, "%s %s",CHATTAG,STR_DONTHAVEMINE);  

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_DONTHAVEMINE);  

client_cmd(id, "spk buttons/button2.wav");  

return false;   

}   

}   

if (mode == 1)   

{ 



if (get_pcvar_num(g_LBUYMODE) == 0)   

{ 



//            client_print(id, print_chat, "%s %s",CHATTAG,STR_CANTBUY);   

ColorChat(id, NORMAL, "^4%s ^3%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);   

ColorChat(id, NORMAL, "^4%s ^3%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,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS);  

ColorChat(id,NORMAL, "^4%s ^3%s ^1%d ^3%s",CHATTAG,STR_DELAY,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS);  

client_cmd(id, "spk buttons/button2.wav");  

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) > 90.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);   

ColorChat(id, NORMAL, "^4%s ^3%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);   

ColorChat(id, NORMAL, "^4%s ^3%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)  

ColorChat(id, NORMAL, "^4%s ^3%s",CHATTAG,STR_PLANTWALL)  

client_cmd(id, "spk buttons/button2.wav");      

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] = 20;   

tcolor[2] = 0;   

}   

case 2:{   

tcolor[0] = 0;   

tcolor[1] = 0;   

tcolor[2] = 255;   

}   

}   

}else   

{ 



tcolor[0] = 200;   

tcolor[1] = 50;   

tcolor[2] = 100;   

}   

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)))   

{ 



// 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();   

}   



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)) && !equal(szClassName, ENT_CLASS_NAME))   

{ 



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)   

{ 



client_cmd(isHit, "spk %s", ENT_SOUND4)   

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))   

{ 



client_cmd(isHit, "spk %s", ENT_SOUND4)   

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))   

{ 



client_cmd(isHit, "spk %s", ENT_SOUND4)   

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_BROADCAST, 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_BROADCAST, 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)   

ColorChat(id, NORMAL, "^4%s ^3%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_UNRELIABLE, 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, "<font size=4 color=#FA2C00><b><center>*Zm.CsPower.Ro*</center></b></font><br />")

len += formatex(msg[len], SIZE - len, "<font size=3 color=#FA2C00>RO</LI><br>")

len += formatex(msg[len], SIZE - len, "<font color=#0000ff>Bind-uri Lasermine. </LI><br>")

len += formatex(msg[len], SIZE - len, "<font color=#00FF00>Plantare Lasermine: scrie in consola bind <font color=#FA2C00>v <font color=#00FF00>+setlaser. Tine apasat (<font color=#FA2C00>V<font color=#00FF00>) la Perete.</LI><br>")

len += formatex(msg[len], SIZE - len, "<font color=#00FF00>Deplantare Lasermine: scrie in consola bind <font color=#FA2C00>c <font color=#00FF00>+dellaser. Tine apasat (<font color=#FA2C00>C<font color=#00FF00>) la Lasermine.</UL><br>")

len += formatex(msg[len], SIZE - len, "<font color=#FA2C00>EN</LI><br>") 

len += formatex(msg[len], SIZE - len, "<font color=#0000ff>Lasermines Binds. </LI><br>")

len += formatex(msg[len], SIZE - len, "<font color=#00FF00>Plant Lasermine: write in the console bind <font color=#FA2C00>v <font color=#00FF00>+setlaser. Press and Hold (<font color=#FA2C00>V<font color=#00FF00>) to Wall.</LI><br>")   

len += formatex(msg[len], SIZE - len, "<font color=#00FF00>Deplant Lasermine: write in the console bind <font color=#FA2C00>c <font color=#00FF00>+dellaser. Press and Hold (<font color=#FA2C00>C<font color=#00FF00>) to Lasermine. </UL><br>")    

len += formatex(msg[len], SIZE - len, "</body></html>")   

//show_motd(id, msg, "Lasermine")   

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_disconnected(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);   

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 fw_TraceLine( Float:fStart[3] , Float:fEnd[3] , Conditions , id , iTrace )  

{  

static ent, szClassName[33], szPlayerName[32], playerid, Float: fHealth; 



if( pev_valid( ( ent = get_tr2( iTrace , TR_pHit ) ) ) )  

{  

pev(ent, pev_classname, szClassName, szClassName,32) 

pev(ent, pev_health, fHealth ) 



if(equal(szClassName, ENT_CLASS_NAME))  

{ 

playerid = pev(ent, LASERMINE_OWNER) 

get_user_name(playerid, szPlayerName, 31) 



if(cs_get_user_team(playerid) == CS_TEAM_T) {

set_hudmessage(255, 0, 0, -1.0, 0.55, 0, 0.1, 0.1, 0.1, 0.1);  

show_hudmessage(id, "Owner: %s^n Health: %0.1f%%", szPlayerName, fHealth * 100 / get_pcvar_num(g_LHEALTH));

} 

if(cs_get_user_team(playerid) == CS_TEAM_CT) {

set_hudmessage(0, 0, 255, -1.0, 0.55, 0, 0.1, 0.1, 0.1, 0.1);  

show_hudmessage(id, "Owner: %s^n Health: %0.1f%%", szPlayerName, fHealth * 100 / get_pcvar_num(g_LHEALTH));

} 

}

}

}

public Lasermine_TakeDamagePre(victim, inflictor, attacker, Float:f_Damage, bit_Damage)
{ 
	if(!pev_valid(victim)) 
		return HAM_IGNORED;

	static EntityName[32], Owner; 

	pev(victim, pev_classname, EntityName, 31);
	if(!equal(EntityName, ENT_CLASS_NAME))
		return HAM_IGNORED;
	
	Owner = pev(victim, LASERMINE_OWNER) 
	if(Owner != attacker &&  (!is_user_zombie(attacker) && !is_user_zombie(Owner) || is_user_zombie(attacker) && is_user_zombie(Owner)))
		return HAM_SUPERCEDE;
	
	return HAM_IGNORED
Pentru ajutor, faceți cerere bine detaliată, completând și respectând modelul corespunzător.
Nu-mi mai dați cereri doar pentru a mă avea în lista de prieteni.
Dacă te ajut, și mă ignori/etc > te adaug în „foe”.
Aveți grijă la cei ce încearcă să mă copieze sau să dea drept mine..Puteți lua legătura cu mine prin STEAM dacă aveți o problemă/nelămurire în acest caz! Cont de forum am doar aici.
În cazul în care utilizați ceva din ce am postat(ex: aici), e bine să fiți la curent cu modificările aduse și de aici, iar dacă sunt ceva probleme nu ezitați să luați legătura cu mine. Actualizarea unor coduri nu se vor afișa public, doar dacă se găsește ceva critic/urgent de remediat, unele fiind coduri vechi iar unele refăcute chiar recent dar private.
* Nume pe cs1.6: eVoLuTiOn \ Nume vechi: eVo
* Atelierul meu - post2819572.html#p2819572 (închis, click link ca să vedeți de ce)
sammi1
Membru, skill 0
Membru, skill 0
Posts: 49
Joined: 30 Jan 2021, 22:38
Detinator Steam: Nu
CS Status: Citesc forumul eXtreamCS.com...!
Detinator server CS: Zm.CsPower.Ro
Fond eXtream: 0
Has thanked: 23 times

07 Feb 2021, 00:41

Merge doar daca cumpar lasermine prin comanda /lm, primele 2 care le primeste moca la inceput de runda nu le ia, oare nu le citeste pe primele 2 deoarece sunt date moca la inceput de runda?
Eidt: am observat ca daca plantez doar un laser din primele 2 primite la inceput de runda, si scriu /takelm, ia laserul, dar daca plantez ambele lasere nu mai ia laserele, creca trebuie sa ai 1 laser la tine, ca sa-l ia pe celalalt, de aia daca le plantez pe ambele, si cumpar altul, am 1 in dotare si de aia le ia pe celelalte 2, tin sa mentionez ca numar maxim pe care un player poate planta lasere este de 2, chiar daca poate cumpara, am pus sa poata cumpara in caz ca ii sparge cineva un laser, sa poata cumpara altul in locul lui.
Edit2: am reusit sa fixez problemele intampinate ulterior, insa vreau sa vad cum merge si cu mai multi playeri, la ora asta fiind singur, totul a mers exact cum am vrut, as dori sa fie pastrat topicul deschis pana maine seara pentru eventuale buguri, si voi reveni pe seara cu un ultim edit, mersi frumos din nou Levin, m-ai cam ajutat in ultima vreme, multe multumiri pentru timpul acordat
Post Reply

Return to “Modificari pluginuri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 3 guests