Energetic Drinks

Energetic Drinks 2.0

Нет прав для скачивания
Код:
/* Plugin generated by AMXX-Studio */

/*
Энергетические напитки (в меню)
B - burn
R - redbull
D - raDon
A - adrenaline rush
P - pivo tuborg
V - red deVil
E - empty

Для активации напитков /energetic в чате,
также нужно выдать флаг G - через флаг s в файле users.ini

*/

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <engine>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <hlstocks>

#define PLUGIN "Energetic_drink"
#define VERSION "2.0"
#define AUTHOR "Gauss"

#define MAXSPEED 290.0
#define MAX_E 200
#define DURATION 20
#define RESPAWNTIME 250.0

#define MODEL_EN "models/w_energetic.mdl"

#define SPAWNSOUND "items/suitchargeok1.wav"

#define NAMECLASS "item_energetic"
#define TRAIL "sprites/zbeam3.spr"
#define SOUNDBURN "misc/we_burn.wav"
#define SOUNDREDBULL "misc/red_bull.wav"
#define SOUNDRADON "weapons/gauss2.wav"
#define SOUNDADRENALINE "misc/adrenaline.wav"
#define SOUNDPIVO "misc/pei_pivo.wav"
#define SOUNDREDDEVIL "misc/the_light.wav"

// Глобальные переменные
new fwd,crent,idedit
new Float:timenow,Float:timenow2 // Таймеры

// Массив неактивных энергетиков
new Array:g_inactives

// Массив для отмены действий
new Array:g_undoent

// Массивы координат и типов энергетиков
new Array:g_origins
new Array:g_energetics
new Array:g_type

new gszFile[128];
new burntime[33];
new redbulltime[33];
new radontime[33];
new adrenalinetime[33];
new pivotime[33];
new pivocount[33];
new reddeviltime[33];

new trail;
new e_class[64];

new g_iGaussFire;
new g_iPrecacheEventId;

const m_pPlayer    = 28
const LINUX_OFFSET_WEAPONS = 4
const m_fInSpecialReload = 34
const m_flNextPrimaryAttack = 35
const m_flNextSecondaryAttack = 36
const m_flTimeWeaponIdle = 37
const m_flNextAttack = 148



static GLOW, origin[3]

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_clcmd( "say /energetic", "CmdCreateEnergetic" );
    register_menucmd( register_menuid("EnergeticMenu"), 1023, "handleEnergeticMenu" );
    register_menucmd( register_menuid("CreateMenu"), 1023, "handleCreateMenu" );
    register_menucmd( register_menuid("EditMenu"), 1023, "handleEditMenu" );
    register_touch(NAMECLASS, "player","touching")
    register_event("DeathMsg","deathid","a")
    RegisterHam(Ham_Spawn,"player","ham_spawn",1)
    RegisterHam(Ham_Weapon_PrimaryAttack    , "weapon_9mmAR", "mp5_PrimaryAttack_Post", 1)
    RegisterHam(Ham_Weapon_SecondaryAttack    , "weapon_9mmAR", "mp5_SecondaryAttack_Post", 1)
    RegisterHam(Ham_Weapon_PrimaryAttack    , "weapon_shotgun", "Shotgun_PrimaryAttack_Post", 1)
    RegisterHam(Ham_Weapon_SecondaryAttack    , "weapon_shotgun", "Shotgun_SecondaryAttack_Post", 1)
    RegisterHam(Ham_Weapon_PrimaryAttack    , "weapon_crossbow", "Crossbow_PrimaryAttack_Post", 1)
    RegisterHam(Ham_Weapon_PrimaryAttack    , "weapon_rpg", "rpg_PrimaryAttack_Post", 1)
    RegisterHam(Ham_Weapon_SecondaryAttack    , "weapon_gauss", "gauss_SecondaryAttack_Post", 1)
    RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack",0)
    register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
    unregister_forward(FM_PrecacheEvent, g_iPrecacheEventId, 1);

}


public plugin_cfg()
{
    new szDir[64];
    new szMap[32];
    get_basedir(szDir, 64);
    add(szDir, 64, "/energetic_drink");
    if (!dir_exists(szDir))
    {
        mkdir(szDir);
    }
    get_mapname(szMap, 32);
    formatex(gszFile, 96, "%s/%s.ed", szDir, szMap);
    server_cmd("sv_maxspeed %f",MAXSPEED)
 
    g_inactives = ArrayCreate(1)
    g_undoent = ArrayCreate(1)
    g_origins = ArrayCreate(3)
    g_energetics = ArrayCreate(1)
    g_type = ArrayCreate(1)
     
    LoadED();
}

public plugin_precache()
{
    precache_model(MODEL_EN)
    precache_sound(SPAWNSOUND)
    precache_sound(SOUNDBURN)
    precache_sound(SOUNDREDBULL)
    precache_sound(SOUNDRADON)
    precache_sound(SOUNDADRENALINE)
    precache_sound(SOUNDPIVO)
    precache_sound(SOUNDREDDEVIL)
 
    trail = precache_model(TRAIL)
    g_iPrecacheEventId = register_forward(FM_PrecacheEvent, "fw_PrecacheEvent", 1);
    GLOW = precache_model("sprites/hotglow.spr")
}

public fw_PrecacheEvent(iType, const szName[])
{
    if (!strcmp(szName, "events/gauss.sc"))
    {
        g_iGaussFire = get_orig_retval();
    }
 
    return FMRES_IGNORED;
}

public CmdCreateEnergetic(id,level,cid)
{
    if(!access(id,ADMIN_LEVEL_G)){client_print(id,print_chat,"У вас нет доступа к меню энергетиков (level G)");return 0;}
     
    if(idedit){
        new name[32]
        get_user_name(idedit,name,31)
     
        set_hudmessage(255, 127, 0, -1.0, 0.60, 0, 6.0, 5.0)
        show_hudmessage(id, "Currently editor is %s^nMore is not allowed",name)
     
        client_print(id,print_chat,"^^1Меню энергетиков уже использует %s",name)
     
     
        return PLUGIN_HANDLED
    }
 
    idedit=id
    ShowEnergeticMenu( id );
 
    return PLUGIN_HANDLED
 
}

public ShowEnergeticMenu(id)
{
    new menu[1024],keys,len
    new count = ArraySize(g_inactives)
    if(count<=0)
        len = format(menu,sizeof(menu),"Energetic Drink Menu (%i):^n^n",ArraySize(g_energetics));
    else
        len = format(menu,sizeof(menu),"Energetic Drink Menu (%i): (%i new eneretics)^n^n",ArraySize(g_energetics),ArraySize(g_inactives));
    len += format(menu[len],sizeof(menu)-len,"1. Create Energetic Menu^n")
    len += format(menu[len],sizeof(menu)-len,"2. Delete Energetic Menu^n^n")
    len += format(menu[len],sizeof(menu)-len,"3. Drop to Floor^n^n")
    len += format(menu[len],sizeof(menu)-len,"4. Save to file^n^n")
    count = ArraySize(g_undoent)
    if(count>0)
        len += format(menu[len],sizeof(menu)-len,"7. Undo^n^n")
     
    len += format(menu[len],sizeof(menu)-len,"0. Exit^n")
 
    keys = ( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<9 );
 
    if(count>0)
        keys |= 1<<6
 
    show_menu(id,keys,menu,-1,"EnergeticMenu")
 
    return PLUGIN_HANDLED;
}

