Jump to content

modificare lasermine


Zp.Mihai

Recommended Posts

salut as vrea sa se modifice acest plugin 

#include <amxmodx> 
#include <fakemeta> 
#include <xs> 
#include <zombie_plague_special> 


#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" 
#define VERSION "+1.4" 
#else 
#define PLUGIN "Laser/Tripmine Entity" 
#define VERSION "2.3" 
#endif 
#define AUTHOR "SandStriker" 

#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 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[]	= "debris/beamstart9.wav", 
ENT_SOUND5[]	= "items/gunpickup1.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[] = "[BioLaser]", 
#else 
CHATTAG[] = "[Lasermine]", 
#endif 
//STR_MINEDETNATED[] = "Mina ta a fost detonata.", 
//STR_MINEDETNATED2[] = "a detonat mina ta.", 
STR_NOTACTIVE[] = "Laserele nu sunt activate.", 
STR_DONTHAVEMINE[] = "Nu ai nici un laser.", 
//STR_CANTDEPLOY[] = "Echipa ta nu paote planta lasere!", 
STR_MAXDEPLOY[] = "Numarul maxim de lasere a fost atins.", 
STR_MANYPPL[] = "Prea multe lasere in echipa ta...", 
STR_PLANTWALL[] = "Trebuie sa plantezi laserul pe zid!", 
STR_REF[] = "Refer to a lasermine rule with this server. say 'lasermine'", 
#if defined BIOHAZARD_SUPPORT 
STR_CBT[] = "Esti Zombie!Nu poti cumpara si planta un laser.", 
#else 
STR_CBT[] = "Echipa ta nu poate cumpara si planta lasere!", 
#endif 
STR_CANTBUY[] = "Nu poti cumpara pe acest server.", 
STR_HAVEMAX[] = "Ai numarul maxim de lasere.", 
STR_NOMONEY[] = "Nu ai destui bani sa cumperi un laser! ($", 
STR_NEEDED[] = "needed)", 
STR_DELAY[] = "Poti cumpara si planta lasere in", 
STR_SECONDS[] = "secunde.", 
STR_BOUGHT[] = "Tocmai ai cumparat un laser.", 
STR_STATE[] = "LaserMine Detinute:", 
STR_NOACCESS[] = "Nu ai acces la aceasta comanda."; 

new g_EntMine; 
new beam, boom 
new 
g_LENABLE,g_LFMONEY,g_LAMMO,g_LDMG, 
g_LTMAX,g_LCOST,g_LHEALTH,g_LMODE,g_LRADIUS,g_LRDMG,g_LFF,g_LCBT; 
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,g_NEMROUND,g_SURVROUND, g_SNIPROUND, g_ASSASROUND, g_PREDROUND, g_BERROUND, g_WESROUND, g_SPYROUND; 

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

#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","100000"); //laser hit dmg 
g_LCOST = register_cvar("bio_ltm_cost","6000"); 
g_LFMONEY = register_cvar("bio_ltm_fragmoney","400"); 
g_LHEALTH = register_cvar("bio_ltm_health","850"); 
g_LTMAX = register_cvar("bio_ltm_teammax","15"); 
g_LRADIUS = register_cvar("bio_ltm_radius","320.0"); 
g_LRDMG = register_cvar("bio_ltm_rdmg","10000"); //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","1"); 
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","0"); 
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","100000"); //laser hit dmg 
g_LCOST = register_cvar("amx_ltm_cost","0"); 
g_LFMONEY = register_cvar("amx_ltm_fragmoney","400"); 
g_LHEALTH = register_cvar("amx_ltm_health","850"); 
g_LTMAX = register_cvar("amx_ltm_teammax","15"); 
g_LRADIUS = register_cvar("amx_ltm_radius","320.0"); 
g_LRDMG = register_cvar("amx_ltm_rdmg","10000"); //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","1"); 
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","0"); 
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","1"); //0 is +USE key, 1 is bind, 2 is each. 
g_NEMROUND	= register_cvar("zp_ltm_nemround","0"); 
g_SURVROUND	= register_cvar("zp_ltm_survround","1"); 
g_SNIPROUND = register_cvar("zp_ltm_snipround", "1"); 
g_ASSASROUND = register_cvar("zp_ltm_assasround", "1"); 
g_SPYROUND = register_cvar("zp_ltm_spyround", "1"); 
g_PREDROUND = register_cvar("zp_itm_predatorround", "1"); 
g_BERROUND = register_cvar("zp_itm_berseround", "1"); 
g_WESROUND = register_cvar("zp_itm_weskerround", "1"); 
#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"); 
// -- Forward. 
register_forward(FM_Think, "ltm_Think" ); 
register_forward(FM_PlayerPostThink, "ltm_PostThink" ); 
register_forward(FM_PlayerPreThink, "ltm_PreThink"); 
} 

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

return PLUGIN_CONTINUE; 
} 

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

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

new file[64]; get_localinfo("amxx_configsdir",file,63); 
#if defined BIOHAZARD_SUPPORT 
format(file, 63, "%s/bhltm_cvars.cfg", file); 
#else 
format(file, 63, "%s/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 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, 108, {0,0,0}, id ); 
write_byte(1); 
write_byte(0); 
message_end(); 

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

return PLUGIN_HANDLED; 
} 

public ReturnLaserMine_Progress(id) 
{ 

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

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

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


return PLUGIN_HANDLED; 
} 

public StopCreateLaserMine(id) 
{ 

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

return PLUGIN_HANDLED; 
} 

public StopReturnLaserMine(id) 
{ 

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

return PLUGIN_HANDLED; 
} 

public ReturnMine(id) 
{ 
id -= TASK_RELEASE; 
new tgt,body,Float:vo[3],Float:to[3]; 
get_user_aiming(id,tgt,body); 
if(!pev_valid(tgt)) return; 
pev(id,pev_origin,vo); 
pev(tgt,pev_origin,to); 
if(get_distance_f(vo,to) > 70.0) return; 

new EntityName[32]; 
pev(tgt, pev_classname, EntityName, 31); 
if(!equal(EntityName, ENT_CLASS_NAME)) return; 
if(pev(tgt,LASERMINE_OWNER) != id) return; 
RemoveEntity(tgt); 

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

return; 
} 

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

engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS); 

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

set_pev(i_Ent,pev_frame,0); 
set_pev(i_Ent,pev_body,3); 
set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD); 
set_pev(i_Ent,pev_framerate,0); 

set_pev(i_Ent,pev_takedamage,DAMAGE_YES); 

set_pev(i_Ent,pev_dmg,100.0); 
set_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); 
return false; 
} 
if( get_pcvar_num(g_LACCESS) != 0) 
if(!(get_user_flags(id) & ADMIN_IMMUNITY)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_NOACCESS); 
return false; 
} 
if(!pev_user_alive(id)) return false; 
#if defined BIOHAZARD_SUPPORT 
if(is_user_zombie(id)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT); 
return false; 
} 
#endif 
if (!CheckCanTeam(id)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_CBT); 
return false; 
} 
if( mode == 0) 
{ 
if(g_havemine[id] <= 0) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_DONTHAVEMINE); 
return false; 
} 
} 
if (mode == 1) 
{ 
if (get_pcvar_num(g_LBUYMODE) == 0) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_CANTBUY); 
return false; 
} 
if (g_havemine[id] >= get_pcvar_num(g_LAMMO)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_HAVEMAX); 
return false; 
} 
if (cs_get_user_money(id) < get_pcvar_num(g_LCOST)) 
{ 
client_print(id, print_chat, "%s %s%d %s",CHATTAG, STR_NOMONEY,get_pcvar_num(g_LCOST),STR_NEEDED); 
return false; 
} 
} 
if(!CheckTime(id)) 
{ 
client_print(id,print_chat, "%s %s %d %s",CHATTAG,STR_DELAY,get_pcvar_num(g_LDELAY)-g_nowtime,STR_SECONDS); 
return false; 
} 

return true; 
} 

bool:ReturnCheck( id ) 
{ 
if(!CanCheck(id,-1)) return false; 
if(g_havemine[id] + 1 > get_pcvar_num(g_LAMMO)) return false; 
new tgt,body,Float:vo[3],Float:to[3]; 
get_user_aiming(id,tgt,body); 
if(!pev_valid(tgt)) return false; 
pev(id,pev_origin,vo); 
pev(tgt,pev_origin,to); 
if(get_distance_f(vo,to) > 70.0) return false; 

new EntityName[32]; 
pev(tgt, pev_classname, EntityName, 31); 
if(!equal(EntityName, ENT_CLASS_NAME)) return false; 
if(pev(tgt,LASERMINE_OWNER) != id) return false; 

return true; 
} 

