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

Убрать дигл из gold weapon  [Решено]

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

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

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

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

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

Убрать дигл из gold weapon

Сообщение DoNotFollowMe » 28 апр 2018, 21:53

Здрасьте, может кто помочь убрать дигл из плагина gold weapon. Год назад вроде немного шарил, сейчас ничерта не понимаю. Плагин состоял из меню с оружием обычным и голд оружием. Мне нужно оставить только ак и мку, чтоб впихнуть их в свою випку. Нож, и авп вроде как убрал, ну как убрал, поудалял весь код который к ним относится, но подозреваю где-то значения тоже надо поменять чтоб се четко было. Но оно и так работает. А вот когда пытаюсь убрать дигл все, все отваливается то оружие без скина, то всему оружию в игре добавляется урон. Часов 5 вожусь, не могу решить проблему.

вот код с диглом, мкой, аком. Убрать бы из него дигл)
а исходник прикреплю ниже
Код: Выделить всё
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>

enum _:eGoldList{Deagle, Ak47, M4A1};

#define Damage_Ak4        1.5
#define Damage_M4A1        1.5
#define Damage_Deagle    1.0

new szGoldV[eGoldList][32] = {
    "models/gold/v_deagle.mdl",
    "models/gold/v_ak47.mdl",
    "models/gold/v_m4a1.mdl"
};

new szGoldP[eGoldList][32] = {
    "models/gold/p_deagle.mdl",
    "models/gold/p_ak47.mdl",
    "models/gold/p_m4a1.mdl"
};

new szGoldW[eGoldList][32] = {
    "models/gold/w_deagle.mdl",
    "models/gold/w_ak47.mdl",
    "models/gold/w_m4a1.mdl"
};

enum _:eKeyGold{
    _Deagle = 36895,
    _Ak47,
    _M4A1
};

public plugin_init()
{
    register_plugin("[AMXX] ViP Gold", "1.0", "Flymic24");
    
    RegisterHam
(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true);
    RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true);
    RegisterHam(Ham_Item_Deploy,    "weapon_deagle","HamHook_Item_Deploy",    true);
    
    RegisterHam
(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false);
    RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false);
    RegisterHam(Ham_Touch,    "weapon_deagle","HamHook_Item_AttachToPlayer",    false);
    
    RegisterHam
(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false);
    RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false);
    RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false);
    RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false);
    
    register_forward
(FM_SetModel, "Fakemeta_SetModel")
    
    register_clcmd
("say /qwe", "iii");
}

public plugin_precache()
{
    for(new i = 0; i < sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i]);
    for(new i = 0; i < sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i]);
    for(new i = 0; i < sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i]);
}

public HamHook_Item_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED;
    
    new iIndex 
= 0;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47:    iIndex = Ak47;
        case _M4A1:    iIndex = M4A1;
        case _Deagle:    iIndex = Deagle;
        default: return HAM_IGNORED;
    }
    
    if 
(iIndex)
    {
        new iPlayer = get_pdata_cbase(iItem, 41, 3);
        set_pev(iPlayer, pev_viewmodel2, szGoldV[ iIndex ]);
        set_pev(iPlayer, pev_weaponmodel2, szGoldP[ iIndex ]);
    }
    
    return HAM_IGNORED
;
}

public HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!pev_valid(iItem))
        return HAM_IGNORED;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Deagle.._M4A1:
        {
            if (!(get_user_flags(iPlayer) & ADMIN_BAN))
                return HAM_SUPERCEDE;
        }
        default: return HAM_IGNORED;
    }
    
    return HAM_IGNORED
;
}

public HamHook_Entity_TraceAttack(const iEntity, const iAttacker, Float:flDamage)
{
    if (!is_user_alive(iAttacker) || !pev_valid(iEntity))
        return HAM_IGNORED;
    
    new iItem 
= get_pdata_cbase(iAttacker, 373, 5);
    
    if 
(!pev_valid(iItem))    return HAM_IGNORED;
    
    new Float
:iIndex;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47:    iIndex = Damage_Ak4;
        case _M4A1:    iIndex = Damage_M4A1;
        case _Deagle:    iIndex = Damage_Deagle;
        default: return HAM_IGNORED;
    }
    
    if 
(iIndex)    SetHamParamFloat(3, flDamage * iIndex);
    
    return HAM_IGNORED
;
}

public Fakemeta_SetModel(const iEntity, szModel[])
{
    if(!pev_valid(iEntity))
        return FMRES_IGNORED;
    
    new szClassName
[32];
    pev(iEntity, pev_classname, szClassName, charsmax(szClassName));
    
    if 
(!equali(szClassName, "weaponbox"))
        return FMRES_IGNORED;
    
    for
(new iSlot, iWeapon, iIndex; iSlot < 6; iSlot++)
    {
        iWeapon = get_pdata_cbase(iEntity, 34 + iSlot, 3);
        
        if 
(pev_valid(iWeapon))
        {
            switch(pev(iWeapon, pev_impulse))
            {
                case _Ak47:    iIndex = Ak47;
                case _M4A1:    iIndex = M4A1;
                case _Deagle:    iIndex = Deagle;
            }
            
            if 
(iIndex)
            {
                engfunc(EngFunc_SetModel, iEntity, szGoldW[iIndex]);
                return FMRES_SUPERCEDE;
            }
        }
    }
    
    return FMRES_IGNORED
;
}

public iii(id) {
    //static szChoosedWP[][] = {"", "weapon_ak47", "weapon_m4a1"};
    //static szChoosedBP[] = {0, 90, 90};
    //static iGoldKey[] = {    0, _Ak47, _M4A1, _Awp    };
    
    give_item_ex2
(id, "weapon_ak47", 90, _Ak47);
    give_item_ex2(id, "weapon_m4a1", 90, _M4A1);
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo = 0, iKey = 0)
{
    if (!equal(szWeaponName, "weapon_", 7))
        return false;
    
    new iWeapon 
= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szWeaponName));
    
    set_pev
(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
    
    set_pev
(iWeapon, pev_impulse, iKey);
    cs_set_user_bpammo(iPlayer, get_weaponid(szWeaponName), iAmmo);
    
    dllfunc
(DLLFunc_Spawn, iWeapon);
    dllfunc(DLLFunc_Touch, iWeapon, iPlayer);
    
    return true
;
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
DoNotFollowMe
 
Сообщения: 117
Зарегистрирован: 29 фев 2016, 20:25
Благодарил (а): 41 раз.
Поблагодарили: 3 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: Убрать дигл из gold weapon

Сообщение Mandar1n » 29 апр 2018, 02:08

Check this
Код: Выделить всё
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>

enum _:eGoldList{Ak47M4A1};

#define Damage_Ak4        1.5
#define Damage_M4A1        1.5

new szGoldV[eGoldList][32] = {
    
"models/gold/v_ak47.mdl",
    
"models/gold/v_m4a1.mdl"
}

new 
szGoldP[eGoldList][32] = {
    
"models/gold/p_ak47.mdl",
    
"models/gold/p_m4a1.mdl"
}

new 
szGoldW[eGoldList][32] = {
    
"models/gold/w_ak47.mdl",
    
"models/gold/w_m4a1.mdl"
};

enum _:eKeyGold{
    
_Ak47,
    
_M4A1
};

public 
plugin_init()
{
    
register_plugin("[AMXX] ViP Gold""1.0""Flymic24");
    
    
RegisterHam(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true);
    
RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true);
    
    
RegisterHam(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false);
    
RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false);
    
    
RegisterHam(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false);
    
RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false);
    
RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false);
    
RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false);
    
    
register_forward(FM_SetModel"Fakemeta_SetModel")
    
    
register_clcmd("say /qwe""iii");
}

public 
plugin_precache()
{
    for(new 
0sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i]);
    for(new 
0sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i]);
    for(new 
0sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i]);
}

public 
HamHook_Item_Deploy(const iItem)
{
    if (
pev_valid(iItem) != 2)
        return 
HAM_IGNORED;
    
    new 
iIndex 0;
    
    switch(
pev(iItempev_impulse))
    {
        case 
_Ak47:    iIndex Ak47;
        case 
_M4A1:    iIndex M4A1;
        default: return 
HAM_IGNORED;
    }
    
    if (
iIndex)
    {
        new 
iPlayer get_pdata_cbase(iItem413);
        
set_pev(iPlayerpev_viewmodel2szGoldViIndex ]);
        
set_pev(iPlayerpev_weaponmodel2szGoldPiIndex ]);
    }
    
    return 
HAM_IGNORED;
}

public 
HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!
pev_valid(iItem))
        return 
HAM_IGNORED;
    
    switch(
pev(iItempev_impulse))
    {
        case 
_Ak47.._M4A1:
        {
            if (!(
get_user_flags(iPlayer) & ADMIN_BAN))
                return 
HAM_SUPERCEDE;
        }
        default: return 
HAM_IGNORED;
    }
    
    return 
HAM_IGNORED;
}

public 
HamHook_Entity_TraceAttack(const iEntity, const iAttackerFloat:flDamage)
{
    if (!
is_user_alive(iAttacker) || !pev_valid(iEntity))
        return 
HAM_IGNORED;
    
    new 
iItem get_pdata_cbase(iAttacker3735);
    
    if (!
pev_valid(iItem))    return HAM_IGNORED;
    
    new 
Float:iIndex;
    
    switch(
pev(iItempev_impulse))
    {
        case 
_Ak47:    iIndex Damage_Ak4;
        case 
_M4A1:    iIndex Damage_M4A1;
        default: return 
HAM_IGNORED;
    }
    
    if (
iIndex)    SetHamParamFloat(3flDamage iIndex);
    
    return 
HAM_IGNORED;
}

public 
Fakemeta_SetModel(const iEntityszModel[])
{
    if(!
pev_valid(iEntity))
        return 
FMRES_IGNORED;
    
    new 
szClassName[32];
    
pev(iEntitypev_classnameszClassNamecharsmax(szClassName));
    
    if (!
equali(szClassName"weaponbox"))
        return 
FMRES_IGNORED;
    
    for(new 
iSlotiWeaponiIndexiSlot 6iSlot++)
    {
        
iWeapon get_pdata_cbase(iEntity34 iSlot3);
        
        if (
pev_valid(iWeapon))
        {
            switch(
pev(iWeaponpev_impulse))
            {
                case 
_Ak47:    iIndex Ak47;
                case 
_M4A1:    iIndex M4A1;
            }
            
            if (
iIndex)
            {
                
engfunc(EngFunc_SetModeliEntityszGoldW[iIndex]);
                return 
FMRES_SUPERCEDE;
            }
        }
    }
    
    return 
FMRES_IGNORED;
}

public 
iii(id) {
    
//static szChoosedWP[][] = {"", "weapon_ak47", "weapon_m4a1"};
    //static szChoosedBP[] = {0, 90, 90};
    //static iGoldKey[] = {    0, _Ak47, _M4A1, _Awp    };
    
    
give_item_ex2(id"weapon_ak47"90_Ak47);
    
give_item_ex2(id"weapon_m4a1"90_M4A1);
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo 0iKey 0)
{
    if (!
equal(szWeaponName"weapon_"7))
        return 
false;
    
    new 
iWeapon engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocStringszWeaponName));
    
    
set_pev(iWeaponpev_spawnflagspev(iWeaponpev_spawnflags) | SF_NORESPAWN);
    
    
set_pev(iWeaponpev_impulseiKey);
    
cs_set_user_bpammo(iPlayerget_weaponid(szWeaponName), iAmmo);
    
    
dllfunc(DLLFunc_SpawniWeapon);
    
dllfunc(DLLFunc_TouchiWeaponiPlayer);
    
    return 
true;
Аватара пользователя
Mandar1n
 
Сообщения: 133
Зарегистрирован: 08 дек 2013, 14:08
Благодарил (а): 38 раз.
Поблагодарили: 4 раз.
Языки программирования: Counter-Strike 1.6

Re: Убрать дигл из gold weapon

Сообщение DoNotFollowMe » 29 апр 2018, 18:24

Mandar1n писал(а):Check this
Код: Выделить всё
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>

enum _:eGoldList{Ak47, M4A1};

#define Damage_Ak4        1.5
#define Damage_M4A1        1.5

new szGoldV[eGoldList][32] = {
    "models/gold/v_ak47.mdl",
    "models/gold/v_m4a1.mdl"
}

new szGoldP[eGoldList][32] = {
    "models/gold/p_ak47.mdl",
    "models/gold/p_m4a1.mdl"
}

new szGoldW[eGoldList][32] = {
    "models/gold/w_ak47.mdl",
    "models/gold/w_m4a1.mdl"
};

enum _:eKeyGold{
    _Ak47,
    _M4A1
};

public plugin_init()
{
    register_plugin("[AMXX] ViP Gold", "1.0", "Flymic24");
    
    RegisterHam
(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true);
    RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true);
    
    RegisterHam
(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false);
    RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false);
    
    RegisterHam
(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false);
    RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false);
    RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false);
    RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false);
    
    register_forward
(FM_SetModel, "Fakemeta_SetModel")
    
    register_clcmd
("say /qwe", "iii");
}

public plugin_precache()
{
    for(new i = 0; i < sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i]);
    for(new i = 0; i < sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i]);
    for(new i = 0; i < sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i]);
}

public HamHook_Item_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED;
    
    new iIndex 
= 0;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47:    iIndex = Ak47;
        case _M4A1:    iIndex = M4A1;
        default: return HAM_IGNORED;
    }
    
    if 
(iIndex)
    {
        new iPlayer = get_pdata_cbase(iItem, 41, 3);
        set_pev(iPlayer, pev_viewmodel2, szGoldV[ iIndex ]);
        set_pev(iPlayer, pev_weaponmodel2, szGoldP[ iIndex ]);
    }
    
    return HAM_IGNORED
;
}

public HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!pev_valid(iItem))
        return HAM_IGNORED;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47.._M4A1:
        {
            if (!(get_user_flags(iPlayer) & ADMIN_BAN))
                return HAM_SUPERCEDE;
        }
        default: return HAM_IGNORED;
    }
    
    return HAM_IGNORED
;
}

public HamHook_Entity_TraceAttack(const iEntity, const iAttacker, Float:flDamage)
{
    if (!is_user_alive(iAttacker) || !pev_valid(iEntity))
        return HAM_IGNORED;
    
    new iItem 
= get_pdata_cbase(iAttacker, 373, 5);
    
    if 
(!pev_valid(iItem))    return HAM_IGNORED;
    
    new Float
:iIndex;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47:    iIndex = Damage_Ak4;
        case _M4A1:    iIndex = Damage_M4A1;
        default: return HAM_IGNORED;
    }
    
    if 
(iIndex)    SetHamParamFloat(3, flDamage * iIndex);
    
    return HAM_IGNORED
;
}

public Fakemeta_SetModel(const iEntity, szModel[])
{
    if(!pev_valid(iEntity))
        return FMRES_IGNORED;
    
    new szClassName
[32];
    pev(iEntity, pev_classname, szClassName, charsmax(szClassName));
    
    if 
(!equali(szClassName, "weaponbox"))
        return FMRES_IGNORED;
    
    for
(new iSlot, iWeapon, iIndex; iSlot < 6; iSlot++)
    {
        iWeapon = get_pdata_cbase(iEntity, 34 + iSlot, 3);
        
        if 
(pev_valid(iWeapon))
        {
            switch(pev(iWeapon, pev_impulse))
            {
                case _Ak47:    iIndex = Ak47;
                case _M4A1:    iIndex = M4A1;
            }
            
            if 
(iIndex)
            {
                engfunc(EngFunc_SetModel, iEntity, szGoldW[iIndex]);
                return FMRES_SUPERCEDE;
            }
        }
    }
    
    return FMRES_IGNORED
;
}

public iii(id) {
    //static szChoosedWP[][] = {"", "weapon_ak47", "weapon_m4a1"};
    //static szChoosedBP[] = {0, 90, 90};
    //static iGoldKey[] = {    0, _Ak47, _M4A1, _Awp    };
    
    give_item_ex2
(id, "weapon_ak47", 90, _Ak47);
    give_item_ex2(id, "weapon_m4a1", 90, _M4A1);
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo = 0, iKey = 0)
{
    if (!equal(szWeaponName, "weapon_", 7))
        return false;
    
    new iWeapon 
= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szWeaponName));
    
    set_pev
(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
    
    set_pev
(iWeapon, pev_impulse, iKey);
    cs_set_user_bpammo(iPlayer, get_weaponid(szWeaponName), iAmmo);
    
    dllfunc
(DLLFunc_Spawn, iWeapon);
    dllfunc(DLLFunc_Touch, iWeapon, iPlayer);
    
    return true
;
}

я так пробовал, так нет скина у ака, урон прибавляется у всего оружия, и если ты не админ то не можешь взять мку и ак с земли, оно подлетает а потом падает или пропадает
Аватара пользователя
DoNotFollowMe
 
Сообщения: 117
Зарегистрирован: 29 фев 2016, 20:25
Благодарил (а): 41 раз.
Поблагодарили: 3 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: Убрать дигл из gold weapon

Сообщение JustProOnline » 30 апр 2018, 00:42

Проверяй :

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

enum _:eVipType    {    Null 0,    ViP,    ViPGold    };
enum _:eGoldList{    Knife 0,    Awp,    Ak47,    M4A1    };

#define VipFlag    "b"
#define VipFlagGold    "t"

#define MinRoundToOpenMenu        2
#define AWP_LIMIT    10    
#define AK47_LIMIT    7
#define M4A1_LIMIT    5

#define Damage_Awp        1.1
#define Damage_Ak4        1.2
#define Damage_M4A1        1.2

#define DROP_TYPE    2    // 1 - обычный дроп. 2 - удаляется из рук вообще

new szGoldV[eGoldList][32] = {
    
"models/gold/v_knife.mdl",
    
"models/gold/v_awp.mdl",
    
"models/gold/v_ak47.mdl",
    
"models/gold/v_m4a1.mdl"
};

new 
szGoldP[eGoldList][32] = {
    
"models/gold/p_knife.mdl",
    
"models/gold/p_awp.mdl",
    
"models/gold/p_ak47.mdl",
    
"models/gold/p_m4a1.mdl"
};

new 
szGoldW[eGoldList][32] = {
    
"",
    
"models/gold/w_awp.mdl",
    
"models/gold/w_ak47.mdl",
    
"models/gold/w_m4a1.mdl"
};

enum _:eKeyGold{
    
_Awp 36895,
    
_Ak47,
    
_M4A1
};

enum _:eGoldCost{
    
Cost_Awp 300,
    
Cost_Ak4 200,
    
Cost_M4A1 100
};

new 
iVipFlag[33], bool:bDefuseiRoundNum;

public 
plugin_init()
{
    
register_plugin("[AMXX] ViP Gold""1.0""Flymic24");
    
    
register_event("TextMsg",    "Event_RoundRestart",    "a",    "2&#Game_C",    "2&#Game_w");
    
register_event("HLTV",        "Event_RoundStart",        "a",    "1=0",            "2=0");
    
    
register_message(get_user_msgid("ScoreAttrib"), "MessageScoreAttrib");
    
    if(
engfunc(EngFunc_FindEntityByStringFM_NULLENT"classname""func_bomb_target"))
        
bDefuse true;
    
    
RegisterHam(Ham_Spawn"player""HamHook_Player_Spawn"true);
    
    
RegisterHam(Ham_Item_Deploy,    "weapon_knife",    "HamHook_Knife_Deploy",    true);
    
RegisterHam(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true);
    
RegisterHam(Ham_Item_Deploy,    "weapon_awp",    "HamHook_Item_Deploy",    true);
    
RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true);
    
    
RegisterHam(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false);
    
RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false);
    
RegisterHam(Ham_Touch,    "weapon_awp",    "HamHook_Item_AttachToPlayer",    false);
    
    
RegisterHam(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false);
    
RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false);
    
RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false);
    
RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false);
    
    
register_forward(FM_SetModel"Fakemeta_SetModel")
    
    
register_clcmd("say /vipmenu""WeaponMenu");
    
register_clcmd("vipmenu""WeaponMenu");
    
    
register_menucmd(register_menuid("Vip Menu"), 1023"VipHandler");
}

public 
plugin_precache()
{
    for(new 
0sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i]);
    for(new 
0sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i]);
    for(new 
0sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i]);
}

public 
client_putinserver(iPlayer
{
    if (
GetUserFlags(iPlayer) == Null)
        return;
    
    new 
szName[32];    get_user_name(iPlayerszNamecharsmax(szName));
    
UtilChatColor(0"На сервер зашёл !gVIP !yклиент !team%s"szName);
}

public 
Event_RoundRestart()    iRoundNum 0;
public 
Event_RoundStart()    iRoundNum++;

public 
MessageScoreAttrib(iMsgIdiDestiReceiver)
{
    new 
iPlayer get_msg_arg_int(1);
    
    if(
iVipFlag[iPlayer] > Null && !get_msg_arg_int(2))
        
set_msg_arg_int(2ARG_BYTE, (1<<2));
}

public 
HamHook_Knife_Deploy(const iItem)
{
    if (
pev_valid(iItem) != 2)
        return 
HAM_IGNORED;
    
    new 
iPlayer get_pdata_cbase(iItem414);
    
    if(
iVipFlag[iPlayer] != ViPGold)
        return 
HAM_IGNORED;
    
    
set_pev(iPlayerpev_viewmodel2szGoldVKnife ]);
    
set_pev(iPlayerpev_weaponmodel2szGoldPKnife ]);
    
    return 
HAM_IGNORED;
}

public 
HamHook_Item_Deploy(const iItem)
{
    if (
pev_valid(iItem) != 2)
        return 
HAM_IGNORED;
    
    new 
iIndex 0;
    
    switch(
pev(iItempev_impulse))
    {
        case 
_Ak47:    iIndex Ak47;
        case 
_Awp:    iIndex Awp;
        case 
_M4A1:    iIndex M4A1;
        default: return 
HAM_IGNORED;
    }
    
    if (
iIndex)
    {
        new 
iPlayer get_pdata_cbase(iItem414);
        
set_pev(iPlayerpev_viewmodel2szGoldViIndex ]);
        
set_pev(iPlayerpev_weaponmodel2szGoldPiIndex ]);
    }
    
    return 
HAM_IGNORED;
}

public 
HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!
pev_valid(iItem))
        return 
HAM_IGNORED;
    
    switch(
pev(iItempev_impulse))
    {
        case 
_M4A1:
        {
            if (
iVipFlag[iPlayer] != ViPGold)
                return 
HAM_SUPERCEDE;
        }
        default: return 
HAM_IGNORED;
    }
    
    return 
HAM_IGNORED;
}

public 
HamHook_Entity_TraceAttack(const iEntity, const iAttackerFloat:flDamage)
{
    if (!
is_user_alive(iAttacker) || !pev_valid(iEntity))
        return 
HAM_IGNORED;
    
    new 
iItem get_pdata_cbase(iAttacker3735);
    
    if (!
pev_valid(iItem))    return HAM_IGNORED;
    
    new 
Float:iIndex;
    
    switch(
pev(iItempev_impulse))
    {
        case 
_Ak47:    iIndex Damage_Ak4;
        case 
_Awp:    iIndex Damage_Awp;
        case 
_M4A1:    iIndex Damage_M4A1;
        default: return 
HAM_IGNORED;
    }
    
    if (
iIndex)    SetHamParamFloat(3flDamage iIndex);
    
    return 
HAM_IGNORED;
}

public 
HamHook_Player_Spawn(const iPlayer)
{
    if (!
is_user_alive(iPlayer) || is_user_bot(iPlayer))
        return 
HAM_IGNORED;
    
    if (
iVipFlag[iPlayer] <= Null)
        return 
HAM_IGNORED;
    
    
give_item_ex2(iPlayer"weapon_hegrenade"1);
    
give_item_ex2(iPlayer"weapon_flashbang"2);
    
give_item_ex2(iPlayer"weapon_smokegrenade"1);
    
    
cs_set_user_armor(iPlayer100CS_ARMOR_VESTHELM);
    
    if(
bDefuse && cs_get_user_team(iPlayer) == CS_TEAM_CT)
        
cs_set_user_defuse(iPlayer1);
    
    return 
HAM_IGNORED;
}

public 
Fakemeta_SetModel(const iEntityszModel[])
{
    if(!
pev_valid(iEntity))
        return 
FMRES_IGNORED;
    
    new 
szClassName[32];
    
pev(iEntitypev_classnameszClassNamecharsmax(szClassName));
    
    if (!
equali(szClassName"weaponbox"))
        return 
FMRES_IGNORED;
    
    for(new 
iSlotiWeaponiIndexiSlot 6iSlot++)
    {
        
iWeapon get_pdata_cbase(iEntity34 iSlot4);
        
        if (
pev_valid(iWeapon))
        {
            switch(
pev(iWeaponpev_impulse))
            {
                case 
_Ak47:    iIndex Ak47;
                case 
_Awp:    iIndex Awp;
                case 
_M4A1:    iIndex M4A1;
            }
            
            if (
iIndex)
            {
                
engfunc(EngFunc_SetModeliEntityszGoldW[iIndex]);
                return 
FMRES_SUPERCEDE;
            }
        }
    }
    
    return 
FMRES_IGNORED;
}

public 
WeaponMenu(iPlayer)
{
    if (!
is_user_alive(iPlayer) || iVipFlag[iPlayer] <= Null)
        return 
PLUGIN_HANDLED;
    
    if (
iRoundNum MinRoundToOpenMenu)
    {
        
UtilChatColor(iPlayer"!g[!yViP!g] !yМеню не доступно. Жди ещё !team%i !yраунд"MinRoundToOpenMenu iRoundNum);
        return 
PLUGIN_HANDLED;
    }
    
    static 
szMenu[512], iLen;

    
iLen formatex(szMenucharsmax(szMenu), "\r[\yVIP\r] \wWeaponMenu^n^n");
    
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y1. \wВзять AK47^n");
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y2. \wВзять M4A1^n");
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y3. \wВзять AWP^n");
    
    if (
iVipFlag[iPlayer] == ViPGold)
    {
        if(
iRoundNum AK47_LIMIT)
            
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y4. \dВзять AK47 Gold \r[c %d раунда]^n"AK47_LIMIT);
        else
            
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y4. \wВзять AK47 Gold \y(\r%i$\y)^n"Cost_Ak4);

        if(
iRoundNum M4A1_LIMIT)
            
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y5. \dВзять M4A1 Gold \r[c %d раунда]^n"M4A1_LIMIT);
        else
            
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y5. \wВзять M4A1 Gold \y(\r%i$\y)^n"Cost_M4A1);

        if(
iRoundNum AWP_LIMIT)
            
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y6. \dВзять AWP Gold \r[c %d раунда]^n"AWP_LIMIT);
        else
            
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"\y6. \wВзять AWP Gold \y(\r%i$\y)^n"Cost_Awp);
    }
    
    
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen"^n\y0. \wВыход");
    
    
set_pdata_int(iPlayer2050);
    
    
show_menu(iPlayer1023szMenu, -1"Vip Menu");
    
    return 
PLUGIN_HANDLED;
}

public 
VipHandler(iPlayeriKey)
{
    if (!
is_user_alive(iPlayer))
        return 
PLUGIN_HANDLED;
    
    new 
iNewKey iKey 1;
    
    static 
szWeaponName[][] = {    """AK""M4""AWP""Gold AK""Gold M4""Gold AWP"    };
    static 
szChoosedWP[][] = {    """weapon_ak47""weapon_m4a1""weapon_awp"    };
    static 
szChoosedBP[] = {    090909030    };
    static 
iGoldKey[] = {    0_Ak47_M4A1_Awp    };
    static 
iCost[] = {    0Cost_Ak4Cost_M4A1Cost_Awp    };
    static 
iRoundLimit[] = {    0AK47_LIMITM4A1_LIMITAWP_LIMIT    };
    
    switch (
iNewKey)
    {
        case 
1..3:    give_item_ex2(iPlayerszChoosedWP[iNewKey], szChoosedBP[iNewKey], true);
        case 
4..6:
        {
            new 
iMoney cs_get_user_money(iPlayer);
            
            if (
iRoundNum iRoundLimit[iNewKey 3])
            {
                
UtilChatColor(iPlayer"!g[!yViP!g] !yДоступно только с !g%i !yраунда"iRoundLimit[iNewKey 3]);
                return 
PLUGIN_HANDLED;                
            }
            if (
iMoney iCost[iNewKey 3] || iVipFlag[iPlayer] != ViPGold)
            {
                
UtilChatColor(iPlayer"!g[!yViP!g] !yНе достаточно денег: !team%i!g$"iCost[iNewKey 3]);
                return 
PLUGIN_HANDLED;
            }
            else
            {
                
give_item_ex2(iPlayerszChoosedWP[iNewKey 3], szChoosedBP[iNewKey 3], trueiGoldKey[iNewKey 3]);
                
cs_set_user_money(iPlayeriMoney iCost[iNewKey 3]);
            }
        }
        default:    return 
PLUGIN_HANDLED;
    }
    
    
UtilChatColor(iPlayer"!g[!yViP!g] !yВы получили: !g[!team%s!g]"szWeaponName[iNewKey]);
    
    return 
PLUGIN_HANDLED;
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo 0bool:bDrop falseiKey 0)
{
    if (!
equal(szWeaponName"weapon_"7))
        return 
false;
    
    new 
iWeapon engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocStringszWeaponName));
    
    if (!
pev_valid(iWeapon))
        return 
false;
    
    if (
bDrop)
    {
        new 
szWeapon32 ],
            
iSlot ExecuteHamB(Ham_Item_ItemSlotiWeapon),
            
iItem get_pdata_cbase(iPlayer367 iSlot5);
        
        while ((
pev_valid(iItem) == 2))
        {
            
pev(iItempev_classnameszWeaponcharsmax(szWeapon));
            
            switch(
DROP_TYPE)
            {
                case 
1:    engclient_cmd(iPlayer"drop"szWeapon);
                case 
2ham_strip_weapon(iPlayerszWeapon);
            }
            
            
iItem get_pdata_cbase(iItem424);
        }
    }
    
    
set_pev(iWeaponpev_spawnflagspev(iWeaponpev_spawnflags) | SF_NORESPAWN);
    
    if (
iKey 0)    set_pev(iWeaponpev_impulseiKey);
    if (
iAmmo 0)    cs_set_user_bpammo(iPlayerget_weaponid(szWeaponName), iAmmo);
    
    
dllfunc(DLLFunc_SpawniWeapon);
    
dllfunc(DLLFunc_TouchiWeaponiPlayer);
    
    return 
true;
}

stock ham_strip_weapon(idweapon[])
{
    if(!
equal(weapon,"weapon_",7)) return 0
    
    
new wId get_weaponid(weapon)
    if(!
wId) return 0
    
    
new wEnt
    
while((wEnt engfunc(EngFunc_FindEntityByStringwEnt"classname"weapon)) && pev(wEntpev_owner) != id) {}
    if(!
wEnt) return 0
    
    
new iTmp
    
if(get_user_weapon(idiTmpiTmp) == wIdExecuteHamB(Ham_Weapon_RetireWeaponwEnt)
    
    if(!
ExecuteHamB(Ham_RemovePlayerItemidany:wEnt)) return 0
    
    ExecuteHamB
(Ham_Item_KillwEnt)
    
set_pev(idpev_weaponspev(idpev_weapons) & ~(1<<wId))
    
    return 
1
}

stock GetUserFlags(const iPlayer)
{
    if (!
is_user_connected(iPlayer))
        return -
1;
    
    new 
iFlags get_user_flags(iPlayer);
    new 
iReturnBit;
    
    if (
iFlags read_flags(VipFlagGold))
    {
        
iVipFlag[iPlayer] = ViPGold;
        
iReturnBit ViPGold;
    }
    else if (
iFlags read_flags(VipFlag))
    {
        
iVipFlag[iPlayer] = ViP;
        
iReturnBit ViP;
    }
    else
    {
        
iVipFlag[iPlayer] = Null;
        
iReturnBit Null;
    }
    
    return 
iReturnBit;
}

stock UtilChatColor(const iPlayer, const szInput[], any:...)
{
    new 
iCount 1szPlayers[32];
    static 
szMessage[191];
    
    
vformat(szMessagecharsmax(szMessage), szInput3);
    
    
replace_all(szMessagecharsmax(szMessage), "!g""^4");    // Green Color
    
replace_all(szMessagecharsmax(szMessage), "!y""^1");    // Default Color
    
replace_all(szMessagecharsmax(szMessage), "!team""^3");    // Team Color
    
    
static g_SayText;
    if (!
g_SayText)    g_SayText get_user_msgid("SayText");
    
    if(
iPlayerszPlayers[0] = iPlayer; else get_players(szPlayersiCount"ch");
    {
        for(new 
0iCounti++)
        {
            if(!
is_user_connected(szPlayers[i]))    continue;
            
            
message_begin(MSG_ONE_UNRELIABLEg_SayText_szPlayers[i]);
            
write_byte(szPlayers[i]);
            
write_string(szMessage);
            
message_end();
        }
    }
Аватара пользователя
JustProOnline
 
Сообщения: 160
Зарегистрирован: 30 дек 2017, 10:14
Благодарил (а): 23 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около года
Языки программирования: C++
Counter-Strike 1.6

Re: Убрать дигл из gold weapon

Сообщение DoNotFollowMe » 30 апр 2018, 13:34

JustProOnline писал(а):Проверяй :

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

enum _:eVipType    {    Null = 0,    ViP,    ViPGold    };
enum _:eGoldList{    Knife = 0,    Awp,    Ak47,    M4A1    };

#define VipFlag    "b"
#define VipFlagGold    "t"

#define MinRoundToOpenMenu        2
#define AWP_LIMIT    10    
#define AK47_LIMIT    7
#define M4A1_LIMIT    5

#define Damage_Awp        1.1
#define Damage_Ak4        1.2
#define Damage_M4A1        1.2

#define DROP_TYPE    2    // 1 - обычный дроп. 2 - удаляется из рук вообще

new szGoldV[eGoldList][32] = {
    "models/gold/v_knife.mdl",
    "models/gold/v_awp.mdl",
    "models/gold/v_ak47.mdl",
    "models/gold/v_m4a1.mdl"
};

new szGoldP[eGoldList][32] = {
    "models/gold/p_knife.mdl",
    "models/gold/p_awp.mdl",
    "models/gold/p_ak47.mdl",
    "models/gold/p_m4a1.mdl"
};

new szGoldW[eGoldList][32] = {
    "",
    "models/gold/w_awp.mdl",
    "models/gold/w_ak47.mdl",
    "models/gold/w_m4a1.mdl"
};

enum _:eKeyGold{
    _Awp = 36895,
    _Ak47,
    _M4A1
};

enum _:eGoldCost{
    Cost_Awp = 300,
    Cost_Ak4 = 200,
    Cost_M4A1 = 100
};

new iVipFlag[33], bool:bDefuse, iRoundNum;

public plugin_init()
{
    register_plugin("[AMXX] ViP Gold", "1.0", "Flymic24");
    
    register_event
("TextMsg",    "Event_RoundRestart",    "a",    "2&#Game_C",    "2&#Game_w");
    register_event("HLTV",        "Event_RoundStart",        "a",    "1=0",            "2=0");
    
    register_message
(get_user_msgid("ScoreAttrib"), "MessageScoreAttrib");
    
    if
(engfunc(EngFunc_FindEntityByString, FM_NULLENT, "classname", "func_bomb_target"))
        bDefuse = true;
    
    RegisterHam
(Ham_Spawn, "player", "HamHook_Player_Spawn", true);
    
    RegisterHam
(Ham_Item_Deploy,    "weapon_knife",    "HamHook_Knife_Deploy",    true);
    RegisterHam(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true);
    RegisterHam(Ham_Item_Deploy,    "weapon_awp",    "HamHook_Item_Deploy",    true);
    RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true);
    
    RegisterHam
(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false);
    RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false);
    RegisterHam(Ham_Touch,    "weapon_awp",    "HamHook_Item_AttachToPlayer",    false);
    
    RegisterHam
(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false);
    RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false);
    RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false);
    RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false);
    
    register_forward
(FM_SetModel, "Fakemeta_SetModel")
    
    register_clcmd
("say /vipmenu", "WeaponMenu");
    register_clcmd("vipmenu", "WeaponMenu");
    
    register_menucmd
(register_menuid("Vip Menu"), 1023, "VipHandler");
}

public plugin_precache()
{
    for(new i = 0; i < sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i]);
    for(new i = 0; i < sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i]);
    for(new i = 0; i < sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i]);
}

public client_putinserver(iPlayer) 
{
    if (GetUserFlags(iPlayer) == Null)
        return;
    
    new szName
[32];    get_user_name(iPlayer, szName, charsmax(szName));
    UtilChatColor(0, "На сервер зашёл !gVIP !yклиент !team%s", szName);
}

public Event_RoundRestart()    iRoundNum = 0;
public Event_RoundStart()    iRoundNum++;

public MessageScoreAttrib(iMsgId, iDest, iReceiver)
{
    new iPlayer = get_msg_arg_int(1);
    
    if
(iVipFlag[iPlayer] > Null && !get_msg_arg_int(2))
        set_msg_arg_int(2, ARG_BYTE, (1<<2));
}