public handleEnergeticMenu( id, key )
{
    switch(key + 1)
    {
        case 1:
        {
            addent(id)
            ShowCreateMenu( id );
        }
        case 2:
        {
            ShowEditMenu( id );
        }
        case 3:
        {
            DropToFloor(id);
            ShowEnergeticMenu( id );
        }
        case 4:
        {
            SaveED(id);
            ShowEnergeticMenu(id);
        }
        case 7:
        {
            UndoEnergetic(id);
            ShowEnergeticMenu( id );
        }
        case 10:
        {
            exitmenu()
            ArrayClear(g_undoent)
            idedit = 0
            return PLUGIN_HANDLED
        }
    }
    return PLUGIN_HANDLED;
}
public exitmenu()
{
    if(task_exists(33299))
        remove_task(33299)
             
    if(fwd)
        unregister_forward(FM_PlayerPreThink,fwd)
    fwd = 0

    if(crent>0){
        //engfunc(EngFunc_RemoveEntity,crent)
        set_pev(crent,pev_flags,FL_KILLME)
        crent = 0
    }
 
}
public ShowCreateMenu(id)
{
    new menu[1024],keys,len
    len = format(menu,sizeof(menu),"Create Energetic Drink:^n^n");
    len += format(menu[len],sizeof(menu)-len,"1. Create Burn drink^n")
    len += format(menu[len],sizeof(menu)-len,"2. Create Red Bull drink^n")
    len += format(menu[len],sizeof(menu)-len,"3. Create Radon drink^n")
    len += format(menu[len],sizeof(menu)-len,"4. Create Adrenaline Rush^n")
    len += format(menu[len],sizeof(menu)-len,"5. Create Pivo^n")
    len += format(menu[len],sizeof(menu)-len,"6. Create Red Devil drink^n^n")
    new count = ArraySize(g_undoent)
    if(count>0)
        len += format(menu[len],sizeof(menu)-len,"7. Undo^n^n")
     
    len += format(menu[len],sizeof(menu)-len,"0. Back^n")
 
    keys = ( 1<<0 | 1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<9 );
 
    if(count>0)
        keys |= 1<<6
 
    show_menu(id,keys,menu,-1,"CreateMenu")
 
    return PLUGIN_HANDLED;
}

public handleCreateMenu( id, key )
{
    switch(key + 1)
    {
        case 1:
        {
            CreateAimingEnergetic( id,"B" );
            ShowCreateMenu( id );
        }
        case 2:
        {
            CreateAimingEnergetic( id,"R" );
            ShowCreateMenu( id );
        }
        case 3:
        {
            CreateAimingEnergetic( id,"D" );
            ShowCreateMenu( id );
        }
        case 4:
        {
            CreateAimingEnergetic( id,"A" );
            ShowCreateMenu( id );
        }
        case 5:
        {
            CreateAimingEnergetic( id,"P" );
            ShowCreateMenu( id );
        }
        case 6:
        {
            CreateAimingEnergetic( id,"V" );
            ShowCreateMenu( id );
        }
        case 7:
        {
            UndoEnergetic(id);
            ShowCreateMenu( id );
        }

        case 10:
        {
            exitmenu()
            ShowEnergeticMenu( id );
        }
    }
    return PLUGIN_HANDLED;
}

public ShowEditMenu(id)
{
    if(!fwd)
        fwd = register_forward(FM_PlayerPreThink,"fw_EditPreThink")
    else{
        unregister_forward(FM_PlayerPreThink,fwd)
        fwd = register_forward(FM_PlayerPreThink,"fw_EditPreThink")
    }
 
    new menu[1024],keys,len

    len = format(menu,sizeof(menu),"Delete Energetic Menu:^n^n");
    len += format(menu[len],sizeof(menu)-len,"1. Delete Energetic^n^n")
    len += format(menu[len],sizeof(menu)-len,"0. Exit^n")
 
    keys = ( 1<<0 | 1<<9 );
 
    show_menu(id,keys,menu,-1,"EditMenu")
 
    return PLUGIN_HANDLED;
}

public handleEditMenu( id, key )
{
    switch(key + 1)
    {
        case 1:
        {
            DeleteEnergetic( id );
            ShowEditMenu( id );
        }

        case 10:
        {
            exitmenu()
            ShowEnergeticMenu( id );
        }
    }
    return PLUGIN_HANDLED;
}
public addent(id){
    if(fwd||crent){
        //engfunc(EngFunc_RemoveEntity,crent)
        set_pev(crent,pev_flags,FL_KILLME)
        crent = 0
        unregister_forward(FM_PlayerPreThink,fwd)
    }
 
    new orig[3],Float:origin[3]
    get_user_origin(id,orig,3)
 
    origin[0] = float(orig[0])
    origin[1] = float(orig[1])
    origin[2] = float(orig[2])
 
    crent = CreateEnergetic(origin,"E",0,0);

     
    fwd = register_forward(FM_PlayerPreThink,"fw_PlayerPreThink")

}

