AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   HELPME please with this lasermini (https://forums.alliedmods.net/showthread.php?t=313740)

redouane 01-20-2019 14:59

HELPME please with this lasermini
 
So in my mod zombie plague 5.0.8 i'm using that lasermini it kill players so i just wanted that if you get kill by laser you doesn't back to live anymore, so mine when you die by laser you back to life again so i just wanna to doesn't back to life until next round! if you can help of course Thanks!

Code:

/*
        Shidla [SGC] | 2013 год
        ICQ: 312-298-513

        2.8.2 [Final Version] | 21.05.2013
*/

#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <zombieplague>

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

#define PLUGIN "[ZP] LaserMine"
#define VERSION "2.8.2"
#define AUTHOR "SandStriker / Shidla / QuZ / DJ_WEST"

#define RemoveEntity(%1)        engfunc(EngFunc_RemoveEntity,%1)
#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 is_valid_player(%1)        (1 <= %1 <= 32)


/*########### Цвета Мин и лазерных лучей ###########*/
// Цвет мины и лазера людей
new const
        Red_Hum                = 0,
        Green_Hum        = 0,
        Blue_Hum        = 255;

// Цвет мины и лазера зомби
new const
        Red_Zomb        = 255,
        Green_Zomb        = 0,
        Blue_Zomb        = 0;
/*####### Цвета Мин и лазерных лучей (конец) #######*/

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

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

enum
{
        POWERUP_THINK,
        BEAMBREAK_THINK,
        EXPLOSE_THINK
};

enum
{
        POWERUP_SOUND,
        ACTIVATE_SOUND,
        STOP_SOUND
};

new const
        ENT_MODELS[]        = "models/zombie_plague/LaserMines/v_laser_mine.mdl",
        ENT_SOUND1[]        = "weapons/mine_deploy.wav",
        ENT_SOUND2[]        = "weapons/mine_charge.wav",
        ENT_SOUND3[]        = "weapons/mine_activate.wav",
        ENT_SOUND4[]        = "items/suitchargeok1.wav",
        ENT_SOUND5[]        = "items/gunpickup2.wav",
        ENT_SOUND6[]        = "debris/bustglass1.wav",
        ENT_SOUND7[]        = "debris/bustglass2.wav",
        ENT_SPRITE1[]        = "sprites/laserbeam.spr",
        ENT_SPRITE2[]        = "sprites/lm_explode.spr";

new const
        ENT_CLASS_NAME[]        =        "lasermine",
        ENT_CLASS_NAME3[]        =        "func_breakable",
        gSnarkClassName[]        =        "wpn_snark",        // Для совместимости с плагином "Snark"
        barnacle_class[]        =        "barnacle",                // Для совместимости с плагином "Barnacle"
        weapon_box[]                =        "weaponbox";

new g_EntMine, beam, boom
new g_LENABLE, g_LFMONEY, g_LAMMO, g_LDMG, g_LBEO, g_LTMAX, g_LCOST, g_LHEALTH, g_LMODE, g_LRADIUS, g_NOROUND, g_NEMROUND, g_SURVROUND
new g_LRDMG,g_LFF,g_LCBT, g_LDELAY, g_LVISIBLE, g_LSTAMMO, g_LACCESS, g_LGLOW, g_LDMGMODE, g_LCLMODE
new g_LCBRIGHT, g_LDSEC, g_LCMDMODE, g_LBUYMODE, g_LME;
new g_msgDeathMsg,g_msgScoreInfo,g_msgDamage,g_msgStatusText;
new g_dcount[33],g_nowtime,g_MaxPL
new bool:g_settinglaser[33]
new Float:plspeed[33], plsetting[33], g_havemine[33], g_deployed[33];
//new CVAR_LMCost

public plugin_init()
{
        register_plugin(PLUGIN, VERSION, AUTHOR);

        // Вызываем функцию Laser_TakeDamage при получении урона объектом ENT_CLASS_NAME3 (func_breakable)
        RegisterHam(Ham_TakeDamage, ENT_CLASS_NAME3, "Laser_TakeDamage")
        // 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","BuyLasermineChat");

        g_LENABLE        = register_cvar("zp_ltm","1")
        g_LACCESS        = register_cvar("zp_ltm_acs","0") //0 all, 1 admin
        g_LMODE                = register_cvar("zp_ltm_mode","0") //0 lasermine, 1 tripmine
        g_LAMMO                = register_cvar("zp_ltm_ammo","3")
        g_LDMG                = register_cvar("zp_ltm_dmg","10") //laser hit dmg
        g_LCOST                = register_cvar("zp_ltm_cost","2")
        g_LFMONEY        = register_cvar("zp_ltm_fragmoney","1")
        g_LHEALTH        = register_cvar("zp_ltm_health","10")
        g_LTMAX                = register_cvar("zp_ltm_teammax","128")
        g_LRADIUS        = register_cvar("zp_ltm_radius","25.0")
        g_LRDMG                = register_cvar("zp_ltm_rdmg","100") //radius damage
        g_LFF                = register_cvar("zp_ltm_ff","0")
        g_LCBT                = register_cvar("zp_ltm_cbt","ALL")
        g_LDELAY        = register_cvar("zp_ltm_delay","0.1")
        g_LVISIBLE        = register_cvar("zp_ltm_line","1")
        g_LGLOW                = register_cvar("zp_ltm_glow","1")
        g_LCBRIGHT        = register_cvar("zp_ltm_bright","255")//laser line brightness.
        g_LCLMODE        = register_cvar("zp_ltm_color","0") //0 is team color,1 is green
        g_LDMGMODE        = register_cvar("zp_ltm_ldmgmode","0") //0 - frame dmg, 1 - once dmg, 2 - 1 second dmg
        g_LDSEC                = register_cvar("zp_ltm_ldmgseconds","1") //mode 2 only, damage / seconds. default 1 (sec)
        g_LSTAMMO        = register_cvar("zp_ltm_startammo","0")
        g_LBUYMODE        = register_cvar("zp_ltm_buymode","1");
        g_LCMDMODE        = register_cvar("zp_ltm_cmdmode","1");                //0 is +USE key, 1 is bind, 2 is each.
        g_LBEO                = register_cvar("zp_ltm_brokeenemy","1");
        g_NOROUND        = register_cvar("zp_ltm_noround","1");
        g_NEMROUND        = register_cvar("zp_ltm_nemround","1");
        g_SURVROUND        = register_cvar("zp_ltm_survround","1");

        register_event("DeathMsg", "DeathEvent", "a");
        register_event("CurWeapon", "standing", "be", "1=1");
        register_event("ResetHUD", "delaycount", "a");
        register_event("ResetHUD", "newround", "b");
        register_logevent("endround", 2, "0=World triggered", "1=Round_End");        // *егистрируем конец раунда
        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");

        // Forward.
        register_forward(FM_Think, "ltm_Think");
        register_forward(FM_PlayerPostThink, "ltm_PostThink");
        register_forward(FM_PlayerPreThink, "ltm_PreThink");

        // *егистируем файл языков
        register_dictionary("LaserMines.txt")
        register_cvar("Shidla", "[ZP] LaserMines v.2.8.1 Final", FCVAR_SERVER|FCVAR_SPONLY)

        // *егистрируем ExtraItem
        g_LME = zp_register_extra_item("Laser Mine", get_pcvar_num(g_LCOST), ZP_TEAM_ANY)
}

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

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);
        format(file, 63, "%s/zp_ltm_cvars_ap.cfg", file);
        if(file_exists(file)) server_cmd("exec %s", file), server_exec();
}