bool:CreateCheck( id ) 
{ 
if (!CanCheck(id,0)) return false; 

if(zp_is_nemesis_round() && get_pcvar_num(g_NEMROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Nemesis"); 
return false; 
} 

if(zp_is_survivor_round() && get_pcvar_num(g_SURVROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Survivor"); 
return false; 
} 
if(zp_is_sniper_round() && get_pcvar_num(g_SNIPROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Sniper"); 
return false; 
} 
if(zp_is_assassin_round() && get_pcvar_num(g_ASSASROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Assassin"); 
return false; 
} 
if(zp_is_predator_round() && get_pcvar_num(g_PREDROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Predator"); 
return false; 
} 
if(zp_is_berserker_round() && get_pcvar_num(g_BERROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Cutitar"); 
return false; 
} 
if(zp_is_wesker_round() && get_pcvar_num(g_WESROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Pistolar"); 
return false; 
} 
if(zp_is_spy_round() && get_pcvar_num(g_SPYROUND)) 
{ 
client_print(id, print_chat, "Nu poti plata Laser la runda Spion"); 
return false; 
} 
if (g_deployed[id] >= get_pcvar_num(g_LAMMO)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_MAXDEPLOY); 
return false; 
} 

//client_print(id,print_chat,"[Lasermine] your team deployed %d",TeamDeployedCount(id)) 
if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX)) 
{ 
client_print(id, print_chat, "%s %s",CHATTAG,STR_MANYPPL); 
return false; 
} 

new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3]; 

pev( id, pev_origin, vOrigin ); 
velocity_by_aim( id, 128, vTraceDirection ); 
xs_vec_add( vTraceDirection, vOrigin, vTraceEnd ); 

engfunc( EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0 ); 

new Float:fFraction,Float:vTraceNormal[3]; 
get_tr2( 0, TR_flFraction, fFraction ); 

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

//get_tr2( 0, TR_pHit ); 

return true; 
} 

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

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

static Float:fCurrTime; 
fCurrTime = get_gametime(); 

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

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

PlaySound( i_Ent, ACTIVATE_SOUND ); 
} 
if(get_pcvar_num(g_LGLOW)!=0) 
{ 
if(get_pcvar_num(g_LCLMODE)==0) 
{ 
switch (pev(i_Ent,LASERMINE_TEAM)) 
{ 
case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,255,0,0,kRenderNormal,5); 
case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,0,0,255,kRenderNormal,5); 
} 
}else 
{ 
set_rendering(i_Ent,kRenderFxGlowShell,0,255,0,kRenderNormal,5); 
} 
} 
set_pev( i_Ent, pev_nextthink, fCurrTime + 0.1 ); 
} 
case BEAMBREAK_THINK : 
{ 
static Float:vEnd[3],Float:vOrigin[3]; 
pev( i_Ent, pev_origin, vOrigin ); 
pev( i_Ent, LASERMINE_BEAMENDPOINT, vEnd ); 

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

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

// -- Something has passed the laser. 
if ( fFraction < 1.0 ) 
{ 
// -- Ignoring others tripmines entity. 
if(pev_valid(iHit)) 
{ 
pev( iHit, pev_classname, EntityName, 31 ); 

if( !equal( EntityName, ENT_CLASS_NAME ) ) 
{ 
set_pev( i_Ent, pev_enemy, iHit ); 
if(get_pcvar_num(g_LMODE) == MODE_LASERMINE) 
CreateLaserDamage(i_Ent,iHit); 
else 
if(get_pcvar_num(g_LFF) || CsTeams:pev(i_Ent,LASERMINE_TEAM) != cs_get_user_team(iHit)) 
set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK ); 

set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) ); 
} 
} 
} 
if(get_pcvar_num(g_LDMGMODE)!=0) 
if(pev(i_Ent,LASERMINE_HITING) != iHit) 
set_pev(i_Ent,LASERMINE_HITING,iHit); 