public HamHook_Knife_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED;
    
    new iPlayer 
= get_pdata_cbase(iItem, 41, 4);
    
    if
(iVipFlag[iPlayer] != ViPGold)
        return HAM_IGNORED;
    
    set_pev
(iPlayer, pev_viewmodel2, szGoldV[ Knife ]);
    set_pev(iPlayer, pev_weaponmodel2, szGoldP[ Knife ]);
    
    return HAM_IGNORED
;
}

public HamHook_Item_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED;
    
    new iIndex 
= 0;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47:    iIndex = Ak47;
        case _Awp:    iIndex = Awp;
        case _M4A1:    iIndex = M4A1;
        default: return HAM_IGNORED;
    }
    
    if 
(iIndex)
    {
        new iPlayer = get_pdata_cbase(iItem, 41, 4);
        set_pev(iPlayer, pev_viewmodel2, szGoldV[ iIndex ]);
        set_pev(iPlayer, pev_weaponmodel2, szGoldP[ iIndex ]);
    }
    
    return HAM_IGNORED
;
}

public HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!pev_valid(iItem))
        return HAM_IGNORED;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _M4A1:
        {
            if (iVipFlag[iPlayer] != ViPGold)
                return HAM_SUPERCEDE;
        }
        default: return HAM_IGNORED;
    }
    
    return HAM_IGNORED
;
}

public HamHook_Entity_TraceAttack(const iEntity, const iAttacker, Float:flDamage)
{
    if (!is_user_alive(iAttacker) || !pev_valid(iEntity))
        return HAM_IGNORED;
    
    new iItem 
= get_pdata_cbase(iAttacker, 373, 5);
    
    if 
(!pev_valid(iItem))    return HAM_IGNORED;
    
    new Float
:iIndex;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47:    iIndex = Damage_Ak4;
        case _Awp:    iIndex = Damage_Awp;
        case _M4A1:    iIndex = Damage_M4A1;
        default: return HAM_IGNORED;
    }
    
    if 
(iIndex)    SetHamParamFloat(3, flDamage * iIndex);
    
    return HAM_IGNORED
;
}

public HamHook_Player_Spawn(const iPlayer)
{
    if (!is_user_alive(iPlayer) || is_user_bot(iPlayer))
        return HAM_IGNORED;
    
    if 
(iVipFlag[iPlayer] <= Null)
        return HAM_IGNORED;
    
    give_item_ex2
(iPlayer, "weapon_hegrenade", 1);
    give_item_ex2(iPlayer, "weapon_flashbang", 2);
    give_item_ex2(iPlayer, "weapon_smokegrenade", 1);
    
    cs_set_user_armor
(iPlayer, 100, CS_ARMOR_VESTHELM);
    
    if
(bDefuse && cs_get_user_team(iPlayer) == CS_TEAM_CT)
        cs_set_user_defuse(iPlayer, 1);
    
    return HAM_IGNORED
;
}

public Fakemeta_SetModel(const iEntity, szModel[])
{
    if(!pev_valid(iEntity))
        return FMRES_IGNORED;
    
    new szClassName
[32];
    pev(iEntity, pev_classname, szClassName, charsmax(szClassName));
    
    if 
(!equali(szClassName, "weaponbox"))
        return FMRES_IGNORED;
    
    for
(new iSlot, iWeapon, iIndex; iSlot < 6; iSlot++)
    {
        iWeapon = get_pdata_cbase(iEntity, 34 + iSlot, 4);
        
        if 
(pev_valid(iWeapon))
        {
            switch(pev(iWeapon, pev_impulse))
            {
                case _Ak47:    iIndex = Ak47;
                case _Awp:    iIndex = Awp;
                case _M4A1:    iIndex = M4A1;
            }
            
            if 
(iIndex)
            {
                engfunc(EngFunc_SetModel, iEntity, szGoldW[iIndex]);
                return FMRES_SUPERCEDE;
            }
        }
    }
    
    return FMRES_IGNORED
;
}

public WeaponMenu(iPlayer)
{
    if (!is_user_alive(iPlayer) || iVipFlag[iPlayer] <= Null)
        return PLUGIN_HANDLED;
    
    if 
(iRoundNum < MinRoundToOpenMenu)
    {
        UtilChatColor(iPlayer, "!g[!yViP!g] !yМеню не доступно. Жди ещё !team%i !yраунд", MinRoundToOpenMenu - iRoundNum);
        return PLUGIN_HANDLED;
    }
    
    static szMenu
[512], iLen;

    iLen = formatex(szMenu, charsmax(szMenu), "\r[\yVIP\r] \wWeaponMenu^n^n");
    
    iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wВзять AK47^n");
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \wВзять M4A1^n");
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y3. \wВзять AWP^n");
    
    if 
(iVipFlag[iPlayer] == ViPGold)
    {
        if(iRoundNum < AK47_LIMIT)
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \dВзять AK47 Gold \r[c %d раунда]^n", AK47_LIMIT);
        else
            iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \wВзять AK47 Gold \y(\r%i$\y)^n", Cost_Ak4);

        if(iRoundNum < M4A1_LIMIT)
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \dВзять M4A1 Gold \r[c %d раунда]^n", M4A1_LIMIT);
        else
            iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \wВзять M4A1 Gold \y(\r%i$\y)^n", Cost_M4A1);

        if(iRoundNum < AWP_LIMIT)
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \dВзять AWP Gold \r[c %d раунда]^n", AWP_LIMIT);
        else
            iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \wВзять AWP Gold \y(\r%i$\y)^n", Cost_Awp);
    }
    
    iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y0. \wВыход");
    
    set_pdata_int
(iPlayer, 205, 0);
    
    show_menu
(iPlayer, 1023, szMenu, -1, "Vip Menu");
    
    return PLUGIN_HANDLED
;
}

public VipHandler(iPlayer, iKey)
{
    if (!is_user_alive(iPlayer))
        return PLUGIN_HANDLED;
    
    new iNewKey 
= iKey + 1;
    
    static szWeaponName
[][] = {    "", "AK", "M4", "AWP", "Gold AK", "Gold M4", "Gold AWP"    };
    static szChoosedWP[][] = {    "", "weapon_ak47", "weapon_m4a1", "weapon_awp"    };
    static szChoosedBP[] = {    0, 90, 90, 90, 30    };
    static iGoldKey[] = {    0, _Ak47, _M4A1, _Awp    };
    static iCost[] = {    0, Cost_Ak4, Cost_M4A1, Cost_Awp    };
    static iRoundLimit[] = {    0, AK47_LIMIT, M4A1_LIMIT, AWP_LIMIT    };
    
    switch 
(iNewKey)
    {
        case 1..3:    give_item_ex2(iPlayer, szChoosedWP[iNewKey], szChoosedBP[iNewKey], true);
        case 4..6:
        {
            new iMoney = cs_get_user_money(iPlayer);
            
            if 
(iRoundNum < iRoundLimit[iNewKey - 3])
            {
                UtilChatColor(iPlayer, "!g[!yViP!g] !yДоступно только с !g%i !yраунда", iRoundLimit[iNewKey - 3]);
                return PLUGIN_HANDLED;                
            
}
            if (iMoney < iCost[iNewKey - 3] || iVipFlag[iPlayer] != ViPGold)
            {
                UtilChatColor(iPlayer, "!g[!yViP!g] !yНе достаточно денег: !team%i!g$", iCost[iNewKey - 3]);
                return PLUGIN_HANDLED;
            }
            else
            
{
                give_item_ex2(iPlayer, szChoosedWP[iNewKey - 3], szChoosedBP[iNewKey - 3], true, iGoldKey[iNewKey - 3]);
                cs_set_user_money(iPlayer, iMoney - iCost[iNewKey - 3]);
            }
        }
        default:    return PLUGIN_HANDLED;
    }
    
    UtilChatColor
(iPlayer, "!g[!yViP!g] !yВы получили: !g[!team%s!g]", szWeaponName[iNewKey]);
    
    return PLUGIN_HANDLED
;
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo = 0, bool:bDrop = false, iKey = 0)
{
    if (!equal(szWeaponName, "weapon_", 7))
        return false;
    
    new iWeapon 
= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szWeaponName));
    
    if 
(!pev_valid(iWeapon))
        return false;
    
    if 
(bDrop)
    {
        new szWeapon[ 32 ],
            iSlot = ExecuteHamB(Ham_Item_ItemSlot, iWeapon),
            iItem = get_pdata_cbase(iPlayer, 367 + iSlot, 5);
        
        while 
((pev_valid(iItem) == 2))
        {
            pev(iItem, pev_classname, szWeapon, charsmax(szWeapon));
            
            switch
(DROP_TYPE)
            {
                case 1:    engclient_cmd(iPlayer, "drop", szWeapon);
                case 2: ham_strip_weapon(iPlayer, szWeapon);
            }
            
            iItem 
= get_pdata_cbase(iItem, 42, 4);
        }
    }
    
    set_pev
(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
    
    if 
(iKey > 0)    set_pev(iWeapon, pev_impulse, iKey);
    if (iAmmo > 0)    cs_set_user_bpammo(iPlayer, get_weaponid(szWeaponName), iAmmo);
    
    dllfunc
(DLLFunc_Spawn, iWeapon);
    dllfunc(DLLFunc_Touch, iWeapon, iPlayer);
    
    return true
;
}

stock ham_strip_weapon(id, weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0
    
    new wId 
= get_weaponid(weapon)
    if(!wId) return 0
    
    new wEnt
    while
((wEnt = engfunc(EngFunc_FindEntityByString, wEnt, "classname", weapon)) && pev(wEnt, pev_owner) != id) {}
    if(!wEnt) return 0
    
    new iTmp
    if
(get_user_weapon(id, iTmp, iTmp) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt)
    
    if
(!ExecuteHamB(Ham_RemovePlayerItem, id, any:wEnt)) return 0
    
    ExecuteHamB
(Ham_Item_Kill, wEnt)
    set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<wId))
    
    return 1
}

stock GetUserFlags(const iPlayer)
{
    if (!is_user_connected(iPlayer))
        return -1;
    
    new iFlags 
= get_user_flags(iPlayer);
    new iReturnBit;
    
    if 
(iFlags & read_flags(VipFlagGold))
    {
        iVipFlag[iPlayer] = ViPGold;
        iReturnBit = ViPGold;
    }
    else if (iFlags & read_flags(VipFlag))
    {
        iVipFlag[iPlayer] = ViP;
        iReturnBit = ViP;
    }
    else
    
{
        iVipFlag[iPlayer] = Null;
        iReturnBit = Null;
    }
    
    return iReturnBit
;
}

stock UtilChatColor(const iPlayer, const szInput[], any:...)
{
    new iCount = 1, szPlayers[32];
    static szMessage[191];
    
    vformat
(szMessage, charsmax(szMessage), szInput, 3);
    
    replace_all
(szMessage, charsmax(szMessage), "!g", "^4");    // Green Color
    replace_all(szMessage, charsmax(szMessage), "!y", "^1");    // Default Color
    replace_all(szMessage, charsmax(szMessage), "!team", "^3");    // Team Color
    
    static g_SayText
;
    if (!g_SayText)    g_SayText = get_user_msgid("SayText");
    
    if
(iPlayer) szPlayers[0] = iPlayer; else get_players(szPlayers, iCount, "ch");
    {
        for(new i = 0; i < iCount; i++)
        {
            if(!is_user_connected(szPlayers[i]))    continue;
            
            message_begin
(MSG_ONE_UNRELIABLE, g_SayText, _, szPlayers[i]);
            write_byte(szPlayers[i]);
            write_string(szMessage);
            message_end();
        }
    }

выручай снова)
вот я оставил ак, мку и авп. Можешь отсюда авп выкинуть
Код: Выделить всё
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>

enum _:eGoldList{Awp, Ak47, M4A1}

#define Damage_Awp        9.1
#define Damage_Ak4        9.2
#define Damage_M4A1        9.2

new szGoldV[eGoldList][32] = {
    "models/gold/v_awp.mdl",
    "models/gold/v_ak47.mdl",
    "models/gold/v_m4a1.mdl"
}

new szGoldP[eGoldList][32] = {
    "models/gold/p_awp.mdl",
    "models/gold/p_ak47.mdl",
    "models/gold/p_m4a1.mdl"
}

new szGoldW[eGoldList][32] = {
    "models/gold/w_awp.mdl",
    "models/gold/w_ak47.mdl",
    "models/gold/w_m4a1.mdl"
}

enum _:eKeyGold{
    _Awp = 36895,
    _Ak47,
    _M4A1
}

