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

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

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

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

Вип меню

, Добавить кнопку автопоказа
Статус пользователя Mihail45
сообщение 1.8.2021, 13:40
Сообщение #1
Стаж: 4 года 9 месяцев

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

Добрый день! Не могу разобраться как добавить кнопку автопоказа в голд меню,хотелось бы чтоб при спавне или меню показывалось автоматически или через бинд,некоторым игрокам просто не нравиться что при спавне меню вип каждый раз открываеться!
Cкрытый текст
Код
#include <amxmodx>
#include <cstrike>
#include <hamsandwich>
#include <fakemeta_util>

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

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

#define RoundLimitUse   2 /*add*/     // меняет сколько раз за раунд можно открыть меню
#define MinRoundToOpenMenu        3
#define AWP_LIMIT    4
#define AK47_LIMIT    3
#define M4A1_LIMIT    3

#define Damage_Awp        1.1
#define Damage_Ak4        1.2
#define Damage_M4A1        1.2
#define Damage_Deagle    1.5

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

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

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

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

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

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

new iVipFlag[33], RoundLimit[33], bool:bDefuse, iRoundNum; /*add*/

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_Item_Deploy,    "weapon_deagle","HamHook_Item_Deploy",    true);

RegisterHam(Ham_Touch,    "weaponbox",    "HamHook_WeaponboxTouch",    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++;
for(new id = 1; id <= get_maxplayers(); id++) RoundLimit[id] = 0
}

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;
case _Deagle:    iIndex = Deagle;
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;
}

const MAX_ITEM_TYPES = 6;
stock const m_rgpPlayerItems_CWeaponBox[ 6 ] = { 34 , 35 , ... };

public HamHook_WeaponboxTouch(const iWeapon, const iPlayer)
{
if (!pev_valid(iWeapon) || !is_user_alive(iPlayer))
return HAM_IGNORED;

static pItem, i;

for(i = 0; i < MAX_ITEM_TYPES; i++)
{
pItem = get_pdata_cbase(iWeapon, m_rgpPlayerItems_CWeaponBox[ i ], 4);

if(pev_valid( pItem ) != 2)    continue;

switch(pev(pItem, pev_impulse))
{
case _Deagle.._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;
case _Deagle:    iIndex = Damage_Deagle;
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);

if (!user_has_weapon(iPlayer, CSW_DEAGLE))
{
give_item_ex2(iPlayer, "weapon_deagle", 35, true, (iVipFlag[iPlayer] == ViPGold) ? _Deagle : Null);
}

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;
case _Deagle:    iIndex = Deagle;
}

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[!yТебе сюда пацан 25+] !yМеню не доступно. Жди ещё !team%i !yраунд", MinRoundToOpenMenu - iRoundNum);
return PLUGIN_HANDLED;
}
if(RoundLimit[iPlayer] >= RoundLimitUse){ /*add*/
UtilChatColor(iPlayer, "!g[!yТебе сюда пацан 25+] !yМеню будет доступно в следующем раунде");
return PLUGIN_HANDLED;
}

static szMenu[512], iLen;

iLen = formatex(szMenu, charsmax(szMenu), "\r[\yТебе сюда пацан 25+\r] \wVIPMenu^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 Азимов \r[c %d раунда]^n", AK47_LIMIT);
else
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y4. \wВзять AK47 Азимов \y(\r%i$\y)^n", Cost_Ak4);

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

if(iRoundNum < AWP_LIMIT)
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \dВзять AWP Азимов \r[c %d раунда]^n", AWP_LIMIT);
else
iLen += formatex(szMenu[iLen], charsmax(szMenu) - iLen, "\y6. \wВзять AWP Азимов \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;
if(iKey != 9) RoundLimit[iPlayer]++

static szWeaponName[][] = {    "", "AK", "M4", "AWP", "Азимов AK", "Азимов M4", "Азимов 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[!yТебе сюда пацан 25+!g] !yДоступно только с !g%i !yраунда", iRoundLimit[iNewKey - 3]);
return PLUGIN_HANDLED;                
}
if (iMoney < iCost[iNewKey - 3] || iVipFlag[iPlayer] != ViPGold)
{
UtilChatColor(iPlayer, "!g[!yТебе сюда пацан 25+!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();
}
}
}


Отредактировал: $@NyA, - 1.8.2021, 15:48
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя PolaZ
сообщение 26.8.2022, 23:48
Сообщение #2


Стаж: 7 лет 11 месяцев

Сообщений: 33
Благодарностей: 2
Полезность: 48

Я тут немного правил vip menu (bind на "F") pardon.gif
это очень давно было, но вроде там есть проверка на наличие первичного оружия(т.е. меню не открывается в начале раунда(если есть первичное оружие))
Но при необходимости можно нажать "F" (vip menu откроется)
Только нужно добавить свои модели, они у меня где-то были, поищу, чуть позже прикреплю (если надйу (давненько было)).
P.S. Cоздайте в addons/amxmodx/configs/ файл "vip_custom.ini" и впишите все выше приложенные (плагины) "custom_weapon(M4, awp, dgl, ak47)"

Отредактировал: PolaZ, - 27.8.2022, 0:39
Прикрепленные файлы:
Прикрепленный файл  custom_ak47_2.sma ( 10,34 килобайт ) Кол-во скачиваний: 13
Прикрепленный файл  custom_awp_2.sma ( 11,19 килобайт ) Кол-во скачиваний: 11
Прикрепленный файл  custom_deagle_2.sma ( 12,25 килобайт ) Кол-во скачиваний: 12
Прикрепленный файл  custom_m4a1_2.sma ( 12,49 килобайт ) Кол-во скачиваний: 12
Прикрепленный файл  vip_custom.sma ( 25,12 килобайт ) Кол-во скачиваний: 11
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: