Raised This Month: $51 Target: $400
 12% 

Ayudo a hacer plugins


  
 
 
Thread Tools Display Modes
_Venganza_
Senior Member
Join Date: Apr 2011
Location: Valparaiso, Chile
Old 05-06-2011 , 19:04   Re: Ayudo a hacer plugins
#21

Gladius me puedes ayudar a obtener la entidad de estos lasermines para poder mandar al que le apunte al laser un hud con el dueño del laser ?

PHP 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_F
#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_tripmine.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[]    = "No tienes minas laser.",
    
//STR_CANTDEPLOY[]    = "Your team can't deploying lasermine!",
    
STR_MAXDEPLOY[]        = "Ya has puesto el maximo de minas.",
    
STR_MANYPPL[]        = "Hay mucha gente en tu equipo...",
    
STR_PLANTWALL[]        = "Solo puedes plantar la mina en una pared o piso!",
    
STR_REF[]        = "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[]        = "Tienes el maximo de minas.",
    
STR_NOMONEY[]        = "No tienes plata para comprar una mina! ($",
    
STR_NEEDED[]        = "necesaria)",
    
STR_DELAY[]        = "Puedes comprar y poner minas despues de",
    
STR_SECONDS[]        = "segundos.",
    
STR_BOUGHT[]        = "Compraste correctamente una mina.",
    
STR_STATE[]        = "Minas Laser:",
    
STR_NOACCESS[]        = "No puedes acceder a este comando.";

new 
g_EntMine;
new 
beamboom
new 
    
g_LENABLE,g_LFMONEY,g_LAMMO,g_LAAMMO,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(PLUGINVERSIONAUTHOR);
    
    
// 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","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","1");
    
g_LAAMMO    register_cvar("amx_ltm_admin_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(file63"%s/bhltm_cvars.cfg"file);
#else
    
format(file63"%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_beginMSG_ONE108, {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_beginMSG_ONE108, {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_ONE108, {0,0,0}, id);
    
write_byte(0);
    
write_byte(0);
    
message_end();

    return 
PLUGIN_HANDLED;
}

public 
StopReturnLaserMine(id)
{

    
DeleteTask(id);
    
message_begin(MSG_ONE108, {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(tgtpev_classnameEntityName31);
    if(!
equal(EntityNameENT_CLASS_NAME)) return;
    if(
pev(tgt,LASERMINE_OWNER) != id) return;
    
RemoveEntity(tgt);

    
g_havemine[id] ++;
    
g_deployed[id] --;
    
emit_sound(idCHAN_ITEMENT_SOUND5VOL_NORMATTN_NORM0PITCH_NORM)
    
ShowAmmo(id)

    return;
}

public 
Spawnid )
{
    
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];
    
pevidpev_originvOrigin );
    
velocity_by_aimid128vTraceDirection );
    
xs_vec_addvTraceDirectionvOriginvTraceEnd );
    
    
engfuncEngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSid);
    
    new 
Float:fFraction;
    
get_tr20TR_flFractionfFraction );
    

    
// -- We hit something!
    
if ( fFraction 1.0 )
    {
        
// -- Save results to be used later.
        
get_tr20TR_vecEndPosvTraceEnd );
        
get_tr20TR_vecPlaneNormalvNormal );
    }


    
xs_vec_mul_scalarvNormal8.0vNormal );
    
xs_vec_addvTraceEndvNormalvNewOrigin );

    
engfunc(EngFunc_SetSizei_EntFloat:{ -4.0, -4.0, -4.0 }, Float:{ 4.04.04.0 } );
    
engfunc(EngFunc_SetOrigini_EntvNewOrigin );

    
// -- 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(vNormal8192.0vNormal );
    
xs_vec_addvNewOriginvNormalvBeamEnd );

    
engfuncEngFunc_TraceLinevNewOriginvBeamEndIGNORE_MONSTERS, -1);

    
get_tr20TR_vecPlaneNormalvNormal );
    
get_tr20TR_vecEndPosvTracedBeamEnd );

    
// -- Save results to be used later.
    
set_pev(i_EntLASERMINE_OWNERid );
    
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_POWERUPfCurrTime 2.5 );
   
    
set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
    
set_pev(i_Ent,pev_nextthinkfCurrTime 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;cs_get_user_team(id);
    static 
cnt;cnt=0;

    for(
1;<= g_MaxPL;i++)
    {
        if(
is_user_connected(i))
            if(
== 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_numg_LENABLE ) )
    {
        
client_print(idprint_chat"%s %s",CHATTAG,STR_NOTACTIVE);
        return 
false;
    }
    if( 
get_pcvar_num(g_LACCESS) != 0)
        if(!(
get_user_flags(id) & ADMIN_IMMUNITY))
        {
            
client_print(idprint_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(idprint_chat"%s %s",CHATTAG,STR_CBT);
        return 
false;
    }
#endif
    
if (!CheckCanTeam(id))
    {
        
client_print(idprint_chat"%s %s",CHATTAG,STR_CBT);
        return 
false;
    }
    if( 
mode == 0)
    {
        if(
g_havemine[id] <= 0)
        {
            
client_print(idprint_chat"%s %s",CHATTAG,STR_DONTHAVEMINE);
            return 
false;
        }
    }
    if (
mode == 1)
    {
        if (
get_pcvar_num(g_LBUYMODE) == 0)
        {
            
client_print(idprint_chat"%s %s",CHATTAG,STR_CANTBUY);
            return 
false;
        }
        if (
g_havemine[id] >= get_pcvar_num((get_user_flags(id) & ACCESSLEVEL) ? g_LAAMMO g_LAMMO))
        {
            
client_print(idprint_chat"%s %s",CHATTAG,STR_HAVEMAX);
            return 
false;
        }
        if (
cs_get_user_money(id) < get_pcvar_num(g_LCOST))
        {
            
client_print(idprint_chat"%s %s%d %s",CHATTAGSTR_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:ReturnCheckid )
{
    if(!
CanCheck(id,-1)) return false;
    if(
g_havemine[id] + get_pcvar_num((get_user_flags(id) & ACCESSLEVEL) ? g_LAAMMO 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(tgtpev_classnameEntityName31);
    if(!
equal(EntityNameENT_CLASS_NAME)) return false;
    if(
pev(tgt,LASERMINE_OWNER) != id) return false;
    
    return 
true;
}

bool:CreateCheckid )
{
    if (!
CanCheck(id,0)) return false;
    if (
g_deployed[id] >= get_pcvar_num((get_user_flags(id) & ACCESSLEVEL) ? g_LAAMMO g_LAMMO))
    {
        
client_print(idprint_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(idprint_chat"%s %s",CHATTAG,STR_MANYPPL);
        return 
false;
    }
    
    new 
Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];
    
    
pevidpev_originvOrigin );
    
velocity_by_aimid128vTraceDirection );
    
xs_vec_addvTraceDirectionvOriginvTraceEnd );
    
    
engfuncEngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSid);
    
    new 
Float:fFraction,Float:vTraceNormal[3];
    
get_tr20TR_flFractionfFraction );
    
    
// -- We hit something!
    
if ( fFraction 1.0 )
    {
        
// -- Save results to be used later.
        
get_tr20TR_vecEndPosvTraceEnd );
        
get_tr20TR_vecPlaneNormalvTraceNormal );

        
//get_tr2( 0, TR_pHit );

        
return true;
    }

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

public 
ltm_Thinki_Ent )
{
    if ( !
pev_validi_Ent ) )
        return 
FMRES_IGNORED;
    new 
EntityName[32];
    
pevi_Entpev_classnameEntityName31);
    if(!
get_pcvar_num(g_LENABLE)) return FMRES_IGNORED;
    
// -- Entity is not a tripmine, ignoring the next...
    
if ( !equalEntityNameENT_CLASS_NAME ) )
        return 
FMRES_IGNORED;

    static 
Float:fCurrTime;
    
fCurrTime get_gametime();

    switch( 
pevi_EntLASERMINE_STEP ) )
    {
        case 
POWERUP_THINK :
        {
            new 
Float:fPowerupTime;
            
pevi_EntLASERMINE_POWERUPfPowerupTime );

            if( 
fCurrTime fPowerupTime )
            {
                
set_pevi_Entpev_solidSOLID_BBOX );
                
set_pevi_EntLASERMINE_STEPBEAMBREAK_THINK );

                
PlaySoundi_EntACTIVATE_SOUND );
            }
            if(
get_pcvar_num(g_LGLOW)!=0)
            {
                if(
get_pcvar_num(g_LCLMODE)==0)
                {
                    switch (
pev(i_Ent,LASERMINE_TEAM))
                    {
                        case 
CS_TEAM_Tset_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_pevi_Entpev_nextthinkfCurrTime 0.1 );
        }
        case 
BEAMBREAK_THINK :
        {
            static 
Float:vEnd[3],Float:vOrigin[3];
            
pevi_Entpev_originvOrigin );
            
pevi_EntLASERMINE_BEAMENDPOINTvEnd );

            static 
iHitFloat:fFraction;
            
engfuncEngFunc_TraceLinevOriginvEndDONT_IGNORE_MONSTERSi_Ent);

            
get_tr20TR_flFractionfFraction );
            
iHit get_tr20TR_pHit );

            
// -- Something has passed the laser.
            
if ( fFraction 1.0 )
            {
                
// -- Ignoring others tripmines entity.
                
if(pev_valid(iHit))
                {
                    
peviHitpev_classnameEntityName31 );
    
                    if( !
equalEntityNameENT_CLASS_NAME ) )
                    {
                        
set_pevi_Entpev_enemyiHit );
                        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_pevi_EntLASERMINE_STEPEXPLOSE_THINK );
                
                        
set_pevi_Entpev_nextthinkfCurrTime random_float0.10.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_validi_Ent ))
            {
                static 
Float:fHealth;
                
pevi_Entpev_healthfHealth );

                if( 
fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME))
                {
                    
set_pevi_EntLASERMINE_STEPEXPLOSE_THINK );
                    
set_pevi_Entpev_nextthinkfCurrTime random_float0.10.3 ) );
                }
                    
                static 
Float:fBeamthink;
                
pevi_EntLASERMINE_BEAMTHINKfBeamthink );
                    
                if( 
fBeamthink fCurrTime && get_pcvar_num(g_LVISIBLE))
                {
                    
DrawLaser(i_EntvOriginvEnd );
                    
set_pevi_EntLASERMINE_BEAMTHINKfCurrTime 0.1 );
                }
                
set_pevi_Entpev_nextthinkfCurrTime 0.01 );
            }
        }
        case 
EXPLOSE_THINK :
        {
            
// -- Stopping entity to think
            
set_pevi_Entpev_nextthink0.0 );
            
PlaySoundi_EntSTOP_SOUND );
            
g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;
            
CreateExplosioni_Ent );
            
CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS))
            
RemoveEntity   i_Ent );
        }
    }

    return 
FMRES_IGNORED;
}

PlaySoundi_Enti_SoundType )
{
    switch ( 
i_SoundType )
    {
        case 
POWERUP_SOUND :
        {
            
emit_soundi_EntCHAN_VOICEENT_SOUND1VOL_NORMATTN_NORM0PITCH_NORM );
            
emit_soundi_EntCHAN_BODY ENT_SOUND20.2ATTN_NORM0PITCH_NORM );
        }
        case 
ACTIVATE_SOUND :
        {
            
emit_soundi_EntCHAN_VOICEENT_SOUND30.5ATTN_NORM175 );
        }
        case 
STOP_SOUND :
        {
            
emit_soundi_EntCHAN_BODY ENT_SOUND20.2ATTN_NORMSND_STOPPITCH_NORM );
            
emit_soundi_EntCHAN_VOICEENT_SOUND30.5ATTN_NORMSND_STOP75 );
        }
    }
}

DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3] )
{
    new 
tcolor[3];
    new 
teamid pev(i_EntLASERMINE_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(iCurrentpev_originvecSrc);

    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_FindEntityInSphereentvecSrcRadius)) != 0)
    {
        if(!
pev_valid(ent)) continue;
        if(!(
pev(entpev_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(entpev_absminTabsmin);
        
pev(entpev_absmaxTabsmax);
        
xs_vec_add(Tabsmin,Tabsmax,Tabsmin);
        
xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
        
        
pev(iCurrentpev_absminAabsmin);
        
pev(iCurrentpev_absmaxAabsmax);
        
xs_vec_add(Aabsmin,Aabsmax,Aabsmin);
        
xs_vec_mul_scalar(Aabsmin,0.5,vecSee);
        
        
engfunc(EngFunc_TraceLinevecSeevecSpot0iCurrenttrRes);
        
get_tr2(trResTR_flFractionflFraction);
        
// Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD)
        
if (flFraction >= 0.9 || get_tr2(trResTR_pHit) == ent)
        {
            
// Work out the distance between impact and entity
            
get_tr2(trResTR_vecEndPosvecEndPos);
            
            
distance get_distance_f(vecSrcvecEndPos) * 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(vecSpotvecSee);

                
xs_vec_mul_scalar(origin,invlen,vecPush);
                
pev(entpev_velocityvelocity)
                
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(entpev_velocityvelocity)
                }
            }

            
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(entiHitHP)
                    
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_BROADCASTSVC_TEMPENTITY);
    
write_byte(99); //99 = KillBeam
    
write_short(iCurrent);
    
message_end();

    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvOrigin0);
    
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 ) 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(iCurrentLASERMINE_TEAM)

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

    
    szClassName
[0] = '^0'
    
