Код:
#include <amxmodx>
#include <amxmisc>
#include <fakemeta_util>
#include <hamsandwich>
new g_numRound;
new g_iEnable[33], g_iPistol[33];
new const WPNBLOCK = 3;
new const VIPBLOCK = 2;
new const PREFIX[] = "Сервер кс 1.6";
new g_szKeysMenu = (1<<0)|(1<<1)|(1<<2)|(1<<3)|(1<<4)|(1<<5)|(1<<9);
new g_szCswSecond[6] = {CSW_P228, CSW_ELITE, CSW_FIVESEVEN, CSW_GALIL, CSW_USP, CSW_GLOCK18};
new g_szCswPrim[18] = {CSW_SCOUT, CSW_XM1014, CSW_MAC10, CSW_AUG, CSW_UMP45, CSW_SG550, CSW_GALIL, CSW_FAMAS, CSW_AWP, CSW_MP5NAVY, CSW_M249, CSW_M3, CSW_M4A1, CSW_TMP, CSW_G3SG1, CSW_SG552, CSW_AK47, CSW_P90}
new bool:has_used[32]
public plugin_init() {
register_plugin("[AMX] Vip", "1.0", "di.alyabev");
register_event("HLTV", "Event_Start_Round", "a", "1=0", "2=0");
register_event("TextMsg", "Event_Restart_Round", "a", "2=#Game_Commencing", "2=#Game_will_restart_in");
RegisterHam(Ham_Spawn, "player", "Ham_PlayerSpawn_Post", true);
register_clcmd("vipmenu", "Show_VipMenu");
register_clcmd("say /vipmenu", "Show_VipMenu");
register_menu("VipMenu", g_szKeysMenu, "Handle_VipMenu");
}
public client_putinserver(id) {
g_iEnable[id] = 0;
g_iPistol[id] = -1;
}
public Event_Restart_Round() g_numRound = 0;
public Event_Start_Round() g_numRound++;
public Ham_PlayerSpawn_Post(id) {
if(!is_user_alive(id) || ~get_user_flags(id) & ADMIN_LEVEL_H || g_numRound < VIPBLOCK) return;
if(!g_iEnable[id]) Show_VipMenu(id);
GivePistol(id, g_iPistol[id]);
fm_give_item(id, "weapon_smokegrenade");
fm_give_item(id, "weapon_hegrenade");
fm_give_item(id, "weapon_flashbang");
fm_give_item(id, "weapon_flashbang");
fm_give_item(id, "item_thighpack");
}
public Show_VipMenu(id) {
if(~get_user_flags(id) & ADMIN_LEVEL_H) {
PrintChat(id, "^1[^4%s^1]^1 Недостаточно прав, чтобы открыть ^3VIP^1.", PREFIX);
return PLUGIN_HANDLED;
}
if(!is_user_alive(id)) {
PrintChat(id, "^1[^4%s^1]^1 Вы умерли и не можете открыть ^3VIP^1.", PREFIX);
return PLUGIN_HANDLED;
}
if(is_user_alive(id)&& !has_used[id] )
{
new iPistol[64], iMenu[512], iLen = 0;
iLen = formatex(iMenu[iLen], charsmax(iMenu) - iLen, "\rVIP меню [\d%s\r]:^n\wПривет \y%s!^n^n", PREFIX, Player_GetName(id));
iLen += formatex(iMenu[iLen], charsmax(iMenu) - iLen, "\r1. %sВзять AK-47^n", g_numRound < WPNBLOCK ? "\d" : "\w");
iLen += formatex(iMenu[iLen], charsmax(iMenu) - iLen, "\r2. %sВзять M4A1^n", g_numRound < WPNBLOCK ? "\d" : "\w");
iLen += formatex(iMenu[iLen], charsmax(iMenu) - iLen, "\r3. %sВзять FAMAS^n", g_numRound < WPNBLOCK ? "\d" : "\w");
iLen += formatex(iMenu[iLen], charsmax(iMenu) - iLen, "\r4. %sВзять AWP^n^n", g_numRound < WPNBLOCK ? "\d" : "\w");
switch(g_iPistol[id]) {
case -1: format(iPistol, charsmax(iPistol), "Не выбран!");
case 0: format(iPistol, charsmax(iPistol), "Deagle");
case 1: format(iPistol, charsmax(iPistol), "Glock18");
case 2: format(iPistol, charsmax(iPistol), "Usp");
}
if(g_numRound < VIPBLOCK) {
iLen += formatex(iMenu[iLen], charsmax(iMenu) - iLen, "\r5. \dПистолет: %s^n", iPistol);
iLen += formatex(iMenu[iLen], charsmax(iMenu) - iLen, "\r6. \dНе Показывать меню %s^n", g_iEnable[id] != 0 ? "\r[Включено]" : "\y[Выключено]");
} else {
iLen += formatex(iMenu[iLen], charsmax(iMenu) - iLen, "\r5. \yПистолет: \w%s^n", iPistol);
iLen += formatex(iMenu[iLen], charsmax(iMenu) - iLen, "\r6. \wНе Показывать меню %s^n", g_iEnable[id] != 0 ? "\r[Включено]" : "\y[Выключено]");
}
iLen += formatex(iMenu[iLen], charsmax(iMenu) - iLen, "^n\r0. Выход");
show_menu(id, g_szKeysMenu, iMenu, -1, "VipMenu");
has_used[id] = true;
}
else
{
PrintChat( id, "^1[^4%s^1]^1 Вы уже использовали .Дождитесь след раунда", PREFIX )
return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
public Handle_VipMenu(id, key) {
if(!is_user_alive(id) && key != 9) {
PrintChat(id, "^1[^4%s^1]^1 Вы умерли и не можете взять в ^3VIP^1.", PREFIX);
return PLUGIN_HANDLED;
}
switch(key) {
case 0: {
if(!isAllowRound(id, WPNBLOCK)) return PLUGIN_HANDLED;
fm_strip_prim(id);
fm_give_item(id, "weapon_ak47");
fm_set_user_bpammo(id, CSW_AK47, 90);
}
case 1: {
if(!isAllowRound(id, WPNBLOCK)) return PLUGIN_HANDLED;
fm_strip_prim(id);
fm_give_item(id, "weapon_m4a1");
fm_set_user_bpammo(id, CSW_M4A1, 90);
}
case 2: {
if(!isAllowRound(id, WPNBLOCK)) return PLUGIN_HANDLED;
fm_strip_prim(id);
fm_give_item(id, "weapon_famas");
fm_set_user_bpammo(id, CSW_FAMAS, 90);
}
case 3: {
if(!isAllowRound(id, WPNBLOCK)) return PLUGIN_HANDLED;
fm_strip_prim(id);
fm_give_item(id, "weapon_awp");
fm_set_user_bpammo(id, CSW_AWP, 30);
}
case 4: {
if(!isAllowRound(id, VIPBLOCK)) return PLUGIN_HANDLED;
if(g_iPistol[id] >= 2) g_iPistol[id] = 0;
else g_iPistol[id]++;
GivePistol(id, g_iPistol[id]);
Show_VipMenu(id);
}
case 5: {
if(!isAllowRound(id, VIPBLOCK)) return PLUGIN_HANDLED;
g_iEnable[id] = g_iEnable[id] ? 0 : 1;
Show_VipMenu(id);
}
}
return PLUGIN_HANDLED;
}
bool:isAllowRound(id, blockid) {
if(g_numRound < blockid) {
PrintChat(id, "^1[^4%s^1]^1 Ждите %d раунд%s, чтобы взять в ^3VIP^1.", PREFIX, blockid - g_numRound, blockid - g_numRound == 1 ? "" : "а");
Show_VipMenu(id);
return false;
}
return true;
}
stock GivePistol(const id, pistol) {
switch(pistol) {
case -1: return;
case 0: {
fm_strip_second(id);
fm_give_item(id, "weapon_deagle");
fm_set_user_bpammo(id, CSW_DEAGLE, 35);
}
case 1: {
fm_strip_second(id);
fm_give_item(id, "weapon_glock18");
fm_set_user_bpammo(id, CSW_GLOCK18, 100);
}
case 2: {
fm_strip_second(id);
fm_give_item(id, "weapon_usp");
fm_set_user_bpammo(id, CSW_USP, 100);
}
}
}
stock fm_strip_second(const id) {
for(new i = 0; i < 6; i++) {
if(user_has_weapon(id, g_szCswSecond[i])) {
fm_strip_user_gun(id, g_szCswSecond[i]);
break;
}
}
}
stock fm_strip_prim(const id) {
for(new i = 0; i < 18; i++) {
if(user_has_weapon(id, g_szCswPrim[i])) {
fm_strip_user_gun(id, g_szCswPrim[i]);
break;
}
}
}
stock Player_GetName(const id) {
new szName[32]; get_user_name(id, szName, charsmax(szName));
return szName;
}
stock fm_set_user_bpammo(id, wpnid, ammoid) {
new iOffset;
switch(wpnid) {
case CSW_AWP: iOffset = 377; // ammo_338magnum
case CSW_SCOUT, CSW_AK47, CSW_G3SG1: iOffset = 378; // ammo_762nato
case CSW_M249: iOffset = 379; // ammo_556natobox
case CSW_FAMAS, CSW_M4A1, CSW_AUG, CSW_SG550, CSW_GALI, CSW_SG552: iOffset = 380; // ammo_556nato
case CSW_M3, CSW_XM1014: iOffset = 381; // ammo_buckshot
case CSW_USP, CSW_UMP45, CSW_MAC10: iOffset = 382; // ammo_45acp
case CSW_FIVESEVEN, CSW_P90: iOffset = 383; // ammo_57mm
case CSW_DEAGLE: iOffset = 384; // ammo_50ae
case CSW_P228: iOffset = 385; // ammo_357sig
case CSW_GLOCK18, CSW_MP5NAVY, CSW_TMP, CSW_ELITE: iOffset = 386; // ammo_9mm
case CSW_FLASHBANG: iOffset = 387;
case CSW_HEGRENADE: iOffset = 388;
case CSW_SMOKEGRENADE: iOffset = 389;
case CSW_C4: iOffset = 390;
default: return;
}
set_pdata_int(id, iOffset, ammoid, 5);
}
stock PrintChat(const id, const input[], any:...) {
new count = 1, players[32], msg[191], i;
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4")
replace_all(msg, 190, "!y", "^1")
replace_all(msg, 190, "!t", "^3")
if(id) players[0] = id;
else get_players(players, count, "ch")
for(i = 0; i < count; i++) {
if(is_user_connected(players[i])) {
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}