public DropToFloor(id)
{
    new i,cell
    for(i = 0;i<ArraySize(g_inactives);i++)
    {
        cell = ArrayGetCell(g_inactives,i)
        if(pev_valid(cell))
        {
            SetReal(cell)
            emit_sound(cell,CHAN_ITEM,SPAWNSOUND,0.2,1.0,0,170)
        }     
    }
 
    if(id>0)
        client_print(id,print_chat,"%i Энергетиков стали активными",ArraySize(g_inactives))
     
    ArrayClear(g_inactives)
}
//Thinks
public fw_PlayerPreThink(id){
    if(!crent){
        unregister_forward(FM_PlayerPreThink,fwd)
        return FMRES_HANDLED
    }
 
    if(idedit!=id)
        return FMRES_HANDLED
 
    new orig[3],Float:origin[3]
    get_user_origin(id,orig,3)
 
    origin[0] = float(orig[0])
    origin[1] = float(orig[1])
    origin[2] = float(orig[2])
 
    origin[2] = origin[2]+12.0
 
    set_pev(crent,pev_origin,origin)
 
 
    timenow2 = get_gametime()
    if((timenow2-timenow)>0.1)////////////////////////////////////////////////////////////////////////////////////////////////
    {
        timenow = timenow2 
        set_hudmessage(220, 180, 40, 0.01, 0.12, 0, 6.0, 0.1,_,_,1) 
        show_hudmessage(id,"Create Energetic^nCurrent Origins: [%.1f] [%.1f] [%.1f]",origin[0],origin[1],origin[2])
        return FMRES_IGNORED
    }
 
    return FMRES_IGNORED
}
public fw_EditPreThink(id){
    if(idedit!=id)
        return FMRES_IGNORED
    timenow2 = get_gametime()
    if((timenow2-timenow)>0.05)
        timenow = timenow2
    else
        return FMRES_IGNORED
 
    new target = get_aiment(id)
    if(target)
    {
     
        new classname[32],Float:origin[3],Float:angle[3]
        new szType[48]
        szType = get_type_string(target)
        pev(target,pev_classname,classname,31)
        pev(target,pev_origin,origin)
        pev(target,pev_angles,angle)
     
        set_hudmessage(0, 255, 0, 0.01, 0.14, 0, 6.0, 0.3,_,_,1)
        show_hudmessage(id, "Entity Editor^nID: %d [%s] [%s]^nOrigin: [%.1f] [%.1f] [%.1f]",target,classname,szType,origin[0],origin[1],origin[2])
         
        set_ren(target)
    }
     
    return FMRES_IGNORED
}
public touching(ent,id)
{
    if(!is_user_connected(id))
        return PLUGIN_HANDLED
    new Float:vOrigin[3]
    new type[2]
    new arg[4]
    new arg2[1]
    entity_get_vector(ent,EV_VEC_origin,vOrigin)
 
    type = get_type_from_ent(ent)
    new orig[3]
    FVecIVec(vOrigin,orig)
    arg[0]=orig[0]
    arg[1]=orig[1]
    arg[2]=orig[2]
    arg[3]=type[0]
    arg2[0]=id
    if(!pev(ent,pev_iuser1))
    {
        set_task(RESPAWNTIME,"RespawnEnergetic",0,arg,31,"a",1)
        if(type[0]=='B')
        {
            burntime[id]=DURATION
            screenfade(id,255,0,0)
            emit_sound(id,CHAN_AUTO,SOUNDBURN,1.0,1.0,0,100)
            set_task(0.0,"BurnWork",0,arg2,31,"a",1);
            give_item(id,"weapon_9mmAR")
            client_cmd(id,"weapon_9mmAR")
            hl_set_user_bpammo(id,4,250)
            hl_set_user_bpammo(id,5,15)
            new ee = hl_get_user_weapon_ent(id)
            if(pev_valid(ee))
                if(hl_get_weapon_id(ee)==HLW_MP5)
                    hl_set_weapon_ammo(ee, 100)
        }
        if(type[0]=='R')
        {
            redbulltime[id]=DURATION
            screenfade(id,0,0,255)
            emit_sound(id,CHAN_AUTO,SOUNDREDBULL,1.0,1.0,0,100)
            set_task(0.0,"RedBullWork",0,arg2,31,"a",1);
        }
        if(type[0]=='D')
        {
            radontime[id]=DURATION
            emit_sound(id,CHAN_AUTO,SOUNDRADON,0.7,1.0,0,70)
            screenfade(id,255,160,70)
            //client_cmd(id,"spk radiation")
            set_task(0.0,"RadonWork",0,arg2,31,"a",1);
            give_item(id,"weapon_gauss")
            client_cmd(id,"weapon_gauss")
            hl_set_user_bpammo(id,9,191)
            get_user_origin(id,origin)
            glowing(id,origin)
        }
        if(type[0]=='A')
        {
            adrenalinetime[id]=DURATION
            emit_sound(id,CHAN_AUTO,SOUNDADRENALINE,1.0,1.0,0,100)
            screenfade(id,210,20,20)
            set_task(0.0,"AdrenalineWork",0,arg2,31,"a",1);
            give_item(id,"weapon_shotgun")
            client_cmd(id,"weapon_shotgun")
            new ee = hl_get_user_weapon_ent(id)
            if(pev_valid(ee))
                if(hl_get_weapon_id(ee)==HLW_SHOTGUN)
                    hl_set_weapon_ammo(ee, 8)
        }
        if(type[0]=='P')
        {
            pivotime[id]=DURATION
            emit_sound(id,CHAN_AUTO,SOUNDPIVO,1.0,1.0,0,100)
            screenfade(id,80,255,40)
            set_task(0.0,"PivoWork",0,arg2,31,"a",1);
            give_item(id,"weapon_crossbow")
            client_cmd(id,"weapon_crossbow")
            hl_set_user_bpammo(id,6,60)
         
            new ee = hl_get_user_weapon_ent(id)
            if(pev_valid(ee))
                if(hl_get_weapon_id(ee)==HLW_CROSSBOW)
                    hl_set_weapon_ammo(ee, 10)
        }
        if(type[0]=='V')
        {
            reddeviltime[id]=DURATION
            emit_sound(id,CHAN_AUTO,SOUNDREDDEVIL,1.0,1.0,0,100)
            screenfade(id,160,160,160)
            set_task(0.0,"RedDevilWork",0,arg2,31,"a",1);
            give_item(id,"weapon_rpg")
            client_cmd(id,"weapon_rpg")
            hl_set_user_bpammo(id,8,10)
         
            new ee = hl_get_user_weapon_ent(id)
            if(pev_valid(ee))
                if(hl_get_weapon_id(ee)==HLW_RPG)
                    hl_set_weapon_ammo(ee, 5)
        }
    }
    set_pev(ent,pev_iuser1,1)
    set_pev(ent,pev_flags,FL_KILLME)
 
    return PLUGIN_HANDLED
}
public CreateAimingEnergetic(id,type[2])
{
    if(!crent){
        set_hudmessage(255, 0, 0, -1.0, 0.60, 0, 6.0, 12.0)
        show_hudmessage(id, "Adding Failed, no enitity is selected")
     
        if(fwd)
            unregister_forward(FM_PlayerPreThink,fwd)
        return
    }
    new Float:vOrigin[ 3 ];
    pev(crent,pev_origin,vOrigin)
    new ent = CreateEnergetic(vOrigin,type,0,0);
    ArrayPushArray(g_origins,vOrigin)
    ArrayPushCell(g_inactives,ent)
    ArrayPushCell(g_undoent,ent)
    ArrayPushCell(g_energetics,ent)
    new tp = get_index_of_type(type)
    ArrayPushCell(g_type,tp)
    AddedMessage(id,type,vOrigin)
}

public CreateEnergetic(Float:vOrigin[3],type[2],sound,enable)
{
    new iEntity = create_entity( "info_target" );
    if( is_valid_ent( iEntity ) )
    {
        entity_set_string( iEntity, EV_SZ_classname, NAMECLASS );
        entity_set_model(iEntity,MODEL_EN)
     
        switch(type[0])
        {
            case 'B': set_pev(iEntity,pev_skin,0)
            case 'R': set_pev(iEntity,pev_skin,1)
            case 'D': set_pev(iEntity,pev_skin,2)
            case 'A': set_pev(iEntity,pev_skin,3)
            case 'P': set_pev(iEntity,pev_skin,4)
            case 'V': set_pev(iEntity,pev_skin,5)
            case 'E': set_pev(iEntity,pev_skin,6)
        }
        new Float:vSizeMin[3],Float:vSizeMax[3];
        vSizeMin = Float:{-5.0,-5.0,-8.0};
        vSizeMax = Float:{5.0,5.0,8.0};
        entity_set_size( iEntity, vSizeMin, vSizeMax );
        new Float:vAngles[3];
        pev(iEntity,pev_angles,vAngles)
        vAngles[0]=floatadd(vAngles[0],90.0)
        set_pev(iEntity,pev_angles,vAngles);
     
        if(enable)
            SetReal(iEntity)     
        else
            SetHolo(iEntity)
         
        entity_set_origin( iEntity, vOrigin );
 
        if(sound) emit_sound(iEntity,CHAN_ITEM,SPAWNSOUND,0.6,1.0,0,170)
     
        return iEntity;
    }
    return 0;
}

