Raised This Month: $ Target: $400
 0% 

(Grosse ? )Modification plugin LM


  
 
 
Thread Tools Display Modes
Author Message
phoque
Senior Member
Join Date: Dec 2009
Old 04-04-2010 , 11:28   (Grosse ? )Modification plugin LM
#1

Bonsoir, je souhaiterais modifier ce plugin lasermine
Code:
/* Plugin generated by AMXX-Studio */
//#define BIOHAZARD_SUPPORT
//#define UL_MONEY_SUPPORT
#include <amxmodx>
#include <fakemeta>
#include <xs>
#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/v_tripmineHL2.mdl",
 ENT_SOUND1[] = "weapons/mine_deploy.wav",
 ENT_SOUND2[] = "weapons/mine_charge.wav",
 ENT_SOUND3[] = "weapons/mine_activate.wav",
 ENT_SOUND4[] = "debris/beamstart9.wav",
 ENT_SOUND5[] = "items/gunpickup2.wav",
 ENT_SOUND6[] = "debris/bustglass1.wav",
 ENT_SOUND7[] = "debris/bustglass2.wav",
 ENT_SPRITE1[]  = "sprites/laserbeam.spr",
 ENT_SPRITE2[]  = "sprites/zerogxplode.spr";
new const
 ENT_CLASS_NAME[] = "lasermine",
 //ENT_CLASS_NAME2[] = "info_target",
 ENT_CLASS_NAME3[] = "func_breakable";
new const
#if defined BIOHAZARD_SUPPORT
 CHATTAG[]   = "[BioLaser]",
#else
 CHATTAG[]   = "[Lasermine]",
#endif
 //STR_MINEDETNATED[]  = "Your mine has detonated.",
 //STR_MINEDETNATED2[] = "detonated your mine.",
 STR_NOTACTIVE[]  = "Lasermines are not currently active.",
 STR_DONTHAVEMINE[] = "You don't have lasermine.",
 //STR_CANTDEPLOY[] = "Your team can't deploying lasermine!",
 STR_MAXDEPLOY[]  = "Maximum mines have been deployed.",
 STR_MANYPPL[]  = "Too many ppl on your team...",
 STR_PLANTWALL[]  = "You must plant the lasermine on a wall!",
 STR_REF[]  = "Refer to a lasermine rule with this server. say 'lasermine'",
#if defined BIOHAZARD_SUPPORT 
 STR_CBT[]  = "Your Zombie! Can't buy and deploying lasermine!",
#else
 STR_CBT[]  = "Your Team Can't buy and deploying lasermine!",
#endif
 STR_CANTBUY[]  = "Can't buying this server.",
 STR_HAVEMAX[]  = "You have a maximum lasermine.",
 STR_NOMONEY[]  = "You don't have enough money to buy a lasermine! ($",
 STR_NEEDED[]  = "needed)",
 STR_DELAY[]  = "You can buying and deploying lasermine in after",
 STR_SECONDS[]  = "seconds.",
 STR_BOUGHT[]  = "You have successfully bought a lasermine.",
 STR_STATE[]  = "LaserMines Ammo:",
 STR_NOACCESS[]  = "You can't access, this command.";
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;
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");
 register_clcmd("say /removeall", "RemoveAllTripminesB")
#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","500");
 g_LTMAX  = register_cvar("bio_ltm_teammax","10");
 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","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","1");
 g_LCMDMODE = register_cvar("bio_ltm_cmdmode","0");  //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","500");
 g_LTMAX  = register_cvar("amx_ltm_teammax","10");
 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","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","1");
 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");
 // -- 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) > 120.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 (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 :P
 new Float:Tabsmin[3], Float:Tabsmax[3];
 new Float:vecSpot[3];
 new Float:Aabsmin[3], Float:Aabsmax[3];
 new Float:vecSee[3];
 new trRes;
 new Float:flFraction;
 new Float:vecEndPos[3];
 new Float:distance;
 new Float:origin[3], Float:vecPush[3];
 new Float:invlen;
 new Float:velocity[3];
 new iHitHP,iHitTeam;
 // Calculate falloff
 new Float:falloff;
 if (Radius > 0.0)
 {
  falloff = DmgMAX / Radius;
 } else {
  falloff = 1.0;
 }
 
 // Find monsters and players inside a specifiec radius
 while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0)
 {
  if(!pev_valid(ent)) continue;
  if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
  {
   // Entity is not a player or monster, ignore it
   continue;
  }
  if(!pev_user_alive(ent)) continue;
  // Reset data
  kickback = 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 FMRES_IGNORED;
 if(pev(id, pev_button ) & IN_USE && !(pev(id, pev_oldbuttons ) & IN_USE ))
  //client_print(id,print_chat,"test");
  CreateLaserMine_Progress(id)
 return FMRES_IGNORED;
}
resetspeed(id)
{
 set_pev(id, pev_maxspeed, plspeed[id])
}
public client_putinserver(id){
 g_deployed[id] = 0;
 g_havemine[id] = 0;
 DeleteTask(id);
 return PLUGIN_CONTINUE
}
public client_disconnect(id){
 if(!get_pcvar_num( g_LENABLE ))
  return PLUGIN_CONTINUE
 DeleteTask(id);
 RemoveAllTripmines(id);
 return PLUGIN_CONTINUE
}
 
public newround(id){
 if(!get_pcvar_num( g_LENABLE ))
  return PLUGIN_CONTINUE
 pev(id, pev_maxspeed,plspeed[id])
 DeleteTask(id);
 RemoveAllTripmines(id);
 delaycount(id);
 SetStartAmmo(id);
 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;
}
 
public RemoveAllTripminesB( 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 );
 
    if(g_havemine[i_Owner] < 3) 
    g_havemine[i_Owner] ++
   }
  }
  else
   set_pev( iEnt, pev_flags, FL_KILLME );
 }
 g_deployed[i_Owner]=0;
 
 ShowAmmo(i_Owner)
}
 
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;
}
J'aimerais que certains admin disposant d'un flag ( Q par exemple ) puisse avoir 4 lasermine au lieu de 3 pour tous le monde. Mais dans le but d'éviter les lags, le plugin restreint le nombre de lasermine par equipes. Aussi j'aimerais bien que les admins disposant de ce flag puissent poser leur 4 mines sans que leur mines soient comptées dans le "amx_ltm_teammax".
( teammax ne compte donc que les mines des joueurs sans le flag Q ).
J'espere que cela est réalisable et que certains voudront bien essayer.


Bon jeu !

Edit: j'utilise ce plugin " en amx_ " pas "en bio_"

Last edited by phoque; 04-04-2010 at 11:30.
phoque is offline
benjibau
Veteran Member
Join Date: Jul 2009
Location: France (Nord 59)
Old 04-04-2010 , 13:06   Re: (Grosse ? )Modification plugin LM
#2

Voila je viens de le tester et cela fonctionne bien sur j'ai ajouter une cvar si tu veux régler pour tes admins.

EDIT: re ajout de la commande /removeall
Attached Files
File Type: sma Get Plugin or Get Source (lasermine_023.sma - 535 views - 40.2 KB)

Last edited by benjibau; 04-04-2010 at 13:16.
benjibau is offline
Send a message via MSN to benjibau
phoque
Senior Member
Join Date: Dec 2009
Old 04-04-2010 , 13:30   Re: (Grosse ? )Modification plugin LM
#3

Merci beaucoup, je vais testé
phoque is offline
 



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 08:37.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode