Kullanıcı Tag Listesi

Sayfa 1/2 12 SonSon
13 sonuçtan 1 ile 10 arası
  1. #1
    cavus er
    Üyelik tarihi
    Jan 2012
    Mesajlar
    163
    Bahsedildi
    0 Mesaj
    Etiketlenmiş
    0 Konu
    Tecrübe Puanı
    9

    Standart [ZP] Laser Plugini Sorunu

    Arkadaşlar 1 haftadır bu sorunla uğraşıyorum Serverimda lazer pluginini ışıksız kullanıyorum. Hani kırmızı ve mavi ışınlar var ya onu aktif hale getirdiğimde Laser kurma tuşuna bastığım anda server çöküyor. Yardım edebilecel arkadaşlara şimdiden teşekkürler.

    Pluginin Işıksız Hali (Çökme Yok)

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

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

    #if defined BIOHAZARD_SUPPORT
        #include <biohazard>
    #endif

    #if defined UL_MONEY_SUPPORT
        #include <money_ul>
    #endif


    #if AMXX_VERSION_NUM < 180
        #assert AMX Mod X v1.8.0 or greater library required!
    #endif

    #if defined BIOHAZARD_SUPPORT
        #define PLUGIN "LTM for BIOHAZARD"
        #define VERSION "+1.4"
    #else
        #define PLUGIN "Laser/Tripmine Entity"
        #define VERSION "2.3"
    #endif
    #define AUTHOR "SandStriker"

    #define RemoveEntity(%1)    engfunc(EngFunc_RemoveEntity,%1)
    //#define ACCESSLEVEL        ADMIN_LEVEL_H
    #define TASK_PLANT        15100
    #define TASK_RESET        15500
    #define TASK_RELEASE        15900

    #define LASERMINE_TEAM        pev_iuser1//EV_INT_iuser1
    #define LASERMINE_OWNER        pev_iuser2 //EV_INT_iuser3
    #define LASERMINE_STEP        pev_iuser3
    #define LASERMINE_HITING    pev_iuser4
    #define LASERMINE_COUNT        pev_fuser1

    #define LASERMINE_POWERUP    pev_fuser2
    #define LASERMINE_BEAMTHINK    pev_fuser3

    #define LASERMINE_BEAMENDPOINT    pev_vuser1
    #define MAX_MINES        10
    #define MODE_LASERMINE        0
    #define OFFSET_TEAM         114
    #define OFFSET_MONEY        115
    #define OFFSET_DEATH         444

    #define cs_get_user_team(%1)        CsTeams:get_offset_value(%1,OFFSET_TEAM)
    #define cs_get_user_deaths(%1)        get_offset_value(%1,OFFSET_DEATH)
    #define cs_get_user_money(%1)        get_offset_value(%1,OFFSET_MONEY)
    #define cs_set_user_money(%1,%2)    set_offset_value(%1,OFFSET_MONEY,%2)



    enum CsTeams {
        
    CS_TEAM_UNASSIGNED 0,
        
    CS_TEAM_T 1,
        
    CS_TEAM_CT 2,
        
    CS_TEAM_SPECTATOR 3
    };

    enum tripmine_e {
        
    TRIPMINE_IDLE1 0,
        
    TRIPMINE_IDLE2,
        
    TRIPMINE_ARM1,
        
    TRIPMINE_ARM2,
        
    TRIPMINE_FIDGET,
        
    TRIPMINE_HOLSTER,
        
    TRIPMINE_DRAW,
        
    TRIPMINE_WORLD,
        
    TRIPMINE_GROUND,
    };

    enum
    {
        
    POWERUP_THINK,
        
    BEAMBREAK_THINK,
        
    EXPLOSE_THINK
    };

    enum
    {
        
    POWERUP_SOUND,
        
    ACTIVATE_SOUND,
        
    STOP_SOUND
    };

    new const
        
    ENT_MODELS[]    = "models/v_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[]    = "You don't have lasermine.",
        
    //STR_CANTDEPLOY[]    = "Your team can't deploying lasermine!",
        
    STR_MAXDEPLOY[]        = "Maximum mines have been deployed.",
        
    STR_MANYPPL[]        = "Too many ppl on your team...",
        
    STR_PLANTWALL[]        = "You must plant the lasermine on a wall!",
        
    STR_REF[]        = "Refer to a lasermine rule with this server. say 'lasermine'",
    #if defined BIOHAZARD_SUPPORT    
        
    STR_CBT[]        = "Your Zombie! Can't buy and deploying lasermine!",
    #else
        
    STR_CBT[]        = "Your Team Can't buy and deploying lasermine!",
    #endif
        
    STR_CANTBUY[]        = "Can't buying this server.",
        
    STR_HAVEMAX[]        = "You have a maximum lasermine.",
        
    STR_NOMONEY[]        = "You don't have enough money to buy a lasermine! ($",
        
    STR_NEEDED[]        = "needed)",
        
    STR_DELAY[]        = "You can buying and deploying lasermine in after",
        
    STR_SECONDS[]        = "seconds.",
        
    STR_BOUGHT[]        = "You have successfully bought a lasermine.",
        
    STR_STATE[]        = "LaserMines Ammo:",
        
    STR_NOACCESS[]        = "You can't access, this command.";

    new 
    g_EntMine;
    new 
    beamboom
    new 
        
    g_LENABLE,g_LFMONEY,g_LAMMO,g_LDMG,
        
    g_LTMAX,g_LCOST,g_LHEALTH,g_LMODE,g_LRADIUS,g_LRDMG,g_LFF,g_LCBT;
    new
        
    g_LDELAY,/*g_LTHINK,*/g_LVISIBLE,
        
    g_LSTAMMO,g_LACCESS,g_LGLOW,g_LDMGMODE,g_LCLMODE,g_LCBRIGHT,g_LDSEC,g_LCMDMODE,g_LBUYMODE;

    new 
    g_dcount[33],g_nowtime,g_MaxPL
    new bool:g_settinglaser[33]
    new 
    g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText,g_msgMoney;
    new 
    Float:plspeed[33]
    new 
    plsetting[33]
    new 
    g_havemine[33];
    new 
    g_deployed[33];

    public 
    plugin_init() {
        
    register_plugin(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","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_begin( MSG_ONE, 108, {0,0,0}, id );
        write_byte(1);
        write_byte(0);
        message_end();*/

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

        return 
    PLUGIN_HANDLED;
    }

    public 
    ReturnLaserMine_Progress(id)
    {

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

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

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

        return 
    PLUGIN_HANDLED;
    }

    public 
    StopCreateLaserMine(id)
    {

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

        
    return PLUGIN_HANDLED;
    }

    public 
    StopReturnLaserMine(id)
    {

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

        
    return PLUGIN_HANDLED;
    }

    public 
    ReturnMine(id)
    {
        
    id -= TASK_RELEASE;
        new 
    tgt,body,Float:vo[3],Float:to[3];
        
    get_user_aiming(id,tgt,body);
        if(!
    pev_valid(tgt)) return;
        
    pev(id,pev_origin,vo);
        
    pev(tgt,pev_origin,to);
        if(
    get_distance_f(vo,to) > 70.0) return;
        
        new 
    EntityName[32];
        
    pev(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(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(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(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_BROADCAST, SVC_TEMPENTITY);
        write_byte(99); //99 = KillBeam
        write_short(iCurrent);
        message_end();

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

    CreateLaserDamage(iCurrent,isHit)
    {
        if(
    isHit ) 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_ALL, g_msgDeathMsg, {0, 0, 0} ,0)
        write_byte(id)
        write_byte(target)
        write_byte(0)
        write_string(ENT_CLASS_NAME)
        message_end()

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

        
    set_msg_block(g_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(g_LAMMO))

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


    public 
    showInfo(id)
    {
        
    client_print(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_UNRELIABLE, g_msgMoney, {0,0,0}, id);
                write_long(value);
                write_byte(1);    // Flash (difference between new and old money)
                message_end();*/
    #endif
            
    }
            case 
    OFFSET_DEATHkey OFFSET_DEATH;
        }
        
        if(
    key != -1)
        {
            if(
    is_amd64_server()) key += 25;
            
    set_pdata_int(idkeyvalue);
        }
        
        return 
    PLUGIN_CONTINUE;

    Işıklı Hali (Laser kurma Tuşuna basıldığı anda çöküyor)
    PHP- Kodu:
    /* Plugin generated by AMXX-Studio */
    //#define BIOHAZARD_SUPPORT
    //#define UL_MONEY_SUPPORT

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

    #if defined BIOHAZARD_SUPPORT
        #include <biohazard>
    #endif

    #if defined UL_MONEY_SUPPORT
        #include <money_ul>
    #endif


    #if AMXX_VERSION_NUM < 180
        #assert AMX Mod X v1.8.0 or greater library required!
    #endif

    #if defined BIOHAZARD_SUPPORT
        #define PLUGIN "LTM for BIOHAZARD"
        #define VERSION "+1.4"
    #else
        #define PLUGIN "Laser/Tripmine Entity"
        #define VERSION "2.3"
    #endif
    #define AUTHOR "SandStriker"

    #define RemoveEntity(%1)    engfunc(EngFunc_RemoveEntity,%1)
    //#define ACCESSLEVEL        ADMIN_LEVEL_H
    #define TASK_PLANT        15100
    #define TASK_RESET        15500
    #define TASK_RELEASE        15900

    #define LASERMINE_TEAM        pev_iuser1//EV_INT_iuser1
    #define LASERMINE_OWNER        pev_iuser2 //EV_INT_iuser3
    #define LASERMINE_STEP        pev_iuser3
    #define LASERMINE_HITING    pev_iuser4
    #define LASERMINE_COUNT        pev_fuser1

    #define LASERMINE_POWERUP    pev_fuser2
    #define LASERMINE_BEAMTHINK    pev_fuser3

    #define LASERMINE_BEAMENDPOINT    pev_vuser1
    #define MAX_MINES        10
    #define MODE_LASERMINE        0
    #define OFFSET_TEAM         114
    #define OFFSET_MONEY        115
    #define OFFSET_DEATH         444

    #define cs_get_user_team(%1)        CsTeams:get_offset_value(%1,OFFSET_TEAM)
    #define cs_get_user_deaths(%1)        get_offset_value(%1,OFFSET_DEATH)
    #define cs_get_user_money(%1)        get_offset_value(%1,OFFSET_MONEY)
    #define cs_set_user_money(%1,%2)    set_offset_value(%1,OFFSET_MONEY,%2)



    enum CsTeams {
        
    CS_TEAM_UNASSIGNED 0,
        
    CS_TEAM_T 1,
        
    CS_TEAM_CT 2,
        
    CS_TEAM_SPECTATOR 3
    };

    enum tripmine_e {
        
    TRIPMINE_IDLE1 0,
        
    TRIPMINE_IDLE2,
        
    TRIPMINE_ARM1,
        
    TRIPMINE_ARM2,
        
    TRIPMINE_FIDGET,
        
    TRIPMINE_HOLSTER,
        
    TRIPMINE_DRAW,
        
    TRIPMINE_WORLD,
        
    TRIPMINE_GROUND,
    };

    enum
    {
        
    POWERUP_THINK,
        
    BEAMBREAK_THINK,
        
    EXPLOSE_THINK
    };

    enum
    {
        
    POWERUP_SOUND,
        
    ACTIVATE_SOUND,
        
    STOP_SOUND
    };

    new const
        
    ENT_MODELS[]    = "models/v_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[]         = "[BioLazer]",
    #else
        
    CHATTAG[]         = "[Lazer]",
    #endif
        //STR_MINEDETNATED[]     = "Senin lazerin patlatildi.",
        //STR_MINEDETNATED2[]    = "senin lazerin patlatildi.",
        
    STR_NOTACTIVE[]     = "Lazerler su anda aktif degil.",
        
    STR_DONTHAVEMINE[]    = "Lazerin yok. Lazer almak icin saya /lm yaziniz!",
        
    //STR_CANTDEPLOY[]    = "Senin takimin lazer kuramaz!",
        
    STR_MAXDEPLOY[]        = "4 lazeri de kurdun. (Maximum)",
        
    STR_MANYPPL[]        = "Too many ppl on your team...",
        
    STR_PLANTWALL[]        = "Lazeri sadece duvara kurabilirsin!",
        
    STR_REF[]        = "Refer to a lasermine rule with this server. say 'lasermine'",
    #if defined BIOHAZARD_SUPPORT    
        
    STR_CBT[]        = "Zombisin! Lazer alip kuramazsin!",
    #else
        
    STR_CBT[]        = "Senin takimin lazer alip kuramaz!",
    #endif
        
    STR_CANTBUY[]        = "Bu serverda alinmiyor.",
        
    STR_HAVEMAX[]        = "Maximum lazere sahipsin. (4/4)",
        
    STR_NOMONEY[]        = "You don't have enough money to buy a lasermine! ($",
        
    STR_NEEDED[]        = "needed)",
        
    STR_DELAY[]        = "Lazer almak veya kurmak icin beklemen gereken sure",
        
    STR_SECONDS[]        = "saniyeler.",
        
    STR_BOUGHT[]        = "Basariyla lazer aldin.",
        
    STR_STATE[]        = "LaserMine Miktari:",
        
    STR_NOACCESS[]        = "Bu komutu kullanmaya yetkin yok.";

    new 
    g_EntMine;
    new 
    beamboom
    new 
        
    g_LENABLE,g_LFMONEY,g_LAMMO,g_LDMG,
        
    g_LTMAX,g_LCOST,g_LHEALTH,g_LMODE,g_LRADIUS,g_LRDMG,g_LFF,g_LCBT;
    new
        
    g_LDELAY,/*g_LTHINK,*/g_LVISIBLE,
        
    g_LSTAMMO,g_LACCESS,g_LGLOW,g_LDMGMODE,g_LCLMODE,g_LCBRIGHT,g_LDSEC,g_LCMDMODE,g_LBUYMODE;

    new 
    g_dcount[33],g_nowtime,g_MaxPL
    new bool:g_settinglaser[33]
    new 
    g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText,g_msgMoney;
    new 
    Float:plspeed[33]
    new 
    plsetting[33]
    new 
    g_havemine[33];
    new 
    g_deployed[33];

    public 
    plugin_init() {
        
    register_plugin(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","50");
        
    g_LDMG        register_cvar("bio_ltm_dmg","999999999");        //laser hit dmg
        
    g_LCOST        register_cvar("bio_ltm_cost","0");
        
    g_LFMONEY    register_cvar("bio_ltm_fragmoney","300");
        
    g_LHEALTH    register_cvar("bio_ltm_health","999999999999");
        
    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","4");
        
    g_LCMDMODE    register_cvar("bio_ltm_cmdmode","1");        //0 is +USE key, 1 is bind, 2 is each.
    #else
        
    g_LENABLE    register_cvar("amx_ltm","1");
        
    g_LACCESS    register_cvar("amx_ltm_acs","0");          //0 all, 1 admin
        
    g_LMODE        register_cvar("amx_ltm_mode","0");         //0 lasermine, 1 tripmine
        
    g_LAMMO        register_cvar("amx_ltm_ammo","4");
        
    g_LDMG        register_cvar("amx_ltm_dmg","99999999");         //laser hit dmg
        
    g_LCOST        register_cvar("amx_ltm_cost","0");
        
    g_LFMONEY    register_cvar("amx_ltm_fragmoney","300");
        
    g_LHEALTH    register_cvar("amx_ltm_health","999999999");
        
    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","50");
        
    g_LCMDMODE    register_cvar("amx_ltm_cmdmode","1");        //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(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(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(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(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;

    Çöktükten Sonra Konsoldaki Hata:

    PHP- Kodu:
    FATAL ERROR (shutting down): User Msg 'Screen Fade'2 bytes writtenexpected 10 

  2. #2
    JDM
    JDM çevrimdışı
    teğmen mod JDM - ait Kullanıcı Resmi (Avatar)
    Üyelik tarihi
    Feb 2013
    Yer
    İstanbul/Bahçelievler
    Mesajlar
    841
    Bahsedildi
    5 Mesaj
    Etiketlenmiş
    9 Konu
    Tecrübe Puanı
    8

    Standart Cevap: [ZP] Laser Plugini Sorunu

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

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

    #if defined BIOHAZARD_SUPPORT
        #include <biohazard>
    #endif

    #if defined UL_MONEY_SUPPORT
        #include <money_ul>
    #endif


    #if AMXX_VERSION_NUM < 180
        #assert AMX Mod X v1.8.0 or greater library required!
    #endif

    #if defined BIOHAZARD_SUPPORT
        #define PLUGIN "LTM for BIOHAZARD"
        #define VERSION "+1.4"
    #else
        #define PLUGIN "Laser/Tripmine Entity"
        #define VERSION "2.3"
    #endif
    #define AUTHOR "SandStriker"

    #define RemoveEntity(%1)    engfunc(EngFunc_RemoveEntity,%1)
    //#define ACCESSLEVEL        ADMIN_LEVEL_H
    #define TASK_PLANT        15100
    #define TASK_RESET        15500
    #define TASK_RELEASE        15900

    #define LASERMINE_TEAM        pev_iuser1//EV_INT_iuser1
    #define LASERMINE_OWNER        pev_iuser2 //EV_INT_iuser3
    #define LASERMINE_STEP        pev_iuser3
    #define LASERMINE_HITING    pev_iuser4
    #define LASERMINE_COUNT        pev_fuser1

    #define LASERMINE_POWERUP    pev_fuser2
    #define LASERMINE_BEAMTHINK    pev_fuser3

    #define LASERMINE_BEAMENDPOINT    pev_vuser1
    #define MAX_MINES        10
    #define MODE_LASERMINE        0
    #define OFFSET_TEAM         114
    #define OFFSET_MONEY        115
    #define OFFSET_DEATH         444

    #define cs_get_user_team(%1)        CsTeams:get_offset_value(%1,OFFSET_TEAM)
    #define cs_get_user_deaths(%1)        get_offset_value(%1,OFFSET_DEATH)
    #define cs_get_user_money(%1)        get_offset_value(%1,OFFSET_MONEY)
    #define cs_set_user_money(%1,%2)    set_offset_value(%1,OFFSET_MONEY,%2)



    enum CsTeams {
        
    CS_TEAM_UNASSIGNED 0,
        
    CS_TEAM_T 1,
        
    CS_TEAM_CT 2,
        
    CS_TEAM_SPECTATOR 3
    };

    enum tripmine_e {
        
    TRIPMINE_IDLE1 0,
        
    TRIPMINE_IDLE2,
        
    TRIPMINE_ARM1,
        
    TRIPMINE_ARM2,
        
    TRIPMINE_FIDGET,
        
    TRIPMINE_HOLSTER,
        
    TRIPMINE_DRAW,
        
    TRIPMINE_WORLD,
        
    TRIPMINE_GROUND,
    };

    enum
    {
        
    POWERUP_THINK,
        
    BEAMBREAK_THINK,
        
    EXPLOSE_THINK
    };

    enum
    {
        
    POWERUP_SOUND,
        
    ACTIVATE_SOUND,
        
    STOP_SOUND
    };

    new const
        
    ENT_MODELS[]    = "models/v_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[]         = "[BioLazer]",
    #else
        
    CHATTAG[]         = "[Lazer]",
    #endif
        //STR_MINEDETNATED[]     = "Senin lazerin patlatildi.",
        //STR_MINEDETNATED2[]    = "senin lazerin patlatildi.",
        
    STR_NOTACTIVE[]     = "Lazerler su anda aktif degil.",
        
    STR_DONTHAVEMINE[]    = "Lazerin yok. Lazer almak icin saya /lm yaziniz!",
        
    //STR_CANTDEPLOY[]    = "Senin takimin lazer kuramaz!",
        
    STR_MAXDEPLOY[]        = "4 lazeri de kurdun. (Maximum)",
        
    STR_MANYPPL[]        = "Too many ppl on your team...",
        
    STR_PLANTWALL[]        = "Lazeri sadece duvara kurabilirsin!",
        
    STR_REF[]        = "Refer to a lasermine rule with this server. say 'lasermine'",
    #if defined BIOHAZARD_SUPPORT    
        
    STR_CBT[]        = "Zombisin! Lazer alip kuramazsin!",
    #else
        
    STR_CBT[]        = "Senin takimin lazer alip kuramaz!",
    #endif
        
    STR_CANTBUY[]        = "Bu serverda alinmiyor.",
        
    STR_HAVEMAX[]        = "Maximum lazere sahipsin. (4/4)",
        
    STR_NOMONEY[]        = "You don't have enough money to buy a lasermine! ($",
        
    STR_NEEDED[]        = "needed)",
        
    STR_DELAY[]        = "Lazer almak veya kurmak icin beklemen gereken sure",
        
    STR_SECONDS[]        = "saniyeler.",
        
    STR_BOUGHT[]        = "Basariyla lazer aldin.",
        
    STR_STATE[]        = "LaserMine Miktari:",
        
    STR_NOACCESS[]        = "Bu komutu kullanmaya yetkin yok.";

    new 
    g_EntMine;
    new 
    beamboom
    new 
        
    g_LENABLE,g_LFMONEY,g_LAMMO,g_LDMG,
        
    g_LTMAX,g_LCOST,g_LHEALTH,g_LMODE,g_LRADIUS,g_LRDMG,g_LFF,g_LCBT;
    new
        
    g_LDELAY,/*g_LTHINK,*/g_LVISIBLE,
        
    g_LSTAMMO,g_LACCESS,g_LGLOW,g_LDMGMODE,g_LCLMODE,g_LCBRIGHT,g_LDSEC,g_LCMDMODE,g_LBUYMODE;

    new 
    g_dcount[33],g_nowtime,g_MaxPL
    new bool:g_settinglaser[33]
    new 
    g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText,g_msgMoney;
    new 
    Float:plspeed[33]
    new 
    plsetting[33]
    new 
    g_havemine[33];
    new 
    g_deployed[33];

    public 
    plugin_init() {
        
    register_plugin(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","50");
        
    g_LDMG        register_cvar("bio_ltm_dmg","999999999");        //laser hit dmg
        
    g_LCOST        register_cvar("bio_ltm_cost","0");
        
    g_LFMONEY    register_cvar("bio_ltm_fragmoney","300");
        
    g_LHEALTH    register_cvar("bio_ltm_health","999999999999");
        
    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","4");
        
    g_LCMDMODE    register_cvar("bio_ltm_cmdmode","1");        //0 is +USE key, 1 is bind, 2 is each.
    #else
        
    g_LENABLE    register_cvar("amx_ltm","1");
        
    g_LACCESS    register_cvar("amx_ltm_acs","0");          //0 all, 1 admin
        
    g_LMODE        register_cvar("amx_ltm_mode","0");         //0 lasermine, 1 tripmine
        
    g_LAMMO        register_cvar("amx_ltm_ammo","4");
        
    g_LDMG        register_cvar("amx_ltm_dmg","99999999");         //laser hit dmg
        
    g_LCOST        register_cvar("amx_ltm_cost","0");
        
    g_LFMONEY    register_cvar("amx_ltm_fragmoney","300");
        
    g_LHEALTH    register_cvar("amx_ltm_health","999999999");
        
    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","50");
        
    g_LCMDMODE    register_cvar("amx_ltm_cmdmode","1");        //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(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(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(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(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;

    Test ettim gayet iyi çalışıyor kanıtlamak amaçlı resimde koydum.

    Steam ID: STEAM_1:0:70428872
    Steam Name: Seps!s
    Skype: jdm.csplague

    Takdir ediliyorsan değil, Taklit ediliyorsan başarmışsın demektir.
    Albert Einstein

  3. #3
    cavus er
    Üyelik tarihi
    Jan 2012
    Mesajlar
    163
    Bahsedildi
    0 Mesaj
    Etiketlenmiş
    0 Konu
    Tecrübe Puanı
    9

    Standart Cevap: [ZP] Laser Plugini Sorunu

    Alıntı JDM Nickli Üyeden Alıntı Mesajı göster
    PHP- Kodu:
    /* Plugin generated by AMXX-Studio */
    //#define BIOHAZARD_SUPPORT
    //#define UL_MONEY_SUPPORT

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

    #if defined BIOHAZARD_SUPPORT
        #include <biohazard>
    #endif

    #if defined UL_MONEY_SUPPORT
        #include <money_ul>
    #endif


    #if AMXX_VERSION_NUM < 180
        #assert AMX Mod X v1.8.0 or greater library required!
    #endif

    #if defined BIOHAZARD_SUPPORT
        #define PLUGIN "LTM for BIOHAZARD"
        #define VERSION "+1.4"
    #else
        #define PLUGIN "Laser/Tripmine Entity"
        #define VERSION "2.3"
    #endif
    #define AUTHOR "SandStriker"

    #define RemoveEntity(%1)    engfunc(EngFunc_RemoveEntity,%1)
    //#define ACCESSLEVEL        ADMIN_LEVEL_H
    #define TASK_PLANT        15100
    #define TASK_RESET        15500
    #define TASK_RELEASE        15900

    #define LASERMINE_TEAM        pev_iuser1//EV_INT_iuser1
    #define LASERMINE_OWNER        pev_iuser2 //EV_INT_iuser3
    #define LASERMINE_STEP        pev_iuser3
    #define LASERMINE_HITING    pev_iuser4
    #define LASERMINE_COUNT        pev_fuser1

    #define LASERMINE_POWERUP    pev_fuser2
    #define LASERMINE_BEAMTHINK    pev_fuser3

    #define LASERMINE_BEAMENDPOINT    pev_vuser1
    #define MAX_MINES        10
    #define MODE_LASERMINE        0
    #define OFFSET_TEAM         114
    #define OFFSET_MONEY        115
    #define OFFSET_DEATH         444

    #define cs_get_user_team(%1)        CsTeams:get_offset_value(%1,OFFSET_TEAM)
    #define cs_get_user_deaths(%1)        get_offset_value(%1,OFFSET_DEATH)
    #define cs_get_user_money(%1)        get_offset_value(%1,OFFSET_MONEY)
    #define cs_set_user_money(%1,%2)    set_offset_value(%1,OFFSET_MONEY,%2)



    enum CsTeams {
        
    CS_TEAM_UNASSIGNED 0,
        
    CS_TEAM_T 1,
        
    CS_TEAM_CT 2,
        
    CS_TEAM_SPECTATOR 3
    };

    enum tripmine_e {
        
    TRIPMINE_IDLE1 0,
        
    TRIPMINE_IDLE2,
        
    TRIPMINE_ARM1,
        
    TRIPMINE_ARM2,
        
    TRIPMINE_FIDGET,
        
    TRIPMINE_HOLSTER,
        
    TRIPMINE_DRAW,
        
    TRIPMINE_WORLD,
        
    TRIPMINE_GROUND,
    };

    enum
    {
        
    POWERUP_THINK,
        
    BEAMBREAK_THINK,
        
    EXPLOSE_THINK
    };

    enum
    {
        
    POWERUP_SOUND,
        
    ACTIVATE_SOUND,
        
    STOP_SOUND
    };

    new const
        
    ENT_MODELS[]    = "models/v_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[]         = "[BioLazer]",
    #else
        
    CHATTAG[]         = "[Lazer]",
    #endif
        //STR_MINEDETNATED[]     = "Senin lazerin patlatildi.",
        //STR_MINEDETNATED2[]    = "senin lazerin patlatildi.",
        
    STR_NOTACTIVE[]     = "Lazerler su anda aktif degil.",
        
    STR_DONTHAVEMINE[]    = "Lazerin yok. Lazer almak icin saya /lm yaziniz!",
        
    //STR_CANTDEPLOY[]    = "Senin takimin lazer kuramaz!",
        
    STR_MAXDEPLOY[]        = "4 lazeri de kurdun. (Maximum)",
        
    STR_MANYPPL[]        = "Too many ppl on your team...",
        
    STR_PLANTWALL[]        = "Lazeri sadece duvara kurabilirsin!",
        
    STR_REF[]        = "Refer to a lasermine rule with this server. say 'lasermine'",
    #if defined BIOHAZARD_SUPPORT    
        
    STR_CBT[]        = "Zombisin! Lazer alip kuramazsin!",
    #else
        
    STR_CBT[]        = "Senin takimin lazer alip kuramaz!",
    #endif
        
    STR_CANTBUY[]        = "Bu serverda alinmiyor.",
        
    STR_HAVEMAX[]        = "Maximum lazere sahipsin. (4/4)",
        
    STR_NOMONEY[]        = "You don't have enough money to buy a lasermine! ($",
        
    STR_NEEDED[]        = "needed)",
        
    STR_DELAY[]        = "Lazer almak veya kurmak icin beklemen gereken sure",
        
    STR_SECONDS[]        = "saniyeler.",
        
    STR_BOUGHT[]        = "Basariyla lazer aldin.",
        
    STR_STATE[]        = "LaserMine Miktari:",
        
    STR_NOACCESS[]        = "Bu komutu kullanmaya yetkin yok.";

    new 
    g_EntMine;
    new 
    beamboom
    new 
        
    g_LENABLE,g_LFMONEY,g_LAMMO,g_LDMG,
        
    g_LTMAX,g_LCOST,g_LHEALTH,g_LMODE,g_LRADIUS,g_LRDMG,g_LFF,g_LCBT;
    new
        
    g_LDELAY,/*g_LTHINK,*/g_LVISIBLE,
        
    g_LSTAMMO,g_LACCESS,g_LGLOW,g_LDMGMODE,g_LCLMODE,g_LCBRIGHT,g_LDSEC,g_LCMDMODE,g_LBUYMODE;

    new 
    g_dcount[33],g_nowtime,g_MaxPL
    new bool:g_settinglaser[33]
    new 
    g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText,g_msgMoney;
    new 
    Float:plspeed[33]
    new 
    plsetting[33]
    new 
    g_havemine[33];
    new 
    g_deployed[33];

    public 
    plugin_init() {
        
    register_plugin(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","50");
        
    g_LDMG        register_cvar("bio_ltm_dmg","999999999");        //laser hit dmg
        
    g_LCOST        register_cvar("bio_ltm_cost","0");
        
    g_LFMONEY    register_cvar("bio_ltm_fragmoney","300");
        
    g_LHEALTH    register_cvar("bio_ltm_health","999999999999");
        
    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","4");
        
    g_LCMDMODE    register_cvar("bio_ltm_cmdmode","1");        //0 is +USE key, 1 is bind, 2 is each.
    #else
        
    g_LENABLE    register_cvar("amx_ltm","1");
        
    g_LACCESS    register_cvar("amx_ltm_acs","0");          //0 all, 1 admin
        
    g_LMODE        register_cvar("amx_ltm_mode","0");         //0 lasermine, 1 tripmine
        
    g_LAMMO        register_cvar("amx_ltm_ammo","4");
        
    g_LDMG        register_cvar("amx_ltm_dmg","99999999");         //laser hit dmg
        
    g_LCOST        register_cvar("amx_ltm_cost","0");
        
    g_LFMONEY    register_cvar("amx_ltm_fragmoney","300");
        
    g_LHEALTH    register_cvar("amx_ltm_health","999999999");
        
    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","50");
        
    g_LCMDMODE    register_cvar("amx_ltm_cmdmode","1");        //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 ) )
        {