public AddedMessage(id,type[2],Float:vOrigin[3])
{
    new text[48]
    switch(type[0])
    {
        case 'B': format(text,48,"^^1 Burn ^^9")
        case 'R': format(text,48,"^^5 Red Bull ^^9")
        case 'D': format(text,48,"^^3 Radon ^^9")
        case 'A': format(text,48,"^^6 Adrenaline Rush ^^9")
        case 'P': format(text,48,"^^2 Tuborg ^^9")
        case 'V': format(text,48,"^^7 Red Devil ^^9")
    }
    new message[128]
    format(message,128,"[Energetic] Создан энергетик %s ^^8[%.1f] [%.1f] [%.1f]",text,vOrigin[0],vOrigin[1],vOrigin[2])
    client_print(id,print_chat,message)
}
public DeletedMessage(id,type[2],Float:vOrigin[3])
{
    new text[48]
    switch(type[0])
    {
        case 'B': format(text,48,"^^1 Burn ^^9")
        case 'R': format(text,48,"^^5 Red Bull ^^9")
        case 'D': format(text,48,"^^3 Radon ^^9")
        case 'A': format(text,48,"^^6 Adrenaline Rush ^^9")
        case 'P': format(text,48,"^^2 Tuborg ^^9")
        case 'V': format(text,48,"^^7 Red Devil ^^9")
    }
    new message[128]
    format(message,128,"[Energetic] Удалён энергетик %s ^^8[%.1f] [%.1f] [%.1f]",text,vOrigin[0],vOrigin[1],vOrigin[2])
    client_print(id,print_chat,message)
}
public UndoEnergetic(id)
{
    if(ArraySize(g_undoent)>0)
    {
        new cell = ArrayGetCell(g_undoent,ArraySize(g_undoent)-1)
        new Float:vOrigin[3]
        if(ArraySize(g_origins)>0)
            ArrayGetArray(g_origins,ArraySize(g_origins)-1,vOrigin)
        if(pev_valid(cell))
        {
            set_pev(cell,pev_flags,FL_KILLME)
        }
        ArrayDeleteItem(g_undoent,ArraySize(g_undoent)-1)
        ArrayDeleteItem(g_origins,ArraySize(g_origins)-1)
        ArrayDeleteItem(g_energetics,ArraySize(g_energetics)-1)
        ArrayDeleteItem(g_type,ArraySize(g_type)-1)
        if(ArraySize(g_inactives)>0)
            ArrayDeleteItem(g_inactives,ArraySize(g_inactives)-1)
        client_print(id,print_chat,"^^1Удалён энергетик ^^8[%.1f] [%.1f] [%.1f]",vOrigin[0],vOrigin[1],vOrigin[2])
         
    }
    else
    {
        client_print(id,print_chat,"Не было создано энергетиков")
    }
 
}
public DeleteEnergetic(id)
{
    new delent = get_aiment(id)
 
    if (delent)
    {
        new Float:vOrigin[3]
        pev(delent,pev_origin,vOrigin)
        new type[2]
        new tp,cell
        new ind = contain_in_array(g_energetics,delent) 
        if(ind>=0)
        { 
            cell = ArrayGetCell(g_type,ind)
            if(cell)
                tp = cell
            ArrayDeleteItem(g_origins,ind)
            ArrayDeleteItem(g_energetics,ind)
            ArrayDeleteItem(g_type,ind)
        }
         
        type = get_type_of_index(tp)
     
     
        set_pev(delent, pev_flags, FL_KILLME)
        DeletedMessage(id,type,vOrigin)
     
     
        ind = contain_in_array(g_undoent,delent)
        if(ind>=0)
            ArrayDeleteItem(g_undoent,ind)
    }
    else
    {
        set_hudmessage(255, 0, 0, -1.0, -1.0, 0, 6.0, 12.0)
        show_hudmessage(id, "No aiment founded")
        client_print(id,print_chat,"^^1Не найдено энергетиков")
        //client_print(id,print_chat,"g_orig: %i  g_energ: %i  g_undo: %i  g_inact: %i",ArraySize(g_origins),ArraySize(g_energetics),ArraySize(g_undoent),ArraySize(g_inactives))
    }
     
}
public get_type_string(iEnt)
{
    new Type[48]
    new skin
    skin = pev(iEnt,pev_skin)
    switch(skin)
    {
        case 0: format(Type,48,"Burn")
        case 1: format(Type,48,"Red Bull")
        case 2: format(Type,48,"Radon")
        case 3: format(Type,48,"Adrenaline Rush")
        case 4: format(Type,48,"Tuborg")
        case 5: format(Type,48,"Red Devil")
    }
    return Type
}

public get_type_from_ent(iEnt)
{
    new type[2]
    new skin
    skin = pev(iEnt,pev_skin)
    switch(skin)
    {
        case 0: format(type,2,"B")
        case 1: format(type,2,"R")
        case 2: format(type,2,"D")
        case 3: format(type,2,"A")
        case 4: format(type,2,"P")
        case 5: format(type,2,"V")
    }
    return type
}
public get_index_of_type(type[2])
{
    switch(type[0])
    {
        case 'B': return 0
        case 'R': return 1
        case 'D': return 2
        case 'A': return 3
        case 'P': return 4
        case 'V': return 5
    }
    return PLUGIN_HANDLED
}
public get_type_of_index(index)
{
    new type[2] 
    switch(index)
    {
        case 0: format(type,2,"B")
        case 1: format(type,2,"R")
        case 2: format(type,2,"D")
        case 3: format(type,2,"A")
        case 4: format(type,2,"P")
        case 5: format(type,2,"V")
    }
 
    return type
}

public contain_in_array(Array:arr,iEnt)
{
    new cell = 0
    new i
    new bool:ok = false
    for(i=0;i<ArraySize(arr);i++)
    {
        cell = ArrayGetCell(arr,i)
        if(cell==iEnt)
        {
            ok = true
            break;
        }
    }

    if(ok) {
        return i
    }
    return -1
}

stock traceline( const Float:vStart[3], const Float:vEnd[3], const pIgnore, Float:vHitPos[3] ){
    engfunc( EngFunc_TraceLine, vStart, vEnd, 0, pIgnore, 0 )
    get_tr2( 0, TR_vecEndPos, vHitPos )
    return get_tr2( 0, TR_pHit )
}