pev(isHit,pev_classname,szClassName,32)
    
    if((
pev(isHitpev_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(isHitCHAN_WEAPONENT_SOUND41.0ATTN_NORM0PITCH_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(isHitCHAN_WEAPONENT_SOUND41.0ATTN_NORM0PITCH_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(isHitCHAN_WEAPONENT_SOUND41.0ATTN_NORM0PITCH_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(szClassNameENT_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 set_pev(idpev_healthfloat(health)) : dllfunc(DLLFunc_ClientKillid);
}

stock get_user_godmode(index) {
    new 
Float:val
    pev
(indexpev_takedamageval)

    return (
val == DAMAGE_NO)
}

stock set_user_frags(indexfrags)
{
    
set_pev(indexpev_fragsfloat(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) + //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_ALLg_msgDeathMsg, {000} ,0)
    
write_byte(id)
    
write_byte(target)
    
write_byte(0)
    
write_string(ENT_CLASS_NAME)
    
message_end()

    
message_begin(MSG_ALLg_msgScoreInfo)
    
write_byte(id)
    
write_short(idfrags)
    
write_short(iddeaths)
    
write_short(0)
    
write_short(idteam)
    
message_end()

    
set_msg_block(g_msgDeathMsgBLOCK_ONCE)

    
//entity_set_float(target, EV_FL_health,float(HP))
    
set_user_health(targetHP)
    
//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(idprint_chat"%s %s",CHATTAG,STR_BOUGHT)
    
emit_sound(idCHAN_ITEMENT_SOUND5VOL_NORMATTN_NORM0PITCH_NORM)
    
ShowAmmo(id)
    return 
PLUGIN_HANDLED
}

ShowAmmo(id)

    new 
ammo[51]
    
formatex(ammo50"%s %i/%i",STR_STATEg_havemine[id],get_pcvar_num((get_user_flags(id) & ACCESSLEVEL) ? g_LAAMMO g_LAMMO))

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


public 
showInfo(id)
{
    
client_print(idprint_chatSTR_REF)
}

public 
say_lasermine(id){
    new 
said[32]
    
read_argv(1,said,31);
    if( !
get_pcvar_numg_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(idmsg"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
(idpev_maxspeed1.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(idpev_maxspeed,plspeed[id])
        
set_pev(idpev_maxspeed1.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(idpev_button ) & IN_USE && !(pev(idpev_oldbuttons ) & IN_USE ))
        
//client_print(id,print_chat,"test");
        
CreateLaserMine_Progress(id)
    return 
FMRES_IGNORED;
}

resetspeed(id)
{
    
set_pev(idpev_maxspeedplspeed[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_numg_LENABLE ))
        return 
PLUGIN_CONTINUE
    DeleteTask
(id);
    
RemoveAllTripmines(id);
    return 
PLUGIN_CONTINUE
}


public 
newround(id){
    if(!
get_pcvar_numg_LENABLE ))
        return 
PLUGIN_CONTINUE
    pev
(idpev_maxspeed,plspeed[id])
    
DeleteTask(id);
    
RemoveAllTripmines(id);
    
delaycount(id);
    
SetStartAmmo(id);
    return 
PLUGIN_CONTINUE
}

public 
DeathEvent(){
    if(!
get_pcvar_numg_LENABLE ))
        return 
PLUGIN_CONTINUE

    
new id read_data(2)
    if(
is_user_connected(id)) DeleteTask(id);
    return 
PLUGIN_CONTINUE
}

public 
RemoveAllTripminesi_Owner )
{
    new 
iEnt g_MaxPL 1;
    new 
clsname[32];
    while( ( 
iEnt engfuncEngFunc_FindEntityByStringiEnt"classname"ENT_CLASS_NAME ) ) )
    {
        if ( 
i_Owner )
        {
            if( 
peviEntLASERMINE_OWNER ) != i_Owner )
                continue;
            
clsname[0] = '^0'
            
peviEntpev_classnameclsnamesizeof(clsname)-);
                
            if ( 
equaliclsnameENT_CLASS_NAME ) )
            {
                
PlaySoundiEntSTOP_SOUND );
                
RemoveEntityiEnt );
            }
        }
        else
            
set_peviEntpev_flagsFL_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(entityfx kRenderFxNone255255255render kRenderNormalamount 16)
{
    static 
Float:RenderColor[3];
    
RenderColor[0] = float(r);
    
RenderColor[1] = float(g);
    
RenderColor[2] = float(b);

    
set_pev(entitypev_renderfxfx);
    
set_pev(entitypev_rendercolorRenderColor);
    
set_pev(entitypev_rendermoderender);
    
set_pev(entitypev_renderamtfloat(amount));

    return 
1
}

// Gets offset data
get_offset_value(idtype)
{
    new 
key = -1;
    switch(
type)
    {
        case 
OFFSET_TEAMkey OFFSET_TEAM;
        case 
OFFSET_MONEY:
        {
#if defined UL_MONEY_SUPPORT
            
return cs_get_user_money_ul(id);
#else
            
key OFFSET_MONEY;
#endif
        
}
        case 
OFFSET_DEATHkey OFFSET_DEATH;
    }
    
    if(
key != -1)
    {
        if(
is_amd64_server()) key += 25;
        return 
get_pdata_int(idkey);
    }
    
    return -
1;
}

// Sets offset data
set_offset_value(idtypevalue)
{
    new 
key = -1;
    switch(
type)
    {
        case 
OFFSET_TEAMkey OFFSET_TEAM;
        case 
OFFSET_MONEY:
        {
#if defined UL_MONEY_SUPPORT
            
return cs_set_user_money_ul(idvalue);
#else
            
key OFFSET_MONEY;
            
            
// Send Money message to update player's HUD
            
message_begin(MSG_ONE_UNRELIABLEg_msgMoney, {0,0,0}, id);
            
write_long(value);
            
write_byte(1);    // Flash (difference between new and old money)
            
message_end();
#endif
        
}
        case 
OFFSET_DEATHkey OFFSET_DEATH;
    }
    
    if(
key != -1)
    {
        if(
is_amd64_server()) key += 25;
        
set_pdata_int(idkeyvalue);
    }
    
    return 
PLUGIN_CONTINUE;

_Venganza_ is offline
Destro-
Veteran Member
Join Date: Jun 2010
Location: $me->location();
Old 05-06-2011 , 22:01   Re: Ayudo a hacer plugins
#22

http://www.mapping-zone.net/foro/showthread.php?t=9009
__________________
Destro- is offline
_Venganza_
Senior Member
Join Date: Apr 2011
Location: Valparaiso, Chile
Old 05-06-2011 , 23:54   Re: Ayudo a hacer plugins
#23

Quote:
Originally Posted by Destro- View Post
Hice todo bien pero me tira error number of arguments not match definition en
PHP Code:
show_hudmessage(id"Creador del laser: %d"get_user_name(owner)) 
Codigo Completo:
PHP Code:
public check(id
{
    
id -= TASK
    
new entbody
 
    get_user_aiming
(id entbody)
 
 
    if(!
is_valid_ent(ent))
    return
 
    static 
class_name[32]
 
    
entity_get_string(entEV_SZ_classnameclass_namecharsmax(class_name))
 
    if(
class_name[0] == 'l' && class_name[8] == 'e'
    {
        static 
name[32], owner
 
        owner 
entity_get_int(entEV_INT_iuser3)
        
get_user_name(ownername31)
        
set_hudmessage(1702550, -1.00.806.012.0)
        
show_hudmessage(id"Creador del laser: %d"get_user_name(owner))
    }

_Venganza_ is offline
Destro-
Veteran Member
Join Date: Jun 2010
Location: $me->location();
Old 05-07-2011 , 09:54   Re: Ayudo a hacer plugins
#24

PHP Code:
/* Returns player name. */
native get_user_name(index,name[],len); 
-----------------------------------

PHP Code:
new nick[32]
get_user_name(indexnick31)
client_print(indexprint_chat"tu nick es %s"nick
__________________
Destro- is offline
_Venganza_
Senior Member
Join Date: Apr 2011
Location: Valparaiso, Chile
Old 05-07-2011 , 14:30   Re: Ayudo a hacer plugins
#25

Compila todo bien pero al momento de plantar no se crea la entidad o el laser.

Codigo:
PHP Code:
/* Plugin generated by AMXX-Studio */
//#define BIOHAZARD_SUPPORT
//#define UL_MONEY_SUPPORT

#include <amxmodx>
#include <fakemeta>
#include <xs>
#include <engine>
#include <fun>

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

#define TASK 9457

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_tripmine.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[]    = "No tienes minas laser.",
    
//STR_CANTDEPLOY[]    = "Your team can't deploying lasermine!",
    
STR_MAXDEPLOY[]        = "Ya has puesto el maximo de minas.",
    
STR_MANYPPL[]        = "Hay mucha gente en tu equipo...",
    
STR_PLANTWALL[]        = "Solo puedes plantar la mina en una pared o piso!",
    
STR_REF[]        = "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[]        = "Tienes el maximo de minas.",
    
STR_NOMONEY[]        = "No tienes plata para comprar una mina! ($",
    
STR_NEEDED[]        = "necesaria)",
    
STR_DELAY[]        = "Puedes comprar y poner minas despues de",
    
STR_SECONDS[]        = "segundos.",
    
STR_BOUGHT[]        = "Compraste correctamente una mina.",
    
STR_STATE[]        = "Minas Laser:",
    
STR_NOACCESS[]        = "No puedes acceder a este comando.";

new 
g_EntMine;
new 
beamboom
new 
    
g_LENABLE,g_LFMONEY,g_LAMMO,g_LAAMMO,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(PLUGINVERSIONAUTHOR);
    
    
// 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","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","1");
    
g_LAAMMO    register_cvar("amx_ltm_admin_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(file63"%s/bhltm_cvars.cfg"file);
#else
    
format(file63"%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_beginMSG_ONE108, {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_beginMSG_ONE108, {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_ONE108, {0,0,0}, id);
    
write_byte(0);
    
write_byte(0);
    
message_end();

    return 
PLUGIN_HANDLED;
}

public 
StopReturnLaserMine(id)
{

    
DeleteTask(id);
    
message_begin(MSG_ONE108, {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(tgtpev_classnameEntityName31);
    if(!
equal(EntityNameENT_CLASS_NAME)) return;
    if(
pev(tgt,LASERMINE_OWNER) != id) return;
    
RemoveEntity(tgt);

    
g_havemine[id] ++;
    
g_deployed[id] --;
    
emit_sound(idCHAN_ITEMENT_SOUND5VOL_NORMATTN_NORM0PITCH_NORM)
    
ShowAmmo(id)

    return;
}

public 
Spawnid )
{
    
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];
    
pevidpev_originvOrigin );
    
velocity_by_aimid128vTraceDirection );
    
xs_vec_addvTraceDirectionvOriginvTraceEnd );
    
    
engfuncEngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSid);
    
    new 
Float:fFraction;
    
get_tr20TR_flFractionfFraction );
    

    
// -- We hit something!
    
if ( fFraction 1.0 )
    {
        
// -- Save results to be used later.
        
get_tr20TR_vecEndPosvTraceEnd );
        
get_tr20TR_vecPlaneNormalvNormal );
    }


    
xs_vec_mul_scalarvNormal8.0vNormal );
    
xs_vec_addvTraceEndvNormalvNewOrigin );

    
engfunc(EngFunc_SetSizei_EntFloat:{ -4.0, -4.0, -4.0 }, Float:{ 4.04.04.0 } );
    
engfunc(EngFunc_SetOrigini_EntvNewOrigin );

    
// -- 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(vNormal8192.0vNormal );
    
xs_vec_addvNewOriginvNormalvBeamEnd );

    
engfuncEngFunc_TraceLinevNewOriginvBeamEndIGNORE_MONSTERS, -1);

    
get_tr20TR_vecPlaneNormalvNormal );
    
get_tr20TR_vecEndPosvTracedBeamEnd );

    
// -- Save results to be used later.
    
set_pev(i_EntLASERMINE_OWNERid );
    
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_POWERUPfCurrTime 2.5 );
   
    
set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
    
set_pev(i_Ent,pev_nextthinkfCurrTime 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;cs_get_user_team(id);
    static 
cnt;cnt=0;

    for(
1;<= g_MaxPL;i++)
    {
        if(
is_user_connected(i))
            if(
== 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_numg_LENABLE ) )
    {
        
client_print(idprint_chat"%s %s",CHATTAG,STR_NOTACTIVE);
        return 
false;
    }
    if( 
get_pcvar_num(g_LACCESS) != 0)
        if(!(
get_user_flags(id) & ADMIN_IMMUNITY))
        {
            
client_print(idprint_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(idprint_chat"%s %s",CHATTAG,STR_CBT);
        return 
false;
    }
#endif
    
if (!CheckCanTeam(id))
    {
        
client_print(idprint_chat"%s %s",CHATTAG,STR_CBT);
        return 
false;
    }
    if( 
mode == 0)
    {
        if(
g_havemine[id] <= 0)
        {
            
client_print(idprint_chat"%s %s",CHATTAG,STR_DONTHAVEMINE);
            return 
false;
        }
    }
    if (
mode == 1)
    {
        if (
get_pcvar_num(g_LBUYMODE) == 0)
        {
            
client_print(idprint_chat"%s %s",CHATTAG,STR_CANTBUY);
            return 
false;
        }
        if (
g_havemine[id] >= get_pcvar_num((get_user_flags(id) & ACCESSLEVEL) ? g_LAAMMO g_LAMMO))
        {
            
client_print(idprint_chat"%s %s",CHATTAG,STR_HAVEMAX);
            return 
false;
        }
        if (
cs_get_user_money(id) < get_pcvar_num(g_LCOST))
        {
            
client_print(idprint_chat"%s %s%d %s",CHATTAGSTR_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:ReturnCheckid )
{
    if(!
CanCheck(id,-1)) return false;
    if(
g_havemine[id] + get_pcvar_num((get_user_flags(id) & ACCESSLEVEL) ? g_LAAMMO 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(tgtpev_classnameEntityName31);
    if(!
equal(EntityNameENT_CLASS_NAME)) return false;
    if(
pev(tgt,LASERMINE_OWNER) != id) return false;
    
    return 
true;
}

bool:CreateCheckid )
{
    if (!
CanCheck(id,0)) return false;
    if (
g_deployed[id] >= get_pcvar_num((get_user_flags(id) & ACCESSLEVEL) ? g_LAAMMO g_LAMMO))
    {
        
client_print(idprint_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(idprint_chat"%s %s",CHATTAG,STR_MANYPPL);
        return 
false;
    }
    
    new 
Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];
    
    
pevidpev_originvOrigin );
    
velocity_by_aimid128vTraceDirection );
    
xs_vec_addvTraceDirectionvOriginvTraceEnd );
    
    
engfuncEngFunc_TraceLinevOriginvTraceEndDONT_IGNORE_MONSTERSid);
    
    new 
Float:fFraction,Float:vTraceNormal[3];
    
get_tr20TR_flFractionfFraction );
    
    
// -- We hit something!
    
if ( fFraction 1.0 )
    {
        
// -- Save results to be used later.
        
get_tr20TR_vecEndPosvTraceEnd );
        
get_tr20TR_vecPlaneNormalvTraceNormal );

        
//get_tr2( 0, TR_pHit );

        
return true;
    }

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