// -- Tripmine is still there. 
if ( pev_valid( i_Ent )) 
{ 
static Float:fHealth; 
pev( i_Ent, pev_health, fHealth ); 

if( fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME)) 
{ 
set_pev( i_Ent, LASERMINE_STEP, EXPLOSE_THINK ); 
set_pev( i_Ent, pev_nextthink, fCurrTime + random_float( 0.1, 0.3 ) ); 
} 

static Float:fBeamthink; 
pev( i_Ent, LASERMINE_BEAMTHINK, fBeamthink ); 

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

return FMRES_IGNORED; 
} 

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

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

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

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

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

new Float:kickback = 0.0; 

// Needed for doing some nice calculations - 
new Float:Tabsmin[3], Float:Tabsmax[3]; 
new Float:vecSpot[3]; 
new Float:Aabsmin[3], Float:Aabsmax[3]; 
new Float:vecSee[3]; 
new trRes; 
new Float:flFraction; 
new Float:vecEndPos[3]; 
new Float:distance; 
new Float:origin[3], Float:vecPush[3]; 
new Float:invlen; 
new Float:velocity[3]; 
new iHitHP,iHitTeam; 
// Calculate falloff 
new Float:falloff; 
if (Radius > 0.0) 
{ 
falloff = DmgMAX / Radius; 
} else { 
falloff = 1.0; 
} 

// Find monsters and players inside a specifiec radius 
while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0) 
{ 
if(!pev_valid(ent)) continue; 
if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER))) 
{ 
// Entity is not a player or monster, ignore it 
continue; 
} 
if(!pev_user_alive(ent)) continue; 
// Reset data 
kickback = 1.0; 
tmpdmg = DmgMAX; 

// The following calculations are provided by Orangutanz, THANKS! 
// We use absmin and absmax for the most accurate information 
pev(ent, pev_absmin, Tabsmin); 
pev(ent, pev_absmax, Tabsmax); 
xs_vec_add(Tabsmin,Tabsmax,Tabsmin); 
xs_vec_mul_scalar(Tabsmin,0.5,vecSpot); 

pev(iCurrent, pev_absmin, Aabsmin); 
pev(iCurrent, pev_absmax, Aabsmax); 
xs_vec_add(Aabsmin,Aabsmax,Aabsmin); 
xs_vec_mul_scalar(Aabsmin,0.5,vecSee); 

engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes); 
get_tr2(trRes, TR_flFraction, flFraction); 
// Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD) 
if (flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent) 
{ 
// Work out the distance between impact and entity 
get_tr2(trRes, TR_vecEndPos, vecEndPos); 

distance = get_distance_f(vecSrc, vecEndPos) * falloff; 
tmpdmg -= distance; 
if(tmpdmg < 0.0) 
tmpdmg = 0.0; 

// Kickback Effect 
if(kickback != 0.0) 
{ 
xs_vec_sub(vecSpot,vecSee,origin); 

invlen = 1.0/get_distance_f(vecSpot, vecSee); 

xs_vec_mul_scalar(origin,invlen,vecPush); 
pev(ent, pev_velocity, velocity) 
xs_vec_mul_scalar(vecPush,tmpdmg,vecPush); 
xs_vec_mul_scalar(vecPush,kickback,vecPush); 
xs_vec_add(velocity,vecPush,velocity); 

if(tmpdmg < 60.0) 
{ 
xs_vec_mul_scalar(velocity,12.0,velocity); 
} else { 
xs_vec_mul_scalar(velocity,4.0,velocity); 
} 

if(velocity[0] != 0.0 || velocity[1] != 0.0 || velocity[2] != 0.0) 
{ 
// There's some movement todo - 
set_pev(ent, pev_velocity, velocity) 
} 
} 

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

return 
} 

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