public Laser_TakeDamage(victim, inflictor, attacker, Float:f_Damage, bit_Damage)
{
        if(get_pcvar_num(g_LBEO))
        {
                new i_Owner

                // Получаем ID игрока, который поставил мину
                i_Owner = pev(victim, LASERMINE_OWNER)

                // Если урон нанасит владелец, а так же проверка игрока.
                if(i_Owner == attacker || !is_valid_player(i_Owner) || !is_valid_player(attacker))
                        return PLUGIN_CONTINUE

                // Если мина установлена человеком, то урон ей наносят только зомби
                if((CsTeams:pev(victim, LASERMINE_TEAM) == CS_TEAM_CT) && (cs_get_user_team(attacker) != CS_TEAM_CT))
                        return PLUGIN_CONTINUE

                // Если мина установлена зомби, а владелец мины и атакующий в разных командах - урон мине могун наносить все
                if((CsTeams:pev(victim, LASERMINE_TEAM) == CS_TEAM_T) && ((cs_get_user_team(i_Owner) != CS_TEAM_T) || (CsTeams:pev(victim, LASERMINE_TEAM) != cs_get_user_team(attacker))))
                        return PLUGIN_CONTINUE

                return HAM_SUPERCEDE
        }
        return PLUGIN_CONTINUE
}

public delaycount(id)
{
        g_dcount[id] = floatround(get_gametime());
}

bool:CheckTime(id)
{
        g_nowtime = floatround(get_gametime()) - g_dcount[id];
        if(g_nowtime >= get_pcvar_num(g_LDELAY))
                return true;
        return false;
}

public CreateLaserMine_Progress_b(id)
{
        if(get_pcvar_num(g_LCMDMODE) != 0)
                CreateLaserMine_Progress(id);
        return PLUGIN_HANDLED;
}

public CreateLaserMine_Progress(id)
{

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

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

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

        return PLUGIN_HANDLED;
}

public ReturnLaserMine_Progress(id)
{

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

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

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

        return PLUGIN_HANDLED;
}

public StopCreateLaserMine(id)
{

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

        return PLUGIN_HANDLED;
}

public StopReturnLaserMine(id)
{

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

        return PLUGIN_HANDLED;
}

public ReturnMine(id)
{
        id -= TASK_RELEASE;
        new tgt,body,Float:vo[3],Float:to[3];
        get_user_aiming(id,tgt,body);
        if(!pev_valid(tgt)) return;
        pev(id,pev_origin,vo);
        pev(tgt,pev_origin,to);
        if(get_distance_f(vo,to) > 70.0) return;
        new EntityName[32];
        pev(tgt, pev_classname, EntityName, 31);
        if(!equal(EntityName, ENT_CLASS_NAME)) return;
        if(pev(tgt,LASERMINE_OWNER) != id) return;
        RemoveEntity(tgt);

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

        return;
}

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

        engfunc(EngFunc_SetModel,i_Ent,ENT_MODELS);

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

        set_pev(i_Ent,pev_frame,0);
        set_pev(i_Ent,pev_body,3);
        set_pev(i_Ent,pev_sequence,TRIPMINE_WORLD);
        set_pev(i_Ent,pev_framerate,0);
        set_pev(i_Ent,pev_takedamage,DAMAGE_YES);
        set_pev(i_Ent,pev_dmg,100.0);
        set_user_health(i_Ent,get_pcvar_num(g_LHEALTH));
        new Float:vOrigin[3];
        new        Float:vNewOrigin[3],Float:vNormal[3],Float:vTraceDirection[3],
                Float:vTraceEnd[3],Float:vEntAngles[3];
        pev(id, pev_origin, vOrigin);
        velocity_by_aim(id, 128, vTraceDirection);
        xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
        engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
        new Float:fFraction;
        get_tr2(0, TR_flFraction, fFraction);

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


        xs_vec_mul_scalar(vNormal, 8.0, vNormal);
        xs_vec_add(vTraceEnd, vNormal, vNewOrigin);

        engfunc(EngFunc_SetSize, i_Ent, Float:{ -4.0, -4.0, -4.0 }, Float:{ 4.0, 4.0, 4.0 });
        engfunc(EngFunc_SetOrigin, i_Ent, vNewOrigin);

        // -- Rotate tripmine.
        vector_to_angle(vNormal,vEntAngles);
        set_pev(i_Ent,pev_angles,vEntAngles);

        // -- Calculate laser end origin.
        new Float:vBeamEnd[3], Float:vTracedBeamEnd[3];
               
        xs_vec_mul_scalar(vNormal, 8192.0, vNormal);
        xs_vec_add(vNewOrigin, vNormal, vBeamEnd);

        engfunc(EngFunc_TraceLine, vNewOrigin, vBeamEnd, IGNORE_MONSTERS, -1, 0);

        get_tr2(0, TR_vecPlaneNormal, vNormal);
        get_tr2(0, TR_vecEndPos, vTracedBeamEnd);

        // -- Save results to be used later.
        set_pev(i_Ent, LASERMINE_OWNER, id);
        set_pev(i_Ent,LASERMINE_BEAMENDPOINT,vTracedBeamEnd);
        set_pev(i_Ent,LASERMINE_TEAM,int:cs_get_user_team(id));
        new Float:fCurrTime = get_gametime();

        set_pev(i_Ent,LASERMINE_POWERUP, fCurrTime + 2.5);
        set_pev(i_Ent,LASERMINE_STEP,POWERUP_THINK);
        set_pev(i_Ent,pev_nextthink, fCurrTime + 0.2);

        PlaySound(i_Ent,POWERUP_SOUND);
        g_deployed[id]++;
        g_havemine[id]--;
        DeleteTask(id);
        ShowAmmo(id);
        return 1;
}

stock TeamDeployedCount(id)
{
        static i;
        static CsTeams:t;t = cs_get_user_team(id);
        static cnt;cnt=0;

        for(i = 1;i <= g_MaxPL;i++)
        {
                if(is_user_connected(i))
                        if(t == cs_get_user_team(i))
                                cnt += g_deployed[i];
        }

        return cnt;
}

bool:CheckCanTeam(id)
{
        new arg[5],CsTeam:num;
        get_pcvar_string(g_LCBT,arg,3);
        if(equali(arg,"Z"))
        {
                num = CsTeam:CS_TEAM_T;
        }
        else if(equali(arg,"H"))
        {
                num = CsTeam:CS_TEAM_CT;
        }
        else if(equali(arg,"ALL") || equali(arg,"HZ") || equali(arg,"ZH"))
        {
                num = CsTeam:CS_TEAM_UNASSIGNED;
        }
        else
        {
                num = CsTeam:CS_TEAM_UNASSIGNED;
        }
        if(num != CsTeam:CS_TEAM_UNASSIGNED && num != CsTeam:cs_get_user_team(id))
                return false;
        return true;
}

bool:CanCheck(id,mode)        // Проверки: когда можно ставить мины
{
        if(!get_pcvar_num(g_LENABLE))
        {
                client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOTACTIVE")

                return false;
        }
        if(get_pcvar_num(g_LACCESS) != 0)
                if(!(get_user_flags(id) & ADMIN_IMMUNITY))
                {
                        client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOACCESS")
                        return false;
                }
        if(!pev_user_alive(id)) return false;
        if(!CheckCanTeam(id))
        {
                client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_CBT")
                return false;
        }
        if(mode == 0)
        {
                if(g_havemine[id] <= 0)
                {
                        client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_DONTHAVEMINE")
                        return false;
                }
        }
        if(mode == 1)
        {
                if(get_pcvar_num(g_LBUYMODE) == 0)
                {
                        client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_CANTBUY")
                        return false;
                }
                if(g_havemine[id] >= get_pcvar_num(g_LAMMO))
                {
                        client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_HAVEMAX")
                        return false;
                }
                if(zp_get_user_ammo_packs(id) < get_pcvar_num(g_LCOST))
                {
                        client_print(id, print_chat, "%L %L%d %L", id, "CHATTAG",id, "STR_NOMONEY",get_pcvar_num(g_LCOST),id, "STR_NEEDED")
                        return false;
                }
        }
        if(!CheckTime(id))
        {
                client_print(id, print_chat, "%L %L %d %L", id, "CHATTAG",id, "STR_DELAY",get_pcvar_num(g_LDELAY)-g_nowtime,id, "STR_SECONDS")
                return false;
        }

        return true;
}