public 
ltm_Thinki_Ent )
{
    if ( !
pev_validi_Ent ) )
        return 
FMRES_IGNORED;
    new 
EntityName[32];
    
pevi_Entpev_classnameEntityName31);
    if(!
get_pcvar_num(g_LENABLE)) return FMRES_IGNORED;
    
// -- Entity is not a tripmine, ignoring the next...
    
if ( !equalEntityNameENT_CLASS_NAME ) )
        return 
FMRES_IGNORED;

    static 
Float:fCurrTime;
    
fCurrTime get_gametime();

    switch( 
pevi_EntLASERMINE_STEP ) )
    {
        case 
POWERUP_THINK :
        {
            new 
Float:fPowerupTime;
            
pevi_EntLASERMINE_POWERUPfPowerupTime );

            if( 
fCurrTime fPowerupTime )
            {
                
set_pevi_Entpev_solidSOLID_BBOX );
                
set_pevi_EntLASERMINE_STEPBEAMBREAK_THINK );

                
PlaySoundi_EntACTIVATE_SOUND );
            }
            if(
get_pcvar_num(g_LGLOW)!=0)
            {
                if(
get_pcvar_num(g_LCLMODE)==0)
                {
                    switch (
pev(i_Ent,LASERMINE_TEAM))
                    {
                        case 
CS_TEAM_Tset_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_pevi_Entpev_nextthinkfCurrTime 0.1 );
        }
        case 
BEAMBREAK_THINK :
        {
            static 
Float:vEnd[3],Float:vOrigin[3];
            
pevi_Entpev_originvOrigin );
            
pevi_EntLASERMINE_BEAMENDPOINTvEnd );

            static 
iHitFloat:fFraction;
            
engfuncEngFunc_TraceLinevOriginvEndDONT_IGNORE_MONSTERSi_Ent);

            
get_tr20TR_flFractionfFraction );
            
iHit get_tr20TR_pHit );

            
// -- Something has passed the laser.
            
if ( fFraction 1.0 )
            {
                
// -- Ignoring others tripmines entity.
                
if(pev_valid(iHit))
                {
                    
peviHitpev_classnameEntityName31 );
    
                    if( !
equalEntityNameENT_CLASS_NAME ) )
                    {
                        
set_pevi_Entpev_enemyiHit );
                        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_pevi_EntLASERMINE_STEPEXPLOSE_THINK );
                
                        
set_pevi_Entpev_nextthinkfCurrTime random_float0.10.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_validi_Ent ))
            {
                static 
Float:fHealth;
                
pevi_Entpev_healthfHealth );

                if( 
fHealth <= 0.0 || (pev(i_Ent,pev_flags) & FL_KILLME))
                {
                    
set_pevi_EntLASERMINE_STEPEXPLOSE_THINK );
                    
set_pevi_Entpev_nextthinkfCurrTime random_float0.10.3 ) );
                }
                    
                static 
Float:fBeamthink;
                
pevi_EntLASERMINE_BEAMTHINKfBeamthink );
                    
                if( 
fBeamthink fCurrTime && get_pcvar_num(g_LVISIBLE))
                {
                    
DrawLaser(i_EntvOriginvEnd );
                    
set_pevi_EntLASERMINE_BEAMTHINKfCurrTime 0.1 );
                }
                
set_pevi_Entpev_nextthinkfCurrTime 0.01 );
            }
        }
        case 
EXPLOSE_THINK :
        {
            
// -- Stopping entity to think
            
set_pevi_Entpev_nextthink0.0 );
            
PlaySoundi_EntSTOP_SOUND );
            
g_deployed[pev(i_Ent,LASERMINE_OWNER)]--;
            
CreateExplosioni_Ent );
            
CreateDamage(i_Ent,get_pcvar_float(g_LRDMG),get_pcvar_float(g_LRADIUS))
            
RemoveEntity   i_Ent );
        }
    }

    return 
FMRES_IGNORED;
}

PlaySoundi_Enti_SoundType )
{
    switch ( 
i_SoundType )
    {
        case 
POWERUP_SOUND :
        {
            
emit_soundi_EntCHAN_VOICEENT_SOUND1VOL_NORMATTN_NORM0PITCH_NORM );
            
emit_soundi_EntCHAN_BODY ENT_SOUND20.2ATTN_NORM0PITCH_NORM );
        }
        case 
ACTIVATE_SOUND :
        {
            
emit_soundi_EntCHAN_VOICEENT_SOUND30.5ATTN_NORM175 );
        }
        case 
STOP_SOUND :
        {
            
emit_soundi_EntCHAN_BODY ENT_SOUND20.2ATTN_NORMSND_STOPPITCH_NORM );
            
emit_soundi_EntCHAN_VOICEENT_SOUND30.5ATTN_NORMSND_STOP75 );
        }
    }
}

DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3] )
{
    new 
tcolor[3];
    new 
teamid pev(i_EntLASERMINE_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(iCurrentpev_originvecSrc);

    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_FindEntityInSphereentvecSrcRadius)) != 0)
    {
        if(!
pev_valid(ent)) continue;
        if(!(
pev(entpev_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(entpev_absminTabsmin);
        
pev(entpev_absmaxTabsmax);
        
xs_vec_add(Tabsmin,Tabsmax,Tabsmin);
        
xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
        
        
pev(iCurrentpev_absminAabsmin);
        
pev(iCurrentpev_absmaxAabsmax);
        
xs_vec_add(Aabsmin,Aabsmax,Aabsmin);
        
xs_vec_mul_scalar(Aabsmin,0.5,vecSee);
        
        
engfunc(EngFunc_TraceLinevecSeevecSpot0iCurrenttrRes);
        
get_tr2(trResTR_flFractionflFraction);
        
// Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD)
        
if (flFraction >= 0.9 || get_tr2(trResTR_pHit) == ent)
        {
            
// Work out the distance between impact and entity
            
get_tr2(trResTR_vecEndPosvecEndPos);
            
            
distance get_distance_f(vecSrcvecEndPos) * 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(vecSpotvecSee);

                
xs_vec_mul_scalar(origin,invlen,vecPush);
                
pev(entpev_velocityvelocity)
                
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(entpev_velocityvelocity)
                }
            }

            
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(entiHitHP)
                    
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_BROADCASTSVC_TEMPENTITY);
    
write_byte(99); //99 = KillBeam
    
write_short(iCurrent);
    
message_end();

    
engfunc(EngFunc_MessageBeginMSG_PVSSVC_TEMPENTITYvOrigin0);
    
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 ) 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(iCurrentLASERMINE_TEAM)

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

    
    szClassName
[0] = '^0'
    
pev(isHit,pev_classname,szClassName,32)
    
    if((
pev(isHitpev_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(isHitCHAN_WEAPONENT_SOUND41.0ATTN_NORM0PITCH_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(isHitCHAN_WEAPONENT_SOUND41.0ATTN_NORM0PITCH_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(isHitCHAN_WEAPONENT_SOUND41.0ATTN_NORM0PITCH_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(szClassNameENT_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 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) + //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_ALLg_msgDeathMsg, {000} ,0)
    
write_byte(id)
    
write_byte(target)
    
write_byte(0)
    
write_string(ENT_CLASS_NAME)
    
message_end()

    
message_begin(MSG_ALLg_msgScoreInfo)
    
write_byte(id)
    
write_short(idfrags)
    
write_short(iddeaths)
    
write_short(0)
    
write_short(idteam)
    
message_end()

    
set_msg_block(g_msgDeathMsgBLOCK_ONCE)

    
//entity_set_float(target, EV_FL_health,float(HP))
    
set_user_health(targetHP)
    
//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(idprint_chat"%s %s",CHATTAG,STR_BOUGHT)
    
emit_sound(idCHAN_ITEMENT_SOUND5VOL_NORMATTN_NORM0PITCH_NORM)
    
ShowAmmo(id)
    return 
PLUGIN_HANDLED
}

ShowAmmo(id)

    new 
ammo[51]
    
formatex(ammo50"%s %i/%i",STR_STATEg_havemine[id],get_pcvar_num((get_user_flags(id) & ACCESSLEVEL) ? g_LAAMMO g_LAMMO))

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


public 
showInfo(id)
{
    
client_print(idprint_chatSTR_REF)
}

public 
say_lasermine(id){
    new 
said[32]
    
read_argv(1,said,31);
    if( !
get_pcvar_numg_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(idmsg"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
(idpev_maxspeed1.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(idpev_maxspeed,plspeed[id])
        
set_pev(idpev_maxspeed1.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(idpev_button ) & IN_USE && !(pev(idpev_oldbuttons ) & IN_USE ))
        
//client_print(id,print_chat,"test");
        
CreateLaserMine_Progress(id)
    return 
FMRES_IGNORED;
}

resetspeed(id)
{
    
set_pev(idpev_maxspeedplspeed[id])
}

public 
client_putinserver(id)
{
    
g_deployed[id] = 0;
    
g_havemine[id] = 0;
    
DeleteTask(id);
    
set_task(1.0"check"id+TASK__"b")
    return 
PLUGIN_CONTINUE
}

public 
client_disconnect(id)
{
    if(!
get_pcvar_numg_LENABLE ))
        return 
PLUGIN_CONTINUE
    DeleteTask
(id);
    
RemoveAllTripmines(id);
    
remove_task(id+TASK);
    return 
PLUGIN_CONTINUE
}


public 
newround(id){
    if(!
get_pcvar_numg_LENABLE ))
        return 
PLUGIN_CONTINUE
    pev
(idpev_maxspeed,plspeed[id])
    
DeleteTask(id);
    
RemoveAllTripmines(id);
    
delaycount(id);
    
SetStartAmmo(id);
    return 
PLUGIN_CONTINUE
}

public 
DeathEvent(){
    if(!
get_pcvar_numg_LENABLE ))
        return 
PLUGIN_CONTINUE

    
new id read_data(2)
    if(
is_user_connected(id)) DeleteTask(id);
    return 
PLUGIN_CONTINUE
}

public 
RemoveAllTripminesi_Owner )
{
    new 
iEnt g_MaxPL 1;
    new 
clsname[32];
    while( ( 
iEnt engfuncEngFunc_FindEntityByStringiEnt"classname"ENT_CLASS_NAME ) ) )
    {
        if ( 
i_Owner )
        {
            if( 
peviEntLASERMINE_OWNER ) != i_Owner )
                continue;
            
clsname[0] = '^0'
            
peviEntpev_classnameclsnamesizeof(clsname)-);
                
            if ( 
equaliclsnameENT_CLASS_NAME ) )
            {
                
PlaySoundiEntSTOP_SOUND );
                
RemoveEntityiEnt );
            }
        }
        else
            
set_peviEntpev_flagsFL_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;
}