CreateExplosion(iCurrent) 
{ 

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

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

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

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

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

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

new teamid = pev(iCurrent, LASERMINE_TEAM) 

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


szClassName[0] = '^0' 
pev(isHit,pev_classname,szClassName,32) 

if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER))) 
{ 
Alive = pev_user_alive(isHit) 
God = get_user_godmode(isHit) 
if(!Alive || God) return PLUGIN_CONTINUE 

iHitTeam = int:cs_get_user_team(isHit) 
iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG) 
id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32] 
if(iHitHP <= 0) 
{ 
if(iHitTeam != teamid) 
{ 
emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM ) 
hitscore = 1 
cs_set_user_money(id,cs_get_user_money(id) + get_pcvar_num(g_LFMONEY)) 
set_score(id,isHit,hitscore,iHitHP) 
}else 
{ 
if(get_pcvar_num(g_LFF)) 
{ 
emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM ) 
hitscore = -1 
cs_set_user_money(id,cs_get_user_money(id) - get_pcvar_num(g_LFMONEY)) 
set_score(id,isHit,hitscore,iHitHP) 
} 
} 
}else if(iHitTeam != teamid || get_pcvar_num(g_LFF)) 
{ 
emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM ) 
set_user_health(isHit,iHitHP) 
set_pev(iCurrent,LASERMINE_HITING,isHit); 

engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},isHit); 
write_byte(get_pcvar_num(g_LDMG)) 
write_byte(get_pcvar_num(g_LDMG)) 
write_long(DMG_BULLET) 
engfunc(EngFunc_WriteCoord,vOrigin[0]) 
engfunc(EngFunc_WriteCoord,vOrigin[1]) 
engfunc(EngFunc_WriteCoord,vOrigin[2]) 
message_end() 
} 
}else if(equal(szClassName, ENT_CLASS_NAME3)) 
{ 
new hl; 
hl = pev_user_health(isHit); 
set_user_health(isHit,hl-get_pcvar_num(g_LDMG)); 
} 
return PLUGIN_CONTINUE 
} 

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

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

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

return (val == DAMAGE_NO) 
} 

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

return 1 
} 

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

set_score(id,target,hitscore,HP){ 

new idfrags = pev_user_frags(id) + hitscore// get_user_frags(id) + hitscore 
set_user_frags(id,idfrags) 
//set_user_frags(id, idfrags) 
//entity_set_float(id, EV_FL_frags, float(idfrags)) 

new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1 
set_user_frags(target,tarfrags) 
//set_user_frags(target,tarfrags) 
//entity_set_float(target, EV_FL_frags, float(tarfrags)) 

new idteam = int:cs_get_user_team(id) 
new iddeaths = cs_get_user_deaths(id) 


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

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

set_msg_block(g_msgDeathMsg, BLOCK_ONCE) 

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

} 

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

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

message_begin(MSG_ONE, g_msgStatusText, {0,0,0}, id) 
write_byte(0) 
write_string(ammo) 
message_end() 
} 

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; 

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


new tgt,body,Float:vo[3],Float:to[3]; 
get_user_aiming(id,tgt,body); 
if(pev_valid(tgt)) { 
pev(id,pev_origin,vo); 
pev(tgt,pev_origin,to); 
new EntityName[32]; 
pev(tgt, pev_classname, EntityName, 31); 
if(equal(EntityName, ENT_CLASS_NAME)) { 
new OwnerName[32]; 
get_user_name(pev(tgt, LASERMINE_OWNER), OwnerName, 31); 
switch (pev(tgt,LASERMINE_TEAM)) 
{ 
case CS_TEAM_T: set_hudmessage(200, 0, 0, -1.0, 0.60, 0, 6.0, 1.1, 0.0, 0.0, -1) 
case CS_TEAM_CT:set_hudmessage(0, 200, 230, -1.0, 0.60, 0, 6.0, 1.1, 0.0, 0.0, -1) 
} 
show_hudmessage(id, "Owner: %s^nViata: %d ", OwnerName, pev(tgt,pev_health)) 
} 
} 
} 

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

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

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


public newround(id){ 
if(!get_pcvar_num( g_LENABLE )) 
return PLUGIN_CONTINUE 
pev(id, pev_maxspeed,plspeed[id]) 
DeleteTask(id); 
RemoveAllTripmines(id); 
delaycount(id); 
SetStartAmmo(id); 
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); 
} 

#if defined BIOHAZARD_SUPPORT 
public event_infect2(id) 
{ 
DeleteTask(id); 
return PLUGIN_CONTINUE 
} 
#endif 

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

sa se modifice ca atunci cand un zombie sparge laserulul unui human, zombiile respectiv sa primeasca o suma de 10 credite. multumesc

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...