bool:ReturnCheck(id)
{
        if(!CanCheck(id,-1)) return false;
        if(g_havemine[id] + 1 > get_pcvar_num(g_LAMMO)) return false;
        new tgt,body,Float:vo[3],Float:to[3];
        get_user_aiming(id,tgt,body);
        if(!pev_valid(tgt)) return false;
        pev(id,pev_origin,vo);
        pev(tgt,pev_origin,to);
        if(get_distance_f(vo,to) > 70.0) return false;
        new EntityName[32];
        pev(tgt, pev_classname, EntityName, 31);
        if(!equal(EntityName, ENT_CLASS_NAME)) return false;
        if(pev(tgt,LASERMINE_OWNER) != id) return false;
        return true;
}

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

        // Проверка на разрешение
        if(!zp_has_round_started() && get_pcvar_num(g_NOROUND))
        {
                client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NOROUND")
                return false;
        }

        if(zp_is_nemesis_round() && get_pcvar_num(g_NEMROUND))
        {
                client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_NEMROUND")
                return false;
        }

        if(zp_is_survivor_round() && get_pcvar_num(g_SURVROUND))
        {
                client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_SURVROUND")
                return false;
        }

        if(g_deployed[id] >= get_pcvar_num(g_LAMMO))
        {
                client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_MAXDEPLOY")
                return false;
        }

        if(TeamDeployedCount(id) >= get_pcvar_num(g_LTMAX))
        {
                client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_MANYPPL")
                return false;
        }
        new Float:vTraceDirection[3], Float:vTraceEnd[3],Float:vOrigin[3];
        pev(id, pev_origin, vOrigin);
        velocity_by_aim(id, 128, vTraceDirection);
        xs_vec_add(vTraceDirection, vOrigin, vTraceEnd);
        engfunc(EngFunc_TraceLine, vOrigin, vTraceEnd, DONT_IGNORE_MONSTERS, id, 0);
        new Float:fFraction,Float:vTraceNormal[3];
        get_tr2(0, TR_flFraction, fFraction);
        // -- We hit something!
        if(fFraction < 1.0)
        {
                // -- Save results to be used later.
                get_tr2(0, TR_vecEndPos, vTraceEnd);
                get_tr2(0, TR_vecPlaneNormal, vTraceNormal);

                return true;
        }

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

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

        static Float:fCurrTime;
        fCurrTime = get_gametime();

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

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

                                PlaySound(i_Ent, ACTIVATE_SOUND);
                        }
                        if(get_pcvar_num(g_LGLOW)!=0)
                        {
                                if(get_pcvar_num(g_LCLMODE)==0)
                                {
                                        switch (pev(i_Ent,LASERMINE_TEAM))
                                        {
                                                // цвет лазера Зомби
                                                case CS_TEAM_T: set_rendering(i_Ent,kRenderFxGlowShell,Red_Zomb,Green_Zomb,Blue_Zomb,kRenderNormal,5);
                                                // цвет лазера Человека
                                                case CS_TEAM_CT:set_rendering(i_Ent,kRenderFxGlowShell,Red_Hum,Green_Hum,Blue_Hum,kRenderNormal,5);
                                        }
                                }else
                                {
                                        // цвет лазера, если стоит "одинаковый для всех" цвет
                                        set_rendering(i_Ent,kRenderFxGlowShell,random_num(50 , 200),random_num(50 , 200),random_num(50 , 200),kRenderNormal,5);
                                }
                        }
                        set_pev(i_Ent, pev_nextthink, fCurrTime + 0.1);
                }
                case BEAMBREAK_THINK :
                {
                        static Float:vEnd[3],Float:vOrigin[3];
                        pev(i_Ent, pev_origin, vOrigin);
                        pev(i_Ent, LASERMINE_BEAMENDPOINT, vEnd);

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

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

                        // -- Something has passed the laser.
                        if(fFraction < 1.0)
                        {
                                // -- Ignoring others tripmines entity.
                                if(pev_valid(iHit))
                                {
                                        pev(iHit, pev_classname, EntityName, 31);
                                        // Игнорим всякую хрень
                                        if(!equal(EntityName, ENT_CLASS_NAME) && !equal(EntityName, gSnarkClassName) && !equal(EntityName, barnacle_class) && !equal(EntityName, weapon_box))
                                        {
                                                set_pev(i_Ent, pev_enemy, iHit);

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

                                                if (!pev_valid(i_Ent))        // если не верный объект - ничего не делаем. Спасибо DJ_WEST
                                                        return FMRES_IGNORED;

                                                set_pev(i_Ent, pev_nextthink, fCurrTime + random_float(0.1, 0.3));
                                        }
                                }
                        }
                        if(get_pcvar_num(g_LDMGMODE)!=0)
                                if(pev(i_Ent,LASERMINE_HITING) != iHit)
                                        set_pev(i_Ent,LASERMINE_HITING,iHit);
 
                        // -- Tripmine is still there.
                        if(pev_valid(i_Ent))
                        {
                                static Float:fHealth;
                                pev(i_Ent, pev_health, fHealth);

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

        return FMRES_IGNORED;
}

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

DrawLaser(i_Ent, const Float:v_Origin[3], const Float:v_EndOrigin[3])
{
        new tcolor[3];
        new teamid = pev(i_Ent, LASERMINE_TEAM);
        if(get_pcvar_num(g_LCLMODE) == 0)
        {
                switch(teamid){
                        case 1:{
                                // Цвет луча для Зомби
                                tcolor[0] = Red_Zomb;
                                tcolor[1] = Green_Zomb;
                                tcolor[2] = Blue_Zomb;
                        }
                        case 2:{
                                // Цвет луча для Человека
                                tcolor[0] = Red_Hum;
                                tcolor[1] = Green_Hum;
                                tcolor[2] = Blue_Hum;
                        }
                }
        }else
        {
                // Цвет луча для всез при режиме 1-н луч для всех
                tcolor[0] = random_num(50 , 200);
                tcolor[1] = random_num(50 , 200);
                tcolor[2] = random_num(50 , 200);
        }
        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,Float:DmgMAX,Float:Radius)
{
        // Get given parameters
        new Float:vecSrc[3];
        pev(iCurrent, pev_origin, vecSrc);

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

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

        new Float:kickback = 0.0;
        // Needed for doing some nice calculations :P
        new Float:Tabsmin[3], Float:Tabsmax[3];
        new Float:vecSpot[3];
        new Float:Aabsmin[3], Float:Aabsmax[3];
        new Float:vecSee[3];
        new trRes;
        new Float:flFraction;
        new Float:vecEndPos[3];
        new Float:distance;
        new Float:origin[3], Float:vecPush[3];
        new Float:invlen;
        new Float:velocity[3];
        new iHitHP,iHitTeam;
        // Calculate falloff
        new Float:falloff;
        if(Radius > 0.0)
        {
                falloff = DmgMAX / Radius;
        } else {
                falloff = 1.0;
        }
        // Find monsters and players inside a specifiec radius
        while((ent = engfunc(EngFunc_FindEntityInSphere, ent, vecSrc, Radius)) != 0)
        {
                if(!pev_valid(ent)) continue;
                if(!(pev(ent, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
                {
                        // Entity is not a player or monster, ignore it
                        continue;
                }
                if(!pev_user_alive(ent)) continue;
                // Reset data
                kickback = 1.0;
                tmpdmg = DmgMAX;
                // The following calculations are provided by Orangutanz, THANKS!
                // We use absmin and absmax for the most accurate information
                pev(ent, pev_absmin, Tabsmin);
                pev(ent, pev_absmax, Tabsmax);
                xs_vec_add(Tabsmin,Tabsmax,Tabsmin);
                xs_vec_mul_scalar(Tabsmin,0.5,vecSpot);
                pev(iCurrent, pev_absmin, Aabsmin);
                pev(iCurrent, pev_absmax, Aabsmax);
                xs_vec_add(Aabsmin,Aabsmax,Aabsmin);
                xs_vec_mul_scalar(Aabsmin,0.5,vecSee);
                engfunc(EngFunc_TraceLine, vecSee, vecSpot, 0, iCurrent, trRes);
                get_tr2(trRes, TR_flFraction, flFraction);
                // Explosion can 'see' this entity, so hurt them! (or impact through objects has been enabled xD)
                if(flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent)
                {
                        // Work out the distance between impact and entity
                        get_tr2(trRes, TR_vecEndPos, vecEndPos);
                        distance = get_distance_f(vecSrc, vecEndPos) * falloff;
                        tmpdmg -= distance;
                        if(tmpdmg < 0.0)
                                tmpdmg = 0.0;
                        // Kickback Effect
                        if(kickback != 0.0)
                        {
                                xs_vec_sub(vecSpot,vecSee,origin);
                                invlen = 1.0/get_distance_f(vecSpot, vecSee);

                                xs_vec_mul_scalar(origin,invlen,vecPush);
                                pev(ent, pev_velocity, velocity)
                                xs_vec_mul_scalar(vecPush,tmpdmg,vecPush);
                                xs_vec_mul_scalar(vecPush,kickback,vecPush);
                                xs_vec_add(velocity,vecPush,velocity);
                                if(tmpdmg < 60.0)
                                {
                                        xs_vec_mul_scalar(velocity,12.0,velocity);
                                } else {
                                        xs_vec_mul_scalar(velocity,4.0,velocity);
                                }
                                if(velocity[0] != 0.0 || velocity[1] != 0.0 || velocity[2] != 0.0)
                                {
                                        // There's some movement todo :)
                                        set_pev(ent, pev_velocity, velocity)
                                }
                        }

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

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

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

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

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

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

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

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

        new teamid = pev(iCurrent, LASERMINE_TEAM)

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

        szClassName[0] = '^0'
        pev(isHit,pev_classname,szClassName,32)
        if((pev(isHit, pev_flags) & (FL_CLIENT | FL_FAKECLIENT | FL_MONSTER)))
        {
                Alive = pev_user_alive(isHit)
                God = get_user_godmode(isHit)
                if(!Alive || God) return PLUGIN_CONTINUE
                iHitTeam = int:cs_get_user_team(isHit)
                iHitHP = pev_user_health(isHit) - get_pcvar_num(g_LDMG)
                id = pev(iCurrent,LASERMINE_OWNER)//, szNetName[32]
                if(iHitHP <= 0)
                {
                        if(iHitTeam != teamid)
                        {
                                emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
                                hitscore = 1
                                zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) + get_pcvar_num(g_LFMONEY))
                                set_score(id,isHit,hitscore,iHitHP)
                        }else
                        {
                                if(get_pcvar_num(g_LFF))
                                {
                                        emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
                                        hitscore = -1
                                        zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LFMONEY))
                                        set_score(id,isHit,hitscore,iHitHP)
                                }
                        }
                }else if(iHitTeam != teamid || get_pcvar_num(g_LFF))
                {
                        emit_sound(isHit, CHAN_WEAPON, ENT_SOUND4, 1.0, ATTN_NORM, 0, PITCH_NORM)
                        set_user_health(isHit,iHitHP)
                        set_pev(iCurrent,LASERMINE_HITING,isHit);
                        engfunc(EngFunc_MessageBegin,MSG_ONE_UNRELIABLE,g_msgDamage,{0.0,0.0,0.0},isHit);
                        write_byte(get_pcvar_num(g_LDMG))
                        write_byte(get_pcvar_num(g_LDMG))
                        write_long(DMG_BULLET)
                        engfunc(EngFunc_WriteCoord,vOrigin[0])
                        engfunc(EngFunc_WriteCoord,vOrigin[1])
                        engfunc(EngFunc_WriteCoord,vOrigin[2])
                        message_end()
                }
        }else if(equal(szClassName, ENT_CLASS_NAME3))
        {
                new hl;
                hl = pev_user_health(isHit);
                set_user_health(isHit,hl-get_pcvar_num(g_LDMG));
        }
        return PLUGIN_CONTINUE
}

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

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

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

        return (val == DAMAGE_NO)
}

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

        return 1
}

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

