Русское сообщество по скриптингу

[ZP] Мины  [Решено]

Все вопросы по скриптингу для AMXX, помощь в редактировании плагинов.

Модераторы: Subb98, liFe iS GoOD

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы, касающие только скриптинга для AMX Mod X.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

[ZP] Мины  [Решено]

Сообщение Aleksey DEAD » 04 мар 2018, 00:04

- Всем добрый вечер, я не очень силен в скриптинге, но пытаюсь как-то учиться. Прошу помощи у вас, тут 2 бага в этом плагине мин для zp,
[Баг 1]. Например купил все 4 мины, поставил их на стену, когда наступают новый раунд мины пропали как и должно было быть, но когда покупаешь новые мины, и нажимаешь чтобы поставить на стену пишет установлено максимально мин, хотя я не устанавливал в новом раунде не одной минки...
[Баг 2]. Проблема в том, что мина становится не только на стену, но и в воздухе... пример: Купил мину, навел на стену ставлю и резко мышкой переношу на воздух и мины ставится в воздухе вот такая проблема, нужно чтобы только на стене мина ставилась.

- Помогите с этим пожалуйста, и на последок про pawn в cs 1.6, что бы вы посоветовали бы прочесть мне для начала?спасибо заранее!!!!)

Код: Выделить всё
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <xs>
#include <zombieplague>

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

#define LASERMINE_TEAM pev_iuser1
#define LASERMINE_OWNER pev_iuser2
#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 
= 0,
Green_Zomb = 0,
Blue_Zomb = 255;

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/zm_weapons/v_lasermine.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/zm_weapons/laserbeam.spr",
ENT_SPRITE2[] = "sprites/zm_weapons/lm_exp.spr";

new const
ENT_CLASS_NAME
[] = "lasermine",
ENT_CLASS_NAME3[] = "func_breakable",
gSnarkClassName[] = "wpn_snark",
barnacle_class[] = "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];

public plugin_init()
{
    RegisterHam(Ham_TakeDamage, ENT_CLASS_NAME3, "Laser_TakeDamage")
    
    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") // [Выключить мины значение "1" | Выключить мины значение "0"]
    g_LACCESS = register_cvar("zp_ltm_acs","0") //[Только админы могут ставить мины "1" | Все игроки значение "0"]
    g_LMODE = register_cvar("zp_ltm_mode","0") // [Просто лазер | Взрывающаяся мина]
    g_LAMMO = register_cvar("zp_ltm_ammo","4") // [Сколько мин можно покупать? "Значение не более 10"].
    g_LDMG = register_cvar("zp_ltm_dmg","3") // [Урон от мины в секунду] (3 Секунды - БАЛАНС).
    g_LCOST = register_cvar("zp_ltm_cost","25") // [Цена мины в бонусах].
    g_LFMONEY = register_cvar("zp_ltm_fragmoney","0") // [Сколько бонусов давать за убийство миной]
    g_LHEALTH = register_cvar("zp_ltm_health","750") // [Здоровье мины].
    g_LTMAX = register_cvar("zp_ltm_teammax","128") // Сколько мин может, поставить команда].
    g_LRADIUS = register_cvar("zp_ltm_radius","25.0") // [Радиуст установки].
    g_LRDMG = register_cvar("zp_ltm_rdmg","1000") //Максимальный радиус урона.
    g_LFF = register_cvar("zp_ltm_ff","0") // [Может ли убивать своих?] (Значение 1 - может | 0 - не может).
    g_LCBT = register_cvar("zp_ltm_cbt","H") // [Какая команда может купить мины] (По умолчанию люди).
    g_LDELAY = register_cvar("zp_ltm_delay","0.1") // [Через какое время в секундах можно купить следующую мину?]
    g_LVISIBLE = register_cvar("zp_ltm_line","1") // [Показывать или не показывать лазер?] (Значение 1 показывать | 0 - не показывать).
    g_LGLOW = register_cvar("zp_ltm_glow","1") // [Включить/Выключить отблеск мины]
    g_LCBRIGHT = register_cvar("zp_ltm_bright","200") // [Яркость мины]
    g_LCLMODE = register_cvar("zp_ltm_color","0") // Цвет луча 0 - люди. (Cиний).
    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"); // [Разрешить покупку из чата] (Значение 1 - да | 0 - нет).
    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"); // 1 - мины смогут ломать только команда-противник и тот, кто ее поставил (при "zp_ltm_ff 1" рекомендуется значение "0"!)
    g_NOROUND = register_cvar("zp_ltm_noround","1"); // 1 - мины нельзя ставить до начала раунда
    g_NEMROUND = register_cvar("zp_ltm_nemround","1"); // 1 - мины нельзя ставить после начала раунда "Немезида"
    g_SURVROUND = register_cvar("zp_ltm_survround","1"); // 1 - мины нельзя ставить после начала раунда "Выживший"
    
    register_event
("DeathMsg", "DeathEvent", "a");
    register_event("CurWeapon", "standing", "be", "1=1");
    register_event("ResetHUD", "delaycount", "a");
    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");
    
    register_forward
(FM_Think, "ltm_Think");
    register_forward(FM_PlayerPostThink, "ltm_PostThink");
    register_forward(FM_PlayerPreThink, "ltm_PreThink");
    
    register_dictionary
("LaserMines.txt")
    register_cvar("", "", FCVAR_SERVER|FCVAR_SPONLY)
    
    g_LME 
= zp_register_extra_item("Лазер мина", get_pcvar_num(g_LCOST), ZP_TEAM_HUMAN)
}

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
        
        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
    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);
    
    if
(fFraction < 1.0)
    {
        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);
    
    vector_to_angle
(vNormal,vEntAngles);
    set_pev(i_Ent,pev_angles,vEntAngles);
    
    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);
    
    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;= 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,"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);
    if(fFraction < 1.0)
    {
        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);
    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;
    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);
            
            if
(fFraction < 1.0)
            {
                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))
                        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);
            
            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 :
        {
            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
    {
        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]);
    engfunc(EngFunc_WriteCoord,v_EndOrigin[1]);
    engfunc(EngFunc_WriteCoord,v_EndOrigin[2]);
    write_short(beam);
    write_byte(0);
    write_byte(0);
    write_byte(1);
    write_byte(5);
    write_byte(0);
    write_byte(tcolor[0]);
    write_byte(tcolor[1]);
    write_byte(tcolor[2]);
    write_byte(get_pcvar_num(g_LCBRIGHT));
    write_byte(255);
    message_end();
}

CreateDamage(iCurrent,Float:DmgMAX,Float:Radius)
{
    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;
    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;
    new Float:falloff;
    if(Radius > 0.0)
    {
        falloff = DmgMAX / Radius;
        } else {
        falloff = 1.0;
    }
    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)))
        {
            continue;
        }
        if(!pev_user_alive(ent)) continue;
        kickback = 1.0;
        tmpdmg = DmgMAX;
        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);
        if(flFraction >= 0.9 || get_tr2(trRes, TR_pHit) == ent)
        {
            get_tr2(trRes, TR_vecEndPos, vecEndPos);
            distance = get_distance_f(vecSrc, vecEndPos) * falloff;
            tmpdmg -= distance;
            if(tmpdmg < 0.0)
            tmpdmg = 0.0;
            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)
                {
                    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_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);
    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)
        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
    set_user_frags
(id,idfrags)
    new tarfrags = pev_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>Лазер мины</b></p><br/><br/>")
        len += formatex(msg[len], SIZE - len, "<p>Мины устанавливаются на стены</p><br/>")
        len += formatex(msg[len], SIZE - len, "<p>Мины отберают Хп противоположной команды</p><br/><br/>")
        len += formatex(msg[len], SIZE - len, "<p><b>Устанока мин писать в консоль bind z +setlaser</b></p><br/><br/>")
        len += formatex(msg[len], SIZE - len, "<p><b>Убрать мину писать в консоль bind x +dellaser</b><br/>")
        len += formatex(msg[len], SIZE - len, "<b>купить мину можео через чат написав /lm</b><br/>")
        len += formatex(msg[len], SIZE - len, "<b>Макс лазеров 3 Хп 1 мины 300</b><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(0);
    delaycount(id);
    SetStartAmmo(id);
    return PLUGIN_CONTINUE
}

public endround(id)
{
    if(!get_pcvar_num(g_LENABLE))
    return PLUGIN_CONTINUE
    
    DeleteTask
(id);
    RemoveAllTripmines(0);
    
    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
}

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;
Аватара пользователя
Aleksey DEAD
 