public plugin_init()
{
    register_plugin("[AMXX] ViP Gold", "1.0", "Flymic24")
    
    RegisterHam
(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true)
    RegisterHam(Ham_Item_Deploy,    "weapon_awp",    "HamHook_Item_Deploy",    true)
    RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true)
    
    RegisterHam
(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false)
    RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false)
    RegisterHam(Ham_Touch,    "weapon_awp",    "HamHook_Item_AttachToPlayer",    false)
    
    RegisterHam
(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false)
    RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false)
    RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false)
    RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false)
    
    register_forward
(FM_SetModel, "Fakemeta_SetModel")
    
    register_clcmd
("say a", "test")
}

public test(id)
{
    static szChoosedWP[][] = {"weapon_ak47", "weapon_m4a1", "weapon_awp"}
    static szChoosedBP[] = {90, 90, 30}
    static iGoldKey[] = {_Ak47, _M4A1, _Awp}
    
    give_item_ex2
(id, szChoosedWP[0], szChoosedBP[0], iGoldKey[0])
    give_item_ex2(id, szChoosedWP[1], szChoosedBP[1], iGoldKey[1])
}

public plugin_precache()
{
    for(new i = 0; i < sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i])
    for(new i = 0; i < sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i])
    for(new i = 0; i < sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i])
}

public HamHook_Item_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED
    
    new iIndex 
= 0
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47: iIndex = Ak47
        case _Awp
: iIndex = Awp
        case _M4A1
: iIndex = M4A1
        default
: return HAM_IGNORED
    
}
    
    if 
(iIndex)
    {
        new iPlayer = get_pdata_cbase(iItem, 41, 4)
        set_pev(iPlayer, pev_viewmodel2, szGoldV[ iIndex ])
        set_pev(iPlayer, pev_weaponmodel2, szGoldP[ iIndex ])
    }
    
    return HAM_IGNORED
}

public HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!pev_valid(iItem))
        return HAM_IGNORED
    
    return HAM_IGNORED
}

public HamHook_Entity_TraceAttack(const iEntity, const iAttacker, Float:flDamage)
{
    if (!is_user_alive(iAttacker) || !pev_valid(iEntity))
        return HAM_IGNORED
    
    new iItem 
= get_pdata_cbase(iAttacker, 373, 5)
    
    if 
(!pev_valid(iItem)) return HAM_IGNORED
    
    new Float
:iIndex
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47: iIndex = Damage_Ak4
        case _Awp
: iIndex = Damage_Awp
        case _M4A1
: iIndex = Damage_M4A1
        default
: return HAM_IGNORED
    
}
    
    if 
(iIndex)    SetHamParamFloat(3, flDamage * iIndex)
    
    return HAM_IGNORED
}

public Fakemeta_SetModel(const iEntity, szModel[])
{
    if(!pev_valid(iEntity))
        return FMRES_IGNORED
    
    new szClassName
[32]
    pev(iEntity, pev_classname, szClassName, charsmax(szClassName))
    
    if 
(!equali(szClassName, "weaponbox"))
        return FMRES_IGNORED
    
    for
(new iSlot, iWeapon, iIndex; iSlot < 6; iSlot++)
    {
        iWeapon = get_pdata_cbase(iEntity, 34 + iSlot, 4)
        
        if 
(pev_valid(iWeapon))
        {
            switch(pev(iWeapon, pev_impulse))
            {
                case _Ak47: iIndex = Ak47
                case _Awp
: iIndex = Awp
                case _M4A1
: iIndex = M4A1
            
}
            
            if 
(iIndex)
            {
                engfunc(EngFunc_SetModel, iEntity, szGoldW[iIndex])
                return FMRES_SUPERCEDE
            
}
        }
    }
    
    return FMRES_IGNORED
;
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo = 0, iKey = 0)
{
    if (!equal(szWeaponName, "weapon_", 7))
        return false;
    
    new iWeapon 
= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szWeaponName));
    
    if 
(!pev_valid(iWeapon))
        return false;
    
    set_pev
(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
    
    set_pev
(iWeapon, pev_impulse, iKey);
    cs_set_user_bpammo(iPlayer, get_weaponid(szWeaponName), iAmmo);
    
    dllfunc
(DLLFunc_Spawn, iWeapon);
    dllfunc(DLLFunc_Touch, iWeapon, iPlayer);
    
    return true
;
}


пытаюсь его убрать так, но пропадает скин у ака, остальное как надо работает
Код: Выделить всё
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>

enum _:eGoldList{Ak47, M4A1}

#define Damage_Ak4        9.2
#define Damage_M4A1        9.2

new szGoldV[eGoldList][32] = {
    "models/gold/v_ak47.mdl",
    "models/gold/v_m4a1.mdl"
}

new szGoldP[eGoldList][32] = {
    "models/gold/p_ak47.mdl",
    "models/gold/p_m4a1.mdl"
}

new szGoldW[eGoldList][32] = {
    "models/gold/w_ak47.mdl",
    "models/gold/w_m4a1.mdl"
}

enum _:eKeyGold{
    _Ak47 = 36895,
    _M4A1
}

public plugin_init()
{
    register_plugin("[AMXX] ViP Gold", "1.0", "Flymic24")
    
    RegisterHam
(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true)
    RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true)
    
    RegisterHam
(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false)
    RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false)
    
    RegisterHam
(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false)
    RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false)
    RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false)
    RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false)
    
    register_forward
(FM_SetModel, "Fakemeta_SetModel")
    
    register_clcmd
("say a", "test")
}

public test(id)
{
    static szChoosedWP[][] = {"weapon_ak47", "weapon_m4a1"}
    static szChoosedBP[] = {90, 90}
    static iGoldKey[] = {_Ak47, _M4A1}
    
    give_item_ex2
(id, szChoosedWP[0], szChoosedBP[0], iGoldKey[0])
    give_item_ex2(id, szChoosedWP[1], szChoosedBP[1], iGoldKey[1])
}

public plugin_precache()
{
    for(new i = 0; i < sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i])
    for(new i = 0; i < sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i])
    for(new i = 0; i < sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i])
}

public HamHook_Item_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED
    
    new iIndex 
= 0
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47: iIndex = Ak47
        case _M4A1
: iIndex = M4A1
        default
: return HAM_IGNORED
    
}
    
    if 
(iIndex)
    {
        new iPlayer = get_pdata_cbase(iItem, 41, 4)
        set_pev(iPlayer, pev_viewmodel2, szGoldV[ iIndex ])
        set_pev(iPlayer, pev_weaponmodel2, szGoldP[ iIndex ])
    }
    
    return HAM_IGNORED
}

public HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!pev_valid(iItem))
        return HAM_IGNORED
    
    return HAM_IGNORED
}

public HamHook_Entity_TraceAttack(const iEntity, const iAttacker, Float:flDamage)
{
    if (!is_user_alive(iAttacker) || !pev_valid(iEntity))
        return HAM_IGNORED
    
    new iItem 
= get_pdata_cbase(iAttacker, 373, 5)
    
    if 
(!pev_valid(iItem)) return HAM_IGNORED
    
    new Float
:iIndex
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47: iIndex = Damage_Ak4
        case _M4A1
: iIndex = Damage_M4A1
        default
: return HAM_IGNORED
    
}
    
    if 
(iIndex)    SetHamParamFloat(3, flDamage * iIndex)
    
    return HAM_IGNORED
}

public Fakemeta_SetModel(const iEntity, szModel[])
{
    if(!pev_valid(iEntity))
        return FMRES_IGNORED
    
    new szClassName
[32]
    pev(iEntity, pev_classname, szClassName, charsmax(szClassName))
    
    if 
(!equali(szClassName, "weaponbox"))
        return FMRES_IGNORED
    
    for
(new iSlot, iWeapon, iIndex; iSlot < 6; iSlot++)
    {
        iWeapon = get_pdata_cbase(iEntity, 34 + iSlot, 4)
        
        if 
(pev_valid(iWeapon))
        {
            switch(pev(iWeapon, pev_impulse))
            {
                case _Ak47: iIndex = Ak47
                case _M4A1
: iIndex = M4A1
            
}
            
            if 
(iIndex)
            {
                engfunc(EngFunc_SetModel, iEntity, szGoldW[iIndex])
                return FMRES_SUPERCEDE
            
}
        }
    }
    
    return FMRES_IGNORED
;
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo = 0, iKey = 0)
{
    if (!equal(szWeaponName, "weapon_", 7))
        return false;
    
    new iWeapon 
= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szWeaponName));
    
    if 
(!pev_valid(iWeapon))
        return false;
    
    set_pev
(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
    
    set_pev
(iWeapon, pev_impulse, iKey);
    cs_set_user_bpammo(iPlayer, get_weaponid(szWeaponName), iAmmo);
    
    dllfunc
(DLLFunc_Spawn, iWeapon);
    dllfunc(DLLFunc_Touch, iWeapon, iPlayer);
    
    return true
;
}
Аватара пользователя
DoNotFollowMe
 
Сообщения: 117
Зарегистрирован: 29 фев 2016, 20:25
Благодарил (а): 41 раз.
Поблагодарили: 3 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6

Re: Убрать дигл из gold weapon  [Решено]

Сообщение JustProOnline » 30 апр 2018, 15:00

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

enum _:eVipType    {    Null = 0,    ViP,    ViPGold    };
enum _:eGoldList{    Knife = 0,    Ak47,    M4A1    };

#define VipFlag    "b"
#define VipFlagGold    "t"

#define MinRoundToOpenMenu        2 
#define AK47_LIMIT    7
#define M4A1_LIMIT    5

#define Damage_Ak4        1.2
#define Damage_M4A1        1.2

#define DROP_TYPE    2    // 1 - обычный дроп. 2 - удаляется из рук вообще

new szGoldV[eGoldList][32] = {
    "models/gold/v_knife.mdl",
    "models/gold/v_ak47.mdl",
    "models/gold/v_m4a1.mdl"
};

new szGoldP[eGoldList][32] = {
    "models/gold/p_knife.mdl",
    "models/gold/p_ak47.mdl",
    "models/gold/p_m4a1.mdl"
};

new szGoldW[eGoldList][32] = {
    "",
    "models/gold/w_ak47.mdl",
    "models/gold/w_m4a1.mdl"
};

enum _:eKeyGold{
    _Ak47 = 36895,
    _M4A1
};

enum _:eGoldCost{
    Cost_Ak4 = 200,
    Cost_M4A1 = 100
};

new iVipFlag[33], bool:bDefuse, iRoundNum;

public plugin_init()
{
    register_plugin("[AMXX] ViP Gold", "1.0", "Flymic24");
    
    register_event
("TextMsg",    "Event_RoundRestart",    "a",    "2&#Game_C",    "2&#Game_w");
    register_event("HLTV",        "Event_RoundStart",        "a",    "1=0",            "2=0");
    
    register_message
(get_user_msgid("ScoreAttrib"), "MessageScoreAttrib");
    
    if
(engfunc(EngFunc_FindEntityByString, FM_NULLENT, "classname", "func_bomb_target"))
        bDefuse = true;
    
    RegisterHam
(Ham_Spawn, "player", "HamHook_Player_Spawn", true);
    
    RegisterHam
(Ham_Item_Deploy,    "weapon_knife",    "HamHook_Knife_Deploy",    true);
    RegisterHam(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true);
    RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true);
    
    RegisterHam
(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false);
    RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false);
    
    RegisterHam
(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false);
    RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false);
    RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false);
    RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false);
    
    register_forward
(FM_SetModel, "Fakemeta_SetModel")
    
    register_clcmd
("say /vipmenu", "WeaponMenu");
    register_clcmd("vipmenu", "WeaponMenu");
    
    register_menucmd
(register_menuid("Vip Menu"), 1023, "VipHandler");
}

public plugin_precache()
{
    for(new i = 0; i < sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i]);
    for(new i = 0; i < sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i]);
    for(new i = 0; i < sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i]);
}

public client_putinserver(iPlayer) 
{
    if (GetUserFlags(iPlayer) == Null)
        return;
    
    new szName
[32];    get_user_name(iPlayer, szName, charsmax(szName));
    UtilChatColor(0, "На сервер зашёл !gVIP !yклиент !team%s", szName);
}

public Event_RoundRestart()    iRoundNum = 0;
public Event_RoundStart()    iRoundNum++;

public MessageScoreAttrib(iMsgId, iDest, iReceiver)
{
    new iPlayer = get_msg_arg_int(1);
    
    if
(iVipFlag[iPlayer] > Null && !get_msg_arg_int(2))
        set_msg_arg_int(2, ARG_BYTE, (1<<2));
}