stock get_view_pos( const id, Float:vViewPos[3] ){
    new Float:vOfs[3]
    pev( id, pev_origin, vViewPos )
    pev( id, pev_view_ofs, vOfs )     
 
    vViewPos[0] += vOfs[0]
    vViewPos[1] += vOfs[1]
    vViewPos[2] += vOfs[2]
}

stock Float:vel_by_aim( id, speed = 1 ){
    new Float:v1[3], Float:vBlah[3]
    pev( id, pev_v_angle, v1 )
    engfunc( EngFunc_AngleVectors, v1, v1, vBlah, vBlah )
 
    v1[0] *= speed
    v1[1] *= speed
    v1[2] *= speed
 
    return v1
}

stock get_aiment(id){
    new target
    new Float:orig[3], Float:ret[3]
    get_view_pos( id, orig )
    ret = vel_by_aim( id, 9999 )
 
    ret[0] += orig[0]
    ret[1] += orig[1]
    ret[2] += orig[2]
 
    target = traceline( orig, ret, id, ret )
 
    new movetype
    if( target && pev_valid( target ) )
    {
        movetype = pev( target, pev_movetype )
        if( !( movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS ) )
            return 0
    }
    else
    {
        target = 0
        new ent = engfunc( EngFunc_FindEntityInSphere, -1, ret, 10.0 )
        while( !target && ent > 0 )
        {
            movetype = pev( ent, pev_movetype )
            if( ( movetype == MOVETYPE_WALK || movetype == MOVETYPE_STEP || movetype == MOVETYPE_TOSS )
            && ent != id  )
            target = ent
            ent = engfunc( EngFunc_FindEntityInSphere, ent, ret, 10.0 )
        }
    }

    if(0<target<=get_maxplayers())
        return 0
 
    new classname[32]
    pev(target,pev_classname,classname,31)
 
    if(!equal(classname,NAMECLASS))
        return 0
 
    return target
}

stock find_ent_at_origin(classname[],Float:origin[3]){
    new ent = engfunc(EngFunc_FindEntityByString,ent,"classname",classname)
 
    new Float:corg[3]
    pev(ent,pev_origin,corg)
 
    while(origin[0]!=corg[0]||origin[1]!=corg[1]&&ent){
        ent = engfunc(EngFunc_FindEntityByString,ent,"classname",classname)
        pev(ent,pev_origin,corg)
    }
 
    return ent
}



public glowing(id,origin[3])
{
    message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
    write_byte(TE_SPRITETRAIL)
    write_coord(origin[0])
    write_coord(origin[1])
    write_coord(origin[2])
    write_coord(origin[0])
    write_coord(origin[1])
    write_coord(origin[2])
    write_short(GLOW)
    write_byte(70)
    write_byte(10)
    write_byte(4)
    write_byte(80)
    write_byte(30)
    message_end()
}

public screenfade(id,r,g,b)
{
    message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id)
    write_short(25)
    write_short(25)
    write_short(9)
    write_byte(r)
    write_byte(g)
    write_byte(b)
    write_byte(120)
    message_end()
}

public BurnWork(arg[])
{
    new id=arg[0]
 
    if((is_user_connected(id))&&(is_user_alive(id)))
    {
        if(0<burntime[id]<=DURATION)
        {
            burntime[id]--
            server_cmd("sv_maxspeed 1000")
            for(new i=1;i<get_maxplayers();i++)
            {
                if((is_user_connected(i))&&(is_user_alive(i)))
                {
                    if(DURATION>=burntime[i]>0)
                    {
                        set_user_maxspeed(i,550.0)
                        trail_user(i,255,0,0,1)
                        new ee = hl_get_user_weapon_ent(id)
                        if(pev_valid(ee))
                            if(hl_get_weapon_id(ee)==HLW_MP5)
                                hl_set_weapon_ammo(ee, 100)
                    }
                    if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
                    {
                        if(get_user_godmode(i)==0)
                        {
                            set_user_maxspeed(i,MAXSPEED)
                        }
                    }
                }
            }
            new armor = get_user_armor(id)
            if(armor<=(MAX_E-2)) set_user_armor(id,armor + 2)
            set_hudmessage(255,0,0,-1.0,0.6,1,1.0,1.0,0.1,0.1,-1)
            show_hudmessage(id,"BURN : %d..",burntime[id])
            set_task(1.0,"BurnWork",0,arg,31,"a",1);
         
        }
        else
        {
            client_print(id,print_chat,"Действие Burn закончилось")
            burntime[id]=0
            if(get_user_godmode(id)==0)
            {
                set_user_gravity(id,1.0)
                set_user_maxspeed(id,MAXSPEED)
                trail_user(id,0,0,0,0)
            }
            return PLUGIN_HANDLED
        }
    }
    return PLUGIN_HANDLED
}
public RedBullWork(arg[])
{
    new id=arg[0]
 
    if((is_user_connected(id))&&(is_user_alive(id)))
    {
        if(0<redbulltime[id]<=DURATION)
        {
            redbulltime[id]--
            server_cmd("sv_maxspeed 1000")
            for(new i=1;i<get_maxplayers();i++)
            {
                if((is_user_connected(i))&&(is_user_alive(i)))
                {
                    if(DURATION>=redbulltime[i]>0)
                    {
                        if(!burntime[i])set_user_maxspeed(i,400.0)
                        set_user_gravity(i,0.4)
                        trail_user(i,0,0,255,1)
                    }
                    if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
                    {
                        if(get_user_godmode(i)==0)
                        {
                            set_user_maxspeed(i,MAXSPEED)
                        }
                    }
                }
            }
            new health = get_user_health(id)
            if(health<=(MAX_E-2)) set_user_health(id,health + 2)
            set_hudmessage(0,0,255,-1.0,0.65,1,1.0,1.0,0.1,0.1,-1)
            show_hudmessage(id,"RED BULL : %d..",redbulltime[id])
            set_task(1.0,"RedBullWork",0,arg,31,"a",1);
         
        }
        else
        {
            client_print(id,print_chat,"Действие Red Bull закончилось")
            redbulltime[id]=0
            if(get_user_godmode(id)==0)
            {
                set_user_gravity(id,1.0)
                set_user_maxspeed(id,MAXSPEED)
                trail_user(id,0,0,0,0)
            }
            return PLUGIN_HANDLED
        }
    }
    return PLUGIN_HANDLED
}

public RadonWork(arg[])
{
    new id=arg[0]
 
    if((is_user_connected(id))&&(is_user_alive(id)))
    {
        if(0<radontime[id]<=DURATION)
        {
            radontime[id]--
            server_cmd("sv_maxspeed 1000")
            for(new i=1;i<get_maxplayers();i++)
            {
                if((is_user_connected(i))&&(is_user_alive(i)))
                {
                    if(DURATION>=radontime[i]>0)
                    {
                        set_user_maxspeed(i,400.0)
                        trail_user(i,255,160,70,1)
                        hl_set_user_bpammo(id,9,111)
                    }
                    if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
                    {
                        if(get_user_godmode(i)==0)
                        {
                            set_user_maxspeed(i,MAXSPEED)
                        }
                    }
                }
            }
            new armor = get_user_armor(id)
            if(armor<=(MAX_E-1)) set_user_armor(id,armor + 1)
            new health = get_user_health(id)
            if(health<=(MAX_E-1)) set_user_health(id,health + 1)
            set_hudmessage(255,128,0,-1.0,0.625,1,1.0,1.0,0.1,0.1,-1)
            show_hudmessage(id,"RADON : %d..",radontime[id])
            set_task(1.0,"RadonWork",0,arg,31,"a",1);
         
        }
        else
        {
            client_print(id,print_chat,"Действие Radon закончилось")
            radontime[id]=0
            if((is_user_connected(id))&&(is_user_alive(id)))
            {
                if(get_user_godmode(id)==0)
                {
                    set_user_gravity(id,1.0)
                    set_user_maxspeed(id,MAXSPEED)
                    trail_user(id,0,0,0,0)
                }
            }
            return PLUGIN_HANDLED
        }
    }
    return PLUGIN_HANDLED
}
public AdrenalineWork(arg[])
{
    new id=arg[0]
 
    if((is_user_connected(id))&&(is_user_alive(id)))
    {
        if(0<adrenalinetime[id]<=DURATION)
        {
            adrenalinetime[id]--
            server_cmd("sv_maxspeed 1000")
            for(new i=1;i<get_maxplayers();i++)
            {
                if((is_user_connected(i))&&(is_user_alive(i)))
                {
                    if(DURATION>=adrenalinetime[i]>0)
                    {
                        set_user_maxspeed(i,600.0)
                        trail_user(i,255,20,20,1)
                        new ee = hl_get_user_weapon_ent(id)
                        if(pev_valid(ee))
                            if(hl_get_weapon_id(ee)==HLW_SHOTGUN)
                                hl_set_weapon_ammo(ee, 8)
                    }
                    if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
                    {
                        if(get_user_godmode(i)==0)
                        {
                            set_user_maxspeed(i,MAXSPEED)
                        }
                    }
                }
            }
            new armor = get_user_armor(id)
            if(armor<=(MAX_E-2)) set_user_armor(id,armor + 2)
            new health = get_user_health(id)
            if(health<=(MAX_E-2)) set_user_health(id,health + 2)
            set_hudmessage(255,20,20,-1.0,0.675,1,1.0,1.0,0.1,0.1,-1)
            show_hudmessage(id,"ADRENALINE : %d..",adrenalinetime[id])
            set_task(1.0,"AdrenalineWork",0,arg,31,"a",1);
         
        }
        else
        {
            client_print(id,print_chat,"Действие Adrenaline закончилось")
            adrenalinetime[id]=0
            if((is_user_connected(id))&&(is_user_alive(id)))
            {
                if(get_user_godmode(id)==0)
                {
                    set_user_gravity(id,1.0)
                    set_user_maxspeed(id,MAXSPEED)
                    trail_user(id,0,0,0,0)
                }
            }
            return PLUGIN_HANDLED
        }
    }
    return PLUGIN_HANDLED
}
public PivoWork(arg[])
{
    new id=arg[0]
 
    if((is_user_connected(id))&&(is_user_alive(id)))
    {
        if(0<pivotime[id]<=DURATION)
        {
            pivotime[id]--
            server_cmd("sv_maxspeed 1000")
            for(new i=1;i<get_maxplayers();i++)
            {
                if((is_user_connected(i))&&(is_user_alive(i)))
                {
                    if(DURATION>=pivotime[i]>0)
                    {
                        set_user_maxspeed(i,400.0)
                        trail_user(i,0,255,0,1)
                        new ee = hl_get_user_weapon_ent(id)
                        if(pev_valid(ee))
                            if(hl_get_weapon_id(ee)==HLW_CROSSBOW)
                                hl_set_weapon_ammo(ee, 10)
                    }
                    if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
                    {
                        if(get_user_godmode(i)==0)
                        {
                            set_user_maxspeed(i,MAXSPEED)
                        }
                    }
                }
            }
            pivocount[id]+=1
            if(pivocount[id]>=2)
                pivocount[id] = 0
             
            new armor = get_user_armor(id)
            new health = get_user_health(id)
            if(pivocount[id]==1)
            {
                if(armor<=(MAX_E-7)) set_user_armor(id,armor + 7)
                if(health<=(MAX_E-7)) set_user_health(id,health + 7)
            }
            if(pivocount[id]==0)
            {
                if(armor<=(MAX_E)) set_user_armor(id,armor - 5)
                if(health<=(MAX_E)) set_user_health(id,health - 5)
            }
            set_hudmessage(0,255,0,-1.0,0.7,1,1.0,1.0,0.1,0.1,-1)
            show_hudmessage(id,"TUBORG : %d..",pivotime[id])
            set_task(1.0,"PivoWork",0,arg,31,"a",1);
         
        }
        else
        {
            client_print(id,print_chat,"Действие Tuborg закончилось")
            pivotime[id]=0
            if((is_user_connected(id))&&(is_user_alive(id)))
            {
                if(get_user_godmode(id)==0)
                {
                    set_user_gravity(id,1.0)
                    set_user_maxspeed(id,MAXSPEED)
                    trail_user(id,0,0,0,0)
                }
            }
            return PLUGIN_HANDLED
        }
    }
    return PLUGIN_HANDLED
}
public RedDevilWork(arg[])
{
    new id=arg[0]
 
    if((is_user_connected(id))&&(is_user_alive(id)))
    {
        if(0<reddeviltime[id]<=DURATION)
        {
            reddeviltime[id]--
            server_cmd("sv_maxspeed 1000")
            for(new i=1;i<get_maxplayers();i++)
            {
                if((is_user_connected(i))&&(is_user_alive(i)))
                {
                    if(DURATION>=reddeviltime[i]>0)
                    {
                        set_user_maxspeed(i,400.0)
                        trail_user(i,90,90,90,1)
                        new ee = hl_get_user_weapon_ent(id)
                        if(pev_valid(ee))
                            if(hl_get_weapon_id(ee)==HLW_RPG)
                                hl_set_weapon_ammo(ee, 5)
                    }
                    if((burntime[i]<=0)&&(redbulltime[i]<=0)&&(radontime[i]<=0)&&(adrenalinetime[i]<=0)&&(pivotime[i]<=0)&&(reddeviltime[i]<=0))
                    {
                        if(get_user_godmode(i)==0)
                        {
                            set_user_maxspeed(i,MAXSPEED)
                        }
                    }
                }
            }
            new armor = get_user_armor(id)
            if(armor<=(MAX_E-2)) set_user_armor(id,armor + 2)
            new health = get_user_health(id)
            if(health<=(MAX_E-2)) set_user_health(id,health + 2)
            set_hudmessage(90,90,90,-1.0,0.725,1,1.0,1.0,0.1,0.1,-1)
            show_hudmessage(id,"RED DEVIL : %d..",reddeviltime[id])
            set_task(1.0,"RedDevilWork",0,arg,31,"a",1);
         
        }
        else
        {
            client_print(id,print_chat,"Действие Red Devil закончилось")
            reddeviltime[id]=0
            if((is_user_connected(id))&&(is_user_alive(id)))
            {
                if(get_user_godmode(id)==0)
                {
                    set_user_gravity(id,1.0)
                    set_user_maxspeed(id,MAXSPEED)
                    trail_user(id,0,0,0,0)
                }
            }
            return PLUGIN_HANDLED
        }
    }
    return PLUGIN_HANDLED
}

public trail_user(id,r,g,b,on)
{
    new dur;
    if (on)
    {
        dur=14
        message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
        write_byte(TE_BEAMFOLLOW)
        write_short(id)
        write_short(trail)
        write_byte(dur)
        write_byte(8)
        write_byte(r)
        write_byte(g)
        write_byte(b)
        write_byte(255)
        message_end()
    }
    else
    {
        message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
        write_byte(TE_KILLBEAM);
        write_short(id); // entity
        message_end(); 
    }
 
}
public deathid()
{
    new iVictim = read_data(2)
    burntime[iVictim]=0
    redbulltime[iVictim]=0
    radontime[iVictim]=0
    adrenalinetime[iVictim]=0
    pivotime[iVictim]=0
    if((1<=iVictim<=32)&&is_user_connected(iVictim))
    {
        set_user_maxspeed(iVictim,MAXSPEED)
        set_user_gravity(iVictim,1.0)
        trail_user(iVictim,0,0,0,0)
    }
}

public ham_spawn(id)
{
    burntime[id]=0
    redbulltime[id]=0
    radontime[id]=0
    adrenalinetime[id]=0
    pivotime[id]=0
    reddeviltime[id]=0
    new arg[1]
    arg[0]=id
    set_task(0.1,"resetm",0,arg,31,"a",1)
 
}
public resetm(arg[])
{
    new id=arg[0]
    if((1<=id<=32)&&is_user_connected(id))
    {
        set_user_maxspeed(id,MAXSPEED)
        set_user_gravity(id,1.0)
    }
}

public RespawnEnergetic(arg[])
{
    new Float:vOrigin[3]
    new type[2]
    new orig[3]
    orig[0]=arg[0]
    orig[1]=arg[1]
    orig[2]=arg[2]
    IVecFVec(orig,vOrigin)
    type[0]=arg[3]
    CreateEnergetic(vOrigin,type,1,1)
}

public set_ren(ent){
    if(!pev_valid(ent))
        return PLUGIN_HANDLED
    if(task_exists(ent+13872))
        return PLUGIN_HANDLED
    set_pev(ent,pev_renderfx,kRenderFxGlowShell)
    set_pev(ent,pev_rendermode,kRenderNormal)
    set_pev(ent,pev_rendercolor,{128.0,255.0,0.0})
    set_pev(ent,pev_renderamt,64.0)
 
    set_task(0.1,"res_ren",ent+13872)
 
    return PLUGIN_CONTINUE
}

public res_ren(ent){
    if(!pev_valid(ent-13872))
        return PLUGIN_HANDLED
    set_pev(ent-13872,pev_rendermode,kRenderNormal)
    set_rendering( ent-13872, kRenderFxGlowShell, random(200), random(200), random(200), kRenderNormal,5);
 
    return PLUGIN_CONTINUE
}

public SetHolo(ent)
{
    set_pev(ent,pev_renderfx,kRenderFxPulseFastWide)
    set_pev(ent,pev_rendermode,kRenderTransAlpha)
    set_pev(ent,pev_renderamt,210.0)
    set_pev(ent,pev_movetype,MOVETYPE_FLY)
    set_pev(ent,pev_nextthink,0.0)
    set_pev(ent,pev_solid,SOLID_NOT)
}
public SetReal(ent)
{
    set_pev(ent,pev_movetype,MOVETYPE_TOSS)
    set_pev(ent,pev_nextthink,1.0)
    set_pev(ent,pev_solid,SOLID_TRIGGER)
    set_pev(ent,pev_renderfx,kRenderFxNone)
    set_rendering( ent, kRenderFxGlowShell, random(200), random(200), random(200), kRenderNormal,5);
}

public SaveED(id)
{
    if(!access(id,ADMIN_LEVEL_G)){client_print(id,print_chat,"У вас нет доступа к меню энергетиков (level G)");return 0;}
    if(ArraySize(g_energetics)<=0)
    {
        client_print(id,print_chat,"На карте нет энергетиков")
        return 0;
    }

    new Float:vOrigin[3];
    new szData[128];
    new type[2];
 
    //open file for writing
    new file = fopen(gszFile, "wt");
    new cell = 0
    new index = -1
    new tp
    for (new i=0;i<ArraySize(g_energetics);i++)
    {
        cell = ArrayGetCell(g_energetics,i)
        if(cell)
        {
            index = contain_in_array(g_energetics,cell)
            if(index>=0)
            ArrayGetArray(g_origins,index,vOrigin)
            tp = ArrayGetCell(g_type,index)
         
            type = get_type_of_index(tp)
         
            //format info and save it to file
            formatex(szData, 128, "%c %.1f %.1f %.1f^n", type[0], vOrigin[0], vOrigin[1], vOrigin[2]);
            fputs(file, szData);
        }
    }
    //get players name
    new szName[32];
    get_user_name(id, szName, 32);
 
    //notify all admins that the player saved to file
    for (new i = 1; i <= 32; ++i)
    {
        //make sure player is connected
        if (is_user_connected(i))
        {
            if (access(i,ADMIN_LEVEL_G))
            {
                client_print(i, print_chat, "%s сохранил %d энергетиков в файл!", szName, ArraySize(g_energetics));
            }
        }
    }

    fclose(file);
    return true;
}

public LoadED()
{
    if (file_exists(gszFile))
    {
        new szData[128];
        new oX[13], oY[13], oZ[13];
        new type[2]
        new Float:vOrigin[3];
        //new Count = 0;
     
        //open the file for reading
        new file = fopen(gszFile, "rt");
     
        //iterate through all the lines in the file
        while (!feof(file))
        {
            fgets(file, szData, 128);
            if(equal(szData,""))continue;
            parse(szData, type, 2, oX, 12, oY, 12, oZ, 12);
         
            vOrigin[0] = str_to_float(oX);
            vOrigin[1] = str_to_float(oY);
            vOrigin[2] = str_to_float(oZ);
            vOrigin[2] = floatadd(vOrigin[2],8.0)
         
            new iEnt = CreateEnergetic(vOrigin,type,0,1)         
         
            ArrayPushArray(g_origins,vOrigin)
            ArrayPushCell(g_energetics,iEnt)
            new tp = get_index_of_type(type)
            ArrayPushCell(g_type,tp)
        }
     
        fclose(file);
    }
}