set_score(id,target,hitscore,HP){

        new idfrags = pev_user_frags(id) + hitscore// get_user_frags(id) + hitscore
        set_user_frags(id,idfrags)
        new tarfrags = pev_user_frags(target) + 1 //get_user_frags(target) + 1
        set_user_frags(target,tarfrags)
        new idteam = int:cs_get_user_team(id)
        new iddeaths = cs_get_user_deaths(id)


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

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

        set_msg_block(g_msgDeathMsg, BLOCK_ONCE)

        set_user_health(target, HP)

}

public BuyLasermine(id)
{
        if(!CanCheck(id,1)) return PLUGIN_CONTINUE

        g_havemine[id]++;

        client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_BOUGHT")

        emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        ShowAmmo(id)
        return PLUGIN_HANDLED
}

public BuyLasermineChat(id)
{
        if(!CanCheck(id,1)) return PLUGIN_CONTINUE

        zp_set_user_ammo_packs(id,zp_get_user_ammo_packs(id) - get_pcvar_num(g_LCOST))
        g_havemine[id]++;

        client_print(id, print_chat, "%L %L", id, "CHATTAG",id, "STR_BOUGHT")

        emit_sound(id, CHAN_ITEM, ENT_SOUND5, VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
        ShowAmmo(id)
        return PLUGIN_HANDLED
}

public zp_extra_item_selected(id, itemid)
{
        if(itemid == g_LME)
                BuyLasermine(id)

        if(g_havemine[id] >= get_pcvar_num(g_LAMMO))
                        return ZP_PLUGIN_HANDLED

        return PLUGIN_CONTINUE
}

ShowAmmo(id)
{
        new ammo[51]
        new PlugStat[ 555 char ];
        formatex(PlugStat, charsmax(PlugStat), "%L", LANG_PLAYER, "STR_STATE")
        formatex(ammo, 50, "%s %i/%i",PlugStat, g_havemine[id],get_pcvar_num(g_LAMMO))

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

public showInfo(id)
{
        client_print(id, print_chat, "%L", id, "STR_REF")
}

public say_lasermine(id){
        new said[32]
        read_argv(1,said,31);
        if(!get_pcvar_num(g_LENABLE))
        {
                return PLUGIN_CONTINUE
        }
        if(equali(said,"/buy lasermine")||equali(said,"/lm")||equali(said,"buy_lasermine")){
                BuyLasermineChat(id)
        }else if(equali(said, "lasermine") || equali(said, "/lasermine")){
                const SIZE = 1024
                new msg[SIZE+1],len = 0;
                len += formatex(msg[len], SIZE - len, "<html><body>")
                len += formatex(msg[len], SIZE - len, "<p><b>LaserMine</b></p><br/><br/>")
                len += formatex(msg[len], SIZE - len, "<p>You can be setting the mine on the wall.</p><br/>")
                len += formatex(msg[len], SIZE - len, "<p>That laser will give what touched it damage.</p><br/><br/>")
                len += formatex(msg[len], SIZE - len, "<p><b>LaserMine Commands</b></p><br/><br/>")
                len += formatex(msg[len], SIZE - len, "<p><b>Say /buy lasermine</b> or <b>Say /lm</b> //buying lasermine<br/>")
                len += formatex(msg[len], SIZE - len, "<b>buy_lasermine</b> //bind ^"F2^" buy_lasermine : using F2 buying lasermine<br/>")
                len += formatex(msg[len], SIZE - len, "<b>+setlaser</b> //bind mouse3 +setlaser : using mouse3 set lasermine on wall<br/>")
                len += formatex(msg[len], SIZE - len, "</body></html>")
                show_motd(id, msg, "Lasermine Entity help")
                return PLUGIN_CONTINUE
        }
        else if(containi(said, "laser") != -1) {
                showInfo(id)
                return PLUGIN_CONTINUE
        }
        return PLUGIN_CONTINUE
}

public standing(id)
{
        if(!g_settinglaser[id])
                return PLUGIN_CONTINUE

        set_pev(id, pev_maxspeed, 1.0)

        return PLUGIN_CONTINUE
}

public ltm_PostThink(id)
{
        if(!g_settinglaser[id] && plsetting[id]){
                resetspeed(id)
        }
        else if(g_settinglaser[id] && !plsetting[id]) {
                pev(id, pev_maxspeed,plspeed[id])
                set_pev(id, pev_maxspeed, 1.0)
        }
        plsetting[id] = g_settinglaser[id]
        return FMRES_IGNORED
}

public ltm_PreThink(id)
{
        if(!pev_user_alive(id) || g_settinglaser[id] == true || is_user_bot(id) || get_pcvar_num(g_LCMDMODE) == 1)
                return FMRES_IGNORED;

        if(pev(id, pev_button) & IN_USE && !(pev(id, pev_oldbuttons) & IN_USE))
                CreateLaserMine_Progress(id)
        return FMRES_IGNORED;
}

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

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

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


public newround(id){
        if(!get_pcvar_num(g_LENABLE))
                return PLUGIN_CONTINUE
        pev(id, pev_maxspeed,plspeed[id])
        DeleteTask(id);
        RemoveAllTripmines(id);
        //client_print(id, print_chat, "[ZP][LM][DeBug] All Mines removied!");
        delaycount(id);
        SetStartAmmo(id);
        return PLUGIN_CONTINUE
}

public endround(id)
{
        if(!get_pcvar_num(g_LENABLE))
                return PLUGIN_CONTINUE

        // Удаление мин после конца раунда
        DeleteTask(id);
        RemoveAllTripmines(id);

        return PLUGIN_CONTINUE
}

public DeathEvent(){
        if(!get_pcvar_num(g_LENABLE))
                return PLUGIN_CONTINUE

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

public RemoveAllTripmines(i_Owner)
{
        new iEnt = g_MaxPL + 1;
        new clsname[32];
        while((iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", ENT_CLASS_NAME)))
        {
                if(i_Owner)
                {
                        if(pev(iEnt, LASERMINE_OWNER) != i_Owner)
                                continue;
                        clsname[0] = '^0'
                        pev(iEnt, pev_classname, clsname, sizeof(clsname)-1);
                        if(equali(clsname, ENT_CLASS_NAME))
                        {
                                PlaySound(iEnt, STOP_SOUND);
                                RemoveEntity(iEnt);
                        }
                }
                else
                        set_pev(iEnt, pev_flags, FL_KILLME);
        }
        g_deployed[i_Owner]=0;
}

SetStartAmmo(id)
{
        new stammo = get_pcvar_num(g_LSTAMMO);
        if(stammo <= 0) return PLUGIN_CONTINUE;
        g_havemine[id] = (g_havemine[id] <= stammo) ? stammo : g_havemine[id];
        return PLUGIN_CONTINUE;
}

public CutDeploy_onDamage(id)
{
        if(get_user_health(id) < 1)
                DeleteTask(id);
}

DeleteTask(id)
{
        if(task_exists((TASK_PLANT + id)))
        {
                remove_task((TASK_PLANT + id))
        }
        if(task_exists((TASK_RELEASE + id)))
        {
                remove_task((TASK_RELEASE + id))
        }
        g_settinglaser[id] = false
        return PLUGIN_CONTINUE;
}

stock set_rendering(entity, fx = kRenderFxNone, r = 255, g = 255, b = 255, render = kRenderNormal, amount = 16)
{
        static Float:RenderColor[3];
        RenderColor[0] = float(r);
        RenderColor[1] = float(g);
        RenderColor[2] = float(b);

        set_pev(entity, pev_renderfx, fx);
        set_pev(entity, pev_rendercolor, RenderColor);
        set_pev(entity, pev_rendermode, render);
        set_pev(entity, pev_renderamt, float(amount));

        return 1
}

// Gets offset data
get_offset_value(id, type)
{
        new key = -1;
        switch(type)
        {
                case OFFSET_TEAM: key = OFFSET_TEAM;
                case OFFSET_MONEY:
                key = OFFSET_MONEY;
                case OFFSET_DEATH: key = OFFSET_DEATH;
        }
        if(key != -1)
        {
                if(is_amd64_server()) key += 25;
                return get_pdata_int(id, key);
        }
        return -1;
}


SHIELD755 01-21-2019 02:40

Re: HELPME please with this lasermini
 
it is respawn function in zombie plaugue like deathmatch

Abiss32 01-21-2019 07:47

Re: HELPME please with this lasermini
 
The problem isn't from the lasermine plugin its a configuration in zombieplague.cfg file the whole congifig is called Deathmach from the you have to change:

zp_deathmach to 0

redouane 01-22-2019 12:25

Re: HELPME please with this lasermini
 
Okkkaaaay thank you so much guys i fixed it with your help

redouane 01-22-2019 12:31

Re: HELPME please with this lasermini
 
and i want to fix another thing if that possible so i just have a problem with last human so if he is having an armor so for example he have 100 armor even if he is last human the other zombies they have to take the whole armor first (domage) then they can domage the HP so the armor play the same case like HP with the last human... How i can fix that ?

CrazY. 01-22-2019 13:25

Re: HELPME please with this lasermini
 
Set cvar zp_human_armor_protect to 0 in zombieplague.cfg or edit zp50_human_armor.sma if you want to disabled armor protection only to last human.

Abiss32 01-22-2019 18:23

Re: HELPME please with this lasermini
 
Quote:

Originally Posted by CrazY. (Post 2636052)
Set cvar zp_human_armor_protect to 0 in zombieplague.cfg or edit zp50_human_armor.sma if you want to disabled armor protection only to last human.

i need the same thing and i want also to make the armor not to work on swarm modes too..

redouane 01-22-2019 18:35

Re: HELPME please with this lasermini
 
Quote:

Originally Posted by CrazY. (Post 2636052)
Set cvar zp_human_armor_protect to 0 in zombieplague.cfg or edit zp50_human_armor.sma if you want to disabled armor protection only to last human.

So i want only to disabled armor protection only to last human so this is my code of zp50_human_armor.sma

Code:

/*================================================================================
       
        ------------------------
        -*- [ZP] Human Armor -*-
        ------------------------
       
        This plugin is part of Zombie Plague Mod and is distributed under the
        terms of the GNU General Public License. Check ZP_ReadMe.txt for details.
       
================================================================================*/

#include <amxmodx>
#include <cstrike>
#include <fakemeta>
#include <hamsandwich>
#include <cs_ham_bots_api>
#include <zp50_core>
#define LIBRARY_NEMESIS "zp50_class_nemesis"
#include <zp50_class_nemesis>
#define LIBRARY_ASSASSIN "zp50_class_assassin"
#include <zp50_class_assassin>
#define LIBRARY_SURVIVOR "zp50_class_survivor"
#include <zp50_class_survivor>
#define LIBRARY_SNIPER "zp50_class_sniper"
#include <zp50_class_sniper>

// CS Player PData Offsets (win32)
const OFFSET_PAINSHOCK = 108 // ConnorMcLeod

// Some constants
const DMG_HEGRENADE = (1<<24)

// CS sounds
new const g_sound_armor_hit[] = "player/bhit_helmet-1.wav"

new cvar_human_armor_protect, cvar_human_armor_default
new cvar_armor_protect_nemesis, cvar_survivor_armor_protect,
cvar_armor_protect_assassin, cvar_sniper_armor_protect

public plugin_init()
{
        register_plugin("[ZP] Human Armor", ZP_VERSION_STRING, "ZP Dev Team")
       
        cvar_human_armor_protect = register_cvar("zp_human_armor_protect", "1")
        cvar_human_armor_default = register_cvar("zp_human_armor_default", "0")
       
        if (LibraryExists(LIBRARY_NEMESIS, LibType_Library))
                cvar_armor_protect_nemesis = register_cvar("zp_armor_protect_nemesis", "1")
        if (LibraryExists(LIBRARY_ASSASSIN, LibType_Library))
                cvar_armor_protect_assassin = register_cvar("zp_armor_protect_assassin", "1")
        if (LibraryExists(LIBRARY_SURVIVOR, LibType_Library))
                cvar_survivor_armor_protect = register_cvar("zp_survivor_armor_protect", "0")
        if (LibraryExists(LIBRARY_SNIPER, LibType_Library))
                cvar_sniper_armor_protect = register_cvar("zp_sniper_armor_protect", "0")
       
        RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
        RegisterHamBots(Ham_TakeDamage, "fw_TakeDamage")
}

public plugin_natives()
{
        set_module_filter("module_filter")
        set_native_filter("native_filter")
}
public module_filter(const module[])
{
        if (equal(module, LIBRARY_NEMESIS) || equal(module, LIBRARY_ASSASSIN) || equal(module, LIBRARY_SURVIVOR) || equal(module, LIBRARY_SNIPER))
                return PLUGIN_HANDLED;
       
        return PLUGIN_CONTINUE;
}
public native_filter(const name[], index, trap)
{
        if (!trap)
                return PLUGIN_HANDLED;
       
        return PLUGIN_CONTINUE;
}

public plugin_precache()
{
        precache_sound(g_sound_armor_hit)
}

public zp_fw_core_cure_post(id, attacker)
{
        new Float:armor
        pev(id, pev_armorvalue, armor)
       
        if (armor < get_pcvar_float(cvar_human_armor_default))
                set_pev(id, pev_armorvalue, get_pcvar_float(cvar_human_armor_default))
}

// Ham Take Damage Forward
public fw_TakeDamage(victim, inflictor, attacker, Float:damage, damage_type)
{
        // Non-player damage or self damage
        if (victim == attacker || !is_user_alive(attacker))
                return HAM_IGNORED;
       
        // Zombie attacking human...
        if (zp_core_is_zombie(attacker) && !zp_core_is_zombie(victim))
        {
                // Ignore damage coming from a HE grenade (bugfix)
                if (damage_type & DMG_HEGRENADE)
                        return HAM_IGNORED;
               
                // Does human armor need to be reduced before infecting/damaging?
                if (!get_pcvar_num(cvar_human_armor_protect))
                        return HAM_IGNORED;
               
                // Should armor protect against nemesis attacks?
                if (LibraryExists(LIBRARY_NEMESIS, LibType_Library) && !get_pcvar_num(cvar_armor_protect_nemesis) && zp_class_nemesis_get(attacker))
                        return HAM_IGNORED;

                // Should armor protect against assassin attacks?
                if (LibraryExists(LIBRARY_ASSASSIN, LibType_Library) && !get_pcvar_num(cvar_armor_protect_assassin) && zp_class_assassin_get(attacker))
                        return HAM_IGNORED;
               
                // Should armor protect survivor too?
                if (LibraryExists(LIBRARY_SURVIVOR, LibType_Library) && !get_pcvar_num(cvar_survivor_armor_protect) && zp_class_survivor_get(victim))
                        return HAM_IGNORED;

                // Should armor protect sniper too?
                if (LibraryExists(LIBRARY_SNIPER, LibType_Library) && !get_pcvar_num(cvar_sniper_armor_protect) && zp_class_sniper_get(victim))
                        return HAM_IGNORED;
               
                // Get victim armor
                static Float:armor
                pev(victim, pev_armorvalue, armor)
               
                // If he has some, block damage and reduce armor instead
                if (armor > 0.0)
                {
                        emit_sound(victim, CHAN_BODY, g_sound_armor_hit, 1.0, ATTN_NORM, 0, PITCH_NORM)
                       
                        if (armor - damage > 0.0)
                                set_pev(victim, pev_armorvalue, armor - damage)
                        else
                                cs_set_user_armor(victim, 0, CS_ARMOR_NONE)
                       
                        // Block damage, but still set the pain shock offset
                        set_pdata_float(victim, OFFSET_PAINSHOCK, 0.5)
                        return HAM_SUPERCEDE;
                }
        }
       
        return HAM_IGNORED;
}


CrazY. 01-23-2019 07:15

Re: HELPME please with this lasermini
 
2 Attachment(s)
Post in right section next time.
https://forums.alliedmods.net/forumdisplay.php?f=12

Replace zp50_human_armor with one of the plugins below.

redouane 01-23-2019 09:00

Re: HELPME please with this lasermini
 
Quote:

Originally Posted by CrazY. (Post 2636168)
Post in right section next time.
https://forums.alliedmods.net/forumdisplay.php?f=12

Replace zp50_human_armor with one of the plugins below.

Okaaaaay Really Thank you so much i wanted to fix it so badly so i'm going now to try it


All times are GMT -4. The time now is 04:13.

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