public HamHook_Knife_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED;
    
    new iPlayer 
= get_pdata_cbase(iItem, 41, 4);
    
    if
(iVipFlag[iPlayer] != ViPGold)
        return HAM_IGNORED;
    
    set_pev
(iPlayer, pev_viewmodel2, szGoldV[ Knife ]);
    set_pev(iPlayer, pev_weaponmodel2, szGoldP[ Knife ]);
    
    return HAM_IGNORED
;
}

public HamHook_Item_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED;
    
    new iIndex 
= 0;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47:    iIndex = Ak47;
        case _M4A1:    iIndex = M4A1;
        default: return HAM_IGNORED;
    }
    
    if 
(iIndex)
    {
        new iPlayer = get_pdata_cbase(iItem, 41, 4);
        set_pev(iPlayer, pev_viewmodel2, szGoldV[ iIndex ]);
        set_pev(iPlayer, pev_weaponmodel2, szGoldP[ iIndex ]);
    }
    
    return HAM_IGNORED
;
}

public HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!pev_valid(iItem))
        return HAM_IGNORED;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _M4A1:
        {
            if (iVipFlag[iPlayer] != ViPGold)
                return HAM_SUPERCEDE;
        }
        default: return HAM_IGNORED;
    }
    
    return HAM_IGNORED
;
}

public HamHook_Entity_TraceAttack(const iEntity, const iAttacker, Float:flDamage)
{
    if (!is_user_alive(iAttacker) || !pev_valid(iEntity))
        return HAM_IGNORED;
    
    new iItem 
= get_pdata_cbase(iAttacker, 373, 5);
    
    if 
(!pev_valid(iItem))    return HAM_IGNORED;
    
    new Float
:iIndex;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47:    iIndex = Damage_Ak4;
        case _M4A1:    iIndex = Damage_M4A1;
        default: return HAM_IGNORED;
    }
    
    if 
(iIndex)    SetHamParamFloat(3, flDamage * iIndex);
    
    return HAM_IGNORED
;
}

public HamHook_Player_Spawn(const iPlayer)
{
    if (!is_user_alive(iPlayer) || is_user_bot(iPlayer))
        return HAM_IGNORED;
    
    if 
(iVipFlag[iPlayer] <= Null)
        return HAM_IGNORED;
    
    give_item_ex2
(iPlayer, "weapon_hegrenade", 1);
    give_item_ex2(iPlayer, "weapon_flashbang", 2);
    give_item_ex2(iPlayer, "weapon_smokegrenade", 1);
    
    cs_set_user_armor
(iPlayer, 100, CS_ARMOR_VESTHELM);
    
    if
(bDefuse && cs_get_user_team(iPlayer) == CS_TEAM_CT)
        cs_set_user_defuse(iPlayer, 1);
    
    return HAM_IGNORED
;
}

public Fakemeta_SetModel(const iEntity, szModel[])
{
    if(!pev_valid(iEntity))
        return FMRES_IGNORED;
    
    new szClassName
[32];
    pev(iEntity, pev_classname, szClassName, charsmax(szClassName));
    
    if 
(!equali(szClassName, "weaponbox"))
        return FMRES_IGNORED;
    
    for
(new iSlot, iWeapon, iIndex; iSlot < 6; iSlot++)
    {
        iWeapon = get_pdata_cbase(iEntity, 34 + iSlot, 4);
        
        if 
(pev_valid(iWeapon))
        {
            switch(pev(iWeapon, pev_impulse))
            {
                case _Ak47:    iIndex = Ak47;
                case _M4A1:    iIndex = M4A1;
            }
            
            if 
(iIndex)
            {
                engfunc(EngFunc_SetModel, iEntity, szGoldW[iIndex]);
                return FMRES_SUPERCEDE;
            }
        }
    }
    
    return FMRES_IGNORED
;
}

public WeaponMenu(iPlayer)
{
    if (!is_user_alive(iPlayer) || iVipFlag[iPlayer] <= Null)
        return PLUGIN_HANDLED;
    
    if 
(iRoundNum < MinRoundToOpenMenu)
    {
        UtilChatColor(iPlayer, "!g[!yViP!g] !yМеню не доступно. Жди ещё !team%i !yраунд", MinRoundToOpenMenu - iRoundNum);
        return PLUGIN_HANDLED;
    }
    
    static szMenu
[512], iLen;

    iLen = formatex(szMenu, charsmax(szMenu), "\r[\yVIP\r] \wWeaponMenu^n^n");
    
    iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wВзять AK47^n");
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \wВзять M4A1^n");
    
    if 
(iVipFlag[iPlayer] == ViPGold)
    {
        if(iRoundNum < AK47_LIMIT)
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \dВзять AK47 Gold \r[c %d раунда]^n", AK47_LIMIT);
        else
            iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \wВзять AK47 Gold \y(\r%i$\y)^n", Cost_Ak4);

        if(iRoundNum < M4A1_LIMIT)
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \dВзять M4A1 Gold \r[c %d раунда]^n", M4A1_LIMIT);
        else
            iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \wВзять M4A1 Gold \y(\r%i$\y)^n", Cost_M4A1);
    }
    
    iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y0. \wВыход");
    
    set_pdata_int
(iPlayer, 205, 0);
    
    show_menu
(iPlayer, 1023, szMenu, -1, "Vip Menu");
    
    return PLUGIN_HANDLED
;
}

public VipHandler(iPlayer, iKey)
{
    if (!is_user_alive(iPlayer))
        return PLUGIN_HANDLED;
    
    new iNewKey 
= iKey + 1;
    
    static szWeaponName
[][] = {    "", "AK", "M4", "Gold AK", "Gold M4"    };
    static szChoosedWP[][] = {    "", "weapon_ak47", "weapon_m4a1"    };
    static szChoosedBP[] = {    0, 90, 90, 90, 30    };
    static iGoldKey[] = {    0, _Ak47, _M4A1    };
    static iCost[] = {    0, Cost_Ak4, Cost_M4A1    };
    static iRoundLimit[] = {    0, AK47_LIMIT, M4A1_LIMIT    };
    
    switch 
(iNewKey)
    {
        case 1..3:    give_item_ex2(iPlayer, szChoosedWP[iNewKey], szChoosedBP[iNewKey], true);
        case 4..6:
        {
            new iMoney = cs_get_user_money(iPlayer);
            
            if 
(iRoundNum < iRoundLimit[iNewKey - 3])
            {
                UtilChatColor(iPlayer, "!g[!yViP!g] !yДоступно только с !g%i !yраунда", iRoundLimit[iNewKey - 3]);
                return PLUGIN_HANDLED;                
            
}
            if (iMoney < iCost[iNewKey - 3] || iVipFlag[iPlayer] != ViPGold)
            {
                UtilChatColor(iPlayer, "!g[!yViP!g] !yНе достаточно денег: !team%i!g$", iCost[iNewKey - 3]);
                return PLUGIN_HANDLED;
            }
            else
            
{
                give_item_ex2(iPlayer, szChoosedWP[iNewKey - 3], szChoosedBP[iNewKey - 3], true, iGoldKey[iNewKey - 3]);
                cs_set_user_money(iPlayer, iMoney - iCost[iNewKey - 3]);
            }
        }
        default:    return PLUGIN_HANDLED;
    }
    
    UtilChatColor
(iPlayer, "!g[!yViP!g] !yВы получили: !g[!team%s!g]", szWeaponName[iNewKey]);
    
    return PLUGIN_HANDLED
;
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo = 0, bool:bDrop = false, iKey = 0)
{
    if (!equal(szWeaponName, "weapon_", 7))
        return false;
    
    new iWeapon 
= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szWeaponName));
    
    if 
(!pev_valid(iWeapon))
        return false;
    
    if 
(bDrop)
    {
        new szWeapon[ 32 ],
            iSlot = ExecuteHamB(Ham_Item_ItemSlot, iWeapon),
            iItem = get_pdata_cbase(iPlayer, 367 + iSlot, 5);
        
        while 
((pev_valid(iItem) == 2))
        {
            pev(iItem, pev_classname, szWeapon, charsmax(szWeapon));
            
            switch
(DROP_TYPE)
            {
                case 1:    engclient_cmd(iPlayer, "drop", szWeapon);
                case 2: ham_strip_weapon(iPlayer, szWeapon);
            }
            
            iItem 
= get_pdata_cbase(iItem, 42, 4);
        }
    }
    
    set_pev
(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
    
    if 
(iKey > 0)    set_pev(iWeapon, pev_impulse, iKey);
    if (iAmmo > 0)    cs_set_user_bpammo(iPlayer, get_weaponid(szWeaponName), iAmmo);
    
    dllfunc
(DLLFunc_Spawn, iWeapon);
    dllfunc(DLLFunc_Touch, iWeapon, iPlayer);
    
    return true
;
}

stock ham_strip_weapon(id, weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0
    
    new wId 
= get_weaponid(weapon)
    if(!wId) return 0
    
    new wEnt
    while
((wEnt = engfunc(EngFunc_FindEntityByString, wEnt, "classname", weapon)) && pev(wEnt, pev_owner) != id) {}
    if(!wEnt) return 0
    
    new iTmp
    if
(get_user_weapon(id, iTmp, iTmp) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt)
    
    if
(!ExecuteHamB(Ham_RemovePlayerItem, id, any:wEnt)) return 0
    
    ExecuteHamB
(Ham_Item_Kill, wEnt)
    set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<wId))
    
    return 1
}

stock GetUserFlags(const iPlayer)
{
    if (!is_user_connected(iPlayer))
        return -1;
    
    new iFlags 
= get_user_flags(iPlayer);
    new iReturnBit;
    
    if 
(iFlags & read_flags(VipFlagGold))
    {
        iVipFlag[iPlayer] = ViPGold;
        iReturnBit = ViPGold;
    }
    else if (iFlags & read_flags(VipFlag))
    {
        iVipFlag[iPlayer] = ViP;
        iReturnBit = ViP;
    }
    else
    
{
        iVipFlag[iPlayer] = Null;
        iReturnBit = Null;
    }
    
    return iReturnBit
;
}

stock UtilChatColor(const iPlayer, const szInput[], any:...)
{
    new iCount = 1, szPlayers[32];
    static szMessage[191];
    
    vformat
(szMessage, charsmax(szMessage), szInput, 3);
    
    replace_all
(szMessage, charsmax(szMessage), "!g", "^4");    // Green Color
    replace_all(szMessage, charsmax(szMessage), "!y", "^1");    // Default Color
    replace_all(szMessage, charsmax(szMessage), "!team", "^3");    // Team Color
    
    static g_SayText
;
    if (!g_SayText)    g_SayText = get_user_msgid("SayText");
    
    if
(iPlayer) szPlayers[0] = iPlayer; else get_players(szPlayers, iCount, "ch");
    {
        for(new i = 0; i < iCount; i++)
        {
            if(!is_user_connected(szPlayers[i]))    continue;
            
            message_begin
(MSG_ONE_UNRELIABLE, g_SayText, _, szPlayers[i]);
            write_byte(szPlayers[i]);
            write_string(szMessage);
            message_end();
        }
    }
}


Добавлено спустя 3 минуты 25 секунд:
Код: Выделить всё
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>

enum _:eGoldList{Ak47M4A1}

#define Damage_Ak4        9.2
#define Damage_M4A1        9.2

new szGoldV[eGoldList][32] = {
    
"models/gold/v_ak47.mdl",
    
"models/gold/v_m4a1.mdl"
}

new 
szGoldP[eGoldList][32] = {
    
"models/gold/p_ak47.mdl",
    
"models/gold/p_m4a1.mdl"
}

new 
szGoldW[eGoldList][32] = {
    
"models/gold/w_ak47.mdl",
    
"models/gold/w_m4a1.mdl"
}

enum _:eKeyGold{
    
_Ak47 36895,
    
_M4A1
}

public 
plugin_init()
{
    
register_plugin("[AMXX] ViP Gold""1.0""Flymic24")
    
    
RegisterHam(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true)
    
RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true)
    
    
RegisterHam(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false)
    
RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false)
    
    
RegisterHam(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false)
    
RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false)
    
RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false)
    
RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false)
    
    
register_forward(FM_SetModel"Fakemeta_SetModel")
    
    
register_clcmd("say a""test")
}

