Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Вопрос по плагину: исключить дроп оружия

, Имеется 2 плагина (Огнемет и Пулемет) нужно убрать дроп оружия
Статус пользователя Steam
сообщение 13.4.2014, 15:41
Сообщение #1


Стаж: 12 лет

Сообщений: 36
Благодарностей: 1
Полезность: 19

В данном плагине "Огнемет" дроп оружия отключен, когда убьют-оно не выпадает, скинуть его нельзя.
Но, когда игрок воскрес- у него данное оружие уже есть в инвентаре, необходимо, что бы этого оружие в инвентаре при воскрешении не было и игроку вновь пришлось его покупать.
Код ниже:

Скрытый текст
Код
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <fun>
#include <csx>
#include <xs>

new wpn_ft
new sprite_fire
new sprite_burn
new sprite_xplo
new g_freezetime
new g_restarted
new Float:g_starttime
new cvar_enabled
new cvar_client_buy
new cvar_damage
new cvar_xplode_dmg
new cvar_cost
new cvar_fuelcost
new cvar_fueltank
new cvar_buyzone
new cvar_buytime
new cvar_damage_dis
new cvar_splash_dis
new g_buyzone[33]
new g_FuelTank[33]
new g_Activated[33]
new Float:g_Delay[33]
new g_hasFlamethrower[33]
new g_FireFlamethrower[33]
new g_BuyFuel[33]

static PLUGIN_NAME[]    = "SyN Flamethrower"
static PLUGIN_AUTHOR[]  = "Cheap_Suit"
static PLUGIN_VERSION[] = "1.1"

public plugin_init()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
        register_cvar("ft_version", PLUGIN_VERSION, FCVAR_SERVER)
      
        cvar_enabled    = register_cvar("ft_enable",            "1")
        cvar_client_buy = register_cvar("ft_client_buy",        "1")
        cvar_buyzone    = register_cvar("ft_obey_buyzone",      "1")
        cvar_buytime    = register_cvar("ft_obey_buytime",      "1")
        cvar_cost       = register_cvar("ft_cost",              "2200")
        cvar_fuelcost   = register_cvar("ft_fuelcost",          "50")
        cvar_fueltank   = register_cvar("ft_fueltank",          "50")
        cvar_damage     = register_cvar("ft_damage",            "17")
        cvar_xplode_dmg = register_cvar("ft_xplode_dmg",        "30")
        cvar_damage_dis = register_cvar("ft_damage_dis",        "100")
        cvar_splash_dis = register_cvar("ft_splash_dis",        "40")

        register_concmd("buyft",                "cmd_BuyFlamethrower",  ADMIN_USER, "- Buys a flamethrower")
        register_clcmd("say /buyft",            "cmd_BuyFlamethrower",  ADMIN_USER, "- Buys a flamethrower")
        register_clcmd("say_team /buyft",       "cmd_BuyFlamethrower",  ADMIN_USER, "- Buys a flamethrower")
        register_clcmd("ft_give",               "cmd_GiveFlamethrowers",ADMIN_BAN,  "<@all/ct/t>/userid - Gives free flamethrowers")
              
        register_event("CurWeapon",     "Event_CurWeapon",      "be",   "1=1")
        register_event("StatusIcon",    "Event_BuyZone",        "b",    "2=buyzone")
        register_event("HLTV",          "Event_NewRound",       "a",    "1=0", "2=0")
        register_event("TextMsg",       "Event_GameRestart",    "a",    "2=#Game_Commencing",   "2=#Game_will_restart_in")
        register_logevent("LogEvent_RoundStart",                 2,     "0=World triggered",    "1=Round_Start")
      
        register_forward(FM_CmdStart,           "fw_CmdStart")
        register_forward(FM_PlayerPostThink,    "fw_PlayerPostThink")
        register_forward(FM_UpdateClientData,   "fw_UpdateClientData_Post", 1)
      
        register_think("flamethrower", "think_Flamethrower")
        register_touch("flamethrower", "player", "touch_Flamethrower")
        wpn_ft = custom_weapon_add("weapon_flamethrower", 0, "flamethrower")
      
        if(!get_pcvar_num(cvar_enabled)) pause("ad", PLUGIN_NAME)
}

public plugin_precache()
{
        precache_sound("flamethrower.wav")
        precache_sound("items/ammopickup2.wav")
      
        sprite_xplo = precache_model("sprites/zerogxplode.spr")
        sprite_fire = precache_model("sprites/explode1.spr")
        sprite_burn = precache_model("sprites/xfire.spr")
      
        precache_model("models/v_knife.mdl")
        precache_model("models/p_knife.mdl")
        precache_model("models/shield/v_shield_knife.mdl")
        precache_model("models/shield/p_shield_knife.mdl")
        precache_model("models/w_flamethrower.mdl")
        precache_model("models/v_flamethrower.mdl")
        precache_model("models/p_flamethrower.mdl")
}

public cmd_GiveFlamethrowers(id, level, cid)
{
        if(!cmd_access(id, level, cid, 2))
                return PLUGIN_HANDLED

        new Arg1[64], target
        read_argv(1, Arg1, 63)
      
        new adminName[32]
        get_user_name(id, adminName, 31)
      
        new targetTeam
        new Players[32], iNum
        if(Arg1[0] == '@')
        {
                if(equali(Arg1[1], "all"))
                {
                        targetTeam = 0
                        get_players(Players, iNum, "a")
                }
                else if(equali(Arg1[1], "t"))
                {
                        targetTeam = 1
                        get_players(Players, iNum, "ae" , "terrorist")
              
                }
                else if(equali(Arg1[1], "ct"))
                {
                        targetTeam = 2
                        get_players(Players, iNum, "ae" , "ct")
                }
              
                for(new i = 0; i < iNum; ++i)
                {
                        target = Players[i]
                      
                        g_hasFlamethrower[target] = 1
                        g_FuelTank[target] = get_pcvar_num(cvar_fueltank)
                      
                        new temp[2], weaponID = get_user_weapon(target, temp[0], temp[1])
                        if(weaponID == CSW_KNIFE)
                        {
                                g_Activated[target] = true
                                set_flamethrower_model(target)
                        }
                      
                        client_cmd(target, "spk items/ammopickup2")
                        client_print(target, print_chat, "You have been given a flamethrower (press 3 to use)")
                }
              
                switch(targetTeam)
                {
                        case 0: client_print(0, print_chat, "Admin: %s has given everyone a flamethrower", adminName)
                        case 1: client_print(0, print_chat, "Admin: %s has given all terrorist a flamethrower", adminName)
                        case 2: client_print(0, print_chat, "Admin: %s has given all ct's a flamethrower", adminName)
                }
        }
        else
        {
                target = cmd_target(id, Arg1, 0)
                if(!is_user_connected(target) || !is_user_alive(target))
                        return PLUGIN_HANDLED
      
                new targetName[32]
                get_user_name(target, targetName, 31)
              
                g_hasFlamethrower[target] = 1
                g_FuelTank[target] = get_pcvar_num(cvar_fueltank)
              
                new temp[2], weaponID = get_user_weapon(target, temp[0], temp[1])
                if(weaponID == CSW_KNIFE)
                {
                        g_Activated[target] = true
                        set_flamethrower_model(target)
                        entity_set_int(id, EV_INT_weaponanim, 9)
                }
                      
                client_cmd(target, "spk items/ammopickup2")
                client_print(target, print_chat, "You have been given a flamethrower (press 3 to use)")
                client_print(target, print_chat, "Admin: %s has given you a flamethrower", adminName)
        }
        return PLUGIN_HANDLED
}

public cmd_BuyFlamethrower(id)
{
        if(!get_pcvar_num(cvar_client_buy))
                return PLUGIN_CONTINUE
              
        if(get_pcvar_num(cvar_buyzone))
        {
                if(!g_buyzone[id])
                {
                        client_print(id, print_center, "You need to be in the buyzone")
                        return PLUGIN_HANDLED
                }
        }
      
        if(get_pcvar_num(cvar_buytime))
        {
                new Float:fBuyTime = get_cvar_float("mp_buytime") * 60
                if(!g_freezetime && (get_gametime() - g_starttime) > fBuyTime)
                {
                        client_print(id, print_center, "%d seconds have passed.^nYou can't buy anything now!", floatround(fBuyTime))
                        return PLUGIN_HANDLED
                }
        }
      
        new iMoney = cs_get_user_money(id)
        new iCost = get_pcvar_num(cvar_cost)
      
        if(!is_user_alive(id))
                client_print(id, print_center, "You cant buy when your dead!")
        else if(g_hasFlamethrower[id])
                client_print(id, print_center, "You already own that weapon.")
        else if(iMoney < iCost)
                client_print(id, print_center, "Insufficient funds! ($%d)", iCost)
        else
        {
                g_hasFlamethrower[id] = 1
                g_FuelTank[id] = get_pcvar_num(cvar_fueltank)
              
                new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
                if(weaponID == CSW_KNIFE)
                {
                        g_Activated[id] = true
                        set_flamethrower_model(id)
                }
              
                cs_set_user_money(id, iMoney - iCost)
                client_cmd(id, "spk items/ammopickup2")
                client_print(id, print_chat, "You bought a flamethrower (press 3 to use)")
        }
        return PLUGIN_HANDLED
}

public Event_BuyZone(id) {
        g_buyzone[id] = read_data(1)
}

public Event_GameRestart() {
        g_restarted = 1
}

public Event_NewRound()
{
        if(g_restarted)
        {
                new Players[32], iNum = 0
                get_players(Players, iNum)
                for(new i = 0; i < iNum; i++)
                {
                        new id = Players[i]
                      
                        g_FuelTank[id] = 0
                        g_Activated[id] = 0
                        g_hasFlamethrower[id] = 0
      
                        new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
                        if(weaponID == CSW_KNIFE) set_knife_model(id)
                      
                        g_restarted = 0
                }
        }
      
        new flamethrowers = -1
        while((flamethrowers = find_ent_by_class(flamethrowers, "flamethrower")))
                remove_entity(flamethrowers)
      
        g_freezetime = 1
}

public LogEvent_RoundStart()
{
        g_freezetime = 0
        g_starttime = get_gametime()
}


public Event_CurWeapon(id)
{
        if(!is_user_alive(id) || !g_hasFlamethrower[id])
                return PLUGIN_CONTINUE
      
        new WeaponID = read_data(2)
        switch(WeaponID)
        {
                case CSW_KNIFE:
                {
                        set_task(0.3, "task_ActivateFlamethrower", id)
                        set_flamethrower_model(id)
                        entity_set_int(id, EV_INT_weaponanim, 9)
                }
                default: g_Activated[id] = 0
        }
        return PLUGIN_CONTINUE
}

public touch_Flamethrower(ent, id)
{
        if(!is_valid_ent(ent) || !is_user_alive(id))
                return PLUGIN_CONTINUE
      
        if(g_hasFlamethrower[id])
                return PLUGIN_CONTINUE
      
        if(has_shield(id))
                return PLUGIN_CONTINUE
      
        g_hasFlamethrower[id] = 1
        client_cmd(id, "spk items/ammopickup2")
        g_FuelTank[id] = entity_get_int(ent, EV_INT_iuser4)
        show_fuel_percentage(id)
      
        new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
        if(weaponID == CSW_KNIFE)
        {
                g_Activated[id] = true
                set_flamethrower_model(id)
                entity_set_int(id, EV_INT_weaponanim, 9)
        }
        remove_entity(ent)
      
        return PLUGIN_CONTINUE
}

public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
        if(!g_hasFlamethrower[id] || !g_Activated[id])
                return FMRES_IGNORED
              
        set_cd(cd_handle, CD_ID, 0)
        return FMRES_HANDLED
}

public fw_CmdStart(id, uc_handle, seed)
{
        if(!g_hasFlamethrower[id] || !g_Activated[id])
                return FMRES_IGNORED
      
        new buttons = get_uc(uc_handle, UC_Buttons)
        if(buttons & IN_ATTACK)
        {
                g_FireFlamethrower[id] = 1
      
                buttons &= ~IN_ATTACK
                set_uc(uc_handle, UC_Buttons, buttons)
        } else
                g_FireFlamethrower[id] = 0
              
        if(buttons & IN_ATTACK2)
        {
                g_BuyFuel[id] = 1
              
                buttons &= ~IN_ATTACK2
                set_uc(uc_handle, UC_Buttons, buttons)
        } else
                g_BuyFuel[id] = 0
        return FMRES_HANDLED
}

public fw_PlayerPostThink(id)
{
        if(!is_user_connected(id) || !is_user_alive(id))
                return FMRES_IGNORED
              
        if(!g_hasFlamethrower[id] || !g_Activated[id])
                return FMRES_IGNORED
              
        if(entity_get_int(id, EV_INT_waterlevel) > 1)
                return FMRES_IGNORED

              
        if(g_BuyFuel[id])
        {
                if((g_Delay[id] + 0.2) < get_gametime())
                {
                        buy_fuel(id)
                        g_Delay[id] = get_gametime()
                }
        }
      
        if(g_FireFlamethrower[id])
        {
                if(g_FuelTank[id] > 0)
                {
                        if((g_Delay[id] + 0.2) < get_gametime())
                        {
                                g_FuelTank[id] -= 1
                                g_Delay[id] = get_gametime()
                        }
                      
                        new Float:fOrigin[3], Float:fVelocity[3]
                        entity_get_vector(id,EV_VEC_origin, fOrigin)
                        VelocityByAim(id, 35, fVelocity)
              
                        new Float:fTemp[3], iFireOrigin[3]
                        xs_vec_add(fOrigin, fVelocity, fTemp)
                        FVecIVec(fTemp, iFireOrigin)
                      
                        new Float:fFireVelocity[3], iFireVelocity[3]
                        VelocityByAim(id, get_pcvar_num(cvar_damage_dis), fFireVelocity)
                        FVecIVec(fFireVelocity, iFireVelocity)
                      
                        create_flames_n_sounds(id, iFireOrigin, iFireVelocity)
                      
                        new doDamage
                        switch(get_cvar_num("mp_friendlyfire"))
                        {
                                case 0: doDamage = 0
                                case 1: doDamage = 1
                        }
                      
                        show_fuel_percentage(id)
                        direct_damage(id, doDamage)
                        indirect_damage(id, doDamage)
                        custom_weapon_shot(wpn_ft, id)
                } else
                        client_print(id, print_center, "Out of Fuel")
        }
        return FMRES_IGNORED
}

public think_Flamethrower(ent)
{
        if(is_valid_ent(ent) && entity_get_float(ent, EV_FL_health) < 950.0)
        {
                new Float:fOrigin[3], iOrigin[3]
                entity_get_vector(ent, EV_VEC_origin, fOrigin)
                FVecIVec(fOrigin, iOrigin)
      
                message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                write_byte(99)
                write_short(ent)
                message_end()
      
                message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                write_byte(3)
                write_coord(iOrigin[0])
                write_coord(iOrigin[1])
                write_coord(iOrigin[2])
                write_short(sprite_xplo)
                write_byte(50)
                write_byte(15)
                write_byte(0)
                message_end()
              
                RadiusDamage(fOrigin, get_pcvar_num(cvar_xplode_dmg), entity_get_int(ent, EV_INT_iuser4))
                remove_entity(ent)
        }
        if(is_valid_ent(ent)) entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.01)
}

public create_flames_n_sounds(id, origin[3], velocity[3])
{
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
        write_byte(120)
        write_coord(origin[0])
        write_coord(origin[1])
        write_coord(origin[2])
        write_coord(velocity[0])
        write_coord(velocity[1])
        write_coord(velocity[2] + 5)
        write_short(sprite_fire)
        write_byte(1)
        write_byte(10)
        write_byte(1)
        write_byte(5)
        message_end()
      
        emit_sound(id, CHAN_WEAPON, "flamethrower.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}

public direct_damage(id, doDamage)
{
        new ent, body
        get_user_aiming(id, ent, body, get_pcvar_num(cvar_damage_dis) + 500)
      
        if(ent > 0 && is_user_alive(ent))
        {
                if(!doDamage)
                {
                        if(get_user_team(id) != get_user_team(ent))
                        {
                                damage_user(id, ent, get_pcvar_num(cvar_damage))
                                custom_weapon_dmg(wpn_ft, id, ent, get_pcvar_num(cvar_damage))
                        }
                }
                else
                {
                        damage_user(id, ent, get_pcvar_num(cvar_damage))      
                        custom_weapon_dmg(wpn_ft, id, ent, get_pcvar_num(cvar_damage))
                }
        }
}

public indirect_damage(id, doDamage)
{
        new Players[32], iNum
        get_players(Players, iNum, "a")
        for(new i = 0; i < iNum; ++i) if(id != Players[i])
        {
                new target = Players[i]
      
                new Float:fOrigin[3], Float:fOrigin2[3]
                entity_get_vector(id,EV_VEC_origin, fOrigin)
                entity_get_vector(target, EV_VEC_origin, fOrigin2)
                      
                new temp[3], Float:fAim[3]
                get_user_origin(id, temp, 3)
                IVecFVec(temp, fAim)
              
                new Float:fDistance = get_pcvar_num(cvar_damage_dis) + 500.0
                if(get_distance_f(fOrigin, fOrigin2) > fDistance)
                        continue
              
                new iDistance = get_distance_to_line(fOrigin, fOrigin2, fAim)
                if(iDistance > get_pcvar_num(cvar_splash_dis) || iDistance < 0 || !fm_is_ent_visible(id, target))
                        continue
                      
                if(!doDamage)
                {
                        if(get_user_team(id) != get_user_team(target))
                        {
                                damage_user(id, target, get_pcvar_num(cvar_damage))
                                custom_weapon_dmg(wpn_ft, id, target, get_pcvar_num(cvar_damage))
                        }
                }
                else
                {
                        damage_user(id, target, get_pcvar_num(cvar_damage) / 2)
                        custom_weapon_dmg(wpn_ft, id, target, get_pcvar_num(cvar_damage) / 2)
                }
        }
}

public buy_fuel(id)
{
        if(get_pcvar_num(cvar_buyzone) && !g_buyzone[id])
                return PLUGIN_CONTINUE
              
        new Float:fBuyTime = get_cvar_float("mp_buytime") * 60
        if(get_pcvar_num(cvar_buytime) && !g_freezetime
        && (get_gametime() - g_starttime) > fBuyTime)
                return PLUGIN_CONTINUE

        if(g_FuelTank[id] >= get_pcvar_num(cvar_fueltank))
                return PLUGIN_CONTINUE
                              
        new iMoney = cs_get_user_money(id)
        new iCost = get_pcvar_num(cvar_fuelcost)
        if(iMoney >= iCost)
        {
                g_FuelTank[id] += 1
                show_fuel_percentage(id)
                cs_set_user_money(id, iMoney - iCost)

                return PLUGIN_CONTINUE
        }      
        return PLUGIN_CONTINUE
}



public task_ActivateFlamethrower(id)
{
        if(!is_user_connected(id) || !is_user_alive(id))
                return PLUGIN_CONTINUE
      
        new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
        if(weaponID == CSW_KNIFE) g_Activated[id] = 1
              
        return PLUGIN_CONTINUE
}

public show_fuel_percentage(id)
{
        set_hudmessage(255, 170, 0, 0.91, 0.95, _, _, 1.0, _, _, 4)
        show_hudmessage(id, "Fuel Tank: %d%%", get_percent(g_FuelTank[id], get_pcvar_num(cvar_fueltank)))
}

public set_flamethrower_model(id)
{
        entity_set_string(id, EV_SZ_viewmodel, "models/v_flamethrower.mdl")
        entity_set_string(id, EV_SZ_weaponmodel, "models/p_flamethrower.mdl")
}

public set_knife_model(id)
{
        entity_set_string(id, EV_SZ_viewmodel, "models/v_knife.mdl")
        entity_set_string(id, EV_SZ_weaponmodel, "models/p_knife.mdl")
}

public set_shield_model(id)
{
        entity_set_string(id, EV_SZ_viewmodel, "models/shield/v_shield_knife.mdl")
        entity_set_string(id, EV_SZ_weaponmodel, "models/shield/p_shield_knife.mdl")
}

stock damage_user(id, victim, damage)
{
        new iHealth = get_user_health(victim)
        if(iHealth > damage)
                fakedamage(victim, "weapon_flamethrower", float(damage), DMG_BURN)
        else
        {
                user_silentkill(victim)
                make_deathmsg(id, victim, 0, "flamethrower")
              
                new iOrigin[3]
                get_user_origin(victim, iOrigin, 0)
              
                message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
                write_byte(17)
                write_coord(iOrigin[0])
                write_coord(iOrigin[1])
                write_coord(iOrigin[2] + 10)
                write_short(sprite_burn)
                write_byte(30)
                write_byte(40)
                message_end()
                      
                if(get_user_team(id) != get_user_team(victim))
                {
                        set_user_frags(id, get_user_frags(id) + 1)
                        cs_set_user_money(id, cs_get_user_money(id) + 300)
                }
                else
                {
                        set_user_frags(id, get_user_frags(id) - 1)
                        cs_set_user_money(id, cs_get_user_money(id) - 300)
                }
              
                message_begin(MSG_ALL, get_user_msgid("ScoreInfo"))
                write_byte(id)
                write_short(get_user_frags(id))
                write_short(get_user_deaths(id))
                write_short(0)
                write_short(get_user_team(id))
                message_end()
              
                message_begin(MSG_ALL, get_user_msgid("ScoreInfo"))
                write_byte(victim)
                write_short(get_user_frags(victim))
                write_short(get_user_deaths(victim))
                write_short(0)
                write_short(get_user_team(victim))
                message_end()
        }
}

stock get_percent(value, tvalue) {      
        return floatround(floatmul(float(value) / float(tvalue) , 100.0))  
}

stock get_distance_to_line(Float:pos_start[3], Float:pos_end[3], Float:pos_object[3])  
{  
        new Float:vec_start_end[3], Float:vec_start_object[3], Float:vec_end_object[3], Float:vec_end_start[3]
        xs_vec_sub(pos_end, pos_start, vec_start_end)           // vector from start to end
        xs_vec_sub(pos_object, pos_start, vec_start_object)     // vector from end to object
        xs_vec_sub(pos_start, pos_end, vec_end_start)           // vector from end to start
        xs_vec_sub(pos_end, pos_object, vec_end_object)                 // vector object to end
      
        new Float:len_start_object = getVecLen(vec_start_object)
        new Float:angle_start = floatacos(xs_vec_dot(vec_start_end, vec_start_object) / (getVecLen(vec_start_end) * len_start_object), degrees)  
        new Float:angle_end = floatacos(xs_vec_dot(vec_end_start, vec_end_object) / (getVecLen(vec_end_start) * getVecLen(vec_end_object)), degrees)  

        if(angle_start <= 90.0 && angle_end <= 90.0)
                return floatround(len_start_object * floatsin(angle_start, degrees))
        return -1  
}

stock Float:getVecLen(Float:Vec[3])
{
        new Float:VecNull[3] = {0.0, 0.0, 0.0}
        new Float:len = get_distance_f(Vec, VecNull)
        return len
}

stock bool:fm_is_ent_visible(index, entity)
{
        new Float:origin[3], Float:view_ofs[3], Float:eyespos[3]
        pev(index, pev_origin, origin)
        pev(index, pev_view_ofs, view_ofs)
        xs_vec_add(origin, view_ofs, eyespos)

        new Float:entpos[3]
        pev(entity, pev_origin, entpos)
        engfunc(EngFunc_TraceLine, eyespos, entpos, 0, index)

        switch(pev(entity, pev_solid)) {
                case SOLID_BBOX..SOLID_BSP: return global_get(glb_trace_ent) == entity
        }
      
        new Float:fraction
        global_get(glb_trace_fraction, fraction)
        if(fraction == 1.0)
                return true
              
        return false
}

stock bool:has_shield(id)
{
        new modelName[32]
        entity_get_string(id, EV_SZ_viewmodel, modelName, 31)

        if(containi(modelName, "v_shield_") != -1)
                return true
              
        return false
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/


А вот на этом плагине: Пулемет
Необходимо убрать возможность его скинуть, дроп при смерти, ну и сделать что бы так же, когда игрок воскрес, ему вновь пришлось данное оружие покупать.
Код ниже:

Скрытый текст
Код
#include <amxmodx>
#include <engine>
#include <fakemeta_util>
#include <cstrike>
#include <hamsandwich>
#include <amxmisc>
#include <fun>

#define MAX_PLAYERS 32
#define MAX_BLOOD_DISTANCE    64
#define LOADUP_TIME        0.75
#define SHUTDOWN_TIME    1.7
#define SHAKE_FORCE        -5.0 //(must be negative value)
new const GUNSHOT_DECALS[] = {41, 42, 43, 44, 45}    // Gunshot decal list
// Plugin information
new const PLUGIN[] = "WPN Minigun"
new const VERSION[] = "1.65"
new const AUTHOR[] = "CLLlAgOB"
// other
new bool:has_minigun[33], m249, bool:atk2[33], bool:atk1[33],
bool:delay[33], clipp[33],clipstart,g_fwid,bool:delayhud[33],bool:beackup[33],
mcost,msg[128],bool:frstCLIP[33],g_MaxPlayers,g_guns_eventids_bitsum,bool:haswhpnnmg[33],
Float:g_lastShot[33], Float:g_nextSound[33], g_plAction[33],bool:g_fix_punchangle[33],
bool:canfire[33],oneround,only_adminCB,MsgSayText,g_normal_trace[33],DMGMG,bool:user_bot[33],
bool:is_alive[33],bool:is_connected[33]
// Blood
new g_blood
new g_bloodspray
// CS Player PData Offsets (win32)
const OFFSET_CSTEAMS = 114
// Linux diff's
const OFFSET_LINUX = 5 // offsets 5 higher in Linux builds
// Models
new P_MODEL[] = "models/wpnmod/m134/p_minigun.mdl"
new V_MODEL[] = "models/wpnmod/m134/v_minigun.mdl"
new W_MODEL[] = "models/wpnmod/m134/w_minigun.mdl"
// Sounds
new m_SOUND[][] = {"wpnmod/minigun/hw_shoot1.wav", "wpnmod/minigun/hw_spin.wav", "wpnmod/minigun/hw_spinup.wav", "wpnmod/minigun/hw_spindown.wav"}
new g_noammo_sounds[][] = {"weapons/dryfire_rifle.wav"}
//no recoil
new const g_guns_events[][] = {"events/m249.sc"}
//connect
#define is_user_valid_connected(%1) (1 <= %1 <= g_MaxPlayers && is_connected[%1])
enum {
    anim_idle,
    anim_idle2,
    anim_gentleidle,
    anim_stillidle,
    anim_draw,
    anim_holster,
    anim_spinup,
    anim_spindown,
    anim_spinidle,
    anim_spinfire,
    anim_spinidledown
}

// Types
enum {
    act_none,
    act_load_up,
    act_run
}
public plugin_precache() {
    precache_model(P_MODEL)
    precache_model(V_MODEL)
    precache_model(W_MODEL)
    precache_sound(m_SOUND[0])
    precache_sound(m_SOUND[1])
    precache_sound(m_SOUND[2])
    precache_sound(m_SOUND[3])
    g_blood = precache_model("sprites/blood.spr")
    g_bloodspray = precache_model("sprites/bloodspray.spr")
    g_fwid = register_forward(FM_PrecacheEvent, "fwPrecacheEvent", 1)
}

public plugin_init() {
    register_plugin(PLUGIN, VERSION, AUTHOR)
    register_dictionary("minigun.txt")
    MsgSayText = get_user_msgid("SayText")
    clipstart =     register_cvar("amx_ammo_mini","600")
    m249 =             register_cvar("amx_speed_mini","0.9")
    DMGMG =        register_cvar("amx_minigun_damage","1.2")
    oneround =         register_cvar("amx_oneround","0")
    mcost =         register_cvar("amx_cost_mini","10000")
    only_adminCB =    register_cvar("amx_only_adm_buy","0")
    register_event("CurWeapon","event_curweapon","be", "1=1")
    register_event("DeathMsg","unminigun","a")
    register_forward(FM_ClientDisconnect, "fw_ClientDisconnect")
    register_forward(FM_CmdStart, "fwd_CmdStart")
    register_forward(FM_EmitSound,"fwd_emitsound")
    register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
    register_forward(FM_PlayerPostThink, "fwPlayerPostThink", 1)
    register_forward(FM_StartFrame, "fwd_StartFrame")
    register_forward(FM_UpdateClientData, "UpdateClientData_Post", 1)
    RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
    RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
    RegisterHam(Ham_TakeDamage, "player", "player_TakeDamage")
    register_clcmd("say /minigun","buymini")
    register_concmd("amx_minigun_give", "cmdMinigun_give", ADMIN_LEVEL_A, "<@all or name/id> <ammo>")
    register_clcmd("drop","dropcmd")
    //events
    // Get Max Players
    g_MaxPlayers = global_get(glb_maxClients)
    register_logevent("event_start", 2, "1=Round_Start")
    register_event("TextMsg", "fwEvGameWillRestartIn", "a", "2=#Game_will_restart_in")
    register_event("HLTV", "event_start_freezetime", "a", "1=0", "2=0")
    unregister_forward(FM_PrecacheEvent, g_fwid, 1)
}

// Client joins the game
public client_putinserver(id)
{
    // Player joined
    is_connected[id] = true
}
// Client leaving
public fw_ClientDisconnect(id)
{
    is_connected[id] = false
    is_alive[id] = false
}
public fw_PlayerSpawn_Post(id)
{
    // Not alive or didn't join a team yet
    if (!is_user_alive(id) || !fm_cs_get_user_team(id))
        return;
    // Player spawned
    is_alive[id] = true
}
public fw_PlayerKilled(victim, attacker, shouldgib)
{
    //player die
    is_alive[victim] = false
}
public unminigun(){
    new id = read_data(2)
    if(has_minigun[id] && !is_alive[id]) {
        new Float:Aim[3],Float:origin[3]
        VelocityByAim(id, 64, Aim)
        entity_get_vector(id,EV_VEC_origin,origin)
        
        origin[0] += Aim[0]
        origin[1] += Aim[1]
        
        new minigun = create_entity("info_target")
        entity_set_string(minigun,EV_SZ_classname,"minigun")
        entity_set_model(minigun,W_MODEL)    
        
        entity_set_size(minigun,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
        entity_set_int(minigun,EV_INT_solid,1)
        
        entity_set_int(minigun,EV_INT_movetype,6)
        entity_set_int(minigun, EV_INT_iuser1, clipp[id])
        entity_set_vector(minigun,EV_VEC_origin,origin)
        has_minigun[id] = false
        remowegun(id)
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

//damage lvl
public player_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
    if(damagetype & DMG_BULLET && haswhpnnmg[attacker] && has_minigun[attacker] == true  && attacker!=victim)
        {
        damage = damage*get_pcvar_float(DMGMG)
        SetHamParamFloat(4, damage)
        return HAM_IGNORED
        }
    return HAM_IGNORED
}

public cmdMinigun_give(id, level, cid) {
    if (!cmd_access(id, level, cid, 3)) {
        return PLUGIN_HANDLED
    }
    
    new arg[32], arg2[8], name2[32], argument2
    read_argv(1,arg,31)
    read_argv(2,arg2,7)
    argument2 = str_to_num(arg2)
    if ( equali(arg,"@all") ){
        new plist[32],pnum
        get_players(plist,pnum,"a")
        if (pnum==0)
            {
            console_print(id,"[Minigun] This client is invalid")
            return PLUGIN_HANDLED
        }
        for (new i=0; i<pnum; i++)
            {
            give_weapon(plist[i], argument2, 1)
            client_print(plist[i], print_chat, "[Minigun] %L", LANG_PLAYER, "MINIGUN_ADMIN_GIVE_ALL",argument2)
        }
    }
    else
    {
        get_user_name(id,name2,31)
        new player = cmd_target(id,arg,7)
        if (!player)
            {
            console_print(id,"[Minigun] Give Minigun Failed")
            return PLUGIN_HANDLED
        }
        new name[32]
        get_user_name(player,name,31)
        give_weapon(player, argument2, 1)
        client_print(0, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_ADMIN_GIVE",name,argument2)
        return PLUGIN_HANDLED
    }
    return PLUGIN_HANDLED
}

public buymini(id) {
    if ((!(get_user_flags(id) & ADMIN_IMMUNITY) || !(get_user_flags(id) & ADMIN_RESERVATION)) && get_pcvar_num(only_adminCB)) {
        format(msg,256,"[Minigun] %L", LANG_PLAYER,"MINIGUN_ADMIN_BUY")
        message_begin(MSG_ONE,MsgSayText,{0,0,0},id)
        write_byte(id)
        write_string(msg)
        message_end()
        return PLUGIN_HANDLED
    }
    new money = cs_get_user_money(id)
    new price = get_pcvar_num(mcost)
    if(!is_alive[id])        
        client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_ALIVE")
    else if(has_minigun[id])
        client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_ALREADY")
    else if(money < price)
        client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_NO_MONEY")
    else{        
        cs_set_user_money(id, money - price)  
        give_weapon(id, 0, 1)
        client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_BUY",price)
    }
    return PLUGIN_HANDLED
}

public dropcmd(id) {
    if(has_minigun[id] && haswhpnnmg[id] && is_alive[id]) {
        new Float:Aim[3],Float:origin[3]
        VelocityByAim(id, 64, Aim)
        entity_get_vector(id,EV_VEC_origin,origin)
        
        origin[0] += Aim[0]
        origin[1] += Aim[1]
        
        new minigun = create_entity("info_target")
        entity_set_string(minigun,EV_SZ_classname,"minigun")
        entity_set_model(minigun,W_MODEL)    
        
        entity_set_size(minigun,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
        entity_set_int(minigun,EV_INT_solid,1)
        
        entity_set_int(minigun,EV_INT_movetype,6)
        entity_set_int(minigun, EV_INT_iuser1, clipp[id])
        entity_set_vector(minigun,EV_VEC_origin,origin)
        has_minigun[id] = false
        canfire[id] = false
        remowegun(id)
        g_plAction[id] = false
        return PLUGIN_HANDLED
    }
    return PLUGIN_CONTINUE
}

public pfn_touch(ptr, ptd) {
    if(is_valid_ent(ptr)) {
        new classname[32]
        entity_get_string(ptr,EV_SZ_classname,classname,31)
        
        if(equal(classname, "minigun")) {
            if(is_valid_ent(ptd)) {
                new id = ptd
                if(id > 0 && id < 34) {
                    if(!has_minigun[id] && is_alive[id]) {
                        give_weapon(id,entity_get_int(ptr, EV_INT_iuser1), 0)
                        canfire[id] = true
                        remove_entity(ptr)
                    }
                }
            }
        }
    }
}

public remove_miniguns() {
    new nextitem  = find_ent_by_class(-1,"minigun")
    while(nextitem) {
        remove_entity(nextitem)
        nextitem = find_ent_by_class(-1,"minigun")
    }
    return PLUGIN_CONTINUE
}
public event_start_freezetime(){
    remove_miniguns()
    static iPlayers[32], iPlayersNum, i
    get_players(iPlayers, iPlayersNum, "a")
    
    if(!get_pcvar_num(only_adminCB)){
        for (i = 0; i <= iPlayersNum; ++i){
            if(!has_minigun[iPlayers[i]]){
                set_task(random_float(0.1,1.0),"msghelp",iPlayers[i])
            }
        }
    }
    if(get_pcvar_num(oneround)){
        for (i = 0; i <= iPlayersNum; ++i){
            if(has_minigun[iPlayers[i]]){
                has_minigun[iPlayers[i]] = false
                remowegun(iPlayers[i])
            }
        }
    } else {
        for (i = 0; i <= iPlayersNum; ++i){
            g_plAction[iPlayers[i]] = false
            canfire[iPlayers[i]] = false
            frstCLIP[iPlayers[i]] = true    
            }
    }
}
// remove gun  and save all guns
public remowegun(id) {
    new wpnList[32]
    new number
    get_user_weapons(id,wpnList,number)
    for (new i = 0;i < number;i++) {
        if (wpnList[i] == CSW_M249) {
            fm_strip_user_gun(id, wpnList[i])
        }
    }
}

public msghelp(id){
    client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_FOR_BUY")
    client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_PRICE",get_pcvar_num(mcost))
}

public event_start(){
    static iPlayers[32], iPlayersNum, i
    get_players(iPlayers, iPlayersNum, "a")
    for (i = 0; i <= iPlayersNum; ++i)
        canfire[iPlayers[i]] = true
}



public fwEvGameWillRestartIn() {
    static iPlayers[32], iPlayersNum, i
    get_players(iPlayers, iPlayersNum, "a")
    for (i = 0; i <= iPlayersNum; ++i)
        has_minigun[iPlayers[i]] = false
}
public client_connect(id){
    canfire[id]= false
    has_minigun[id] = false
    g_normal_trace[id] = 0
    if(is_user_bot(id)) user_bot[id] = true
    else user_bot[id] = false
}

//block sound no ammo in atack
public fwd_emitsound(id, channel, sample[], Float:volume, Float:attn, flag, pitch)
{    
    if (!is_user_valid_connected(id) || !has_minigun[id])
        return FMRES_IGNORED;
    else if((equal(sample, g_noammo_sounds[0])) && has_minigun[id] && haswhpnnmg[id])
        {
        return FMRES_SUPERCEDE
        }    
    return FMRES_IGNORED
}

//give wpn
public give_weapon(id, ammo, frst){
    has_minigun[id] = true
    give_item(id,"weapon_m249")
    canfire[id] = true
    clipp[id] = ammo
    if(frst) frstCLIP[id] = true
    else beackup[id] = true
    
}


//play anim
public native_playanim(player,anim)
{
    set_pev(player, pev_weaponanim, anim)
    message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
    write_byte(anim)
    write_byte(pev(player, pev_body))
    message_end()
}


public fwd_CmdStart(id, uc_handle, seed)
{
    

    if(!is_alive[id] || !canfire[id] || !has_minigun[id]) return FMRES_HANDLED
    
    if(haswhpnnmg[id])
    {
        static buttons
        buttons = get_uc(uc_handle, UC_Buttons)        
        if(buttons & IN_ATTACK)
        {
            atk1[id] = true
            atk2[id] = false
            
        
        }
        else if(buttons & IN_ATTACK2)
        {
            atk2[id] = true
            atk1[id] = false
        }
        if(atk1[id] && !atk2[id] && (g_plAction[id] == act_none || g_plAction[id] == act_load_up) && clipp[id]>0){
            buttons &= ~IN_ATTACK
            buttons &= ~IN_ATTACK2
            set_uc(uc_handle, UC_Buttons, buttons)
            fire_mode(id,0)
        } else if(atk2[id] || atk1[id] && clipp[id]==0){
            fire_mode(id,1)
        }
            
    }
    return FMRES_IGNORED    
}

// in fire
fire_mode(id, type) {
    static Float:gtime
    gtime = get_gametime()
    g_lastShot[id] = gtime
    
    if(g_nextSound[id] <= gtime && canfire[id]) {
        switch(g_plAction[id]) {
            case act_none: {
                native_playanim(id, anim_spinup)
                emit_sound(id, CHAN_WEAPON, m_SOUND[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
                g_nextSound[id] = gtime + LOADUP_TIME
                g_plAction[id] = act_load_up
            }
            case act_load_up: {
                g_nextSound[id] = gtime
                g_plAction[id] = act_run
            }
        }
    }
    
    if(g_plAction[id] == act_run) {
        if(type == 0 && clipp[id]>0 && atk1[id]){
            emit_sound(id, CHAN_WEAPON, m_SOUND[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
            testbulet(id)
            if(!delay[id]) {
                native_playanim(id, anim_spinfire)
                ammo_hud(id)
                set_task(0.2,"delayanim",id)
                delay[id] = true
                }
        }
        else {
            if(!delay[id]) {
                ammo_hud(id)
                emit_sound(id, CHAN_WEAPON, m_SOUND[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
                native_playanim(id, anim_spinidle)
                set_task(0.2,"delayanim",id)
                delay[id] = true
            }
        }
    }
    atk1[id] = false
    atk2[id] = false
}

public delayanim(id){
    delay[id] = false
}

//set models
public event_curweapon(id){
    if(!is_alive[id] || !is_connected[id] || user_bot[id]) return;    
    new clip, ammo, weapon = get_user_weapon(id, clip, ammo)
    if((has_minigun[id]) && (weapon == CSW_M249)){
        if(g_plAction[id] != act_run && frstCLIP[id]){
                new ent = get_weapon_ent(id,weapon)
                if(clipp[id] < get_pcvar_num(clipstart)) clipp[id] = get_pcvar_num(clipstart)
                cs_set_weapon_ammo(ent, clipp[id])
                frstCLIP[id] = false
            }
        if(g_plAction[id] != act_run && beackup[id]){
            new ent = get_weapon_ent(id,weapon)
            cs_set_weapon_ammo(ent, clipp[id])
            beackup[id] = false
        }
        if(clipp[id] == 0){
                new ent = get_weapon_ent(id,weapon)
                cs_set_weapon_ammo(ent, clipp[id])
            }
        if(g_plAction[id] == act_run){
            clipp[id] = clip
        }
        message_begin(MSG_ONE, get_user_msgid("CurWeapon"), {0,0,0}, id)
        write_byte(1)
        write_byte(CSW_KNIFE)
        write_byte(0)
        message_end()
        if(!haswhpnnmg[id]){
            entity_set_string(id,EV_SZ_viewmodel,V_MODEL)
            entity_set_string(id,EV_SZ_weaponmodel,P_MODEL)
            haswhpnnmg[id] = true
        }
        new    Ent = get_weapon_ent(id,weapon)    
        new Float:N_Speed
        if(Ent)
            {
            N_Speed = get_pcvar_float(m249)
            new Float:Delay = get_pdata_float( Ent, 46, 4) * N_Speed    
            if (Delay > 0.0){
                set_pdata_float( Ent, 46, Delay, 4)
            }
        }
        ammo_hud(id)
        if(atk1[id]){
            fire_mode(id, 0)
        }
        if(atk2[id]){
            fire_mode(id, 1)
        }
    }
    if(weapon != CSW_M249) haswhpnnmg[id] = false
    if((has_minigun[id]) && (!haswhpnnmg[id])) g_plAction[id] = act_none
    return;
}    

//sound and anim
public fwd_StartFrame() {
    static Float:gtime, id
    
    gtime = get_gametime()
    
    for(id = 0; id <= g_MaxPlayers; id++) {
        if(g_plAction[id] != act_none) {
            
            if(!(pev(id, pev_button) & IN_ATTACK) && !(pev(id, pev_button) & IN_ATTACK2) && g_lastShot[id] + 0.2 < gtime) {
                native_playanim(id, anim_spinidledown)
                emit_sound(id, CHAN_WEAPON, m_SOUND[3], 1.0, ATTN_NORM, 0, PITCH_NORM)
                g_nextSound[id] = gtime + SHUTDOWN_TIME
                g_plAction[id] = act_none
            }
        }
    }
}

//marks on hit
public native_gi_get_gunshot_decal()
{
    return GUNSHOT_DECALS[random_num(0, sizeof(GUNSHOT_DECALS) - 1)]
}

//hit bulet
public testbulet(id){
    // Find target
    new aimOrigin[3], target, body
    get_user_origin(id, aimOrigin, 3)
    get_user_aiming(id, target, body)
    
    if(target > 0 && target <= g_MaxPlayers)
    {
        new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3]
        pev(id, pev_origin, fStart)
        
        // Get ids view direction
        velocity_by_aim(id, MAX_BLOOD_DISTANCE, fVel)
        
        // Calculate position where blood should be displayed
        fStart[0] = float(aimOrigin[0])
        fStart[1] = float(aimOrigin[1])
        fStart[2] = float(aimOrigin[2])
        fEnd[0] = fStart[0]+fVel[0]
        fEnd[1] = fStart[1]+fVel[1]
        fEnd[2] = fStart[2]+fVel[2]
        
        // Draw traceline from victims origin into ids view direction to find
        // the location on the wall to put some blood on there
        new res
        engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res)
        get_tr2(res, TR_vecEndPos, fRes)
                
        // Show some blood :)
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
        write_byte(TE_BLOODSPRITE)
        write_coord(floatround(fStart[0]))
        write_coord(floatround(fStart[1]))
        write_coord(floatround(fStart[2]))
        write_short(g_bloodspray)
        write_short(g_blood)
        write_byte(70)
        write_byte(random_num(1,2))
        message_end()
        
        
    } else {
        new decal = native_gi_get_gunshot_decal()
        
        // Check if the wall hit is an entity
        if(target)
        {
            // Put decal on an entity
            message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
            write_byte(TE_DECAL)
            write_coord(aimOrigin[0])
            write_coord(aimOrigin[1])
            write_coord(aimOrigin[2])
            write_byte(decal)
            write_short(target)
            message_end()
        } else {
            // Put decal on "world" (a wall)
            message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
            write_byte(TE_WORLDDECAL)
            write_coord(aimOrigin[0])
            write_coord(aimOrigin[1])
            write_coord(aimOrigin[2])
            write_byte(decal)
            message_end()
        }
        
        // Show sparcles
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
        write_byte(TE_GUNSHOTDECAL)
        write_coord(aimOrigin[0])
        write_coord(aimOrigin[1])
        write_coord(aimOrigin[2])
        write_short(id)
        write_byte(decal)
        message_end()
    }
}


//block anim standart wpn
public UpdateClientData_Post( id, sendweapons, cd_handle ){
    if ( !is_alive[id] ) return FMRES_IGNORED;
    if(haswhpnnmg[id] && has_minigun[id]) set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001 );      
    return FMRES_HANDLED;
}



// No recoil stuff

public fwPrecacheEvent(type, const name[]) {
    for (new i = 0; i < sizeof g_guns_events; ++i) {
        if (equal(g_guns_events[i], name)) {
            g_guns_eventids_bitsum |= (1<<get_orig_retval())
            return FMRES_HANDLED
        }
    }

    return FMRES_IGNORED
}
public fwPlaybackEvent(flags, invoker, eventid) {
    if (!(g_guns_eventids_bitsum & (1<<eventid)) || !(1 <= invoker <= g_MaxPlayers)|| !haswhpnnmg[invoker] || !has_minigun[invoker])
        return FMRES_IGNORED

    g_fix_punchangle[invoker] = true

    return FMRES_HANDLED
}

public fwPlayerPostThink(id) {
    if (g_fix_punchangle[id]) {
        g_fix_punchangle[id] = false
        set_pev(id, pev_punchangle, Float:{0.0, 0.0, 0.0})
        return FMRES_HANDLED
    }

    return FMRES_IGNORED
}

public fwTraceLine(const Float:start[3], const Float:dest[3], ignore_monsters, id, ptr) {
    if (!(1 <= id <= g_MaxPlayers))
        return FMRES_IGNORED

    if (!g_normal_trace[id]) {
        g_normal_trace[id] = ptr
        return FMRES_HANDLED
    }
    if (ptr == g_normal_trace[id] || ignore_monsters != DONT_IGNORE_MONSTERS || !haswhpnnmg[id] || !has_minigun[id] || !is_alive[id])
        return FMRES_IGNORED

    fix_recoil_trace(id, start, ptr)

    return FMRES_SUPERCEDE
}
// show ammo clip
public ammo_hud(id) {
    if(!delayhud[id]) {
        delayhud[id] = true
        new AmmoHud[65]
        new clip = clipp[id]
        format(AmmoHud, 64, "Ammo: %i", clip)
        set_hudmessage(200, 100, 0, 1.0 , 1.0, 0, 0.1, 0.1,0.1)
        show_hudmessage(id,"%s",AmmoHud)
        set_task(0.2,"delayhutmsg",id)
    }
}

public delayhutmsg(id){
    delayhud[id]= false
}

//get weapon id
stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
    // who knows what wpnName will be
    static newName[24];

    // need to find the name
    if(wpnid) get_weaponname(wpnid,newName,23);

    // go with what we were told
    else formatex(newName,23,"%s",wpnName);

    // prefix it if we need to
    if(!equal(newName,"weapon_",7))
        format(newName,23,"weapon_%s",newName);

    return fm_find_ent_by_owner(get_maxplayers(),newName,id);
}

fix_recoil_trace(id, const Float:start[], ptr) {
    static Float:dest[3]
    pev(id, pev_v_angle, dest)
    engfunc(EngFunc_MakeVectors, dest)
    global_get(glb_v_forward, dest)
    xs_vec_mul_scalar(dest, 9999.0, dest)
    xs_vec_add(start, dest, dest)
    engfunc(EngFunc_TraceLine, start, dest, DONT_IGNORE_MONSTERS, id, ptr)
}
// Get User Team
stock fm_cs_get_user_team(id)
{
    return get_pdata_int(id, OFFSET_CSTEAMS, OFFSET_LINUX);
}


Заранее спасибо, что не остались равнодушными к данной теме.

Отредактировал: Steam, - 13.4.2014, 15:44
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Legenda
сообщение 13.4.2014, 15:52
Сообщение #2


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

как-то так наверное
fire

Код
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <fun>
#include <csx>
#include <xs>
#include <hamsandwich>

new wpn_ft
new sprite_fire
new sprite_burn
new sprite_xplo
new g_freezetime
new g_restarted
new Float:g_starttime
new cvar_enabled
new cvar_client_buy
new cvar_damage
new cvar_xplode_dmg
new cvar_cost
new cvar_fuelcost
new cvar_fueltank
new cvar_buyzone
new cvar_buytime
new cvar_damage_dis
new cvar_splash_dis
new g_buyzone[33]
new g_FuelTank[33]
new g_Activated[33]
new Float:g_Delay[33]
new g_hasFlamethrower[33]
new g_FireFlamethrower[33]
new g_BuyFuel[33]

static PLUGIN_NAME[]    = "SyN Flamethrower"
static PLUGIN_AUTHOR[]  = "Cheap_Suit"
static PLUGIN_VERSION[] = "1.1"

public plugin_init()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
        register_cvar("ft_version", PLUGIN_VERSION, FCVAR_SERVER)
      
        cvar_enabled    = register_cvar("ft_enable",            "1")
        cvar_client_buy = register_cvar("ft_client_buy",        "1")
        cvar_buyzone    = register_cvar("ft_obey_buyzone",      "1")
        cvar_buytime    = register_cvar("ft_obey_buytime",      "1")
        cvar_cost       = register_cvar("ft_cost",              "2200")
        cvar_fuelcost   = register_cvar("ft_fuelcost",          "50")
        cvar_fueltank   = register_cvar("ft_fueltank",          "50")
        cvar_damage     = register_cvar("ft_damage",            "17")
        cvar_xplode_dmg = register_cvar("ft_xplode_dmg",        "30")
        cvar_damage_dis = register_cvar("ft_damage_dis",        "100")
        cvar_splash_dis = register_cvar("ft_splash_dis",        "40")

        register_concmd("buyft",                "cmd_BuyFlamethrower",  ADMIN_USER, "- Buys a flamethrower")
        register_clcmd("say /buyft",            "cmd_BuyFlamethrower",  ADMIN_USER, "- Buys a flamethrower")
        register_clcmd("say_team /buyft",       "cmd_BuyFlamethrower",  ADMIN_USER, "- Buys a flamethrower")
        register_clcmd("ft_give",               "cmd_GiveFlamethrowers",ADMIN_BAN,  "<@all/ct/t>/userid - Gives free flamethrowers")
              
        register_event("CurWeapon",     "Event_CurWeapon",      "be",   "1=1")
        register_event("StatusIcon",    "Event_BuyZone",        "b",    "2=buyzone")
        register_event("HLTV",          "Event_NewRound",       "a",    "1=0", "2=0")
        register_event("TextMsg",       "Event_GameRestart",    "a",    "2=#Game_Commencing",   "2=#Game_will_restart_in")
        register_logevent("LogEvent_RoundStart",                 2,     "0=World triggered",    "1=Round_Start")
      
    RegisterHam( Ham_Killed, "player", "FwdKilled" )

        register_forward(FM_CmdStart,           "fw_CmdStart")
        register_forward(FM_PlayerPostThink,    "fw_PlayerPostThink")
        register_forward(FM_UpdateClientData,   "fw_UpdateClientData_Post", 1)
      
        register_think("flamethrower", "think_Flamethrower")
        register_touch("flamethrower", "player", "touch_Flamethrower")
        wpn_ft = custom_weapon_add("weapon_flamethrower", 0, "flamethrower")
      
        if(!get_pcvar_num(cvar_enabled)) pause("ad", PLUGIN_NAME)
}

public FwdKilled(id) {
    g_hasFlamethrower[id] = 0    
}

public plugin_precache()
{
        precache_sound("flamethrower.wav")
        precache_sound("items/ammopickup2.wav")
      
        sprite_xplo = precache_model("sprites/zerogxplode.spr")
        sprite_fire = precache_model("sprites/explode1.spr")
        sprite_burn = precache_model("sprites/xfire.spr")
      
        precache_model("models/v_knife.mdl")
        precache_model("models/p_knife.mdl")
        precache_model("models/shield/v_shield_knife.mdl")
        precache_model("models/shield/p_shield_knife.mdl")
        precache_model("models/w_flamethrower.mdl")
        precache_model("models/v_flamethrower.mdl")
        precache_model("models/p_flamethrower.mdl")
}

public cmd_GiveFlamethrowers(id, level, cid)
{
        if(!cmd_access(id, level, cid, 2))
                return PLUGIN_HANDLED

        new Arg1[64], target
        read_argv(1, Arg1, 63)
      
        new adminName[32]
        get_user_name(id, adminName, 31)
      
        new targetTeam
        new Players[32], iNum
        if(Arg1[0] == '@')
        {
                if(equali(Arg1[1], "all"))
                {
                        targetTeam = 0
                        get_players(Players, iNum, "a")
                }
                else if(equali(Arg1[1], "t"))
                {
                        targetTeam = 1
                        get_players(Players, iNum, "ae" , "terrorist")
              
                }
                else if(equali(Arg1[1], "ct"))
                {
                        targetTeam = 2
                        get_players(Players, iNum, "ae" , "ct")
                }
              
                for(new i = 0; i < iNum; ++i)
                {
                        target = Players[i]
                      
                        g_hasFlamethrower[target] = 1
                        g_FuelTank[target] = get_pcvar_num(cvar_fueltank)
                      
                        new temp[2], weaponID = get_user_weapon(target, temp[0], temp[1])
                        if(weaponID == CSW_KNIFE)
                        {
                                g_Activated[target] = true
                                set_flamethrower_model(target)
                        }
                      
                        client_cmd(target, "spk items/ammopickup2")
                        client_print(target, print_chat, "You have been given a flamethrower (press 3 to use)")
                }
              
                switch(targetTeam)
                {
                        case 0: client_print(0, print_chat, "Admin: %s has given everyone a flamethrower", adminName)
                        case 1: client_print(0, print_chat, "Admin: %s has given all terrorist a flamethrower", adminName)
                        case 2: client_print(0, print_chat, "Admin: %s has given all ct's a flamethrower", adminName)
                }
        }
        else
        {
                target = cmd_target(id, Arg1, 0)
                if(!is_user_connected(target) || !is_user_alive(target))
                        return PLUGIN_HANDLED
      
                new targetName[32]
                get_user_name(target, targetName, 31)
              
                g_hasFlamethrower[target] = 1
                g_FuelTank[target] = get_pcvar_num(cvar_fueltank)
              
                new temp[2], weaponID = get_user_weapon(target, temp[0], temp[1])
                if(weaponID == CSW_KNIFE)
                {
                        g_Activated[target] = true
                        set_flamethrower_model(target)
                        entity_set_int(id, EV_INT_weaponanim, 9)
                }
                      
                client_cmd(target, "spk items/ammopickup2")
                client_print(target, print_chat, "You have been given a flamethrower (press 3 to use)")
                client_print(target, print_chat, "Admin: %s has given you a flamethrower", adminName)
        }
        return PLUGIN_HANDLED
}

public cmd_BuyFlamethrower(id)
{
        if(!get_pcvar_num(cvar_client_buy))
                return PLUGIN_CONTINUE
              
        if(get_pcvar_num(cvar_buyzone))
        {
                if(!g_buyzone[id])
                {
                        client_print(id, print_center, "You need to be in the buyzone")
                        return PLUGIN_HANDLED
                }
        }
      
        if(get_pcvar_num(cvar_buytime))
        {
                new Float:fBuyTime = get_cvar_float("mp_buytime") * 60
                if(!g_freezetime && (get_gametime() - g_starttime) > fBuyTime)
                {
                        client_print(id, print_center, "%d seconds have passed.^nYou can't buy anything now!", floatround(fBuyTime))
                        return PLUGIN_HANDLED
                }
        }
      
        new iMoney = cs_get_user_money(id)
        new iCost = get_pcvar_num(cvar_cost)
      
        if(!is_user_alive(id))
                client_print(id, print_center, "You cant buy when your dead!")
        else if(g_hasFlamethrower[id])
                client_print(id, print_center, "You already own that weapon.")
        else if(iMoney < iCost)
                client_print(id, print_center, "Insufficient funds! ($%d)", iCost)
        else
        {
                g_hasFlamethrower[id] = 1
                g_FuelTank[id] = get_pcvar_num(cvar_fueltank)
              
                new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
                if(weaponID == CSW_KNIFE)
                {
                        g_Activated[id] = true
                        set_flamethrower_model(id)
                }
              
                cs_set_user_money(id, iMoney - iCost)
                client_cmd(id, "spk items/ammopickup2")
                client_print(id, print_chat, "You bought a flamethrower (press 3 to use)")
        }
        return PLUGIN_HANDLED
}

public Event_BuyZone(id) {
        g_buyzone[id] = read_data(1)
}

public Event_GameRestart() {
        g_restarted = 1
}

public Event_NewRound()
{
        if(g_restarted)
        {
                new Players[32], iNum = 0
                get_players(Players, iNum)
                for(new i = 0; i < iNum; i++)
                {
                        new id = Players[i]
                      
                        g_FuelTank[id] = 0
                        g_Activated[id] = 0
                        g_hasFlamethrower[id] = 0
      
                        new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
                        if(weaponID == CSW_KNIFE) set_knife_model(id)
                      
                        g_restarted = 0
                }
        }
      
        new flamethrowers = -1
        while((flamethrowers = find_ent_by_class(flamethrowers, "flamethrower")))
                remove_entity(flamethrowers)
      
        g_freezetime = 1
}

public LogEvent_RoundStart()
{
        g_freezetime = 0
        g_starttime = get_gametime()
}


public Event_CurWeapon(id)
{
        if(!is_user_alive(id) || !g_hasFlamethrower[id])
                return PLUGIN_CONTINUE
      
        new WeaponID = read_data(2)
        switch(WeaponID)
        {
                case CSW_KNIFE:
                {
                        set_task(0.3, "task_ActivateFlamethrower", id)
                        set_flamethrower_model(id)
                        entity_set_int(id, EV_INT_weaponanim, 9)
                }
                default: g_Activated[id] = 0
        }
        return PLUGIN_CONTINUE
}

public touch_Flamethrower(ent, id)
{
        if(!is_valid_ent(ent) || !is_user_alive(id))
                return PLUGIN_CONTINUE
      
        if(g_hasFlamethrower[id])
                return PLUGIN_CONTINUE
      
        if(has_shield(id))
                return PLUGIN_CONTINUE
      
        g_hasFlamethrower[id] = 1
        client_cmd(id, "spk items/ammopickup2")
        g_FuelTank[id] = entity_get_int(ent, EV_INT_iuser4)
        show_fuel_percentage(id)
      
        new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
        if(weaponID == CSW_KNIFE)
        {
                g_Activated[id] = true
                set_flamethrower_model(id)
                entity_set_int(id, EV_INT_weaponanim, 9)
        }
        remove_entity(ent)
      
        return PLUGIN_CONTINUE
}

public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
        if(!g_hasFlamethrower[id] || !g_Activated[id])
                return FMRES_IGNORED
              
        set_cd(cd_handle, CD_ID, 0)
        return FMRES_HANDLED
}

public fw_CmdStart(id, uc_handle, seed)
{
        if(!g_hasFlamethrower[id] || !g_Activated[id])
                return FMRES_IGNORED
      
        new buttons = get_uc(uc_handle, UC_Buttons)
        if(buttons & IN_ATTACK)
        {
                g_FireFlamethrower[id] = 1
      
                buttons &= ~IN_ATTACK
                set_uc(uc_handle, UC_Buttons, buttons)
        } else
                g_FireFlamethrower[id] = 0
              
        if(buttons & IN_ATTACK2)
        {
                g_BuyFuel[id] = 1
              
                buttons &= ~IN_ATTACK2
                set_uc(uc_handle, UC_Buttons, buttons)
        } else
                g_BuyFuel[id] = 0
        return FMRES_HANDLED
}

public fw_PlayerPostThink(id)
{
        if(!is_user_connected(id) || !is_user_alive(id))
                return FMRES_IGNORED
              
        if(!g_hasFlamethrower[id] || !g_Activated[id])
                return FMRES_IGNORED
              
        if(entity_get_int(id, EV_INT_waterlevel) > 1)
                return FMRES_IGNORED

              
        if(g_BuyFuel[id])
        {
                if((g_Delay[id] + 0.2) < get_gametime())
                {
                        buy_fuel(id)
                        g_Delay[id] = get_gametime()
                }
        }
      
        if(g_FireFlamethrower[id])
        {
                if(g_FuelTank[id] > 0)
                {
                        if((g_Delay[id] + 0.2) < get_gametime())
                        {
                                g_FuelTank[id] -= 1
                                g_Delay[id] = get_gametime()
                        }
                      
                        new Float:fOrigin[3], Float:fVelocity[3]
                        entity_get_vector(id,EV_VEC_origin, fOrigin)
                        VelocityByAim(id, 35, fVelocity)
              
                        new Float:fTemp[3], iFireOrigin[3]
                        xs_vec_add(fOrigin, fVelocity, fTemp)
                        FVecIVec(fTemp, iFireOrigin)
                      
                        new Float:fFireVelocity[3], iFireVelocity[3]
                        VelocityByAim(id, get_pcvar_num(cvar_damage_dis), fFireVelocity)
                        FVecIVec(fFireVelocity, iFireVelocity)
                      
                        create_flames_n_sounds(id, iFireOrigin, iFireVelocity)
                      
                        new doDamage
                        switch(get_cvar_num("mp_friendlyfire"))
                        {
                                case 0: doDamage = 0
                                case 1: doDamage = 1
                        }
                      
                        show_fuel_percentage(id)
                        direct_damage(id, doDamage)
                        indirect_damage(id, doDamage)
                        custom_weapon_shot(wpn_ft, id)
                } else
                        client_print(id, print_center, "Out of Fuel")
        }
        return FMRES_IGNORED
}

public think_Flamethrower(ent)
{
        if(is_valid_ent(ent) && entity_get_float(ent, EV_FL_health) < 950.0)
        {
                new Float:fOrigin[3], iOrigin[3]
                entity_get_vector(ent, EV_VEC_origin, fOrigin)
                FVecIVec(fOrigin, iOrigin)
      
                message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                write_byte(99)
                write_short(ent)
                message_end()
      
                message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                write_byte(3)
                write_coord(iOrigin[0])
                write_coord(iOrigin[1])
                write_coord(iOrigin[2])
                write_short(sprite_xplo)
                write_byte(50)
                write_byte(15)
                write_byte(0)
                message_end()
              
                RadiusDamage(fOrigin, get_pcvar_num(cvar_xplode_dmg), entity_get_int(ent, EV_INT_iuser4))
                remove_entity(ent)
        }
        if(is_valid_ent(ent)) entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.01)
}

public create_flames_n_sounds(id, origin[3], velocity[3])
{
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
        write_byte(120)
        write_coord(origin[0])
        write_coord(origin[1])
        write_coord(origin[2])
        write_coord(velocity[0])
        write_coord(velocity[1])
        write_coord(velocity[2] + 5)
        write_short(sprite_fire)
        write_byte(1)
        write_byte(10)
        write_byte(1)
        write_byte(5)
        message_end()
      
        emit_sound(id, CHAN_WEAPON, "flamethrower.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}

public direct_damage(id, doDamage)
{
        new ent, body
        get_user_aiming(id, ent, body, get_pcvar_num(cvar_damage_dis) + 500)
      
        if(ent > 0 && is_user_alive(ent))
        {
                if(!doDamage)
                {
                        if(get_user_team(id) != get_user_team(ent))
                        {
                                damage_user(id, ent, get_pcvar_num(cvar_damage))
                                custom_weapon_dmg(wpn_ft, id, ent, get_pcvar_num(cvar_damage))
                        }
                }
                else
                {
                        damage_user(id, ent, get_pcvar_num(cvar_damage))      
                        custom_weapon_dmg(wpn_ft, id, ent, get_pcvar_num(cvar_damage))
                }
        }
}

public indirect_damage(id, doDamage)
{
        new Players[32], iNum
        get_players(Players, iNum, "a")
        for(new i = 0; i < iNum; ++i) if(id != Players[i])
        {
                new target = Players[i]
      
                new Float:fOrigin[3], Float:fOrigin2[3]
                entity_get_vector(id,EV_VEC_origin, fOrigin)
                entity_get_vector(target, EV_VEC_origin, fOrigin2)
                      
                new temp[3], Float:fAim[3]
                get_user_origin(id, temp, 3)
                IVecFVec(temp, fAim)
              
                new Float:fDistance = get_pcvar_num(cvar_damage_dis) + 500.0
                if(get_distance_f(fOrigin, fOrigin2) > fDistance)
                        continue
              
                new iDistance = get_distance_to_line(fOrigin, fOrigin2, fAim)
                if(iDistance > get_pcvar_num(cvar_splash_dis) || iDistance < 0 || !fm_is_ent_visible(id, target))
                        continue
                      
                if(!doDamage)
                {
                        if(get_user_team(id) != get_user_team(target))
                        {
                                damage_user(id, target, get_pcvar_num(cvar_damage))
                                custom_weapon_dmg(wpn_ft, id, target, get_pcvar_num(cvar_damage))
                        }
                }
                else
                {
                        damage_user(id, target, get_pcvar_num(cvar_damage) / 2)
                        custom_weapon_dmg(wpn_ft, id, target, get_pcvar_num(cvar_damage) / 2)
                }
        }
}

public buy_fuel(id)
{
        if(get_pcvar_num(cvar_buyzone) && !g_buyzone[id])
                return PLUGIN_CONTINUE
              
        new Float:fBuyTime = get_cvar_float("mp_buytime") * 60
        if(get_pcvar_num(cvar_buytime) && !g_freezetime
        && (get_gametime() - g_starttime) > fBuyTime)
                return PLUGIN_CONTINUE

        if(g_FuelTank[id] >= get_pcvar_num(cvar_fueltank))
                return PLUGIN_CONTINUE
                              
        new iMoney = cs_get_user_money(id)
        new iCost = get_pcvar_num(cvar_fuelcost)
        if(iMoney >= iCost)
        {
                g_FuelTank[id] += 1
                show_fuel_percentage(id)
                cs_set_user_money(id, iMoney - iCost)

                return PLUGIN_CONTINUE
        }      
        return PLUGIN_CONTINUE
}



public task_ActivateFlamethrower(id)
{
        if(!is_user_connected(id) || !is_user_alive(id))
                return PLUGIN_CONTINUE
      
        new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
        if(weaponID == CSW_KNIFE) g_Activated[id] = 1
              
        return PLUGIN_CONTINUE
}

public show_fuel_percentage(id)
{
        set_hudmessage(255, 170, 0, 0.91, 0.95, _, _, 1.0, _, _, 4)
        show_hudmessage(id, "Fuel Tank: %d%%", get_percent(g_FuelTank[id], get_pcvar_num(cvar_fueltank)))
}

public set_flamethrower_model(id)
{
        entity_set_string(id, EV_SZ_viewmodel, "models/v_flamethrower.mdl")
        entity_set_string(id, EV_SZ_weaponmodel, "models/p_flamethrower.mdl")
}

public set_knife_model(id)
{
        entity_set_string(id, EV_SZ_viewmodel, "models/v_knife.mdl")
        entity_set_string(id, EV_SZ_weaponmodel, "models/p_knife.mdl")
}

public set_shield_model(id)
{
        entity_set_string(id, EV_SZ_viewmodel, "models/shield/v_shield_knife.mdl")
        entity_set_string(id, EV_SZ_weaponmodel, "models/shield/p_shield_knife.mdl")
}

stock damage_user(id, victim, damage)
{
        new iHealth = get_user_health(victim)
        if(iHealth > damage)
                fakedamage(victim, "weapon_flamethrower", float(damage), DMG_BURN)
        else
        {
                user_silentkill(victim)
                make_deathmsg(id, victim, 0, "flamethrower")
              
                new iOrigin[3]
                get_user_origin(victim, iOrigin, 0)
              
                message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
                write_byte(17)
                write_coord(iOrigin[0])
                write_coord(iOrigin[1])
                write_coord(iOrigin[2] + 10)
                write_short(sprite_burn)
                write_byte(30)
                write_byte(40)
                message_end()
                      
                if(get_user_team(id) != get_user_team(victim))
                {
                        set_user_frags(id, get_user_frags(id) + 1)
                        cs_set_user_money(id, cs_get_user_money(id) + 300)
                }
                else
                {
                        set_user_frags(id, get_user_frags(id) - 1)
                        cs_set_user_money(id, cs_get_user_money(id) - 300)
                }
              
                message_begin(MSG_ALL, get_user_msgid("ScoreInfo"))
                write_byte(id)
                write_short(get_user_frags(id))
                write_short(get_user_deaths(id))
                write_short(0)
                write_short(get_user_team(id))
                message_end()
              
                message_begin(MSG_ALL, get_user_msgid("ScoreInfo"))
                write_byte(victim)
                write_short(get_user_frags(victim))
                write_short(get_user_deaths(victim))
                write_short(0)
                write_short(get_user_team(victim))
                message_end()
        }
}

stock get_percent(value, tvalue) {      
        return floatround(floatmul(float(value) / float(tvalue) , 100.0))  
}

stock get_distance_to_line(Float:pos_start[3], Float:pos_end[3], Float:pos_object[3])  
{  
        new Float:vec_start_end[3], Float:vec_start_object[3], Float:vec_end_object[3], Float:vec_end_start[3]
        xs_vec_sub(pos_end, pos_start, vec_start_end)           // vector from start to end
        xs_vec_sub(pos_object, pos_start, vec_start_object)     // vector from end to object
        xs_vec_sub(pos_start, pos_end, vec_end_start)           // vector from end to start
        xs_vec_sub(pos_end, pos_object, vec_end_object)                 // vector object to end
      
        new Float:len_start_object = getVecLen(vec_start_object)
        new Float:angle_start = floatacos(xs_vec_dot(vec_start_end, vec_start_object) / (getVecLen(vec_start_end) * len_start_object), degrees)  
        new Float:angle_end = floatacos(xs_vec_dot(vec_end_start, vec_end_object) / (getVecLen(vec_end_start) * getVecLen(vec_end_object)), degrees)  

        if(angle_start <= 90.0 && angle_end <= 90.0)
                return floatround(len_start_object * floatsin(angle_start, degrees))
        return -1  
}

stock Float:getVecLen(Float:Vec[3])
{
        new Float:VecNull[3] = {0.0, 0.0, 0.0}
        new Float:len = get_distance_f(Vec, VecNull)
        return len
}

stock bool:fm_is_ent_visible(index, entity)
{
        new Float:origin[3], Float:view_ofs[3], Float:eyespos[3]
        pev(index, pev_origin, origin)
        pev(index, pev_view_ofs, view_ofs)
        xs_vec_add(origin, view_ofs, eyespos)

        new Float:entpos[3]
        pev(entity, pev_origin, entpos)
        engfunc(EngFunc_TraceLine, eyespos, entpos, 0, index)

        switch(pev(entity, pev_solid)) {
                case SOLID_BBOX..SOLID_BSP: return global_get(glb_trace_ent) == entity
        }
      
        new Float:fraction
        global_get(glb_trace_fraction, fraction)
        if(fraction == 1.0)
                return true
              
        return false
}

stock bool:has_shield(id)
{
        new modelName[32]
        entity_get_string(id, EV_SZ_viewmodel, modelName, 31)

        if(containi(modelName, "v_shield_") != -1)
                return true
              
        return false
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Steam
сообщение 13.4.2014, 16:04
Сообщение #3


Стаж: 12 лет

Сообщений: 36
Благодарностей: 1
Полезность: 19

Цитата(Legenda @ 13.4.2014, 18:52) *
как-то так наверное
fire

Код
#include <amxmodx>
#include <amxmisc>
#include <fakemeta>
#include <cstrike>
#include <engine>
#include <fun>
#include <csx>
#include <xs>
#include <hamsandwich>

new wpn_ft
new sprite_fire
new sprite_burn
new sprite_xplo
new g_freezetime
new g_restarted
new Float:g_starttime
new cvar_enabled
new cvar_client_buy
new cvar_damage
new cvar_xplode_dmg
new cvar_cost
new cvar_fuelcost
new cvar_fueltank
new cvar_buyzone
new cvar_buytime
new cvar_damage_dis
new cvar_splash_dis
new g_buyzone[33]
new g_FuelTank[33]
new g_Activated[33]
new Float:g_Delay[33]
new g_hasFlamethrower[33]
new g_FireFlamethrower[33]
new g_BuyFuel[33]

static PLUGIN_NAME[]    = "SyN Flamethrower"
static PLUGIN_AUTHOR[]  = "Cheap_Suit"
static PLUGIN_VERSION[] = "1.1"

public plugin_init()
{
        register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR)
        register_cvar("ft_version", PLUGIN_VERSION, FCVAR_SERVER)
      
        cvar_enabled    = register_cvar("ft_enable",            "1")
        cvar_client_buy = register_cvar("ft_client_buy",        "1")
        cvar_buyzone    = register_cvar("ft_obey_buyzone",      "1")
        cvar_buytime    = register_cvar("ft_obey_buytime",      "1")
        cvar_cost       = register_cvar("ft_cost",              "2200")
        cvar_fuelcost   = register_cvar("ft_fuelcost",          "50")
        cvar_fueltank   = register_cvar("ft_fueltank",          "50")
        cvar_damage     = register_cvar("ft_damage",            "17")
        cvar_xplode_dmg = register_cvar("ft_xplode_dmg",        "30")
        cvar_damage_dis = register_cvar("ft_damage_dis",        "100")
        cvar_splash_dis = register_cvar("ft_splash_dis",        "40")

        register_concmd("buyft",                "cmd_BuyFlamethrower",  ADMIN_USER, "- Buys a flamethrower")
        register_clcmd("say /buyft",            "cmd_BuyFlamethrower",  ADMIN_USER, "- Buys a flamethrower")
        register_clcmd("say_team /buyft",       "cmd_BuyFlamethrower",  ADMIN_USER, "- Buys a flamethrower")
        register_clcmd("ft_give",               "cmd_GiveFlamethrowers",ADMIN_BAN,  "<@all/ct/t>/userid - Gives free flamethrowers")
              
        register_event("CurWeapon",     "Event_CurWeapon",      "be",   "1=1")
        register_event("StatusIcon",    "Event_BuyZone",        "b",    "2=buyzone")
        register_event("HLTV",          "Event_NewRound",       "a",    "1=0", "2=0")
        register_event("TextMsg",       "Event_GameRestart",    "a",    "2=#Game_Commencing",   "2=#Game_will_restart_in")
        register_logevent("LogEvent_RoundStart",                 2,     "0=World triggered",    "1=Round_Start")
      
    RegisterHam( Ham_Killed, "player", "FwdKilled" )

        register_forward(FM_CmdStart,           "fw_CmdStart")
        register_forward(FM_PlayerPostThink,    "fw_PlayerPostThink")
        register_forward(FM_UpdateClientData,   "fw_UpdateClientData_Post", 1)
      
        register_think("flamethrower", "think_Flamethrower")
        register_touch("flamethrower", "player", "touch_Flamethrower")
        wpn_ft = custom_weapon_add("weapon_flamethrower", 0, "flamethrower")
      
        if(!get_pcvar_num(cvar_enabled)) pause("ad", PLUGIN_NAME)
}

public FwdKilled(id) {
    g_hasFlamethrower[id] = 0    
}

public plugin_precache()
{
        precache_sound("flamethrower.wav")
        precache_sound("items/ammopickup2.wav")
      
        sprite_xplo = precache_model("sprites/zerogxplode.spr")
        sprite_fire = precache_model("sprites/explode1.spr")
        sprite_burn = precache_model("sprites/xfire.spr")
      
        precache_model("models/v_knife.mdl")
        precache_model("models/p_knife.mdl")
        precache_model("models/shield/v_shield_knife.mdl")
        precache_model("models/shield/p_shield_knife.mdl")
        precache_model("models/w_flamethrower.mdl")
        precache_model("models/v_flamethrower.mdl")
        precache_model("models/p_flamethrower.mdl")
}

public cmd_GiveFlamethrowers(id, level, cid)
{
        if(!cmd_access(id, level, cid, 2))
                return PLUGIN_HANDLED

        new Arg1[64], target
        read_argv(1, Arg1, 63)
      
        new adminName[32]
        get_user_name(id, adminName, 31)
      
        new targetTeam
        new Players[32], iNum
        if(Arg1[0] == '@')
        {
                if(equali(Arg1[1], "all"))
                {
                        targetTeam = 0
                        get_players(Players, iNum, "a")
                }
                else if(equali(Arg1[1], "t"))
                {
                        targetTeam = 1
                        get_players(Players, iNum, "ae" , "terrorist")
              
                }
                else if(equali(Arg1[1], "ct"))
                {
                        targetTeam = 2
                        get_players(Players, iNum, "ae" , "ct")
                }
              
                for(new i = 0; i < iNum; ++i)
                {
                        target = Players[i]
                      
                        g_hasFlamethrower[target] = 1
                        g_FuelTank[target] = get_pcvar_num(cvar_fueltank)
                      
                        new temp[2], weaponID = get_user_weapon(target, temp[0], temp[1])
                        if(weaponID == CSW_KNIFE)
                        {
                                g_Activated[target] = true
                                set_flamethrower_model(target)
                        }
                      
                        client_cmd(target, "spk items/ammopickup2")
                        client_print(target, print_chat, "You have been given a flamethrower (press 3 to use)")
                }
              
                switch(targetTeam)
                {
                        case 0: client_print(0, print_chat, "Admin: %s has given everyone a flamethrower", adminName)
                        case 1: client_print(0, print_chat, "Admin: %s has given all terrorist a flamethrower", adminName)
                        case 2: client_print(0, print_chat, "Admin: %s has given all ct's a flamethrower", adminName)
                }
        }
        else
        {
                target = cmd_target(id, Arg1, 0)
                if(!is_user_connected(target) || !is_user_alive(target))
                        return PLUGIN_HANDLED
      
                new targetName[32]
                get_user_name(target, targetName, 31)
              
                g_hasFlamethrower[target] = 1
                g_FuelTank[target] = get_pcvar_num(cvar_fueltank)
              
                new temp[2], weaponID = get_user_weapon(target, temp[0], temp[1])
                if(weaponID == CSW_KNIFE)
                {
                        g_Activated[target] = true
                        set_flamethrower_model(target)
                        entity_set_int(id, EV_INT_weaponanim, 9)
                }
                      
                client_cmd(target, "spk items/ammopickup2")
                client_print(target, print_chat, "You have been given a flamethrower (press 3 to use)")
                client_print(target, print_chat, "Admin: %s has given you a flamethrower", adminName)
        }
        return PLUGIN_HANDLED
}

public cmd_BuyFlamethrower(id)
{
        if(!get_pcvar_num(cvar_client_buy))
                return PLUGIN_CONTINUE
              
        if(get_pcvar_num(cvar_buyzone))
        {
                if(!g_buyzone[id])
                {
                        client_print(id, print_center, "You need to be in the buyzone")
                        return PLUGIN_HANDLED
                }
        }
      
        if(get_pcvar_num(cvar_buytime))
        {
                new Float:fBuyTime = get_cvar_float("mp_buytime") * 60
                if(!g_freezetime && (get_gametime() - g_starttime) > fBuyTime)
                {
                        client_print(id, print_center, "%d seconds have passed.^nYou can't buy anything now!", floatround(fBuyTime))
                        return PLUGIN_HANDLED
                }
        }
      
        new iMoney = cs_get_user_money(id)
        new iCost = get_pcvar_num(cvar_cost)
      
        if(!is_user_alive(id))
                client_print(id, print_center, "You cant buy when your dead!")
        else if(g_hasFlamethrower[id])
                client_print(id, print_center, "You already own that weapon.")
        else if(iMoney < iCost)
                client_print(id, print_center, "Insufficient funds! ($%d)", iCost)
        else
        {
                g_hasFlamethrower[id] = 1
                g_FuelTank[id] = get_pcvar_num(cvar_fueltank)
              
                new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
                if(weaponID == CSW_KNIFE)
                {
                        g_Activated[id] = true
                        set_flamethrower_model(id)
                }
              
                cs_set_user_money(id, iMoney - iCost)
                client_cmd(id, "spk items/ammopickup2")
                client_print(id, print_chat, "You bought a flamethrower (press 3 to use)")
        }
        return PLUGIN_HANDLED
}

public Event_BuyZone(id) {
        g_buyzone[id] = read_data(1)
}

public Event_GameRestart() {
        g_restarted = 1
}

public Event_NewRound()
{
        if(g_restarted)
        {
                new Players[32], iNum = 0
                get_players(Players, iNum)
                for(new i = 0; i < iNum; i++)
                {
                        new id = Players[i]
                      
                        g_FuelTank[id] = 0
                        g_Activated[id] = 0
                        g_hasFlamethrower[id] = 0
      
                        new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
                        if(weaponID == CSW_KNIFE) set_knife_model(id)
                      
                        g_restarted = 0
                }
        }
      
        new flamethrowers = -1
        while((flamethrowers = find_ent_by_class(flamethrowers, "flamethrower")))
                remove_entity(flamethrowers)
      
        g_freezetime = 1
}

public LogEvent_RoundStart()
{
        g_freezetime = 0
        g_starttime = get_gametime()
}


public Event_CurWeapon(id)
{
        if(!is_user_alive(id) || !g_hasFlamethrower[id])
                return PLUGIN_CONTINUE
      
        new WeaponID = read_data(2)
        switch(WeaponID)
        {
                case CSW_KNIFE:
                {
                        set_task(0.3, "task_ActivateFlamethrower", id)
                        set_flamethrower_model(id)
                        entity_set_int(id, EV_INT_weaponanim, 9)
                }
                default: g_Activated[id] = 0
        }
        return PLUGIN_CONTINUE
}

public touch_Flamethrower(ent, id)
{
        if(!is_valid_ent(ent) || !is_user_alive(id))
                return PLUGIN_CONTINUE
      
        if(g_hasFlamethrower[id])
                return PLUGIN_CONTINUE
      
        if(has_shield(id))
                return PLUGIN_CONTINUE
      
        g_hasFlamethrower[id] = 1
        client_cmd(id, "spk items/ammopickup2")
        g_FuelTank[id] = entity_get_int(ent, EV_INT_iuser4)
        show_fuel_percentage(id)
      
        new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
        if(weaponID == CSW_KNIFE)
        {
                g_Activated[id] = true
                set_flamethrower_model(id)
                entity_set_int(id, EV_INT_weaponanim, 9)
        }
        remove_entity(ent)
      
        return PLUGIN_CONTINUE
}

public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
        if(!g_hasFlamethrower[id] || !g_Activated[id])
                return FMRES_IGNORED
              
        set_cd(cd_handle, CD_ID, 0)
        return FMRES_HANDLED
}

public fw_CmdStart(id, uc_handle, seed)
{
        if(!g_hasFlamethrower[id] || !g_Activated[id])
                return FMRES_IGNORED
      
        new buttons = get_uc(uc_handle, UC_Buttons)
        if(buttons & IN_ATTACK)
        {
                g_FireFlamethrower[id] = 1
      
                buttons &= ~IN_ATTACK
                set_uc(uc_handle, UC_Buttons, buttons)
        } else
                g_FireFlamethrower[id] = 0
              
        if(buttons & IN_ATTACK2)
        {
                g_BuyFuel[id] = 1
              
                buttons &= ~IN_ATTACK2
                set_uc(uc_handle, UC_Buttons, buttons)
        } else
                g_BuyFuel[id] = 0
        return FMRES_HANDLED
}

public fw_PlayerPostThink(id)
{
        if(!is_user_connected(id) || !is_user_alive(id))
                return FMRES_IGNORED
              
        if(!g_hasFlamethrower[id] || !g_Activated[id])
                return FMRES_IGNORED
              
        if(entity_get_int(id, EV_INT_waterlevel) > 1)
                return FMRES_IGNORED

              
        if(g_BuyFuel[id])
        {
                if((g_Delay[id] + 0.2) < get_gametime())
                {
                        buy_fuel(id)
                        g_Delay[id] = get_gametime()
                }
        }
      
        if(g_FireFlamethrower[id])
        {
                if(g_FuelTank[id] > 0)
                {
                        if((g_Delay[id] + 0.2) < get_gametime())
                        {
                                g_FuelTank[id] -= 1
                                g_Delay[id] = get_gametime()
                        }
                      
                        new Float:fOrigin[3], Float:fVelocity[3]
                        entity_get_vector(id,EV_VEC_origin, fOrigin)
                        VelocityByAim(id, 35, fVelocity)
              
                        new Float:fTemp[3], iFireOrigin[3]
                        xs_vec_add(fOrigin, fVelocity, fTemp)
                        FVecIVec(fTemp, iFireOrigin)
                      
                        new Float:fFireVelocity[3], iFireVelocity[3]
                        VelocityByAim(id, get_pcvar_num(cvar_damage_dis), fFireVelocity)
                        FVecIVec(fFireVelocity, iFireVelocity)
                      
                        create_flames_n_sounds(id, iFireOrigin, iFireVelocity)
                      
                        new doDamage
                        switch(get_cvar_num("mp_friendlyfire"))
                        {
                                case 0: doDamage = 0
                                case 1: doDamage = 1
                        }
                      
                        show_fuel_percentage(id)
                        direct_damage(id, doDamage)
                        indirect_damage(id, doDamage)
                        custom_weapon_shot(wpn_ft, id)
                } else
                        client_print(id, print_center, "Out of Fuel")
        }
        return FMRES_IGNORED
}

public think_Flamethrower(ent)
{
        if(is_valid_ent(ent) && entity_get_float(ent, EV_FL_health) < 950.0)
        {
                new Float:fOrigin[3], iOrigin[3]
                entity_get_vector(ent, EV_VEC_origin, fOrigin)
                FVecIVec(fOrigin, iOrigin)
      
                message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                write_byte(99)
                write_short(ent)
                message_end()
      
                message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
                write_byte(3)
                write_coord(iOrigin[0])
                write_coord(iOrigin[1])
                write_coord(iOrigin[2])
                write_short(sprite_xplo)
                write_byte(50)
                write_byte(15)
                write_byte(0)
                message_end()
              
                RadiusDamage(fOrigin, get_pcvar_num(cvar_xplode_dmg), entity_get_int(ent, EV_INT_iuser4))
                remove_entity(ent)
        }
        if(is_valid_ent(ent)) entity_set_float(ent, EV_FL_nextthink, halflife_time() + 0.01)
}

public create_flames_n_sounds(id, origin[3], velocity[3])
{
        message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
        write_byte(120)
        write_coord(origin[0])
        write_coord(origin[1])
        write_coord(origin[2])
        write_coord(velocity[0])
        write_coord(velocity[1])
        write_coord(velocity[2] + 5)
        write_short(sprite_fire)
        write_byte(1)
        write_byte(10)
        write_byte(1)
        write_byte(5)
        message_end()
      
        emit_sound(id, CHAN_WEAPON, "flamethrower.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
}

public direct_damage(id, doDamage)
{
        new ent, body
        get_user_aiming(id, ent, body, get_pcvar_num(cvar_damage_dis) + 500)
      
        if(ent > 0 && is_user_alive(ent))
        {
                if(!doDamage)
                {
                        if(get_user_team(id) != get_user_team(ent))
                        {
                                damage_user(id, ent, get_pcvar_num(cvar_damage))
                                custom_weapon_dmg(wpn_ft, id, ent, get_pcvar_num(cvar_damage))
                        }
                }
                else
                {
                        damage_user(id, ent, get_pcvar_num(cvar_damage))      
                        custom_weapon_dmg(wpn_ft, id, ent, get_pcvar_num(cvar_damage))
                }
        }
}

public indirect_damage(id, doDamage)
{
        new Players[32], iNum
        get_players(Players, iNum, "a")
        for(new i = 0; i < iNum; ++i) if(id != Players[i])
        {
                new target = Players[i]
      
                new Float:fOrigin[3], Float:fOrigin2[3]
                entity_get_vector(id,EV_VEC_origin, fOrigin)
                entity_get_vector(target, EV_VEC_origin, fOrigin2)
                      
                new temp[3], Float:fAim[3]
                get_user_origin(id, temp, 3)
                IVecFVec(temp, fAim)
              
                new Float:fDistance = get_pcvar_num(cvar_damage_dis) + 500.0
                if(get_distance_f(fOrigin, fOrigin2) > fDistance)
                        continue
              
                new iDistance = get_distance_to_line(fOrigin, fOrigin2, fAim)
                if(iDistance > get_pcvar_num(cvar_splash_dis) || iDistance < 0 || !fm_is_ent_visible(id, target))
                        continue
                      
                if(!doDamage)
                {
                        if(get_user_team(id) != get_user_team(target))
                        {
                                damage_user(id, target, get_pcvar_num(cvar_damage))
                                custom_weapon_dmg(wpn_ft, id, target, get_pcvar_num(cvar_damage))
                        }
                }
                else
                {
                        damage_user(id, target, get_pcvar_num(cvar_damage) / 2)
                        custom_weapon_dmg(wpn_ft, id, target, get_pcvar_num(cvar_damage) / 2)
                }
        }
}

public buy_fuel(id)
{
        if(get_pcvar_num(cvar_buyzone) && !g_buyzone[id])
                return PLUGIN_CONTINUE
              
        new Float:fBuyTime = get_cvar_float("mp_buytime") * 60
        if(get_pcvar_num(cvar_buytime) && !g_freezetime
        && (get_gametime() - g_starttime) > fBuyTime)
                return PLUGIN_CONTINUE

        if(g_FuelTank[id] >= get_pcvar_num(cvar_fueltank))
                return PLUGIN_CONTINUE
                              
        new iMoney = cs_get_user_money(id)
        new iCost = get_pcvar_num(cvar_fuelcost)
        if(iMoney >= iCost)
        {
                g_FuelTank[id] += 1
                show_fuel_percentage(id)
                cs_set_user_money(id, iMoney - iCost)

                return PLUGIN_CONTINUE
        }      
        return PLUGIN_CONTINUE
}



public task_ActivateFlamethrower(id)
{
        if(!is_user_connected(id) || !is_user_alive(id))
                return PLUGIN_CONTINUE
      
        new temp[2], weaponID = get_user_weapon(id, temp[0], temp[1])
        if(weaponID == CSW_KNIFE) g_Activated[id] = 1
              
        return PLUGIN_CONTINUE
}

public show_fuel_percentage(id)
{
        set_hudmessage(255, 170, 0, 0.91, 0.95, _, _, 1.0, _, _, 4)
        show_hudmessage(id, "Fuel Tank: %d%%", get_percent(g_FuelTank[id], get_pcvar_num(cvar_fueltank)))
}

public set_flamethrower_model(id)
{
        entity_set_string(id, EV_SZ_viewmodel, "models/v_flamethrower.mdl")
        entity_set_string(id, EV_SZ_weaponmodel, "models/p_flamethrower.mdl")
}

public set_knife_model(id)
{
        entity_set_string(id, EV_SZ_viewmodel, "models/v_knife.mdl")
        entity_set_string(id, EV_SZ_weaponmodel, "models/p_knife.mdl")
}

public set_shield_model(id)
{
        entity_set_string(id, EV_SZ_viewmodel, "models/shield/v_shield_knife.mdl")
        entity_set_string(id, EV_SZ_weaponmodel, "models/shield/p_shield_knife.mdl")
}

stock damage_user(id, victim, damage)
{
        new iHealth = get_user_health(victim)
        if(iHealth > damage)
                fakedamage(victim, "weapon_flamethrower", float(damage), DMG_BURN)
        else
        {
                user_silentkill(victim)
                make_deathmsg(id, victim, 0, "flamethrower")
              
                new iOrigin[3]
                get_user_origin(victim, iOrigin, 0)
              
                message_begin(MSG_BROADCAST,SVC_TEMPENTITY)
                write_byte(17)
                write_coord(iOrigin[0])
                write_coord(iOrigin[1])
                write_coord(iOrigin[2] + 10)
                write_short(sprite_burn)
                write_byte(30)
                write_byte(40)
                message_end()
                      
                if(get_user_team(id) != get_user_team(victim))
                {
                        set_user_frags(id, get_user_frags(id) + 1)
                        cs_set_user_money(id, cs_get_user_money(id) + 300)
                }
                else
                {
                        set_user_frags(id, get_user_frags(id) - 1)
                        cs_set_user_money(id, cs_get_user_money(id) - 300)
                }
              
                message_begin(MSG_ALL, get_user_msgid("ScoreInfo"))
                write_byte(id)
                write_short(get_user_frags(id))
                write_short(get_user_deaths(id))
                write_short(0)
                write_short(get_user_team(id))
                message_end()
              
                message_begin(MSG_ALL, get_user_msgid("ScoreInfo"))
                write_byte(victim)
                write_short(get_user_frags(victim))
                write_short(get_user_deaths(victim))
                write_short(0)
                write_short(get_user_team(victim))
                message_end()
        }
}

stock get_percent(value, tvalue) {      
        return floatround(floatmul(float(value) / float(tvalue) , 100.0))  
}

stock get_distance_to_line(Float:pos_start[3], Float:pos_end[3], Float:pos_object[3])  
{  
        new Float:vec_start_end[3], Float:vec_start_object[3], Float:vec_end_object[3], Float:vec_end_start[3]
        xs_vec_sub(pos_end, pos_start, vec_start_end)           // vector from start to end
        xs_vec_sub(pos_object, pos_start, vec_start_object)     // vector from end to object
        xs_vec_sub(pos_start, pos_end, vec_end_start)           // vector from end to start
        xs_vec_sub(pos_end, pos_object, vec_end_object)                 // vector object to end
      
        new Float:len_start_object = getVecLen(vec_start_object)
        new Float:angle_start = floatacos(xs_vec_dot(vec_start_end, vec_start_object) / (getVecLen(vec_start_end) * len_start_object), degrees)  
        new Float:angle_end = floatacos(xs_vec_dot(vec_end_start, vec_end_object) / (getVecLen(vec_end_start) * getVecLen(vec_end_object)), degrees)  

        if(angle_start <= 90.0 && angle_end <= 90.0)
                return floatround(len_start_object * floatsin(angle_start, degrees))
        return -1  
}

stock Float:getVecLen(Float:Vec[3])
{
        new Float:VecNull[3] = {0.0, 0.0, 0.0}
        new Float:len = get_distance_f(Vec, VecNull)
        return len
}

stock bool:fm_is_ent_visible(index, entity)
{
        new Float:origin[3], Float:view_ofs[3], Float:eyespos[3]
        pev(index, pev_origin, origin)
        pev(index, pev_view_ofs, view_ofs)
        xs_vec_add(origin, view_ofs, eyespos)

        new Float:entpos[3]
        pev(entity, pev_origin, entpos)
        engfunc(EngFunc_TraceLine, eyespos, entpos, 0, index)

        switch(pev(entity, pev_solid)) {
                case SOLID_BBOX..SOLID_BSP: return global_get(glb_trace_ent) == entity
        }
      
        new Float:fraction
        global_get(glb_trace_fraction, fraction)
        if(fraction == 1.0)
                return true
              
        return false
}

stock bool:has_shield(id)
{
        new modelName[32]
        entity_get_string(id, EV_SZ_viewmodel, modelName, 31)

        if(containi(modelName, "v_shield_") != -1)
                return true
              
        return false
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/




Спасибо тебе большое!!! Работает. А по второму плагину исправишь?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 13.4.2014, 16:10
Сообщение #4


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

удали функцию
Код
public dropcmd(id) {
.....
.....
.....
.....
}

и удали вызов
Код
register_clcmd("drop","dropcmd")
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Steam
сообщение 13.4.2014, 16:28
Сообщение #5


Стаж: 12 лет

Сообщений: 36
Благодарностей: 1
Полезность: 19

Удалил. Но теперь следующий вид имеется:
1. Я могу дропнуть миниган клавишей G
2. Когда я его дропаю, оно выпадает и исчезает, но, когда я повторно покупаю, пока я живой, мне пишет, что данное оружие у меня уже есть, хотя его у меня нет
3. Ну и когда меня убивают- миниган выскакивает с меня

Цитата(Legenda @ 13.4.2014, 19:10) *
удали функцию
Код
public dropcmd(id) {
.....
.....
.....
.....
}

и удали вызов
Код
register_clcmd("drop","dropcmd")

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 13.4.2014, 16:37
Сообщение #6


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

значит надо чуть больше ковырять
в частности смотреть функции remowegun и unminigun
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Steam
сообщение 13.4.2014, 16:41
Сообщение #7


Стаж: 12 лет

Сообщений: 36
Благодарностей: 1
Полезность: 19

Вот смотри, есть плагин золотая m4a1
1. Ее можно скинуть, но при дропе она так же исчезает
2. Ее можно повторно купить, пока ты живой
3. Когда тебя убили- она не дропается
4. Когда ты воскрес- ее у тебя так же нет.

Вот исходя из этого можно мне в миниган такой же функционал перекинуть?
Код ниже:

Скрытый текст
Код
/* AMX Mod script
*
* (c) 2013, Alicx[{DARK}((-__-))]
*
*
*/

#define PLUGIN "Golden M4a1"

#include <amxmodx>
#include <fakemeta>
#include <fun>
#include <hamsandwich>
#include <cstrike>
#include <amxmisc>


#define is_valid_player(%1) (1 <= %1 <= 32)

new M4_V_MODEL[64] = "models/v_golden_m4a1.mdl"
new M4_P_MODEL[64] = "models/p_golden_m4a1.mdl"

/* Pcvars */
new cvar_dmgmultiplier, cvar_goldbullets,  cvar_custommodel, cvar_uclip, cvar_cost

new bool:g_HasM4[33]

new g_hasZoom[ 33 ]
new bullets[ 33 ]

// Sprite
new m_spriteTexture

const Wep_m4a1 = ((1<<CSW_M4A1))

public plugin_init()
{
    
    /* CVARS */
    cvar_dmgmultiplier = register_cvar("goldenm4_dmg_multiplier", "5")
    cvar_custommodel = register_cvar("goldenm4_custom_model", "1")
    cvar_goldbullets = register_cvar("goldenm4_gold_bullets", "0")
    cvar_uclip = register_cvar("goldenm4_unlimited_clip", "1")
    cvar_cost = register_cvar("goldenm4_cost", "6000")
    
    // Register The Buy Cmd
    register_clcmd("say /goldenm4", "CmdBuyM4")
    register_clcmd("say_team /goldenm4", "CmdBuyM4")
    register_concmd("amx_goldenm4", "CmdGiveM4", ADMIN_BAN, "<name>")
    
    // Register The Plugin
    register_plugin("Golden M4A1", "1.0", "Alicx DarK")
    // Death Msg
    register_event("DeathMsg", "Death", "a")
    // Weapon Pick Up
    register_event("WeapPickup","checkModel","b","1=19")
    // Current Weapon Event
    register_event("CurWeapon","checkWeapon","be","1=1")
    register_event("CurWeapon", "make_tracer", "be", "1=1", "3>0")
    // Ham TakeDamage
    RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
    register_forward( FM_CmdStart, "fw_CmdStart" )
    RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
    
}

public client_connect(id)
{
    g_HasM4[id] = false
}

public client_disconnect(id)
{
    g_HasM4[id] = false
}

public Death()
{
    g_HasM4[read_data(2)] = false
}

public fwHamPlayerSpawnPost(id)
{
    g_HasM4[id] = false
}

public plugin_precache()
{
    precache_model(M4_V_MODEL)
    precache_model(M4_P_MODEL)
    m_spriteTexture = precache_model("sprites/dot.spr")
    precache_sound("weapons/zoom.wav")
}

public checkModel(id)
{
    if ( !g_HasM4[id] )
        return PLUGIN_HANDLED
    
    new szWeapID = read_data(2)
    
    if ( szWeapID == CSW_M4A1 && g_HasM4[id] == true && get_pcvar_num(cvar_custommodel) )
    {
        set_pev(id, pev_viewmodel2, M4_V_MODEL)
        set_pev(id, pev_weaponmodel2, M4_P_MODEL)
    }
    return PLUGIN_HANDLED
}

public checkWeapon(id)
{
    new plrClip, plrAmmo, plrWeap[32]
    new plrWeapId
    
    plrWeapId = get_user_weapon(id, plrClip , plrAmmo)
    
    if (plrWeapId == CSW_M4A1 && g_HasM4[id])
    {
        checkModel(id)
    }
    else
    {
        return PLUGIN_CONTINUE
    }
    
    if (plrClip == 0 && get_pcvar_num(cvar_uclip))
    {
        // If the user is out of ammo..
        get_weaponname(plrWeapId, plrWeap, 31)
        // Get the name of their weapon
        give_item(id, plrWeap)
        engclient_cmd(id, plrWeap)
        engclient_cmd(id, plrWeap)
        engclient_cmd(id, plrWeap)
    }
    return PLUGIN_HANDLED
}



public fw_TakeDamage(victim, inflictor, attacker, Float:damage)
{
    if ( is_valid_player( attacker ) && get_user_weapon(attacker) == CSW_M4A1 && g_HasM4[attacker] )
    {
        SetHamParamFloat(4, damage * get_pcvar_float( cvar_dmgmultiplier ) )
    }
}

public fw_CmdStart( id, uc_handle, seed )
{
    if( !is_user_alive( id ) )
        return PLUGIN_HANDLED
    
    if( ( get_uc( uc_handle, UC_Buttons ) & IN_ATTACK2 ) && !( pev( id, pev_oldbuttons ) & IN_ATTACK2 ) )
    {
        new szClip, szAmmo
        new szWeapID = get_user_weapon( id, szClip, szAmmo )
        
        if( szWeapID == CSW_M4A1 && g_HasM4[id] == true && !g_hasZoom[id] == true)
        {
            g_hasZoom[id] = true
            cs_set_user_zoom( id, CS_SET_AUGSG552_ZOOM, 0 )
            emit_sound( id, CHAN_ITEM, "weapons/zoom.wav", 0.20, 2.40, 0, 100 )
        }
        
        else if ( szWeapID == CSW_M4A1 && g_HasM4[id] == true && g_hasZoom[id])
        {
            g_hasZoom[ id ] = false
            cs_set_user_zoom( id, CS_RESET_ZOOM, 0 )
            
        }
        
    }
    return PLUGIN_HANDLED
}


public make_tracer(id)
{
    if (get_pcvar_num(cvar_goldbullets))
    {
        new clip,ammo
        new wpnid = get_user_weapon(id,clip,ammo)
        new pteam[16]
        
        get_user_team(id, pteam, 15)
        
        if ((bullets[id] > clip) && (wpnid == CSW_M4A1) && g_HasM4[id])
        {
            new vec1[3], vec2[3]
            get_user_origin(id, vec1, 1) // origin; your camera point.
            get_user_origin(id, vec2, 4) // termina; where your bullet goes (4 is cs-only)
            
            
            //BEAMENTPOINTS
            message_begin( MSG_BROADCAST,SVC_TEMPENTITY)
            write_byte (0)     //TE_BEAMENTPOINTS 0
            write_coord(vec1[0])
            write_coord(vec1[1])
            write_coord(vec1[2])
            write_coord(vec2[0])
            write_coord(vec2[1])
            write_coord(vec2[2])
            write_short( m_spriteTexture )
            write_byte(1) // framestart
            write_byte(5) // framerate
            write_byte(2) // life
            write_byte(10) // width
            write_byte(0) // noise
            write_byte( 255 )     // r, g, b
            write_byte( 215 )       // r, g, b
            write_byte( 0 )       // r, g, b
            write_byte(200) // brightness
            write_byte(150) // speed
            message_end()
        }
        
        bullets[id] = clip
    }
    
}

public CmdBuyM4(id)
{
    if ( !is_user_alive(id) )
    {
        client_print(id,print_chat, "[AMXX] To buy golden M4a1 You need to be alive!")
        return PLUGIN_HANDLED
    }
    
    new money = cs_get_user_money(id)
    
    if (money >= get_pcvar_num(cvar_cost))
    {
        cs_set_user_money(id, money - get_pcvar_num(cvar_cost))
        give_item(id, "weapon_m4a1")
        g_HasM4[id] = true
    }
    
    else
    {
        client_print(id, print_chat, "[AMXX] You dont hav enough money to buy Golden M4a1. Cost $%d ", get_pcvar_num(cvar_cost))
    }
    return PLUGIN_HANDLED
}

public CmdGiveM4(id,level,cid)
{
    if (!cmd_access(id,level,cid,2))
        return PLUGIN_HANDLED;
    new arg[32];
    read_argv(1,arg,31);
    
    new player = cmd_target(id,arg,7);
    if (!player)
        return PLUGIN_HANDLED;
    
    new name[32];
    get_user_name(player,name,31);
    
    give_item(player, "weapon_m4a1")
    g_HasM4[player] = true
    
    return PLUGIN_HANDLED
}

stock drop_prim(id)
{
    new weapons[32], num
    get_user_weapons(id, weapons, num)
    for (new i = 0; i < num; i++) {
        if (Wep_m4a1 & (1<<weapons[i]))
        {
            static wname[32]
            get_weaponname(weapons[i], wname, sizeof wname - 1)
            engclient_cmd(id, "drop", wname)
        }
    }
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1034\\ f0\\ fs16 \n\\ par }
*/


Цитата(Legenda @ 13.4.2014, 19:37) *
значит надо чуть больше ковырять
в частности смотреть функции remowegun и unminigun

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 13.4.2014, 20:00
Сообщение #8


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

можно конечно, не могу тебе этого запретить
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Steam
сообщение 13.4.2014, 20:11
Сообщение #9


Стаж: 12 лет

Сообщений: 36
Благодарностей: 1
Полезность: 19

А помочь сможешь? Просто я в этом не понимаю...
Цитата(Legenda @ 13.4.2014, 23:00) *
можно конечно, не могу тебе этого запретить

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Steam
сообщение 14.4.2014, 0:06
Сообщение #10


Стаж: 12 лет

Сообщений: 36
Благодарностей: 1
Полезность: 19

Необходимо отключить возможность дропа данного оружия (Пулемет) во время игры. При этом необходимо учесть некоторые моменты:
1. Когда игрок хочет выкинуть данное оружие- оно не выкидывается, или выкидывается, но исчезает
2. Когда игрок выуинул оружие- он может купить его вновь
3. При возрождении игрока- данного оружия у него нет, ему вновь нужно его купить (так сейчас и есть, просто не утерять данную функцию)
4. Когда игрока убивают- данное оружие у него не дропается.
Выкладываю код плагина:

Скрытый текст
Код:
#include <amxmodx>
#include <engine>
#include <fakemeta_util>
#include <cstrike>
#include <hamsandwich>
#include <amxmisc>
#include <fun>

#define MAX_PLAYERS 32
#define MAX_BLOOD_DISTANCE 64
#define LOADUP_TIME 0.75
#define SHUTDOWN_TIME 1.7
#define SHAKE_FORCE -5.0 //(must be negative value)
new const GUNSHOT_DECALS[] = {41, 42, 43, 44, 45} // Gunshot decal list
// Plugin information
new const PLUGIN[] = "WPN Minigun"
new const VERSION[] = "1.65"
new const AUTHOR[] = "CLLlAgOB"
// other
new bool:has_minigun[33], m249, bool:atk2[33], bool:atk1[33],
bool:delay[33], clipp[33],clipstart,g_fwid,bool:delayhud[33],bool:beackup[33],
mcost,msg[128],bool:frstCLIP[33],g_MaxPlayers,g_guns_eventids_bitsum,bool:haswhp
nnmg[33],
Float:g_lastShot[33], Float:g_nextSound[33], g_plAction[33],bool:g_fix_punchangle[33],
bool:canfire[33],oneround,only_adminCB,MsgSayText,g_normal_trace[33],DMGMG,bool:
user_bot[33],
bool:is_alive[33],bool:is_connected[33]
// Blood
new g_blood
new g_bloodspray
// CS Player PData Offsets (win32)
const OFFSET_CSTEAMS = 114
// Linux diff's
const OFFSET_LINUX = 5 // offsets 5 higher in Linux builds
// Models
new P_MODEL[] = "models/wpnmod/m134/p_minigun.mdl"
new V_MODEL[] = "models/wpnmod/m134/v_minigun.mdl"
new W_MODEL[] = "models/wpnmod/m134/w_minigun.mdl"
// Sounds
new m_SOUND[][] = {"wpnmod/minigun/hw_shoot1.wav", "wpnmod/minigun/hw_spin.wav", "wpnmod/minigun/hw_spinup.wav", "wpnmod/minigun/hw_spindown.wav"}
new g_noammo_sounds[][] = {"weapons/dryfire_rifle.wav"}
//no recoil
new const g_guns_events[][] = {"events/m249.sc"}
//connect
#define is_user_valid_connected(%1) (1 <= %1 <= g_MaxPlayers && is_connected[%1])
enum {
anim_idle,
anim_idle2,
anim_gentleidle,
anim_stillidle,
anim_draw,
anim_holster,
anim_spinup,
anim_spindown,
anim_spinidle,
anim_spinfire,
anim_spinidledown
}

// Types
enum {
act_none,
act_load_up,
act_run
}
public plugin_precache() {
precache_model(P_MODEL)
precache_model(V_MODEL)
precache_model(W_MODEL)
precache_sound(m_SOUND[0])
precache_sound(m_SOUND[1])
precache_sound(m_SOUND[2])
precache_sound(m_SOUND[3])
g_blood = precache_model("sprites/blood.spr")
g_bloodspray = precache_model("sprites/bloodspray.spr")
g_fwid = register_forward(FM_PrecacheEvent, "fwPrecacheEvent", 1)
}

public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)
register_dictionary("minigun.txt")
MsgSayText = get_user_msgid("SayText")
clipstart = register_cvar("amx_ammo_mini","600")
m249 = register_cvar("amx_speed_mini","0.9")
DMGMG = register_cvar("amx_minigun_damage","1.2")
oneround = register_cvar("amx_oneround","0")
mcost = register_cvar("amx_cost_mini","10000")
only_adminCB = register_cvar("amx_only_adm_buy","0")
register_event("CurWeapon","event_curweapon","be", "1=1")
register_event("DeathMsg","unminigun","a")
register_forward(FM_ClientDisconnect, "fw_ClientDisconnect")
register_forward(FM_CmdStart, "fwd_CmdStart")
register_forward(FM_EmitSound,"fwd_emitsound")
register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
register_forward(FM_PlayerPostThink, "fwPlayerPostThink", 1)
register_forward(FM_StartFrame, "fwd_StartFrame")
register_forward(FM_UpdateClientData, "UpdateClientData_Post", 1)
RegisterHam(Ham_Killed, "player", "fw_PlayerKilled")
RegisterHam(Ham_Spawn, "player", "fw_PlayerSpawn_Post", 1)
RegisterHam(Ham_TakeDamage, "player", "player_TakeDamage")
register_clcmd("say /minigun","buymini")
register_concmd("amx_minigun_give", "cmdMinigun_give", ADMIN_LEVEL_A, "<@all or name/id> <ammo>")
register_clcmd("drop","dropcmd")
//events
// Get Max Players
g_MaxPlayers = global_get(glb_maxClients)
register_logevent("event_start", 2, "1=Round_Start")
register_event("TextMsg", "fwEvGameWillRestartIn", "a", "2=#Game_will_restart_in")
register_event("HLTV", "event_start_freezetime", "a", "1=0", "2=0")
unregister_forward(FM_PrecacheEvent, g_fwid, 1)
}

// Client joins the game
public client_putinserver(id)
{
// Player joined
is_connected[id] = true
}
// Client leaving
public fw_ClientDisconnect(id)
{
is_connected[id] = false
is_alive[id] = false
}
public fw_PlayerSpawn_Post(id)
{
// Not alive or didn't join a team yet
if (!is_user_alive(id) || !fm_cs_get_user_team(id))
return;
// Player spawned
is_alive[id] = true
}
public fw_PlayerKilled(victim, attacker, shouldgib)
{
//player die
is_alive[victim] = false
}
public unminigun(){
new id = read_data(2)
if(has_minigun[id] && !is_alive[id]) {
new Float:Aim[3],Float:origin[3]
VelocityByAim(id, 64, Aim)
entity_get_vector(id,EV_VEC_origin,origin)

origin[0] += Aim[0]
origin[1] += Aim[1]

new minigun = create_entity("info_target")
entity_set_string(minigun,EV_SZ_classname,"minigun")
entity_set_model(minigun,W_MODEL)

entity_set_size(minigun,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
entity_set_int(minigun,EV_INT_solid,1)

entity_set_int(minigun,EV_INT_movetype,6)
entity_set_int(minigun, EV_INT_iuser1, clipp[id])
entity_set_vector(minigun,EV_VEC_origin,origin)
has_minigun[id] = false
remowegun(id)
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}

//damage lvl
public player_TakeDamage(victim, inflictor, attacker, Float:damage, damagetype) {
if(damagetype & DMG_BULLET && haswhpnnmg[attacker] && has_minigun[attacker] == true && attacker!=victim)
{
damage = damage*get_pcvar_float(DMGMG)
SetHamParamFloat(4, damage)
return HAM_IGNORED
}
return HAM_IGNORED
}

public cmdMinigun_give(id, level, cid) {
if (!cmd_access(id, level, cid, 3)) {
return PLUGIN_HANDLED
}

new arg[32], arg2[8], name2[32], argument2
read_argv(1,arg,31)
read_argv(2,arg2,7)
argument2 = str_to_num(arg2)
if ( equali(arg,"@all") ){
new plist[32],pnum
get_players(plist,pnum,"a")
if (pnum==0)
{
console_print(id,"[Minigun] This client is invalid")
return PLUGIN_HANDLED
}
for (new i=0; i<pnum; i++)
{
give_weapon(plist[i], argument2, 1)
client_print(plist[i], print_chat, "[Minigun] %L", LANG_PLAYER, "MINIGUN_ADMIN_GIVE_ALL",argument2)
}
}
else
{
get_user_name(id,name2,31)
new player = cmd_target(id,arg,7)
if (!player)
{
console_print(id,"[Minigun] Give Minigun Failed")
return PLUGIN_HANDLED
}
new name[32]
get_user_name(player,name,31)
give_weapon(player, argument2, 1)
client_print(0, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_ADMIN_GIVE",name,argument2)
return PLUGIN_HANDLED
}
return PLUGIN_HANDLED
}

public buymini(id) {
if ((!(get_user_flags(id) & ADMIN_IMMUNITY) || !(get_user_flags(id) & ADMIN_RESERVATION)) && get_pcvar_num(only_adminCB)) {
format(msg,256,"[Minigun] %L", LANG_PLAYER,"MINIGUN_ADMIN_BUY")
message_begin(MSG_ONE,MsgSayText,{0,0,0},id)
write_byte(id)
write_string(msg)
message_end()
return PLUGIN_HANDLED
}
new money = cs_get_user_money(id)
new price = get_pcvar_num(mcost)
if(!is_alive[id])
client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_ALIVE")
else if(has_minigun[id])
client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_ALREADY")
else if(money < price)
client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_NO_MONEY")
else{
cs_set_user_money(id, money - price)
give_weapon(id, 0, 1)
client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_BUY",price)
}
return PLUGIN_HANDLED
}

public dropcmd(id) {
if(has_minigun[id] && haswhpnnmg[id] && is_alive[id]) {
new Float:Aim[3],Float:origin[3]
VelocityByAim(id, 64, Aim)
entity_get_vector(id,EV_VEC_origin,origin)

origin[0] += Aim[0]
origin[1] += Aim[1]

new minigun = create_entity("info_target")
entity_set_string(minigun,EV_SZ_classname,"minigun")
entity_set_model(minigun,W_MODEL)

entity_set_size(minigun,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
entity_set_int(minigun,EV_INT_solid,1)

entity_set_int(minigun,EV_INT_movetype,6)
entity_set_int(minigun, EV_INT_iuser1, clipp[id])
entity_set_vector(minigun,EV_VEC_origin,origin)
has_minigun[id] = false
canfire[id] = false
remowegun(id)
g_plAction[id] = false
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}

public pfn_touch(ptr, ptd) {
if(is_valid_ent(ptr)) {
new classname[32]
entity_get_string(ptr,EV_SZ_classname,classname,31)

if(equal(classname, "minigun")) {
if(is_valid_ent(ptd)) {
new id = ptd
if(id > 0 && id < 34) {
if(!has_minigun[id] && is_alive[id]) {
give_weapon(id,entity_get_int(ptr, EV_INT_iuser1), 0)
canfire[id] = true
remove_entity(ptr)
}
}
}
}
}
}

public remove_miniguns() {
new nextitem = find_ent_by_class(-1,"minigun")
while(nextitem) {
remove_entity(nextitem)
nextitem = find_ent_by_class(-1,"minigun")
}
return PLUGIN_CONTINUE
}
public event_start_freezetime(){
remove_miniguns()
static iPlayers[32], iPlayersNum, i
get_players(iPlayers, iPlayersNum, "a")

if(!get_pcvar_num(only_adminCB)){
for (i = 0; i <= iPlayersNum; ++i){
if(!has_minigun[iPlayers[i]]){
set_task(random_float(0.1,1.0),"msghelp",iPlayers[i])
}
}
}
if(get_pcvar_num(oneround)){
for (i = 0; i <= iPlayersNum; ++i){
if(has_minigun[iPlayers[i]]){
has_minigun[iPlayers[i]] = false
remowegun(iPlayers[i])
}
}
} else {
for (i = 0; i <= iPlayersNum; ++i){
g_plAction[iPlayers[i]] = false
canfire[iPlayers[i]] = false
frstCLIP[iPlayers[i]] = true
}
}
}
// remove gun and save all guns
public remowegun(id) {
new wpnList[32]
new number
get_user_weapons(id,wpnList,number)
for (new i = 0;i < number ;i++) {
if (wpnList[i] == CSW_M249) {
fm_strip_user_gun(id, wpnList[i])
}
}
}

public msghelp(id){
client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_FOR_BUY")
client_print(id, print_chat, "[Minigun] %L", LANG_PLAYER,"MINIGUN_PRICE",get_pcvar_num(mcost))
}

public event_start(){
static iPlayers[32], iPlayersNum, i
get_players(iPlayers, iPlayersNum, "a")
for (i = 0; i <= iPlayersNum; ++i)
canfire[iPlayers[i]] = true
}



public fwEvGameWillRestartIn() {
static iPlayers[32], iPlayersNum, i
get_players(iPlayers, iPlayersNum, "a")
for (i = 0; i <= iPlayersNum; ++i)
has_minigun[iPlayers[i]] = false
}
public client_connect(id){
canfire[id]= false
has_minigun[id] = false
g_normal_trace[id] = 0
if(is_user_bot(id)) user_bot[id] = true
else user_bot[id] = false
}

//block sound no ammo in atack
public fwd_emitsound(id, channel, sample[], Float:volume, Float:attn, flag, pitch)
{
if (!is_user_valid_connected(id) || !has_minigun[id])
return FMRES_IGNORED;
else if((equal(sample, g_noammo_sounds[0])) && has_minigun[id] && haswhpnnmg[id])
{
return FMRES_SUPERCEDE
}
return FMRES_IGNORED
}

//give wpn
public give_weapon(id, ammo, frst){
has_minigun[id] = true
give_item(id,"weapon_m249")
canfire[id] = true
clipp[id] = ammo
if(frst) frstCLIP[id] = true
else beackup[id] = true

}


//play anim
public native_playanim(player,anim)
{
set_pev(player, pev_weaponanim, anim)
message_begin(MSG_ONE, SVC_WEAPONANIM, {0, 0, 0}, player)
write_byte(anim)
write_byte(pev(player, pev_body))
message_end()
}


public fwd_CmdStart(id, uc_handle, seed)
{


if(!is_alive[id] || !canfire[id] || !has_minigun[id]) return FMRES_HANDLED

if(haswhpnnmg[id])
{
static buttons
buttons = get_uc(uc_handle, UC_Buttons)
if(buttons & IN_ATTACK)
{
atk1[id] = true
atk2[id] = false


}
else if(buttons & IN_ATTACK2)
{
atk2[id] = true
atk1[id] = false
}
if(atk1[id] && !atk2[id] && (g_plAction[id] == act_none || g_plAction[id] == act_load_up) && clipp[id]>0){
buttons &= ~IN_ATTACK
buttons &= ~IN_ATTACK2
set_uc(uc_handle, UC_Buttons, buttons)
fire_mode(id,0)
} else if(atk2[id] || atk1[id] && clipp[id]==0){
fire_mode(id,1)
}

}
return FMRES_IGNORED
}

// in fire
fire_mode(id, type) {
static Float:gtime
gtime = get_gametime()
g_lastShot[id] = gtime

if(g_nextSound[id] <= gtime && canfire[id]) {
switch(g_plAction[id]) {
case act_none: {
native_playanim(id, anim_spinup)
emit_sound(id, CHAN_WEAPON, m_SOUND[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
g_nextSound[id] = gtime + LOADUP_TIME
g_plAction[id] = act_load_up
}
case act_load_up: {
g_nextSound[id] = gtime
g_plAction[id] = act_run
}
}
}

if(g_plAction[id] == act_run) {
if(type == 0 && clipp[id]>0 && atk1[id]){
emit_sound(id, CHAN_WEAPON, m_SOUND[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
testbulet(id)
if(!delay[id]) {
native_playanim(id, anim_spinfire)
ammo_hud(id)
set_task(0.2,"delayanim",id)
delay[id] = true
}
}
else {
if(!delay[id]) {
ammo_hud(id)
emit_sound(id, CHAN_WEAPON, m_SOUND[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
native_playanim(id, anim_spinidle)
set_task(0.2,"delayanim",id)
delay[id] = true
}
}
}
atk1[id] = false
atk2[id] = false
}

public delayanim(id){
delay[id] = false
}

//set models
public event_curweapon(id){
if(!is_alive[id] || !is_connected[id] || user_bot[id]) return;
new clip, ammo, weapon = get_user_weapon(id, clip, ammo)
if((has_minigun[id]) && (weapon == CSW_M249)){
if(g_plAction[id] != act_run && frstCLIP[id]){
new ent = get_weapon_ent(id,weapon)
if(clipp[id] < get_pcvar_num(clipstart)) clipp[id] = get_pcvar_num(clipstart)
cs_set_weapon_ammo(ent, clipp[id])
frstCLIP[id] = false
}
if(g_plAction[id] != act_run && beackup[id]){
new ent = get_weapon_ent(id,weapon)
cs_set_weapon_ammo(ent, clipp[id])
beackup[id] = false
}
if(clipp[id] == 0){
new ent = get_weapon_ent(id,weapon)
cs_set_weapon_ammo(ent, clipp[id])
}
if(g_plAction[id] == act_run){
clipp[id] = clip
}
message_begin(MSG_ONE, get_user_msgid("CurWeapon"), {0,0,0}, id)
write_byte(1)
write_byte(CSW_KNIFE)
write_byte(0)
message_end()
if(!haswhpnnmg[id]){
entity_set_string(id,EV_SZ_viewmodel,V_MODEL)
entity_set_string(id,EV_SZ_weaponmodel,P_MODEL)
haswhpnnmg[id] = true
}
new Ent = get_weapon_ent(id,weapon)
new Float:N_Speed
if(Ent)
{
N_Speed = get_pcvar_float(m249)
new Float:Delay = get_pdata_float( Ent, 46, 4) * N_Speed
if (Delay > 0.0){
set_pdata_float( Ent, 46, Delay, 4)
}
}
ammo_hud(id)
if(atk1[id]){
fire_mode(id, 0)
}
if(atk2[id]){
fire_mode(id, 1)
}
}
if(weapon != CSW_M249) haswhpnnmg[id] = false
if((has_minigun[id]) && (!haswhpnnmg[id])) g_plAction[id] = act_none
return;
}

//sound and anim
public fwd_StartFrame() {
static Float:gtime, id

gtime = get_gametime()

for(id = 0; id <= g_MaxPlayers; id++) {
if(g_plAction[id] != act_none) {

if(!(pev(id, pev_button) & IN_ATTACK) && !(pev(id, pev_button) & IN_ATTACK2) && g_lastShot[id] + 0.2 < gtime) {
native_playanim(id, anim_spinidledown)
emit_sound(id, CHAN_WEAPON, m_SOUND[3], 1.0, ATTN_NORM, 0, PITCH_NORM)
g_nextSound[id] = gtime + SHUTDOWN_TIME
g_plAction[id] = act_none
}
}
}
}

//marks on hit
public native_gi_get_gunshot_decal()
{
return GUNSHOT_DECALS[random_num(0, sizeof(GUNSHOT_DECALS) - 1)]
}

//hit bulet
public testbulet(id){
// Find target
new aimOrigin[3], target, body
get_user_origin(id, aimOrigin, 3)
get_user_aiming(id, target, body)

if(target > 0 && target <= g_MaxPlayers)
{
new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3]
pev(id, pev_origin, fStart)

// Get ids view direction
velocity_by_aim(id, MAX_BLOOD_DISTANCE, fVel)

// Calculate position where blood should be displayed
fStart[0] = float(aimOrigin[0])
fStart[1] = float(aimOrigin[1])
fStart[2] = float(aimOrigin[2])
fEnd[0] = fStart[0]+fVel[0]
fEnd[1] = fStart[1]+fVel[1]
fEnd[2] = fStart[2]+fVel[2]

// Draw traceline from victims origin into ids view direction to find
// the location on the wall to put some blood on there
new res
engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res)
get_tr2(res, TR_vecEndPos, fRes)

// Show some blood :)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_BLOODSPRITE)
write_coord(floatround(fStart[0]))
write_coord(floatround(fStart[1]))
write_coord(floatround(fStart[2]))
write_short(g_bloodspray)
write_short(g_blood)
write_byte(70)
write_byte(random_num(1,2))
message_end()


} else {
new decal = native_gi_get_gunshot_decal()

// Check if the wall hit is an entity
if(target)
{
// Put decal on an entity
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_DECAL)
write_coord(aimOrigin[0])
write_coord(aimOrigin[1])
write_coord(aimOrigin[2])
write_byte(decal)
write_short(target)
message_end()
} else {
// Put decal on "world" (a wall)
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_WORLDDECAL)
write_coord(aimOrigin[0])
write_coord(aimOrigin[1])
write_coord(aimOrigin[2])
write_byte(decal)
message_end()
}

// Show sparcles
message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
write_byte(TE_GUNSHOTDECAL)
write_coord(aimOrigin[0])
write_coord(aimOrigin[1])
write_coord(aimOrigin[2])
write_short(id)
write_byte(decal)
message_end()
}
}


//block anim standart wpn
public UpdateClientData_Post( id, sendweapons, cd_handle ){
if ( !is_alive[id] ) return FMRES_IGNORED;
if(haswhpnnmg[id] && has_minigun[id]) set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001 );
return FMRES_HANDLED;
}



// No recoil stuff

public fwPrecacheEvent(type, const name[]) {
for (new i = 0; i < sizeof g_guns_events; ++i) {
if (equal(g_guns_events[i], name)) {
g_guns_eventids_bitsum |= (1<<get_orig_retval())
return FMRES_HANDLED
}
}

return FMRES_IGNORED
}
public fwPlaybackEvent(flags, invoker, eventid) {
if (!(g_guns_eventids_bitsum & (1<<eventid)) || !(1 <= invoker <= g_MaxPlayers)|| !haswhpnnmg[invoker] || !has_minigun[invoker])
return FMRES_IGNORED

g_fix_punchangle[invoker] = true

return FMRES_HANDLED
}

public fwPlayerPostThink(id) {
if (g_fix_punchangle[id]) {
g_fix_punchangle[id] = false
set_pev(id, pev_punchangle, Float:{0.0, 0.0, 0.0})
return FMRES_HANDLED
}

return FMRES_IGNORED
}

public fwTraceLine(const Float:start[3], const Float:dest[3], ignore_monsters, id, ptr) {
if (!(1 <= id <= g_MaxPlayers))
return FMRES_IGNORED

if (!g_normal_trace[id]) {
g_normal_trace[id] = ptr
return FMRES_HANDLED
}
if (ptr == g_normal_trace[id] || ignore_monsters != DONT_IGNORE_MONSTERS || !haswhpnnmg[id] || !has_minigun[id] || !is_alive[id])
return FMRES_IGNORED

fix_recoil_trace(id, start, ptr)

return FMRES_SUPERCEDE
}
// show ammo clip
public ammo_hud(id) {
if(!delayhud[id]) {
delayhud[id] = true
new AmmoHud[65]
new clip = clipp[id]
format(AmmoHud, 64, "Ammo: %i", clip)
set_hudmessage(200, 100, 0, 1.0 , 1.0, 0, 0.1, 0.1,0.1)
show_hudmessage(id,"%s",AmmoHud)
set_task(0.2,"delayhutmsg",id)
}
}

public delayhutmsg(id){
delayhud[id]= false
}

//get weapon id
stock get_weapon_ent(id,wpnid=0,wpnName[]="")
{
// who knows what wpnName will be
static newName[24];

// need to find the name
if(wpnid) get_weaponname(wpnid,newName,23);

// go with what we were told
else formatex(newName,23,"%s",wpnName);

// prefix it if we need to
if(!equal(newName,"weapon_",7))
format(newName,23,"weapon_%s",newName);

return fm_find_ent_by_owner(get_maxplayers(),newName,id);
}

fix_recoil_trace(id, const Float:start[], ptr) {
static Float:dest[3]
pev(id, pev_v_angle, dest)
engfunc(EngFunc_MakeVectors, dest)
global_get(glb_v_forward, dest)
xs_vec_mul_scalar(dest, 9999.0, dest)
xs_vec_add(start, dest, dest)
engfunc(EngFunc_TraceLine, start, dest, DONT_IGNORE_MONSTERS, id, ptr)
}
// Get User Team
stock fm_cs_get_user_team(id)
{
return get_pdata_int(id, OFFSET_CSTEAMS, OFFSET_LINUX);
}


Сразу предупреждаю- удаление данных разделов:

Код:
register_clcmd("drop","dropcmd")

Код:
public dropcmd(id) {
if(has_minigun[id] && haswhpnnmg[id] && is_alive[id]) {
new Float:Aim[3],Float:origin[3]
VelocityByAim(id, 64, Aim)
entity_get_vector(id,EV_VEC_origin,origin)

origin[0] += Aim[0]
origin[1] += Aim[1]

new minigun = create_entity("info_target")
entity_set_string(minigun,EV_SZ_classname,"minigun")
entity_set_model(minigun,W_MODEL)

entity_set_size(minigun,Float:{-2.0,-2.0,-2.0},Float:{5.0,5.0,5.0})
entity_set_int(minigun,EV_INT_solid,1)

entity_set_int(minigun,EV_INT_movetype,6)
entity_set_int(minigun, EV_INT_iuser1, clipp[id])
entity_set_vector(minigun,EV_VEC_origin,origin)
has_minigun[id] = false
canfire[id] = false
remowegun(id)
g_plAction[id] = false
return PLUGIN_HANDLED
}
return PLUGIN_CONTINUE
}


Привело лишь к тому, что:
1. При дропе- оружие выкидывается и исчезает (так и нужно было)
2. Когда оружие выкинул- его невозможно купить вновь, пишет: "У вас уже есть Minigun", после того, как его выкинул, когда убьют- купить можно (нужно, что бы и после дропа сразу же можно было купить).
3. Оружие по прежнему выпадает при убийстве (нужно, что бы не выподало).
4. При возрождении оружия нет, его вновь нужно покупать (так и нужно было)

Отредактировал: Steam, - 14.4.2014, 0:17
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 14.4.2014, 0:18
Сообщение #11
Стаж: 12 лет

Сообщений: 4808
Благодарностей: 3849
Полезность: 690

Когда игрока убивают- данное оружие у него не дропается.

как это? возможно непрописано has_minigun[id] = 0 в момент смерти

Отредактировал: csnet, - 14.4.2014, 0:20


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Steam
сообщение 14.4.2014, 15:08
Сообщение #12


Стаж: 12 лет

Сообщений: 36
Благодарностей: 1
Полезность: 19

ривело лишь к тому, что:
1. При дропе- оружие выкидывается и исчезает (так и нужно было)
2. Когда оружие выкинул- его невозможно купить вновь, пишет: "У вас уже есть Minigun", после того, как его выкинул, когда убьют- купить можно (нужно, что бы и после дропа сразу же можно было купить).
3. Оружие по прежнему выпадает при убийстве (нужно, что бы не выподало).

4. При возрождении оружия нет, его вновь нужно покупать (так и нужно было)


Цитата(csnet @ 14.4.2014, 3:18) *
Когда игрока убивают- данное оружие у него не дропается.

как это? возможно непрописано has_minigun[id] = 0 в момент смерти

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: