Page 1 of 1

Problema lasermine

Posted: 27 Jul 2019, 16:22
by MarcoReusNr1
Salut, tot imi apare aceasta problema in logs, stiti de la ce e?
L 07/27/2019 - 00:49:03: [FAKEMETA] Invalid entity
L 07/27/2019 - 00:49:03: [AMXX] Displaying debug trace (plugin "bio_lasermines_final2.amxx")
L 07/27/2019 - 00:49:03: [AMXX] Run time error 10: native error (native "set_pev")
L 07/27/2019 - 00:49:03: [AMXX] [0] bio_lasermines_final2.sma::ltm_Think (line 1909)
L 07/27/2019 - 00:49:03: [AMXX] [1] bio_lasermines_final2.sma::CreateLaserDamage (line 2807)
L 07/27/2019 - 00:49:03: [AMXX] [2] bio_lasermines_final2.sma::ltm_Think (line 1899)
L 07/27/2019 - 00:51:14: Unhandled dynamic native error
L 07/27/2019 - 00:51:14: [AMXX] Displaying debug trace (plugin "bio_lasermines_final2.amxx")
L 07/27/2019 - 00:51:14: [AMXX] Run time error 10: native error (native "is_user_zombie")
L 07/27/2019 - 00:51:14: [AMXX] [0] bio_lasermines_final2.sma::Lasermine_TakeDamagePre (line 3680)

Sursa:
| Afiseaza codul
/* 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/zombie_plague/LaserMines/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;   

}   



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,20,255,0,kRenderNormal,5);   
		
		case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,0,100,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] = 20;   

tcolor[1] = 255;   

tcolor[2] = 0;   

}   

case 2:{   

tcolor[0] = 0;   

tcolor[1] = 100;   

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, "<p><b>LaserMine</b></p><br/><br/>")   

len += formatex(msg[len], SIZE - len, "<p>You can be setting the mine on the wall.</p><br/>")   

len += formatex(msg[len], SIZE - len, "<p>That laser will give what touched it damage.</p><br/><br/>")   

len += formatex(msg[len], SIZE - len, "<p><b>LaserMine Commands</b></p><br/><br/>")   

len += formatex(msg[len], SIZE - len, "<p><b>Say /buy lasermine</b> or <b>Say /lm</b> //buying lasermine<br/>")   

len += formatex(msg[len], SIZE - len, "<b>buy_lasermine</b> //bind ^"F2^" buy_lasermine : using F2 buying lasermine<br/>")   

len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind mouse3 +setlaser : using mouse3 set lasermine on wall<br/>")   

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

show_motd(id, msg, "Lasermine Entity help")   

return PLUGIN_CONTINUE   

}   

else if (containi(said, "laser") != -1) {   

showInfo(id)   

return PLUGIN_CONTINUE   

}   

return PLUGIN_CONTINUE   

}   



public standing(id)    

{ 



if (!g_settinglaser[id])   

return PLUGIN_CONTINUE   



set_pev(id, pev_maxspeed, 1.0)   

//    ShowAmmo(id)   



return PLUGIN_CONTINUE   

}   



public ltm_PostThink(id)    

{ 



if (!g_settinglaser[id] && plsetting[id]){   

resetspeed(id)   

}   

else if (g_settinglaser[id] && !plsetting[id]) {   

pev(id, pev_maxspeed,plspeed[id])   

set_pev(id, pev_maxspeed, 1.0)   

}   

plsetting[id] = g_settinglaser[id]   

return FMRES_IGNORED   

}   



public ltm_PreThink(id)   

{ 



if (!pev_user_alive(id) || g_settinglaser[id] == true || is_user_bot(id) || get_pcvar_num(g_LCMDMODE) == 1)   

return FMRES_IGNORED;   



if(pev(id, pev_button ) & IN_USE && !(pev(id, pev_oldbuttons ) & IN_USE ))   

//client_print(id,print_chat,"test");   

CreateLaserMine_Progress(id)   

return FMRES_IGNORED;   

}   



resetspeed(id)   

{ 



set_pev(id, pev_maxspeed, plspeed[id])   

}   



public client_putinserver(id){   

g_deployed[id] = 0;   

g_havemine[id] = 0;   

DeleteTask(id);   

return PLUGIN_CONTINUE   

}   



public client_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.82, 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, 255, 0, -1.0, 0.82, 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 
}