public 
test(id)
{
    static 
szChoosedWP[][] = {"weapon_ak47""weapon_m4a1"}
    static 
szChoosedBP[] = {909030}
    static 
iGoldKey[] = {_Ak47_M4A1}
    
    
give_item_ex2(idszChoosedWP[0], szChoosedBP[0], iGoldKey[0])
    
give_item_ex2(idszChoosedWP[1], szChoosedBP[1], iGoldKey[1])
}

public 
plugin_precache()
{
    for(new 
0sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i])
    for(new 
0sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i])
    for(new 
0sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i])
}

public 
HamHook_Item_Deploy(const iItem)
{
    if (
pev_valid(iItem) != 2)
        return 
HAM_IGNORED
    
    
new iIndex 0
    
    
switch(pev(iItempev_impulse))
    {
        case 
_Ak47iIndex Ak47
        
case _M4A1iIndex M4A1
        
default: return HAM_IGNORED
    
}
    
    if (
iIndex)
    {
        new 
iPlayer get_pdata_cbase(iItem414)
        
set_pev(iPlayerpev_viewmodel2szGoldViIndex ])
        
set_pev(iPlayerpev_weaponmodel2szGoldPiIndex ])
    }
    
    return 
HAM_IGNORED
}

public 
HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!
pev_valid(iItem))
        return 
HAM_IGNORED
    
    
return HAM_IGNORED
}

public 
HamHook_Entity_TraceAttack(const iEntity, const iAttackerFloat:flDamage)
{
    if (!
is_user_alive(iAttacker) || !pev_valid(iEntity))
        return 
HAM_IGNORED
    
    
new iItem get_pdata_cbase(iAttacker3735)
    
    if (!
pev_valid(iItem)) return HAM_IGNORED
    
    
new Float:iIndex
    
    
switch(pev(iItempev_impulse))
    {
        case 
_Ak47iIndex Damage_Ak4
        
case _M4A1iIndex Damage_M4A1
        
default: return HAM_IGNORED
    
}
    
    if (
iIndex)    SetHamParamFloat(3flDamage iIndex)
    
    return 
HAM_IGNORED
}

public 
Fakemeta_SetModel(const iEntityszModel[])
{
    if(!
pev_valid(iEntity))
        return 
FMRES_IGNORED
    
    
new szClassName[32]
    
pev(iEntitypev_classnameszClassNamecharsmax(szClassName))
    
    if (!
equali(szClassName"weaponbox"))
        return 
FMRES_IGNORED
    
    
for(new iSlotiWeaponiIndexiSlot 6iSlot++)
    {
        
iWeapon get_pdata_cbase(iEntity34 iSlot4)
        
        if (
pev_valid(iWeapon))
        {
            switch(
pev(iWeaponpev_impulse))
            {
                case 
_Ak47iIndex Ak47
                
case _M4A1iIndex M4A1
            
}
            
            if (
iIndex)
            {
                
engfunc(EngFunc_SetModeliEntityszGoldW[iIndex])
                return 
FMRES_SUPERCEDE
            
}
        }
    }
    
    return 
FMRES_IGNORED;
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo 0iKey 0)
{
    if (!
equal(szWeaponName"weapon_"7))
        return 
false;
    
    new 
iWeapon engfunc(EngFunc_CreateNamedEntityengfunc(EngFunc_AllocStringszWeaponName));
    
    if (!
pev_valid(iWeapon))
        return 
false;
    
    
set_pev(iWeaponpev_spawnflagspev(iWeaponpev_spawnflags) | SF_NORESPAWN);
    
    
set_pev(iWeaponpev_impulseiKey);
    
cs_set_user_bpammo(iPlayerget_weaponid(szWeaponName), iAmmo);
    
    
dllfunc(DLLFunc_SpawniWeapon);
    
dllfunc(DLLFunc_TouchiWeaponiPlayer);
    
    return 
true;
Аватара пользователя
JustProOnline
 
Сообщения: 160
Зарегистрирован: 30 дек 2017, 10:14
Благодарил (а): 23 раз.
Поблагодарили: 14 раз.
Опыт программирования: Около года
Языки программирования: C++
Counter-Strike 1.6

Re: Убрать дигл из gold weapon

Сообщение DoNotFollowMe » 30 апр 2018, 15:37

JustProOnline писал(а):
Код: Выделить всё
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>

enum _:eVipType    {    Null = 0,    ViP,    ViPGold    };
enum _:eGoldList{    Knife = 0,    Ak47,    M4A1    };

#define VipFlag    "b"
#define VipFlagGold    "t"

#define MinRoundToOpenMenu        2 
#define AK47_LIMIT    7
#define M4A1_LIMIT    5

#define Damage_Ak4        1.2
#define Damage_M4A1        1.2

#define DROP_TYPE    2    // 1 - обычный дроп. 2 - удаляется из рук вообще

new szGoldV[eGoldList][32] = {
    "models/gold/v_knife.mdl",
    "models/gold/v_ak47.mdl",
    "models/gold/v_m4a1.mdl"
};

new szGoldP[eGoldList][32] = {
    "models/gold/p_knife.mdl",
    "models/gold/p_ak47.mdl",
    "models/gold/p_m4a1.mdl"
};

new szGoldW[eGoldList][32] = {
    "",
    "models/gold/w_ak47.mdl",
    "models/gold/w_m4a1.mdl"
};

enum _:eKeyGold{
    _Ak47 = 36895,
    _M4A1
};

enum _:eGoldCost{
    Cost_Ak4 = 200,
    Cost_M4A1 = 100
};

new iVipFlag[33], bool:bDefuse, iRoundNum;

public plugin_init()
{
    register_plugin("[AMXX] ViP Gold", "1.0", "Flymic24");
    
    register_event
("TextMsg",    "Event_RoundRestart",    "a",    "2&#Game_C",    "2&#Game_w");
    register_event("HLTV",        "Event_RoundStart",        "a",    "1=0",            "2=0");
    
    register_message
(get_user_msgid("ScoreAttrib"), "MessageScoreAttrib");
    
    if
(engfunc(EngFunc_FindEntityByString, FM_NULLENT, "classname", "func_bomb_target"))
        bDefuse = true;
    
    RegisterHam
(Ham_Spawn, "player", "HamHook_Player_Spawn", true);
    
    RegisterHam
(Ham_Item_Deploy,    "weapon_knife",    "HamHook_Knife_Deploy",    true);
    RegisterHam(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true);
    RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true);
    
    RegisterHam
(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false);
    RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false);
    
    RegisterHam
(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false);
    RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false);
    RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false);
    RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false);
    
    register_forward
(FM_SetModel, "Fakemeta_SetModel")
    
    register_clcmd
("say /vipmenu", "WeaponMenu");
    register_clcmd("vipmenu", "WeaponMenu");
    
    register_menucmd
(register_menuid("Vip Menu"), 1023, "VipHandler");
}

public plugin_precache()
{
    for(new i = 0; i < sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i]);
    for(new i = 0; i < sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i]);
    for(new i = 0; i < sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i]);
}

public client_putinserver(iPlayer) 
{
    if (GetUserFlags(iPlayer) == Null)
        return;
    
    new szName
[32];    get_user_name(iPlayer, szName, charsmax(szName));
    UtilChatColor(0, "На сервер зашёл !gVIP !yклиент !team%s", szName);
}

public Event_RoundRestart()    iRoundNum = 0;
public Event_RoundStart()    iRoundNum++;

public MessageScoreAttrib(iMsgId, iDest, iReceiver)
{
    new iPlayer = get_msg_arg_int(1);
    
    if
(iVipFlag[iPlayer] > Null && !get_msg_arg_int(2))
        set_msg_arg_int(2, ARG_BYTE, (1<<2));
}

public HamHook_Knife_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED;
    
    new iPlayer 
= get_pdata_cbase(iItem, 41, 4);
    
    if
(iVipFlag[iPlayer] != ViPGold)
        return HAM_IGNORED;
    
    set_pev
(iPlayer, pev_viewmodel2, szGoldV[ Knife ]);
    set_pev(iPlayer, pev_weaponmodel2, szGoldP[ Knife ]);
    
    return HAM_IGNORED
;
}

public HamHook_Item_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED;
    
    new iIndex 
= 0;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47:    iIndex = Ak47;
        case _M4A1:    iIndex = M4A1;
        default: return HAM_IGNORED;
    }
    
    if 
(iIndex)
    {
        new iPlayer = get_pdata_cbase(iItem, 41, 4);
        set_pev(iPlayer, pev_viewmodel2, szGoldV[ iIndex ]);
        set_pev(iPlayer, pev_weaponmodel2, szGoldP[ iIndex ]);
    }
    
    return HAM_IGNORED
;
}

public HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!pev_valid(iItem))
        return HAM_IGNORED;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _M4A1:
        {
            if (iVipFlag[iPlayer] != ViPGold)
                return HAM_SUPERCEDE;
        }
        default: return HAM_IGNORED;
    }
    
    return HAM_IGNORED
;
}

public HamHook_Entity_TraceAttack(const iEntity, const iAttacker, Float:flDamage)
{
    if (!is_user_alive(iAttacker) || !pev_valid(iEntity))
        return HAM_IGNORED;
    
    new iItem 
= get_pdata_cbase(iAttacker, 373, 5);
    
    if 
(!pev_valid(iItem))    return HAM_IGNORED;
    
    new Float
:iIndex;
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47:    iIndex = Damage_Ak4;
        case _M4A1:    iIndex = Damage_M4A1;
        default: return HAM_IGNORED;
    }
    
    if 
(iIndex)    SetHamParamFloat(3, flDamage * iIndex);
    
    return HAM_IGNORED
;
}

public HamHook_Player_Spawn(const iPlayer)
{
    if (!is_user_alive(iPlayer) || is_user_bot(iPlayer))
        return HAM_IGNORED;
    
    if 
(iVipFlag[iPlayer] <= Null)
        return HAM_IGNORED;
    
    give_item_ex2
(iPlayer, "weapon_hegrenade", 1);
    give_item_ex2(iPlayer, "weapon_flashbang", 2);
    give_item_ex2(iPlayer, "weapon_smokegrenade", 1);
    
    cs_set_user_armor
(iPlayer, 100, CS_ARMOR_VESTHELM);
    
    if
(bDefuse && cs_get_user_team(iPlayer) == CS_TEAM_CT)
        cs_set_user_defuse(iPlayer, 1);
    
    return HAM_IGNORED
;
}

public Fakemeta_SetModel(const iEntity, szModel[])
{
    if(!pev_valid(iEntity))
        return FMRES_IGNORED;
    
    new szClassName
[32];
    pev(iEntity, pev_classname, szClassName, charsmax(szClassName));
    
    if 
(!equali(szClassName, "weaponbox"))
        return FMRES_IGNORED;
    
    for
(new iSlot, iWeapon, iIndex; iSlot < 6; iSlot++)
    {
        iWeapon = get_pdata_cbase(iEntity, 34 + iSlot, 4);
        
        if 
(pev_valid(iWeapon))
        {
            switch(pev(iWeapon, pev_impulse))
            {
                case _Ak47:    iIndex = Ak47;
                case _M4A1:    iIndex = M4A1;
            }
            
            if 
(iIndex)
            {
                engfunc(EngFunc_SetModel, iEntity, szGoldW[iIndex]);
                return FMRES_SUPERCEDE;
            }
        }
    }
    
    return FMRES_IGNORED
;
}

public WeaponMenu(iPlayer)
{
    if (!is_user_alive(iPlayer) || iVipFlag[iPlayer] <= Null)
        return PLUGIN_HANDLED;
    
    if 
(iRoundNum < MinRoundToOpenMenu)
    {
        UtilChatColor(iPlayer, "!g[!yViP!g] !yМеню не доступно. Жди ещё !team%i !yраунд", MinRoundToOpenMenu - iRoundNum);
        return PLUGIN_HANDLED;
    }
    
    static szMenu
[512], iLen;

    iLen = formatex(szMenu, charsmax(szMenu), "\r[\yVIP\r] \wWeaponMenu^n^n");
    
    iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y1. \wВзять AK47^n");
    iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y2. \wВзять M4A1^n");
    
    if 
(iVipFlag[iPlayer] == ViPGold)
    {
        if(iRoundNum < AK47_LIMIT)
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \dВзять AK47 Gold \r[c %d раунда]^n", AK47_LIMIT);
        else
            iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \wВзять AK47 Gold \y(\r%i$\y)^n", Cost_Ak4);

        if(iRoundNum < M4A1_LIMIT)
            iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \dВзять M4A1 Gold \r[c %d раунда]^n", M4A1_LIMIT);
        else
            iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y5. \wВзять M4A1 Gold \y(\r%i$\y)^n", Cost_M4A1);
    }
    
    iLen 
+= formatex(szMenu[iLen], charsmax(szMenu) - iLen, "^n\y0. \wВыход");
    
    set_pdata_int
(iPlayer, 205, 0);
    
    show_menu
(iPlayer, 1023, szMenu, -1, "Vip Menu");
    
    return PLUGIN_HANDLED
;
}

public VipHandler(iPlayer, iKey)
{
    if (!is_user_alive(iPlayer))
        return PLUGIN_HANDLED;
    
    new iNewKey 
= iKey + 1;
    
    static szWeaponName
[][] = {    "", "AK", "M4", "Gold AK", "Gold M4"    };
    static szChoosedWP[][] = {    "", "weapon_ak47", "weapon_m4a1"    };
    static szChoosedBP[] = {    0, 90, 90, 90, 30    };
    static iGoldKey[] = {    0, _Ak47, _M4A1    };
    static iCost[] = {    0, Cost_Ak4, Cost_M4A1    };
    static iRoundLimit[] = {    0, AK47_LIMIT, M4A1_LIMIT    };
    
    switch 
(iNewKey)
    {
        case 1..3:    give_item_ex2(iPlayer, szChoosedWP[iNewKey], szChoosedBP[iNewKey], true);
        case 4..6:
        {
            new iMoney = cs_get_user_money(iPlayer);
            
            if 
(iRoundNum < iRoundLimit[iNewKey - 3])
            {
                UtilChatColor(iPlayer, "!g[!yViP!g] !yДоступно только с !g%i !yраунда", iRoundLimit[iNewKey - 3]);
                return PLUGIN_HANDLED;                
            
}
            if (iMoney < iCost[iNewKey - 3] || iVipFlag[iPlayer] != ViPGold)
            {
                UtilChatColor(iPlayer, "!g[!yViP!g] !yНе достаточно денег: !team%i!g$", iCost[iNewKey - 3]);
                return PLUGIN_HANDLED;
            }
            else
            
{
                give_item_ex2(iPlayer, szChoosedWP[iNewKey - 3], szChoosedBP[iNewKey - 3], true, iGoldKey[iNewKey - 3]);
                cs_set_user_money(iPlayer, iMoney - iCost[iNewKey - 3]);
            }
        }
        default:    return PLUGIN_HANDLED;
    }
    
    UtilChatColor
(iPlayer, "!g[!yViP!g] !yВы получили: !g[!team%s!g]", szWeaponName[iNewKey]);
    
    return PLUGIN_HANDLED
;
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo = 0, bool:bDrop = false, iKey = 0)
{
    if (!equal(szWeaponName, "weapon_", 7))
        return false;
    
    new iWeapon 
= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szWeaponName));
    
    if 
(!pev_valid(iWeapon))
        return false;
    
    if 
(bDrop)
    {
        new szWeapon[ 32 ],
            iSlot = ExecuteHamB(Ham_Item_ItemSlot, iWeapon),
            iItem = get_pdata_cbase(iPlayer, 367 + iSlot, 5);
        
        while 
((pev_valid(iItem) == 2))
        {
            pev(iItem, pev_classname, szWeapon, charsmax(szWeapon));
            
            switch
(DROP_TYPE)
            {
                case 1:    engclient_cmd(iPlayer, "drop", szWeapon);
                case 2: ham_strip_weapon(iPlayer, szWeapon);
            }
            
            iItem 
= get_pdata_cbase(iItem, 42, 4);
        }
    }
    
    set_pev
(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
    
    if 
(iKey > 0)    set_pev(iWeapon, pev_impulse, iKey);
    if (iAmmo > 0)    cs_set_user_bpammo(iPlayer, get_weaponid(szWeaponName), iAmmo);
    
    dllfunc
(DLLFunc_Spawn, iWeapon);
    dllfunc(DLLFunc_Touch, iWeapon, iPlayer);
    
    return true
;
}

stock ham_strip_weapon(id, weapon[])
{
    if(!equal(weapon,"weapon_",7)) return 0
    
    new wId 
= get_weaponid(weapon)
    if(!wId) return 0
    
    new wEnt
    while
((wEnt = engfunc(EngFunc_FindEntityByString, wEnt, "classname", weapon)) && pev(wEnt, pev_owner) != id) {}
    if(!wEnt) return 0
    
    new iTmp
    if
(get_user_weapon(id, iTmp, iTmp) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon, wEnt)
    
    if
(!ExecuteHamB(Ham_RemovePlayerItem, id, any:wEnt)) return 0
    
    ExecuteHamB
(Ham_Item_Kill, wEnt)
    set_pev(id, pev_weapons, pev(id, pev_weapons) & ~(1<<wId))
    
    return 1
}

stock GetUserFlags(const iPlayer)
{
    if (!is_user_connected(iPlayer))
        return -1;
    
    new iFlags 
= get_user_flags(iPlayer);
    new iReturnBit;
    
    if 
(iFlags & read_flags(VipFlagGold))
    {
        iVipFlag[iPlayer] = ViPGold;
        iReturnBit = ViPGold;
    }
    else if (iFlags & read_flags(VipFlag))
    {
        iVipFlag[iPlayer] = ViP;
        iReturnBit = ViP;
    }
    else
    
{
        iVipFlag[iPlayer] = Null;
        iReturnBit = Null;
    }
    
    return iReturnBit
;
}

stock UtilChatColor(const iPlayer, const szInput[], any:...)
{
    new iCount = 1, szPlayers[32];
    static szMessage[191];
    
    vformat
(szMessage, charsmax(szMessage), szInput, 3);
    
    replace_all
(szMessage, charsmax(szMessage), "!g", "^4");    // Green Color
    replace_all(szMessage, charsmax(szMessage), "!y", "^1");    // Default Color
    replace_all(szMessage, charsmax(szMessage), "!team", "^3");    // Team Color
    
    static g_SayText
;
    if (!g_SayText)    g_SayText = get_user_msgid("SayText");
    
    if
(iPlayer) szPlayers[0] = iPlayer; else get_players(szPlayers, iCount, "ch");
    {
        for(new i = 0; i < iCount; i++)
        {
            if(!is_user_connected(szPlayers[i]))    continue;
            
            message_begin
(MSG_ONE_UNRELIABLE, g_SayText, _, szPlayers[i]);
            write_byte(szPlayers[i]);
            write_string(szMessage);
            message_end();
        }
    }


Добавлено спустя 3 минуты 25 секунд:
Код: Выделить всё
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>

enum _:eGoldList{Ak47, M4A1}

#define Damage_Ak4        9.2
#define Damage_M4A1        9.2

new szGoldV[eGoldList][32] = {
    "models/gold/v_ak47.mdl",
    "models/gold/v_m4a1.mdl"
}

new szGoldP[eGoldList][32] = {
    "models/gold/p_ak47.mdl",
    "models/gold/p_m4a1.mdl"
}

new szGoldW[eGoldList][32] = {
    "models/gold/w_ak47.mdl",
    "models/gold/w_m4a1.mdl"
}

enum _:eKeyGold{
    _Ak47 = 36895,
    _M4A1
}

public plugin_init()
{
    register_plugin("[AMXX] ViP Gold", "1.0", "Flymic24")
    
    RegisterHam
(Ham_Item_Deploy,    "weapon_ak47",    "HamHook_Item_Deploy",    true)
    RegisterHam(Ham_Item_Deploy,    "weapon_m4a1",    "HamHook_Item_Deploy",    true)
    
    RegisterHam
(Ham_Touch,    "weapon_ak47",    "HamHook_Item_AttachToPlayer",    false)
    RegisterHam(Ham_Touch,    "weapon_m4a1",    "HamHook_Item_AttachToPlayer",    false)
    
    RegisterHam
(Ham_TraceAttack,    "func_breakable",    "HamHook_Entity_TraceAttack",     false)
    RegisterHam(Ham_TraceAttack,    "hostage_entity",    "HamHook_Entity_TraceAttack",     false)
    RegisterHam(Ham_TraceAttack,    "info_target",         "HamHook_Entity_TraceAttack",    false)
    RegisterHam(Ham_TraceAttack,    "player",             "HamHook_Entity_TraceAttack",    false)
    
    register_forward
(FM_SetModel, "Fakemeta_SetModel")
    
    register_clcmd
("say a", "test")
}

public test(id)
{
    static szChoosedWP[][] = {"weapon_ak47", "weapon_m4a1"}
    static szChoosedBP[] = {90, 90, 30}
    static iGoldKey[] = {_Ak47, _M4A1}
    
    give_item_ex2
(id, szChoosedWP[0], szChoosedBP[0], iGoldKey[0])
    give_item_ex2(id, szChoosedWP[1], szChoosedBP[1], iGoldKey[1])
}

public plugin_precache()
{
    for(new i = 0; i < sizeof(szGoldV); i++)    if (szGoldV[i][0])    precache_model(szGoldV[i])
    for(new i = 0; i < sizeof(szGoldP); i++)    if (szGoldP[i][0])    precache_model(szGoldP[i])
    for(new i = 0; i < sizeof(szGoldW); i++)    if (szGoldW[i][0])    precache_model(szGoldW[i])
}

public HamHook_Item_Deploy(const iItem)
{
    if (pev_valid(iItem) != 2)
        return HAM_IGNORED
    
    new iIndex 
= 0
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47: iIndex = Ak47
        case _M4A1
: iIndex = M4A1
        default
: return HAM_IGNORED
    
}
    
    if 
(iIndex)
    {
        new iPlayer = get_pdata_cbase(iItem, 41, 4)
        set_pev(iPlayer, pev_viewmodel2, szGoldV[ iIndex ])
        set_pev(iPlayer, pev_weaponmodel2, szGoldP[ iIndex ])
    }
    
    return HAM_IGNORED
}

public HamHook_Item_AttachToPlayer(const iItem, const iPlayer)
{
    if (!pev_valid(iItem))
        return HAM_IGNORED
    
    return HAM_IGNORED
}

public HamHook_Entity_TraceAttack(const iEntity, const iAttacker, Float:flDamage)
{
    if (!is_user_alive(iAttacker) || !pev_valid(iEntity))
        return HAM_IGNORED
    
    new iItem 
= get_pdata_cbase(iAttacker, 373, 5)
    
    if 
(!pev_valid(iItem)) return HAM_IGNORED
    
    new Float
:iIndex
    
    switch
(pev(iItem, pev_impulse))
    {
        case _Ak47: iIndex = Damage_Ak4
        case _M4A1
: iIndex = Damage_M4A1
        default
: return HAM_IGNORED
    
}
    
    if 
(iIndex)    SetHamParamFloat(3, flDamage * iIndex)
    
    return HAM_IGNORED
}

public Fakemeta_SetModel(const iEntity, szModel[])
{
    if(!pev_valid(iEntity))
        return FMRES_IGNORED
    
    new szClassName
[32]
    pev(iEntity, pev_classname, szClassName, charsmax(szClassName))
    
    if 
(!equali(szClassName, "weaponbox"))
        return FMRES_IGNORED
    
    for
(new iSlot, iWeapon, iIndex; iSlot < 6; iSlot++)
    {
        iWeapon = get_pdata_cbase(iEntity, 34 + iSlot, 4)
        
        if 
(pev_valid(iWeapon))
        {
            switch(pev(iWeapon, pev_impulse))
            {
                case _Ak47: iIndex = Ak47
                case _M4A1
: iIndex = M4A1
            
}
            
            if 
(iIndex)
            {
                engfunc(EngFunc_SetModel, iEntity, szGoldW[iIndex])
                return FMRES_SUPERCEDE
            
}
        }
    }
    
    return FMRES_IGNORED
;
}

stock give_item_ex2(iPlayer, const szWeaponName[], iAmmo = 0, iKey = 0)
{
    if (!equal(szWeaponName, "weapon_", 7))
        return false;
    
    new iWeapon 
= engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, szWeaponName));
    
    if 
(!pev_valid(iWeapon))
        return false;
    
    set_pev
(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN);
    
    set_pev
(iWeapon, pev_impulse, iKey);
    cs_set_user_bpammo(iPlayer, get_weaponid(szWeaponName), iAmmo);
    
    dllfunc
(DLLFunc_Spawn, iWeapon);
    dllfunc(DLLFunc_Touch, iWeapon, iPlayer);
    
    return true
;
}

большое спасибо
Аватара пользователя
DoNotFollowMe
 
Сообщения: 117
Зарегистрирован: 29 фев 2016, 20:25
Благодарил (а): 41 раз.
Поблагодарили: 3 раз.
Опыт программирования: Меньше недели
Языки программирования: Counter-Strike 1.6


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

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

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