// Gets offset data
get_offset_value(idtype)
{
    new 
key = -1;
    switch(
type)
    {
        case 
OFFSET_TEAMkey OFFSET_TEAM;
        case 
OFFSET_MONEY:
        {
#if defined UL_MONEY_SUPPORT
            
return cs_get_user_money_ul(id);
#else
            
key OFFSET_MONEY;
#endif
        
}
        case 
OFFSET_DEATHkey OFFSET_DEATH;
    }
    
    if(
key != -1)
    {
        if(
is_amd64_server()) key += 25;
        return 
get_pdata_int(idkey);
    }
    
    return -
1;
}

// Sets offset data
set_offset_value(idtypevalue)
{
    new 
key = -1;
    switch(
type)
    {
        case 
OFFSET_TEAMkey OFFSET_TEAM;
        case 
OFFSET_MONEY:
        {
#if defined UL_MONEY_SUPPORT
            
return cs_set_user_money_ul(idvalue);
#else
            
key OFFSET_MONEY;
            
            
// Send Money message to update player's HUD
            
message_begin(MSG_ONE_UNRELIABLEg_msgMoney, {0,0,0}, id);
            
write_long(value);
            
write_byte(1);    // Flash (difference between new and old money)
            
message_end();
#endif
        
}
        case 
OFFSET_DEATHkey OFFSET_DEATH;
    }
    
    if(
key != -1)
    {
        if(
is_amd64_server()) key += 25;
        
set_pdata_int(idkeyvalue);
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
check(id
{
    
id -= TASK
    
new entbody
 
    get_user_aiming
(id entbody)
 
 
    if(!
is_valid_ent(ent))
    return
 
    static 
class_name[32]
 
    
entity_get_string(entEV_SZ_classnameclass_namecharsmax(class_name))
 
    if(
class_name[0] == 'l' && class_name[8] == 'e'
    {
        static 
name[32], owner
 
        owner 
entity_get_int(entEV_INT_iuser3)
        
get_user_name(ownername31)
        
set_hudmessage(1702550, -1.00.806.012.0)
        
show_hudmessage(id"Creador del laser: %d"owner)
    }

Alguna idea de el porque no se planta la entidad o laser ?
_Venganza_ is offline
AlgoChikitito
BANNED
Join Date: Feb 2011
Location: España
Old 05-07-2011 , 17:21   Re: Ayudo a hacer plugins
#26

Un Fallo.

(1481) error 001: expected token: "}", but found "-end of file-"
AlgoChikitito is offline
nike!
Senior Member
Join Date: May 2009
Location: Melmac
Old 05-07-2011 , 19:32   Re: Ayudo a hacer plugins
#27

Quote:
Originally Posted by !Morte View Post
Cimsp plagio.
arre que eso esta en mi zp, cimsp = asco
__________________
nike"
nike! is offline
Send a message via MSN to nike!
!Morte
Veteran Member
Join Date: May 2010
Old 05-07-2011 , 20:17   Re: Ayudo a hacer plugins
#28

No esta solo en tu zp, la otra vuelta vi uno de estados unidos con la misma boludes, es mas, yo hice el mismo plugin y lo estoy usando en mi zp xd
__________________
First Zombie Class
[ZP] Zombie Class: Houndeye Zombie
Quote:
Originally Posted by lucas_7_94 View Post
tenes que saber pawn antes de intentar hacer algo digno.
!Morte is offline
Send a message via MSN to !Morte Send a message via Skype™ to !Morte
paoliita
Senior Member
Join Date: May 2011
Old 05-08-2011 , 11:47   Re: Ayudo a hacer plugins
#29

holaa emm yo estube haciendo un DrShop con sql y todas las giladas y anda biem, el TT es invisible y le quiero poner para que cuando pickee arma lo haga visible, y si dropia todas las armas lo haga invisible denuevo... pero nose anda mal, si me podrian ayudar u.u

PHP Code:
public fw_playerspawn(id)
{
    if(!
is_user_alive(id))
        return;
    
    if(
get_user_team(id) == 1)
    {
        
set_user_rendering(idkRenderFxNone000kRenderTransAlpha0)
        
WeapCount++
    }
}

public 
message_weappickup(msg_idmsg_destmsg_entity)
{
    if(
get_user_team(msg_entity) == 1)
    {
        
WeapCount++
        
        if(
WeapCount == 2)
        {
            
set_user_rendering(msg_entity)
            
ChatColor(0"!g[Dr Shop] !yEl TT !teamagarro !yarma y por eso ahora es !teamvisible")
            
Yaesinvis[msg_entity] = 1
        
}
    }
    
    return 
PLUGIN_CONTINUE
}

public 
HookDrop(id)
{
    if(
get_user_team(id) == && WeapCount == 1)
    {
        
set_user_rendering(idkRenderFxNone000kRenderTransAlpha0)
        
ChatColor(0"!g[Dr Shop] !yEl TT !teamdropio !yel arma y por eso ahora es !teaminvisible")
        
WeapCount--
        
Yaesinvis[id] = 0
    
}
    
    return 
PLUGIN_CONTINUE

le sumo WeapCount en el respawn por el cuchi u.u intente descartarlo con get_user_weapon pero no funciona, supongo qe es xq la funcion toma si vos tenes el arma u.u espero puedan ayudarme (: graziias.
paoliita is offline
Send a message via MSN to paoliita
Destro-
Veteran Member
Join Date: Jun 2010
Location: $me->location();
Old 05-08-2011 , 17:35   Re: Ayudo a hacer plugins
#30

Quote:
Originally Posted by !Morte View Post
Cimsp plagio.
Resien hoy lei eso xD,yo tengo algo paresido pero en vez de dar ap da vida y chaleco ,tambien tengo otra paresido que aun no lo agrege que vendria hacer una "spinel"(re4) .
__________________
Destro- 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 13:29.


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