public mp5_PrimaryAttack_Post (const mp5)
{
    if(mp5<=0)
        return;
    new player = get_pdata_cbase(mp5, m_pPlayer, LINUX_OFFSET_WEAPONS)
    if(DURATION>=burntime[player]>0)
    {
        set_pdata_float(mp5, m_flNextPrimaryAttack  , 0.05, LINUX_OFFSET_WEAPONS)
        set_pdata_float(mp5, m_flNextSecondaryAttack, 0.2, LINUX_OFFSET_WEAPONS)
    }
    else
    {
        set_pdata_float(mp5, m_flNextPrimaryAttack  , 0.1, LINUX_OFFSET_WEAPONS)
        set_pdata_float(mp5, m_flNextSecondaryAttack, 0.2, LINUX_OFFSET_WEAPONS)
    }
}


public mp5_SecondaryAttack_Post (const mp5)
{
    if(mp5<=0)
        return;
    new player = get_pdata_cbase(mp5, m_pPlayer, LINUX_OFFSET_WEAPONS)
    if(DURATION>=burntime[player]>0)
    {
        set_pdata_float(mp5, m_flNextPrimaryAttack  , 0.05, LINUX_OFFSET_WEAPONS)
        set_pdata_float(mp5, m_flNextSecondaryAttack, 0.2, LINUX_OFFSET_WEAPONS)
    }
    else
    {
        set_pdata_float(mp5, m_flNextPrimaryAttack  , 0.1, LINUX_OFFSET_WEAPONS)
        set_pdata_float(mp5, m_flNextSecondaryAttack, 0.7, LINUX_OFFSET_WEAPONS)
    }
}

public gauss_SecondaryAttack_Post (const gauss)
{
    if(gauss<=0)
        return;
    new player = get_pdata_cbase(gauss, m_pPlayer, LINUX_OFFSET_WEAPONS)
    if(DURATION>=radontime[player]>0)
    {
        set_pdata_float( gauss, m_flTimeWeaponIdle   , 0.01, LINUX_OFFSET_WEAPONS)
        set_pdata_float( gauss, m_flNextPrimaryAttack  , 0.01, LINUX_OFFSET_WEAPONS)
        set_pdata_float( gauss, m_flNextSecondaryAttack, 0.01, LINUX_OFFSET_WEAPONS)
    }
}

//�������� ������
public fw_TraceAttack(victim, inflictor, Float:damage, Float:direction[3], traceresultt, damagebits)
{
    if(!(1 <= inflictor <= 32))
        return HAM_IGNORED
    if(DURATION>=radontime[inflictor]>0)
    {
        entity_get_string(inflictor, EV_SZ_classname, e_class, 63)
        //gauss
        if((equal(e_class,"player")&&get_user_weapon(inflictor)==9)||(equal(e_class,"weapon_gauss")))
        {
            SetHamParamFloat(3, damage * 3)
        }
    }
    return HAM_HANDLED;
}

//������ �� ������
public fw_PlaybackEvent(iFlags, iInvoker, iEventIndex, Float: flDelay, Float: flOrigin, Float: flAngles, Float: flfParam1, Float: flfParam2, iParam1, iParam2, bParam1, bParam2)
{
    if(!(1 <= iInvoker <= 32))
        return FMRES_IGNORED
    if(DURATION>=radontime[iInvoker]>0)
    {
        if (iEventIndex == g_iGaussFire && !flDelay && !bParam1)
        {
            new Float: flvForward[3];
            new Float: flGaussVelocity[3];
            new Float: flPlayerVelocity[3];
         
            // Get the forward direction
            global_get(glb_v_forward, flvForward);
         
            // Get current player velocity
            pev(iInvoker, pev_velocity, flPlayerVelocity);
         
            // Get native gauss velocity with multiplier from HLSDK
            xs_vec_mul_scalar(flvForward, flfParam1 * 5.0, flGaussVelocity);
         
            // Calculate player velocity before gauss shot
            xs_vec_add(flPlayerVelocity, flGaussVelocity, flPlayerVelocity);
         
            // Get new gauss velocity with our multiplier
            xs_vec_mul_scalar(flvForward, flfParam1 * 15.0, flGaussVelocity);
         
            // Calculate player new velocity
            xs_vec_sub(flPlayerVelocity, flGaussVelocity, flPlayerVelocity);
         
            // Set player velocity
            set_pev(iInvoker, pev_velocity, flPlayerVelocity);
        }
    }
 
    return FMRES_IGNORED;
}


//drob
public Shotgun_PrimaryAttack_Post (const shotgun)
{
    if(shotgun<=0)
        return;
    new player = get_pdata_cbase(shotgun, m_pPlayer, LINUX_OFFSET_WEAPONS)
    if(DURATION>=adrenalinetime[player]>0)
    {
        set_pdata_float(shotgun, m_flNextPrimaryAttack  , 0.18, LINUX_OFFSET_WEAPONS)
        set_pdata_float(shotgun, m_flNextSecondaryAttack, 0.3, LINUX_OFFSET_WEAPONS)
    }

}

public Shotgun_SecondaryAttack_Post (const shotgun)
{
    if(shotgun<=0)
        return;
    new player = get_pdata_cbase(shotgun, m_pPlayer, LINUX_OFFSET_WEAPONS)
    if(DURATION>=adrenalinetime[player]>0)
    {
        set_pdata_float(shotgun, m_flNextPrimaryAttack  , 0.18, LINUX_OFFSET_WEAPONS)
        set_pdata_float(shotgun, m_flNextSecondaryAttack, 0.3, LINUX_OFFSET_WEAPONS)
    }
}
//crossbow
public Crossbow_PrimaryAttack_Post (const crossbow)
{
    if(crossbow<=0)
        return;
    new player = get_pdata_cbase(crossbow, m_pPlayer, LINUX_OFFSET_WEAPONS)
    if(DURATION>=pivotime[player]>0)
    {
        set_pdata_float(crossbow, m_flNextPrimaryAttack  , 0.2, LINUX_OFFSET_WEAPONS)
        set_pdata_float(crossbow, m_flNextSecondaryAttack, 0.2, LINUX_OFFSET_WEAPONS)
    }
}
//rpg
public rpg_PrimaryAttack_Post (const rpg)
{
    if(rpg<=0)
        return;
    new player = get_pdata_cbase(rpg, m_pPlayer, LINUX_OFFSET_WEAPONS)
    if(DURATION>=reddeviltime[player]>0)
        set_pdata_float(rpg, m_flNextPrimaryAttack  , 0.8, LINUX_OFFSET_WEAPONS)
    else
        set_pdata_float(rpg, m_flNextPrimaryAttack  , 2.0, LINUX_OFFSET_WEAPONS)

}
public client_disconnected(id)
{
    burntime[id]=0
    redbulltime[id]=0
    radontime[id]=0
    adrenalinetime[id]=0
    pivotime[id]=0
    reddeviltime[id]=0
 
    if(idedit==id)
    {
        if(task_exists(33299))
            remove_task(33299)
                 
        if(fwd)
            unregister_forward(FM_PlayerPreThink,fwd)
        fwd = 0
 
        if(crent>0){
            //engfunc(EngFunc_RemoveEntity,crent)
            set_pev(crent,pev_flags,FL_KILLME)
            crent = 0
        }
        idedit = 0
    }
}
Назад
Верх