Сообщения: 14
Зарегистрирован: 06 апр 2017, 14:05
Откуда: Волгоград
Благодарил (а): 5 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: pawn

Re: [ZP] Мины

Сообщение Subb98 » 04 мар 2018, 09:41

«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: [ZP] Мины

Сообщение Aleksey DEAD » 04 мар 2018, 15:07

Можешь помочь с минами в выше описанных багах?я не знаю уже вторую неделю туплю и не могу понять, что не так... помоги пж)
Аватара пользователя
Aleksey DEAD
 
Сообщения: 14
Зарегистрирован: 06 апр 2017, 14:05
Откуда: Волгоград
Благодарил (а): 5 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: pawn

Re: [ZP] Мины

Сообщение Subb98 » 04 мар 2018, 15:44

«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: [ZP] Мины

Сообщение Aleksey DEAD » 04 мар 2018, 18:13

Первые баги которые были в этих минах:
1. Они исчезали, через [%] сек или минут когда я их ставил...
Решение было такое: за место RemoveAllTripmines(id); , поставить RemoveAllTripmines(0);
- Но поставить это только в public newround(id) и public endround(id). Все после этого мины уже не исчезали, но пошли другие проблемы, которые я описал, опыта у меня не хватает для их исправлений поэтому я и залез к вам на форум в надежде что кто нибудь поможет(скажет что нет так может быть и какие методы лечения можно еще попробовать), я даже пробовал в тех пабликах которые писал выше newround и enground , функцию DeleteTask(id); менять на DeleteTask(0); но в этом итоге у меня получилось, то, что мины не обнулялись поэтому решил обратно на (id); поставить. Вообщем я в полной расстеряности и не пойму где, че искать из-за недостатка опыта... Помоги мне пожалуйста мои попытки на исправления самостоятельно пошли на смарку... Хоть советом помоги, если уж так жалко посмотреть и сказать что не так. Буду благадарен!).
Последний раз редактировалось Aleksey DEAD 04 мар 2018, 19:41, всего редактировалось 1 раз.
Аватара пользователя
Aleksey DEAD
 
Сообщения: 14
Зарегистрирован: 06 апр 2017, 14:05
Откуда: Волгоград
Благодарил (а): 5 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: pawn

Re: [ZP] Мины

Сообщение Subb98 » 04 мар 2018, 19:12

Совет по первому багу: обнулять глобальную переменную в начале нового раунда, которая отвечает за кол-во установленных мин игроком.
«Очень хорошо. Лучше вы, чем я» © Donald J. Trump
Аватара пользователя
Subb98
Модератор
 
Сообщения: 5485
Зарегистрирован: 24 мар 2011, 19:42
Откуда: г. Пермь
Благодарил (а): 1329 раз.
Поблагодарили: 2343 раз.
Опыт программирования: Больше трех лет
Языки программирования: PHP

Re: [ZP] Мины

Сообщение Aleksey DEAD » 05 мар 2018, 18:40

register_logevent("endround", 2, "0=World triggered", "1=Round_End"); почему это не подходит?
Аватара пользователя
Aleksey DEAD
 
Сообщения: 14
Зарегистрирован: 06 апр 2017, 14:05
Откуда: Волгоград
Благодарил (а): 5 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: pawn

Re: [ZP] Мины

Сообщение 3BEPb » 05 мар 2018, 19:32

Без разницы когда обнулять, можно и в конце раунда. В твоём случае, проще это сделать в конце раунда потому что, тебе не придётся отлавливать событие а только сделать обнуление нужного массива.
Аватара пользователя
3BEPb
 
Сообщения: 141
Зарегистрирован: 16 авг 2014, 22:02
Откуда: Пряжа
Благодарил (а): 22 раз.
Поблагодарили: 17 раз.
Опыт программирования: Больше трех лет
Языки программирования: Pawn

Re: [ZP] Мины

Сообщение Aleksey DEAD » 05 мар 2018, 19:58

не получилось :(
Аватара пользователя
Aleksey DEAD
 
Сообщения: 14
Зарегистрирован: 06 апр 2017, 14:05
Откуда: Волгоград
Благодарил (а): 5 раз.
Поблагодарили: 1 раз.
Опыт программирования: Около года
Языки программирования: pawn


Вернуться в Скриптинг

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6