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

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

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

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

> Информационная доска

Данный раздел предназначен для обсуждения, а также решения технических проблем связанных с серверной частью. Обсуждения касательно игровых клиентов ведутся здесь.

1. Во время создания новой темы аккуратно оформляйте её, не допускайте грамматических ошибок.
2. Описывая проблему старайтесь, как можно больше рассказать о ней, а так же о действиях с сервером после которых она возникла, по возможности подкрепите информацию логами.
3. Если вопрос касается проблемы в работе сервера, то обязательно прикрепляйте список плагинов (введите в консоли сервера: meta list и amxx plugins), настройки server.cfg, логи. Так же указывайте операционную систему, версию HLDS (введите к консоли сервера: version) и где хостится сервер.

Длинную информацию скрывайте под спойлер.

Опять AmxBabans

Nathan
сообщение 13.10.2012, 12:11
Сообщение #1
Стаж: 14 лет

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

Привет , форумчане .
Вообще очередной трабл с амксбанс.
Вчера установил АмксБанс на сервер , все банило , сервер видит , сервер не падает , но сегодня по каким-то причинам тупо нельзя забанить .
Сервер не может забанить , админ тоже .

Логи_Ерро
L 10/13/2012 - 10:24:22: Start of error session.
L 10/13/2012 - 10:24:22: Info (map "de_dust2x2") (file "addons/amxmodx/logs/error_20121013.log")
L 10/13/2012 - 10:24:22: [FUN] Item "ammo_308" failed to create
L 10/13/2012 - 10:24:22: [AMXX] Run time error 10 (plugin "weaponmenu.amxx") (native "give_item") - debug not enabled!
L 10/13/2012 - 10:24:22: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 10/13/2012 - 11:12:53: Start of error session.
L 10/13/2012 - 11:12:53: Info (map "de_dust2x2") (file "addons/amxmodx/logs/error_20121013.log")
L 10/13/2012 - 11:12:53: [FUN] Item "ammo_308" failed to create
L 10/13/2012 - 11:12:53: [AMXX] Run time error 10 (plugin "weaponmenu.amxx") (native "give_item") - debug not enabled!
L 10/13/2012 - 11:12:53: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).
L 10/13/2012 - 11:16:11: [FUN] Item "ammo_308" failed to create
L 10/13/2012 - 11:16:11: [AMXX] Run time error 10 (plugin "weaponmenu.amxx") (native "give_item") - debug not enabled!
L 10/13/2012 - 11:16:11: [AMXX] To enable debug mode, add "debug" after the plugin name in plugins.ini (without quotes).



Логи
L 10/13/2012 - 13:06:13: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:06:13: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `bid`, `ban_created`, `ban_length`, `cs_ban_reason`, `admin_nick`, `admin_id`, `admin_ip`, `player_nick`, `player_id`, `player_ip`, `server_name`, `server_ip`, `ban_type` FROM `amx_bans` WHERE ((`player_id` = 'STEAM_0:0:1412888841' AND `ban_type` = 'S') OR (`player_ip` = '78.26.128.194' AND `ban_type` = 'SI')) AND `expired` = '0';
L 10/13/2012 - 13:06:17: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:06:17: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:06:17: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `fid`, `reason`, `created`, `length` FROM `amx_flagged` WHERE `player_id` = 'STEAM_0:0:1412888841' OR `player_ip` = '78.26.128.194' ORDER BY `length` ASC;
L 10/13/2012 - 13:06:31: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:06:31: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:06:31: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `bid`, `ban_created`, `ban_length`, `cs_ban_reason`, `admin_nick`, `admin_id`, `admin_ip`, `player_nick`, `player_id`, `player_ip`, `server_name`, `server_ip`, `ban_type` FROM `amx_bans` WHERE ((`player_id` = 'STEAM_ID_LAN' AND `ban_type` = 'S') OR (`player_ip` = '92.112.44.128' AND `ban_type` = 'SI')) AND `expired` = '0';
L 10/13/2012 - 13:06:35: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:06:35: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:06:35: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `bid`, `ban_created`, `ban_length`, `cs_ban_reason`, `admin_nick`, `admin_id`, `admin_ip`, `player_nick`, `player_id`, `player_ip`, `server_name`, `server_ip`, `ban_type` FROM `amx_bans` WHERE ((`player_id` = 'STEAM_ID_LAN' AND `ban_type` = 'S') OR (`player_ip` = '92.112.44.128' AND `ban_type` = 'SI')) AND `expired` = '0';
L 10/13/2012 - 13:06:49: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:06:49: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:06:49: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `fid`, `reason`, `created`, `length` FROM `amx_flagged` WHERE `player_id` = 'STEAM_ID_LAN' OR `player_ip` = '92.112.44.128' ORDER BY `length` ASC;
L 10/13/2012 - 13:07:18: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:07:18: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:07:18: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `bid`, `ban_created`, `ban_length`, `cs_ban_reason`, `admin_nick`, `admin_id`, `admin_ip`, `player_nick`, `player_id`, `player_ip`, `server_name`, `server_ip`, `ban_type` FROM `amx_bans` WHERE ((`player_id` = 'STEAM_0:0:294943781' AND `ban_type` = 'S') OR (`player_ip` = '193.104.85.211' AND `ban_type` = 'SI')) AND `expired` = '0';
L 10/13/2012 - 13:07:18: [ping_kicker.amxx] Highpingkick: "$Gorchik$Pro<<<$$<410><STEAM_0:0:1229668865>" was kicked due highping (Average Ping "148")
L 10/13/2012 - 13:07:21: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:07:21: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:07:21: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `fid`, `reason`, `created`, `length` FROM `amx_flagged` WHERE `player_id` = 'STEAM_0:0:294943781' OR `player_ip` = '193.104.85.211' ORDER BY `length` ASC;
L 10/13/2012 - 13:07:22: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:07:22: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:07:22: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `bid`, `ban_created`, `ban_length`, `cs_ban_reason`, `admin_nick`, `admin_id`, `admin_ip`, `player_nick`, `player_id`, `player_ip`, `server_name`, `server_ip`, `ban_type` FROM `amx_bans` WHERE ((`player_id` = 'STEAM_ID_LAN' AND `ban_type` = 'S') OR (`player_ip` = '46.118.95.244' AND `ban_type` = 'SI')) AND `expired` = '0';
L 10/13/2012 - 13:07:28: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:07:28: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:07:28: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `fid`, `reason`, `created`, `length` FROM `amx_flagged` WHERE `player_id` = 'STEAM_ID_LAN' OR `player_ip` = '46.118.95.244' ORDER BY `length` ASC;
L 10/13/2012 - 13:07:28: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:07:28: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:07:28: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `bid`, `ban_created`, `ban_length`, `cs_ban_reason`, `admin_nick`, `admin_id`, `admin_ip`, `player_nick`, `player_id`, `player_ip`, `server_name`, `server_ip`, `ban_type` FROM `amx_bans` WHERE ((`player_id` = 'STEAM_0:0:1229668865' AND `ban_type` = 'S') OR (`player_ip` = '46.202.245.55' AND `ban_type` = 'SI')) AND `expired` = '0';
L 10/13/2012 - 13:07:33: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:07:33: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:07:33: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `fid`, `reason`, `created`, `length` FROM `amx_flagged` WHERE `player_id` = 'STEAM_0:0:1229668865' OR `player_ip` = '46.202.245.55' ORDER BY `length` ASC;
L 10/13/2012 - 13:08:04: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:08:04: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:08:04: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `bid`, `ban_created`, `ban_length`, `cs_ban_reason`, `admin_nick`, `admin_id`, `admin_ip`, `player_nick`, `player_id`, `player_ip`, `server_name`, `server_ip`, `ban_type` FROM `amx_bans` WHERE ((`player_id` = 'STEAM_0:0:1426315100' AND `ban_type` = 'S') OR (`player_ip` = '178.219.195.137' AND `ban_type` = 'SI')) AND `expired` = '0';
L 10/13/2012 - 13:08:12: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:08:12: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:08:12: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `bid`, `ban_created`, `ban_length`, `cs_ban_reason`, `admin_nick`, `admin_id`, `admin_ip`, `player_nick`, `player_id`, `player_ip`, `server_name`, `server_ip`, `ban_type` FROM `amx_bans` WHERE ((`player_id` = 'STEAM_0:0:1426315100' AND `ban_type` = 'S') OR (`player_ip` = '178.219.195.137' AND `ban_type` = 'SI')) AND `expired` = '0';
L 10/13/2012 - 13:08:16: [amxbans_core.amxx] Login: "Anubis<421><STEAM_0:0:37263913><>" became an admin (account "STEAM_0:0:37263913") (access "abcdefghijklmnopqrstu") (address "37.52.0.137") (nick "") (static 0)
L 10/13/2012 - 13:08:17: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:08:17: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:08:17: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `fid`, `reason`, `created`, `length` FROM `amx_flagged` WHERE `player_id` = 'STEAM_0:0:1426315100' OR `player_ip` = '178.219.195.137' ORDER BY `length` ASC;
L 10/13/2012 - 13:08:19: [amxbans_core.amxx] Login: "Anubis<422><STEAM_0:0:37263913><>" became an admin (account "STEAM_0:0:37263913") (access "abcdefghijklmnopqrstu") (address "37.52.0.137") (nick "") (static 0)
L 10/13/2012 - 13:08:26: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:08:26: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:08:26: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `bid`, `ban_created`, `ban_length`, `cs_ban_reason`, `admin_nick`, `admin_id`, `admin_ip`, `player_nick`, `player_id`, `player_ip`, `server_name`, `server_ip`, `ban_type` FROM `amx_bans` WHERE ((`player_id` = 'STEAM_ID_LAN' AND `ban_type` = 'S') OR (`player_ip` = '91.124.12.223' AND `ban_type` = 'SI')) AND `expired` = '0';
L 10/13/2012 - 13:08:42: [amxbans_main.amxx] [AMXBans] Ошибка при соединении!
L 10/13/2012 - 13:08:42: [amxbans_main.amxx] [AMXBans] Сообщение: User 'hgfhDFd3' has exceeded the 'max_user_connections' resource (current value: 5) (1226)
L 10/13/2012 - 13:08:42: [amxbans_main.amxx] [AMXBans] Выполнение запроса: SELECT `fid`, `reason`, `created`, `length` FROM `amx_flagged` WHERE `player_id` = 'STEAM_ID_LAN' OR `player_ip` = '91.124.12.223' ORDER BY `length` ASC;
L 10/13/2012 - 13:09:03: [ping_kicker.amxx] Highpingkick: "$Gorchik$Pro<<<$$<418><STEAM_0:0:1229668865>" was kicked due highping (Average Ping "162")
L 10/13/2012 - 13:09:12: [mapsmenu.amxx] Cmd: "Mark Twain<402><STEAM_0:1:15192298><>" changelevel "de_dust2x2"
L 10/13/2012 - 13:09:14: -------- Mapchange to de_dust2x2 --------


Как я понял - амксбанс не может приконнектится к вебхостингу , но я не понимаю почему? ведь вчера все было нормально .
з.ы. если так важно , то хостинг _zahostim.com
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
proskill
сообщение 13.10.2012, 12:23
Сообщение #2
Стаж: 13 лет

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

Может что-то наковырял с sql.cfg?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Nathan
сообщение 13.10.2012, 12:26
Сообщение #3
Стаж: 14 лет

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

proskill,
Нет .
sql.cfg
amx_sql_host "*****"
amx_sql_user "hgfhDFd3"
amx_sql_pass "*******"
amx_sql_db "chumachechyy_hgfhDFd3"
amx_sql_table "admins"
amx_sql_type "mysql"


modules.ini
fun
engine
fakemeta
geoip
sockets
regex
nvault
cstrike
csx
hamsandwich
mysql
sqlite
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
proskill
сообщение 13.10.2012, 12:28
Сообщение #4
Стаж: 13 лет

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

Цитата(Nathan @ 13.10.2012, 13:26) *
proskill,
Нет .
sql.cfg
amx_sql_host "*****"
amx_sql_user "hgfhDFd3"
amx_sql_pass "*******"
amx_sql_db "chumachechyy_hgfhDFd3"
amx_sql_table "admins"
amx_sql_type "mysql"


modules.ini
fun
engine
fakemeta
geoip
sockets
regex
nvault
cstrike
csx
hamsandwich
mysql
sqlite

Обратись к своему хостеру тогда
- На _amx-x.ru есть переделанный такой weaponmenu, без ошибок + функционал немножко изменён.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Nathan
сообщение 13.10.2012, 12:41
Сообщение #5
Стаж: 14 лет

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

meta list
Currently running plugins:
[ 1] AMX Mod X, v1.8.1.3746, Aug 16 2008, by AMX Mod X Dev Team, see http://www.amxmodx.org
[ 2] dproto, v0.9.179, 2012-08-05, by Crock, see
[ 3] Fun, v1.8.1.3746, Aug 16 2008, by AMX Mod X Dev Team, see http://www.amxmodx.org
[ 4] Engine, v1.8.1.3746, Aug 16 2008, by AMX Mod X Dev Team, see http://www.amxmodx.org
[ 5] FakeMeta, v1.8.1.3746, Aug 16 2008, by AMX Mod X Dev Team, see http://www.amxmodx.org
[ 6] CStrike, v1.8.1.3746, Aug 16 2008, by AMX Mod X Dev Team, see http://www.amxmodx.org
[ 7] CSX, v1.8.1.3746, Aug 16 2008, by AMX Mod X Dev Team, see http://www.amxmodx.org/
[ 8] Ham Sandwich, v1.8.1.3746, Aug 16 2008, by AMX Mod X Dev Team, see http://www.amxmodx.org
[ 9] MySQL, v1.8.1.3746, Aug 16 2008, by AMX Mod X Dev Team, see http://www.amxmodx.org/
[ 10] SQLite, v1.8.1.3746, Aug 16 2008, by AMX Mod X Dev Team, see http://www.amxmodx.org/


proskill,
У меня веапон меню переделан тоже немного :
Первые 3 раунда нельзя юзать weaponmenu + когда даешь оружие табличка со списком пропадает , тубишь треба юзать заново оружейку .

ответ хостинга :
Цитата
От: WereWolf - 2012-10-13 13:38:17
Добрый день. Ошибка вот в чем. max_user_connections. Нельзя одновременно создавать больше 5 коннектов к базе
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 13.10.2012, 13:39
Сообщение #6


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

Стаж: 16 лет

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

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

вот и причину тебе сказали)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Nathan
сообщение 13.10.2012, 13:46
Сообщение #7
Стаж: 14 лет

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

Legenda,
угу .
подал запрос на манибек .
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
cah9
сообщение 13.10.2012, 14:00
Сообщение #8
Стаж: 13 лет

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

Weaponmenu
Код
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

// This is ONLY Required to Compile for AMX Mod X v1.0
// Comment or Remove to compile for AMX 0.9.9
#include <fun>

// Comment or Remove to the issuance of arms drop occurred
//#define WEAPONS_DROP

// Max Values for Building Menus
#define MAX_PLAYERS     32
#define MAX_WEAPONS     24
#define MAX_AMMO        10
#define MAX_ITEMS        8
#define MAX_DISPLAY      8

// Menu Type Indexes
#define MT_PISTOL        0
#define MT_SHOTGUN       1
#define MT_SMG           2
#define MT_RIFLE         3
#define MT_MACHINE       4
#define MT_PAMMO         5
#define MT_SAMMO         6
#define MT_EQUIP         7
#define MT_EXTRA         8

// Array Index Offsets for Pin-pointing correct weapon
#define OFFSET_SHOTGUN   6
#define OFFSET_SMG       8
#define OFFSET_RIFLE    13
#define OFFSET_MACHINE  23

// Max Menu Options for Each Menu
// (Machine Gun Menu is Only 1 Option, so no array needed for it)
#define MO_MAX_MAIN      9
#define MO_MAX_PISTOL    6
#define MO_MAX_SHOTGUN   2
#define MO_MAX_SMG       5
#define MO_MAX_RIFLE    10
#define MO_MAX_EQUIP     8
#define MO_MAX_EXTRA    14


// Main Menu Text
new g_szMainMenuTxt[MO_MAX_MAIN][] = {
"Пистолеты",
"Дробовики",
"Автоматы",
"Винтовки",
"Пулемёты",
"Пули для автоматов",
"Пули для пистолетов",
"Снаряжение",
"Дополнительно"
}

// Pistols Menu Text
new g_szPistolMenuTxt[MO_MAX_PISTOL][] = {
"USP",
"Глок",
"Deagle",
"228 Компакт",
"Dual Elites",
"Five-Seven"
}

//Shotguns Section
new g_szShotgunMenuTxt[MO_MAX_SHOTGUN][] = {
"Полуавтомат. дробовик",
"Автомат. дробовик"
}

//SMG Section
new g_szSmgMenuTxt[MO_MAX_SMG][] = {
"МП-5",
"ТМП",
"Ц90",
"УЗИшка",
"УМП"
}

//Rifles Section
new g_szRifleMenuTxt[MO_MAX_RIFLE][] = {
"Clarion (Famas)",
"Krieg SG-552",
"Калаш (AK-47)",
"Эмка (M4A1)",
"Bullpup (AUG)",
"Муха (Scout)",
"Слон (AWP)",
"Скорострелка (CT)",
"Скорострелка (T)",
"Galil (B-41 у T)"
}

//Machine Guns Section
new g_szMachineMenuTxt[] = "M249 (Para)"

//Equipment Section
new g_szEquipMenuTxt[MO_MAX_EQUIP][] = {
"Броня",
"Броня + Шлем",
"Флэшка",
"Граната",
"Дымовая граната",
"Кусачки",
"Прибор ночного видения",
"Щит"
}

//Extras Section
new g_szExtraMenuTxt[MO_MAX_EXTRA][] = {
"Все оружия",
"M3 +дигл +гранаты",
"MP5 +дигл +гранаты",
"Clarion +дигл +гранаты",
"Galil +дигл +гранаты",
"M4A1 +дигл +гранаты",
"AK-47 +дигл +гранаты",
"Krieg SG552 +дигл +гранаты",
"Bullpup +дигл +гранаты",
"Пулемет +дигл +гранаты",
"Муха +дигл +гранаты",
"Скорострелка +дигл +гранаты",
"AWP +дигл +гранаты",
"Все типы гранат"
}

// Names of Weapons for give_item() native
new g_szWeaponList[MAX_WEAPONS][] = {
  "weapon_usp", "weapon_glock18", "weapon_deagle", "weapon_p228", "weapon_elite",
  "weapon_fiveseven", "weapon_m3", "weapon_xm1014", "weapon_mp5navy", "weapon_tmp",
  "weapon_p90", "weapon_mac10", "weapon_ump45", "weapon_famas", "weapon_sg552",
  "weapon_ak47", "weapon_m4a1", "weapon_aug", "weapon_scout", "weapon_awp",
  "weapon_sg550", "weapon_g3sg1", "weapon_galil", "weapon_m249"
}

// Names of Equipment Items for give_item() native
new g_szItemsList[MAX_ITEMS][] = {
  "item_kevlar", "item_assaultsuit", "weapon_flashbang", "weapon_hegrenade",
  "weapon_smokegrenade", "item_thighpack", "item_nvgs", "weapon_shield"
}

// Names of Ammo Packs for give_item() native
new g_szAmmoList[MAX_AMMO][] = {
  "ammo_45acp", "ammo_9mm", "ammo_50ae", "ammo_357sig",
  "ammo_57mm", "ammo_buckshot", "ammo_556nato", "ammo_762nato",
  "ammo_338magnum", "ammo_556natobox"
}

new g_nWeaponData[MAX_WEAPONS][2] = {
  { 0, 8 }, { 1, 8 }, { 2, 5 }, { 3, 6 }, { 1, 4 },
  { 4, 4 }, { 5, 4 }, { 5, 4 }, { 1, 4 }, { 1, 4 },
  { 4, 4 }, { 0, 6 }, { 0, 6 }, { 6, 3 }, { 6, 3 },
  { 7, 3 }, { 6, 3 }, { 6, 3 }, { 7, 3 }, { 8, 3 },
  { 6, 3 }, { 7, 3 }, { 9, 3 }, { 9, 7 }
}

// Tracks what page in menu you're on in Multi-Page Menus (Like Rifles and Players Menu)
// Multiple players may open menu at same time, so we keep an array of MAX_PLAYERS (32)
// to track each individual's menu page.
// Player IDs range from 1-32 but our Array ranges from 0-31 so we minus 1 from PlayerID
// when we use this array.  Example: g_nMenuPosition[ id - 1 ]
new g_nMenuPosition[MAX_PLAYERS]

// We use this to track what menu the user is actually in so we can determine which menu
// to display next.  Different Menu types are: Main, Pistols, Shotguns, SMGs, Rifles, etc..
new g_nMenuType[MAX_PLAYERS]

// Tracks which option in the menu was chosen
new g_nMenuOption[MAX_PLAYERS]


// The following are used for the Players Menu to Track Player Chosen
new g_nMenuPlayers[MAX_PLAYERS][MAX_PLAYERS]
new g_nMenuPlayersNum[MAX_PLAYERS]


public plugin_init()
{
    register_plugin( "Weapon Menu", "1.0", "Mattcook & xeroblood" )

    register_clcmd( "amx_weaponmenu", "ShowWeaponMenu", ADMIN_MENU, "Shows The Weapon Menu" )
    register_clcmd( "weaponmenu", "ShowWeaponMenu", ADMIN_MENU, "Shows The Weapon Menu" )

    register_cvar( "sv_weaponmenu_smoke", "1" ) // Give Smoke Nades?  (1 = Yes, 0 = No)
    register_cvar( "sv_weaponmenu_state", "1" ) // Weapon Menu Return State
                                                // 0 = Exit Menu After Give-Item
                                                // 1 = Return to Players Menu
                                                // 2 = Return to Weapons Menu

    register_menucmd( register_menuid("Weapons Menu:"),      1023, "MainMenuCmd" )
    register_menucmd( register_menuid("Pistols Menu:"),      1023, "RegularMenuCmd" )
    register_menucmd( register_menuid("Shotguns Menu:"),     1023, "RegularMenuCmd" )
    register_menucmd( register_menuid("SMGs Menu:"),         1023, "RegularMenuCmd" )
    register_menucmd( register_menuid("Rifles Menu:"),       1023, "RifleMenuCmd" )
    register_menucmd( register_menuid("Machine Guns Menu:"), 1023, "RegularMenuCmd" )
    register_menucmd( register_menuid("Equipment Menu:"),    1023, "RegularMenuCmd" )
    register_menucmd( register_menuid("Extras Menu:"),       1023, "ExtraMenuCmd" )
    register_menucmd( register_menuid("Players Menu:"),      1023, "PlayerMenuCmd" )

    return PLUGIN_CONTINUE
}

public ShowWeaponMenu( id, lvl, cid )
{
    if( cmd_access( id, lvl, cid, 0 ) )
    {
        g_nMenuPosition[id-1] = 0
        ShowMainMenu( id )
    }
    return PLUGIN_HANDLED
}

///////////////////////////////////////////////////////////////////////////////////////////
//
//      Menu Handling Code Below
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Handles Menu Menu
public MainMenuCmd( id, key )
{
    // Track which Menu Type was chosen
    g_nMenuType[id-1] = key

    switch( key )
    {
        case 0: ShowPistolMenu( id )
        case 1: ShowShotgunMenu( id )
        case 2: ShowSmgMenu( id )
        case 3: ShowRifleMenu( id, g_nMenuPosition[id-1] = 0 )
        case 4: ShowMachineMenu( id )
        case 5: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
        case 6: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
        case 7: ShowEquipMenu( id )
        case 8: ShowExtraMenu( id, g_nMenuPosition[id-1] = 0 )
        default: { /* Do Nothing Here (Exit Option) */ }
    }
    return PLUGIN_HANDLED
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Handles all Weapon Menus Except Multi-Page ones like Rifles Menu
public RegularMenuCmd( id, key )
{
    // Track which Option was chosen
    g_nMenuOption[id-1] = key

    switch( key )
    {
        case 9:
        {
            // User Chose to go Back to Previous Menu
            ShowMainMenu( id )
        }
        default: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
    }
    return PLUGIN_HANDLED
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Handles Multi-Page Rifles Menu
public RifleMenuCmd( id, key )
{
    // Track which Option was chosen
    g_nMenuOption[id-1] = g_nMenuPosition[id-1] * MAX_DISPLAY + key

    switch( key )
    {
        case 8:
        {
            // User Selected "More..." Option
            ShowRifleMenu( id, ++g_nMenuPosition[id-1] )
        }
        case 9:
        {
            // User Chose to go Back to Previous Menu
            if( g_nMenuPosition[id-1] )
            {
                ShowRifleMenu( id, --g_nMenuPosition[id-1] )
            }else
            {
                ShowMainMenu( id )
            }
        }
        default: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
    }
    return PLUGIN_HANDLED
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Handles Multi-Page Players Menu
public PlayerMenuCmd( id, key )
{
    switch( key )
    {
        case 8:
        {
            // User Selected "More..." Option
            ShowPlayerMenu( id, ++g_nMenuPosition[id-1] )
        }
        case 9:
        {
            // User Chose to go Back to Previous Menu
            if( g_nMenuPosition[id-1] )
            {
                ShowPlayerMenu( id, --g_nMenuPosition[id-1] )
            }else
            {
                ShowMainMenu( id )
            }
        }
        default:
        {
            // Find which Player was chosen
            new nPlayerID = g_nMenuPlayers[id-1][g_nMenuPosition[id-1] * MAX_DISPLAY + key]

            // Give Player Selected Item
            GiveMenuItem( id, nPlayerID )

            // Check which Menu to Re-Open (if any)
            switch( clamp(get_cvar_num("sv_weaponmenu_state"), 0, 2) )
            {
                case 1: ShowPlayerMenu( id, g_nMenuPosition[id-1] ) // Players Menu (At Last Position)
                case 2: ShowMainMenu( id ) // Weapons Menu
            }
        }
    }
    return PLUGIN_HANDLED
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Handles Multi-Page Extras Menu
public ExtraMenuCmd( id, key )
{
    // Track which Option was chosen
    g_nMenuOption[id-1] = g_nMenuPosition[id-1] * MAX_DISPLAY + key

    switch( key )
    {
        case 8:
        {
            // User Selected "More..." Option
            ShowExtraMenu( id, ++g_nMenuPosition[id-1] )
        }
        case 9:
        {
            // User Chose to go Back to Previous Menu
            if( g_nMenuPosition[id-1] )
            {
                ShowExtraMenu( id, --g_nMenuPosition[id-1] )
            }else
            {
                ShowMainMenu( id )
            }
        }
        default: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
    }
    return PLUGIN_HANDLED
}
//
///////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////
//
//      Menu Building Code Below
//
///////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////
// Build Main Menu Section
public ShowMainMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "Weapons Menu:^n" )
    for( i = 0; i < MO_MAX_MAIN; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szMainMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Exit" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Pistol Menu Section
public ShowPistolMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "\yPistols Menu:\w^n" )
    for( i = 0; i < MO_MAX_PISTOL; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szPistolMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Shotgun Menu Section
public ShowShotgunMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "\yShotguns Menu:\w^n" )
    for( i = 0; i < MO_MAX_SHOTGUN; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szShotgunMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build SMG Menu Section
public ShowSmgMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[2256]

    nLen = format( szMenuBody, 255, "\ySMGs Menu:\w^n" )
    for( i = 0; i < MO_MAX_SMG; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szSmgMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Rifle Menu Section
public ShowRifleMenu( id, pos )
{
    if( pos < 0 ) return

    new i, j = 0, nStart, nEnd, nLen, nKeys = (1<<9)
    new szMenuBody[512]

    nStart = pos * MAX_DISPLAY

    if( nStart >= MO_MAX_RIFLE )
        nStart = pos = g_nMenuPosition[id-1] = 0

    nLen = format( szMenuBody, 511, "\yRifles Menu:\R%d/2^n\w^n", pos + 1 )

    nEnd = nStart + MAX_DISPLAY
    if( nEnd > MO_MAX_RIFLE ) nEnd = MO_MAX_RIFLE

    for( i = nStart; i < nEnd; i++ )
    {
        nKeys |= (1<<j++)
        nLen += format( szMenuBody[nLen], (511-nLen), "%d. %s^n", j, g_szRifleMenuTxt[i] )
    }

    if( nEnd != MO_MAX_RIFLE )
    {
        format( szMenuBody[nLen], (511-nLen), "^n9. More...^n0. Back" )
        nKeys |= (1<<8)
    }
    else format( szMenuBody[nLen], (511-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Machine Gun Menu Section
public ShowMachineMenu( id )
{
    new nLen, nKeys = (1<<0|1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "\yMachine Guns Menu:\w^n" )
    nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", 1, g_szMachineMenuTxt )
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Equipment Menu Section
public ShowEquipMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "\yEquipment Menu:\w^n" )
    for( i = 0; i < MO_MAX_EQUIP; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szEquipMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Extras Menu Section
/*
public ShowExtraMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "\yExtras Menu:\w^n" )
    for( i = 0; i < MO_MAX_EXTRA; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szExtraMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}*/

public ShowExtraMenu( id, pos )
{
    if( pos < 0 ) return

    new i, j = 0, nStart, nEnd, nLen, nKeys = (1<<9)
    new szMenuBody[512]

    nStart = pos * MAX_DISPLAY

    if( nStart >= MO_MAX_EXTRA )
        nStart = pos = g_nMenuPosition[id-1] = 0

    nLen = format( szMenuBody, 511, "\yExtras Menu:\R%d/2^n\w^n", pos + 1 )

    nEnd = nStart + MAX_DISPLAY
    if( nEnd > MO_MAX_EXTRA ) nEnd = MO_MAX_EXTRA

    for( i = nStart; i < nEnd; i++ )
    {
        nKeys |= (1<<j++)
        nLen += format( szMenuBody[nLen], (511-nLen), "%d. %s^n", j, g_szExtraMenuTxt[i] )
    }

    if( nEnd != MO_MAX_EXTRA )
    {
        format( szMenuBody[nLen], (511-nLen), "^n9. More...^n0. Back" )
        nKeys |= (1<<8)
    }
    else format( szMenuBody[nLen], (511-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}

//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Player Menu Section
public ShowPlayerMenu( id, pos )
{
    if( pos < 0 ) return

    get_players( g_nMenuPlayers[id-1], g_nMenuPlayersNum[id-1] )

    new i, j = 0, idx
    new szUserName[32], szMenuBody[512]
    new nStart = pos * MAX_DISPLAY

    if( nStart >= g_nMenuPlayersNum[id-1] )
        nStart = pos = g_nMenuPosition[id-1] = 0

    new nLen = format( szMenuBody, 511, "\yPlayers Menu:\R%d/%d^n\w^n", (pos+1), (g_nMenuPlayersNum[id-1] / MAX_DISPLAY + ((g_nMenuPlayersNum[id-1] % MAX_DISPLAY) ? 1 : 0 )) )
    new nEnd = nStart + MAX_DISPLAY
    new nKeys = (1<<9)

    if( nEnd > g_nMenuPlayersNum[id-1] )
        nEnd = g_nMenuPlayersNum[id-1]

    for( i = nStart; i < nEnd; i++ )
    {
        idx = g_nMenuPlayers[id-1][i]
        get_user_name( idx, szUserName, 31 )

        nKeys |= (1<<j++)
        nLen += format( szMenuBody[nLen], (511-nLen), "%d. %s^n", j, szUserName )
    }

    if( nEnd != g_nMenuPlayersNum[id-1] )
    {
        nKeys |= (1<<8)
        format( szMenuBody[nLen], (511-nLen), "^n9. More...^n0. Back" )
    }
    else format( szMenuBody[nLen], (511-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////
//
//      Weapon Giving Code Below
//
///////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////
//  Following Functions Actually Give The Items
//
stock GiveMenuItem( id, p_nPlayerID )
{
    new szUserName[32]
    get_user_name( p_nPlayerID, szUserName, 31 )

    switch( g_nMenuType[id-1] )
    {
        case MT_PISTOL:  GiveSecondaryPlayerWeapon( p_nPlayerID, g_nMenuOption[id-1] )
        case MT_SHOTGUN: GivePlayerWeapon( p_nPlayerID, (OFFSET_SHOTGUN + g_nMenuOption[id-1]) )
        case MT_SMG:     GivePlayerWeapon( p_nPlayerID, (OFFSET_SMG + g_nMenuOption[id-1]) )
        case MT_RIFLE:   GivePlayerWeapon( p_nPlayerID, (OFFSET_RIFLE + g_nMenuOption[id-1]) )
        case MT_MACHINE: GivePlayerWeapon( p_nPlayerID, (OFFSET_MACHINE + g_nMenuOption[id-1]) )
        case MT_PAMMO:   GivePrimaryAmmo( p_nPlayerID )
        case MT_SAMMO:   GiveSecondaryAmmo( p_nPlayerID )
        case MT_EQUIP:   GivePlayerItem( p_nPlayerID, g_nMenuOption[id-1] )
        case MT_EXTRA:   GivePlayerExtra( p_nPlayerID, g_nMenuOption[id-1] )
    }
    return
}

stock GiveSecondaryPlayerWeapon( id, nWeaponIdx )
{
    if( !is_user_alive(id) || (nWeaponIdx < 0) || (nWeaponIdx >= 6) )
        return

    #if defined WEAPONS_DROP
    drop_s_weapons(id)
    #endif

    give_item( id, g_szWeaponList[nWeaponIdx] )
    for( new i = 0; i < g_nWeaponData[nWeaponIdx][1]; i++ )
        give_item( id, g_szAmmoList[g_nWeaponData[nWeaponIdx][0]] )

    return
}

stock GivePlayerWeapon( id, nWeaponIdx )
{
    if( !is_user_alive(id) || (nWeaponIdx < 6) || (nWeaponIdx >= MAX_WEAPONS) )
        return

    #if defined WEAPONS_DROP
    drop_p_weapons(id)
    #endif

    give_item( id, g_szWeaponList[nWeaponIdx] )
    for( new i = 0; i < g_nWeaponData[nWeaponIdx][1]; i++ )
        give_item( id, g_szAmmoList[g_nWeaponData[nWeaponIdx][0]] )

    return
}

stock GivePlayerExtra( id, nExtraIdx )
{
    if( !is_user_alive(id) || (nExtraIdx < 0) || (nExtraIdx >= MO_MAX_EXTRA) )
        return

    #if defined WEAPONS_DROP

    if( 0 < nExtraIdx < 13 )
    {
        drop_p_weapons(id)
        drop_s_weapons(id)
    }
    #endif

    new i, j
    switch( nExtraIdx )
    {
        case 0:   // Give Player All Weapons (+Ammo)
        {
            for( i = 0; i < MAX_WEAPONS; i++ )
            {
                give_item( id, g_szWeaponList[i] )
                for( j = 0; j < g_nWeaponData[i][1]; j++ )
                    give_item( id, g_szAmmoList[g_nWeaponData[i][0]] )
            }
        }
        case 1:   // Give Player M3 Set
        {
            GivePlayerWeapon( id, 6 )   // [6] = M3
            GiveSecondaryPlayerWeapon( id, 2 )   // [2] = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 2:   // Give Player MP5 Navy Set
        {
            GivePlayerWeapon( id, 8 )   // [8] = MP5 Navy
            GiveSecondaryPlayerWeapon( id, 2 )   // [2] = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 3:   // Give Player Clarion Set
        {
            GivePlayerWeapon( id, 13 )  // [13] = Clarion (Famas)
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 4:   // Give Player Galil Set
        {
            GivePlayerWeapon( id, 22 )  // [22] = Galil
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 5:   // Give Player M4A1 Set
        {
            GivePlayerWeapon( id, 16 )  // [16] = M4A1
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 6:   // Give Player AK47 Set
        {
            GivePlayerWeapon( id, 15 )  // [15] = AK47
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 7:   // Give Player Krieg SG552 Set
        {
            GivePlayerWeapon( id, 14 )  // [14] = Krieg SG552
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 8:   // Give Player Bullpup Set
        {
            GivePlayerWeapon( id, 17 )  // [17] = Bullpup
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 9:   // Give Player M249 Set
        {
            GivePlayerWeapon( id, 23 )  // [23] = M249
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 10:   // Give Player Scout Set
        {
            GivePlayerWeapon( id, 18 )  // [18] = Scout
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 11:   // Give Player AutoSniper Set
        {
            GivePlayerWeapon( id, 20 )    // [20] = CT AutoSniper (G3SG1)
            //GivePlayerWeapon( id, 21 )  // [21] = T AutoSniper (SG550)
            GiveSecondaryPlayerWeapon( id, 2 )     // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 12:   // Give Player AWP Set
        {
            GivePlayerWeapon( id, 19 )  // [19] = AWP
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 13:   // Give Player Nades Set
        {
            for( i = 2; i < 5; i++ )
                GivePlayerItem( id, i ) // Flash/HE/Smoke Grenades
        }
    }
    return
}

stock GivePlayerItem( id, nItemIdx )
{
    if( !is_user_alive(id) || (nItemIdx < 0) || (nItemIdx >= MAX_ITEMS) )
        return // Invalid User or Item

    if(nItemIdx == 6)
    cs_set_user_nvg(id, true)

    if( (nItemIdx == 4) && (get_cvar_num("sv_weaponmenu_smoke") < 1) )
        return // Smoke Nades Restricted

    if( nItemIdx == 2 ) // If item is Flashbang, give it twice
        give_item( id, g_szItemsList[nItemIdx] )

    if( nItemIdx != 6 )
        give_item( id, g_szItemsList[nItemIdx] )

    return
}

stock GivePrimaryAmmo( id )
{
    new nWeapons[32], nNum, i, j, k
    new szWeaponName[32]

    // Only give Primary Ammo for Guns Carried
    get_user_weapons( id, nWeapons, nNum )
    for( i = 0; i < nNum; i++ )
    {
        get_weaponname( nWeapons[i], szWeaponName, 31 )
        for( j = OFFSET_SHOTGUN; j < MAX_WEAPONS; j++ )
        {
            if( equali( szWeaponName, g_szWeaponList[j] ) )
            {
                for( k = 0; k < g_nWeaponData[j][1]; k++ )
                    give_item( id, g_szAmmoList[g_nWeaponData[j][0]] )
            }
        }
    }
    return
}

stock GiveSecondaryAmmo( id )
{
    new nWeapons[32], nNum, i, j, k
    new szWeaponName[32]

    // Only give Secondary Ammo for Pistols Carried
    get_user_weapons( id, nWeapons, nNum )
    for( i = 0; i < nNum; i++ )
    {
        get_weaponname( nWeapons[i], szWeaponName, 31 )
        for( j = 0; j < OFFSET_SHOTGUN; j++ )
        {
            if( equali( szWeaponName, g_szWeaponList[j] ) )
            {
                for( k = 0; k < g_nWeaponData[j][1]; k++ )
                    give_item( id, g_szAmmoList[g_nWeaponData[j][0]] )
            }
        }
    }
    return
}

#if defined WEAPONS_DROP
stock drop_p_weapons(id)
{
     static weapons[32], num
     get_user_weapons( id, weapons, num )
    
     for ( new i = 0; i < num; i++ )
     {
          if( ( 1<<weapons[i] ) & ( (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|
                                    (1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|
                                    (1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|
                                    (1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90) ) )
          {
               static wname[32]
               get_weaponname( weapons[i], wname, sizeof wname - 1 )
               engclient_cmd( id, "drop", wname )
          }
     }
}

stock drop_s_weapons(id)
{
     static weapons[32], num
     get_user_weapons( id, weapons, num )
    
     for ( new i = 0; i < num; i++ )
     {
          if( ( 1<<weapons[i] ) & ( (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|
                (1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE) ) )
          {
               static wname[32]
               get_weaponname( weapons[i], wname, sizeof wname - 1 )
               engclient_cmd( id, "drop", wname )
          }
     }
}
#endif
//
//
///////////////////////////////////////////////////////////////////////////////////////////
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя sweet
сообщение 13.10.2012, 14:04
Сообщение #9
Стаж: 15 лет

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

Цитата(c A h @ 13.10.2012, 15:00) *
Weaponmenu
Код
#include <amxmodx>
#include <amxmisc>
#include <cstrike>

// This is ONLY Required to Compile for AMX Mod X v1.0
// Comment or Remove to compile for AMX 0.9.9
#include <fun>

// Comment or Remove to the issuance of arms drop occurred
//#define WEAPONS_DROP

// Max Values for Building Menus
#define MAX_PLAYERS     32
#define MAX_WEAPONS     24
#define MAX_AMMO        10
#define MAX_ITEMS        8
#define MAX_DISPLAY      8

// Menu Type Indexes
#define MT_PISTOL        0
#define MT_SHOTGUN       1
#define MT_SMG           2
#define MT_RIFLE         3
#define MT_MACHINE       4
#define MT_PAMMO         5
#define MT_SAMMO         6
#define MT_EQUIP         7
#define MT_EXTRA         8

// Array Index Offsets for Pin-pointing correct weapon
#define OFFSET_SHOTGUN   6
#define OFFSET_SMG       8
#define OFFSET_RIFLE    13
#define OFFSET_MACHINE  23

// Max Menu Options for Each Menu
// (Machine Gun Menu is Only 1 Option, so no array needed for it)
#define MO_MAX_MAIN      9
#define MO_MAX_PISTOL    6
#define MO_MAX_SHOTGUN   2
#define MO_MAX_SMG       5
#define MO_MAX_RIFLE    10
#define MO_MAX_EQUIP     8
#define MO_MAX_EXTRA    14


// Main Menu Text
new g_szMainMenuTxt[MO_MAX_MAIN][] = {
"Пистолеты",
"Дробовики",
"Автоматы",
"Винтовки",
"Пулемёты",
"Пули для автоматов",
"Пули для пистолетов",
"Снаряжение",
"Дополнительно"
}

// Pistols Menu Text
new g_szPistolMenuTxt[MO_MAX_PISTOL][] = {
"USP",
"Глок",
"Deagle",
"228 Компакт",
"Dual Elites",
"Five-Seven"
}

//Shotguns Section
new g_szShotgunMenuTxt[MO_MAX_SHOTGUN][] = {
"Полуавтомат. дробовик",
"Автомат. дробовик"
}

//SMG Section
new g_szSmgMenuTxt[MO_MAX_SMG][] = {
"МП-5",
"ТМП",
"Ц90",
"УЗИшка",
"УМП"
}

//Rifles Section
new g_szRifleMenuTxt[MO_MAX_RIFLE][] = {
"Clarion (Famas)",
"Krieg SG-552",
"Калаш (AK-47)",
"Эмка (M4A1)",
"Bullpup (AUG)",
"Муха (Scout)",
"Слон (AWP)",
"Скорострелка (CT)",
"Скорострелка (T)",
"Galil (B-41 у T)"
}

//Machine Guns Section
new g_szMachineMenuTxt[] = "M249 (Para)"

//Equipment Section
new g_szEquipMenuTxt[MO_MAX_EQUIP][] = {
"Броня",
"Броня + Шлем",
"Флэшка",
"Граната",
"Дымовая граната",
"Кусачки",
"Прибор ночного видения",
"Щит"
}

//Extras Section
new g_szExtraMenuTxt[MO_MAX_EXTRA][] = {
"Все оружия",
"M3 +дигл +гранаты",
"MP5 +дигл +гранаты",
"Clarion +дигл +гранаты",
"Galil +дигл +гранаты",
"M4A1 +дигл +гранаты",
"AK-47 +дигл +гранаты",
"Krieg SG552 +дигл +гранаты",
"Bullpup +дигл +гранаты",
"Пулемет +дигл +гранаты",
"Муха +дигл +гранаты",
"Скорострелка +дигл +гранаты",
"AWP +дигл +гранаты",
"Все типы гранат"
}

// Names of Weapons for give_item() native
new g_szWeaponList[MAX_WEAPONS][] = {
  "weapon_usp", "weapon_glock18", "weapon_deagle", "weapon_p228", "weapon_elite",
  "weapon_fiveseven", "weapon_m3", "weapon_xm1014", "weapon_mp5navy", "weapon_tmp",
  "weapon_p90", "weapon_mac10", "weapon_ump45", "weapon_famas", "weapon_sg552",
  "weapon_ak47", "weapon_m4a1", "weapon_aug", "weapon_scout", "weapon_awp",
  "weapon_sg550", "weapon_g3sg1", "weapon_galil", "weapon_m249"
}

// Names of Equipment Items for give_item() native
new g_szItemsList[MAX_ITEMS][] = {
  "item_kevlar", "item_assaultsuit", "weapon_flashbang", "weapon_hegrenade",
  "weapon_smokegrenade", "item_thighpack", "item_nvgs", "weapon_shield"
}

// Names of Ammo Packs for give_item() native
new g_szAmmoList[MAX_AMMO][] = {
  "ammo_45acp", "ammo_9mm", "ammo_50ae", "ammo_357sig",
  "ammo_57mm", "ammo_buckshot", "ammo_556nato", "ammo_762nato",
  "ammo_338magnum", "ammo_556natobox"
}

new g_nWeaponData[MAX_WEAPONS][2] = {
  { 0, 8 }, { 1, 8 }, { 2, 5 }, { 3, 6 }, { 1, 4 },
  { 4, 4 }, { 5, 4 }, { 5, 4 }, { 1, 4 }, { 1, 4 },
  { 4, 4 }, { 0, 6 }, { 0, 6 }, { 6, 3 }, { 6, 3 },
  { 7, 3 }, { 6, 3 }, { 6, 3 }, { 7, 3 }, { 8, 3 },
  { 6, 3 }, { 7, 3 }, { 9, 3 }, { 9, 7 }
}

// Tracks what page in menu you're on in Multi-Page Menus (Like Rifles and Players Menu)
// Multiple players may open menu at same time, so we keep an array of MAX_PLAYERS (32)
// to track each individual's menu page.
// Player IDs range from 1-32 but our Array ranges from 0-31 so we minus 1 from PlayerID
// when we use this array.  Example: g_nMenuPosition[ id - 1 ]
new g_nMenuPosition[MAX_PLAYERS]

// We use this to track what menu the user is actually in so we can determine which menu
// to display next.  Different Menu types are: Main, Pistols, Shotguns, SMGs, Rifles, etc..
new g_nMenuType[MAX_PLAYERS]

// Tracks which option in the menu was chosen
new g_nMenuOption[MAX_PLAYERS]


// The following are used for the Players Menu to Track Player Chosen
new g_nMenuPlayers[MAX_PLAYERS][MAX_PLAYERS]
new g_nMenuPlayersNum[MAX_PLAYERS]


public plugin_init()
{
    register_plugin( "Weapon Menu", "1.0", "Mattcook & xeroblood" )

    register_clcmd( "amx_weaponmenu", "ShowWeaponMenu", ADMIN_MENU, "Shows The Weapon Menu" )
    register_clcmd( "weaponmenu", "ShowWeaponMenu", ADMIN_MENU, "Shows The Weapon Menu" )

    register_cvar( "sv_weaponmenu_smoke", "1" ) // Give Smoke Nades?  (1 = Yes, 0 = No)
    register_cvar( "sv_weaponmenu_state", "1" ) // Weapon Menu Return State
                                                // 0 = Exit Menu After Give-Item
                                                // 1 = Return to Players Menu
                                                // 2 = Return to Weapons Menu

    register_menucmd( register_menuid("Weapons Menu:"),      1023, "MainMenuCmd" )
    register_menucmd( register_menuid("Pistols Menu:"),      1023, "RegularMenuCmd" )
    register_menucmd( register_menuid("Shotguns Menu:"),     1023, "RegularMenuCmd" )
    register_menucmd( register_menuid("SMGs Menu:"),         1023, "RegularMenuCmd" )
    register_menucmd( register_menuid("Rifles Menu:"),       1023, "RifleMenuCmd" )
    register_menucmd( register_menuid("Machine Guns Menu:"), 1023, "RegularMenuCmd" )
    register_menucmd( register_menuid("Equipment Menu:"),    1023, "RegularMenuCmd" )
    register_menucmd( register_menuid("Extras Menu:"),       1023, "ExtraMenuCmd" )
    register_menucmd( register_menuid("Players Menu:"),      1023, "PlayerMenuCmd" )

    return PLUGIN_CONTINUE
}

public ShowWeaponMenu( id, lvl, cid )
{
    if( cmd_access( id, lvl, cid, 0 ) )
    {
        g_nMenuPosition[id-1] = 0
        ShowMainMenu( id )
    }
    return PLUGIN_HANDLED
}

///////////////////////////////////////////////////////////////////////////////////////////
//
//      Menu Handling Code Below
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Handles Menu Menu
public MainMenuCmd( id, key )
{
    // Track which Menu Type was chosen
    g_nMenuType[id-1] = key

    switch( key )
    {
        case 0: ShowPistolMenu( id )
        case 1: ShowShotgunMenu( id )
        case 2: ShowSmgMenu( id )
        case 3: ShowRifleMenu( id, g_nMenuPosition[id-1] = 0 )
        case 4: ShowMachineMenu( id )
        case 5: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
        case 6: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
        case 7: ShowEquipMenu( id )
        case 8: ShowExtraMenu( id, g_nMenuPosition[id-1] = 0 )
        default: { /* Do Nothing Here (Exit Option) */ }
    }
    return PLUGIN_HANDLED
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Handles all Weapon Menus Except Multi-Page ones like Rifles Menu
public RegularMenuCmd( id, key )
{
    // Track which Option was chosen
    g_nMenuOption[id-1] = key

    switch( key )
    {
        case 9:
        {
            // User Chose to go Back to Previous Menu
            ShowMainMenu( id )
        }
        default: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
    }
    return PLUGIN_HANDLED
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Handles Multi-Page Rifles Menu
public RifleMenuCmd( id, key )
{
    // Track which Option was chosen
    g_nMenuOption[id-1] = g_nMenuPosition[id-1] * MAX_DISPLAY + key

    switch( key )
    {
        case 8:
        {
            // User Selected "More..." Option
            ShowRifleMenu( id, ++g_nMenuPosition[id-1] )
        }
        case 9:
        {
            // User Chose to go Back to Previous Menu
            if( g_nMenuPosition[id-1] )
            {
                ShowRifleMenu( id, --g_nMenuPosition[id-1] )
            }else
            {
                ShowMainMenu( id )
            }
        }
        default: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
    }
    return PLUGIN_HANDLED
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Handles Multi-Page Players Menu
public PlayerMenuCmd( id, key )
{
    switch( key )
    {
        case 8:
        {
            // User Selected "More..." Option
            ShowPlayerMenu( id, ++g_nMenuPosition[id-1] )
        }
        case 9:
        {
            // User Chose to go Back to Previous Menu
            if( g_nMenuPosition[id-1] )
            {
                ShowPlayerMenu( id, --g_nMenuPosition[id-1] )
            }else
            {
                ShowMainMenu( id )
            }
        }
        default:
        {
            // Find which Player was chosen
            new nPlayerID = g_nMenuPlayers[id-1][g_nMenuPosition[id-1] * MAX_DISPLAY + key]

            // Give Player Selected Item
            GiveMenuItem( id, nPlayerID )

            // Check which Menu to Re-Open (if any)
            switch( clamp(get_cvar_num("sv_weaponmenu_state"), 0, 2) )
            {
                case 1: ShowPlayerMenu( id, g_nMenuPosition[id-1] ) // Players Menu (At Last Position)
                case 2: ShowMainMenu( id ) // Weapons Menu
            }
        }
    }
    return PLUGIN_HANDLED
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Handles Multi-Page Extras Menu
public ExtraMenuCmd( id, key )
{
    // Track which Option was chosen
    g_nMenuOption[id-1] = g_nMenuPosition[id-1] * MAX_DISPLAY + key

    switch( key )
    {
        case 8:
        {
            // User Selected "More..." Option
            ShowExtraMenu( id, ++g_nMenuPosition[id-1] )
        }
        case 9:
        {
            // User Chose to go Back to Previous Menu
            if( g_nMenuPosition[id-1] )
            {
                ShowExtraMenu( id, --g_nMenuPosition[id-1] )
            }else
            {
                ShowMainMenu( id )
            }
        }
        default: ShowPlayerMenu( id, g_nMenuPosition[id-1] = 0 )
    }
    return PLUGIN_HANDLED
}
//
///////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////
//
//      Menu Building Code Below
//
///////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////
// Build Main Menu Section
public ShowMainMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "Weapons Menu:^n" )
    for( i = 0; i < MO_MAX_MAIN; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szMainMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Exit" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Pistol Menu Section
public ShowPistolMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "\yPistols Menu:\w^n" )
    for( i = 0; i < MO_MAX_PISTOL; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szPistolMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Shotgun Menu Section
public ShowShotgunMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "\yShotguns Menu:\w^n" )
    for( i = 0; i < MO_MAX_SHOTGUN; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szShotgunMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build SMG Menu Section
public ShowSmgMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[2256]

    nLen = format( szMenuBody, 255, "\ySMGs Menu:\w^n" )
    for( i = 0; i < MO_MAX_SMG; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szSmgMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Rifle Menu Section
public ShowRifleMenu( id, pos )
{
    if( pos < 0 ) return

    new i, j = 0, nStart, nEnd, nLen, nKeys = (1<<9)
    new szMenuBody[512]

    nStart = pos * MAX_DISPLAY

    if( nStart >= MO_MAX_RIFLE )
        nStart = pos = g_nMenuPosition[id-1] = 0

    nLen = format( szMenuBody, 511, "\yRifles Menu:\R%d/2^n\w^n", pos + 1 )

    nEnd = nStart + MAX_DISPLAY
    if( nEnd > MO_MAX_RIFLE ) nEnd = MO_MAX_RIFLE

    for( i = nStart; i < nEnd; i++ )
    {
        nKeys |= (1<<j++)
        nLen += format( szMenuBody[nLen], (511-nLen), "%d. %s^n", j, g_szRifleMenuTxt[i] )
    }

    if( nEnd != MO_MAX_RIFLE )
    {
        format( szMenuBody[nLen], (511-nLen), "^n9. More...^n0. Back" )
        nKeys |= (1<<8)
    }
    else format( szMenuBody[nLen], (511-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Machine Gun Menu Section
public ShowMachineMenu( id )
{
    new nLen, nKeys = (1<<0|1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "\yMachine Guns Menu:\w^n" )
    nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", 1, g_szMachineMenuTxt )
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Equipment Menu Section
public ShowEquipMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "\yEquipment Menu:\w^n" )
    for( i = 0; i < MO_MAX_EQUIP; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szEquipMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Extras Menu Section
/*
public ShowExtraMenu( id )
{
    new i, nLen, nKeys = (1<<9)
    new szMenuBody[256]

    nLen = format( szMenuBody, 255, "\yExtras Menu:\w^n" )
    for( i = 0; i < MO_MAX_EXTRA; i++ )
    {
        nKeys |= (1<<i)
        nLen += format( szMenuBody[nLen], (255-nLen), "%d. %s^n", (i+1), g_szExtraMenuTxt[i] )
    }
    format( szMenuBody[nLen], (255-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}*/

public ShowExtraMenu( id, pos )
{
    if( pos < 0 ) return

    new i, j = 0, nStart, nEnd, nLen, nKeys = (1<<9)
    new szMenuBody[512]

    nStart = pos * MAX_DISPLAY

    if( nStart >= MO_MAX_EXTRA )
        nStart = pos = g_nMenuPosition[id-1] = 0

    nLen = format( szMenuBody, 511, "\yExtras Menu:\R%d/2^n\w^n", pos + 1 )

    nEnd = nStart + MAX_DISPLAY
    if( nEnd > MO_MAX_EXTRA ) nEnd = MO_MAX_EXTRA

    for( i = nStart; i < nEnd; i++ )
    {
        nKeys |= (1<<j++)
        nLen += format( szMenuBody[nLen], (511-nLen), "%d. %s^n", j, g_szExtraMenuTxt[i] )
    }

    if( nEnd != MO_MAX_EXTRA )
    {
        format( szMenuBody[nLen], (511-nLen), "^n9. More...^n0. Back" )
        nKeys |= (1<<8)
    }
    else format( szMenuBody[nLen], (511-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody, -1 )
    return
}

//
///////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////
// Build Player Menu Section
public ShowPlayerMenu( id, pos )
{
    if( pos < 0 ) return

    get_players( g_nMenuPlayers[id-1], g_nMenuPlayersNum[id-1] )

    new i, j = 0, idx
    new szUserName[32], szMenuBody[512]
    new nStart = pos * MAX_DISPLAY

    if( nStart >= g_nMenuPlayersNum[id-1] )
        nStart = pos = g_nMenuPosition[id-1] = 0

    new nLen = format( szMenuBody, 511, "\yPlayers Menu:\R%d/%d^n\w^n", (pos+1), (g_nMenuPlayersNum[id-1] / MAX_DISPLAY + ((g_nMenuPlayersNum[id-1] % MAX_DISPLAY) ? 1 : 0 )) )
    new nEnd = nStart + MAX_DISPLAY
    new nKeys = (1<<9)

    if( nEnd > g_nMenuPlayersNum[id-1] )
        nEnd = g_nMenuPlayersNum[id-1]

    for( i = nStart; i < nEnd; i++ )
    {
        idx = g_nMenuPlayers[id-1][i]
        get_user_name( idx, szUserName, 31 )

        nKeys |= (1<<j++)
        nLen += format( szMenuBody[nLen], (511-nLen), "%d. %s^n", j, szUserName )
    }

    if( nEnd != g_nMenuPlayersNum[id-1] )
    {
        nKeys |= (1<<8)
        format( szMenuBody[nLen], (511-nLen), "^n9. More...^n0. Back" )
    }
    else format( szMenuBody[nLen], (511-nLen), "^n0. Back" )

    show_menu( id, nKeys, szMenuBody )
    return
}
//
///////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////
//
//      Weapon Giving Code Below
//
///////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////
//  Following Functions Actually Give The Items
//
stock GiveMenuItem( id, p_nPlayerID )
{
    new szUserName[32]
    get_user_name( p_nPlayerID, szUserName, 31 )

    switch( g_nMenuType[id-1] )
    {
        case MT_PISTOL:  GiveSecondaryPlayerWeapon( p_nPlayerID, g_nMenuOption[id-1] )
        case MT_SHOTGUN: GivePlayerWeapon( p_nPlayerID, (OFFSET_SHOTGUN + g_nMenuOption[id-1]) )
        case MT_SMG:     GivePlayerWeapon( p_nPlayerID, (OFFSET_SMG + g_nMenuOption[id-1]) )
        case MT_RIFLE:   GivePlayerWeapon( p_nPlayerID, (OFFSET_RIFLE + g_nMenuOption[id-1]) )
        case MT_MACHINE: GivePlayerWeapon( p_nPlayerID, (OFFSET_MACHINE + g_nMenuOption[id-1]) )
        case MT_PAMMO:   GivePrimaryAmmo( p_nPlayerID )
        case MT_SAMMO:   GiveSecondaryAmmo( p_nPlayerID )
        case MT_EQUIP:   GivePlayerItem( p_nPlayerID, g_nMenuOption[id-1] )
        case MT_EXTRA:   GivePlayerExtra( p_nPlayerID, g_nMenuOption[id-1] )
    }
    return
}

stock GiveSecondaryPlayerWeapon( id, nWeaponIdx )
{
    if( !is_user_alive(id) || (nWeaponIdx < 0) || (nWeaponIdx >= 6) )
        return

    #if defined WEAPONS_DROP
    drop_s_weapons(id)
    #endif

    give_item( id, g_szWeaponList[nWeaponIdx] )
    for( new i = 0; i < g_nWeaponData[nWeaponIdx][1]; i++ )
        give_item( id, g_szAmmoList[g_nWeaponData[nWeaponIdx][0]] )

    return
}

stock GivePlayerWeapon( id, nWeaponIdx )
{
    if( !is_user_alive(id) || (nWeaponIdx < 6) || (nWeaponIdx >= MAX_WEAPONS) )
        return

    #if defined WEAPONS_DROP
    drop_p_weapons(id)
    #endif

    give_item( id, g_szWeaponList[nWeaponIdx] )
    for( new i = 0; i < g_nWeaponData[nWeaponIdx][1]; i++ )
        give_item( id, g_szAmmoList[g_nWeaponData[nWeaponIdx][0]] )

    return
}

stock GivePlayerExtra( id, nExtraIdx )
{
    if( !is_user_alive(id) || (nExtraIdx < 0) || (nExtraIdx >= MO_MAX_EXTRA) )
        return

    #if defined WEAPONS_DROP

    if( 0 < nExtraIdx < 13 )
    {
        drop_p_weapons(id)
        drop_s_weapons(id)
    }
    #endif

    new i, j
    switch( nExtraIdx )
    {
        case 0:   // Give Player All Weapons (+Ammo)
        {
            for( i = 0; i < MAX_WEAPONS; i++ )
            {
                give_item( id, g_szWeaponList[i] )
                for( j = 0; j < g_nWeaponData[i][1]; j++ )
                    give_item( id, g_szAmmoList[g_nWeaponData[i][0]] )
            }
        }
        case 1:   // Give Player M3 Set
        {
            GivePlayerWeapon( id, 6 )   // [6] = M3
            GiveSecondaryPlayerWeapon( id, 2 )   // [2] = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 2:   // Give Player MP5 Navy Set
        {
            GivePlayerWeapon( id, 8 )   // [8] = MP5 Navy
            GiveSecondaryPlayerWeapon( id, 2 )   // [2] = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 3:   // Give Player Clarion Set
        {
            GivePlayerWeapon( id, 13 )  // [13] = Clarion (Famas)
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 4:   // Give Player Galil Set
        {
            GivePlayerWeapon( id, 22 )  // [22] = Galil
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 5:   // Give Player M4A1 Set
        {
            GivePlayerWeapon( id, 16 )  // [16] = M4A1
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 6:   // Give Player AK47 Set
        {
            GivePlayerWeapon( id, 15 )  // [15] = AK47
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 7:   // Give Player Krieg SG552 Set
        {
            GivePlayerWeapon( id, 14 )  // [14] = Krieg SG552
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 8:   // Give Player Bullpup Set
        {
            GivePlayerWeapon( id, 17 )  // [17] = Bullpup
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 9:   // Give Player M249 Set
        {
            GivePlayerWeapon( id, 23 )  // [23] = M249
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 10:   // Give Player Scout Set
        {
            GivePlayerWeapon( id, 18 )  // [18] = Scout
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 11:   // Give Player AutoSniper Set
        {
            GivePlayerWeapon( id, 20 )    // [20] = CT AutoSniper (G3SG1)
            //GivePlayerWeapon( id, 21 )  // [21] = T AutoSniper (SG550)
            GiveSecondaryPlayerWeapon( id, 2 )     // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 12:   // Give Player AWP Set
        {
            GivePlayerWeapon( id, 19 )  // [19] = AWP
            GiveSecondaryPlayerWeapon( id, 2 )   // [2]  = Deagle
            for( i = 1; i < 6; i++ )
                GivePlayerItem( id, i ) // Kevlar, Flash/HE/Smoke Grenade, Defuse Kit
        }
        case 13:   // Give Player Nades Set
        {
            for( i = 2; i < 5; i++ )
                GivePlayerItem( id, i ) // Flash/HE/Smoke Grenades
        }
    }
    return
}

stock GivePlayerItem( id, nItemIdx )
{
    if( !is_user_alive(id) || (nItemIdx < 0) || (nItemIdx >= MAX_ITEMS) )
        return // Invalid User or Item

    if(nItemIdx == 6)
    cs_set_user_nvg(id, true)

    if( (nItemIdx == 4) && (get_cvar_num("sv_weaponmenu_smoke") < 1) )
        return // Smoke Nades Restricted

    if( nItemIdx == 2 ) // If item is Flashbang, give it twice
        give_item( id, g_szItemsList[nItemIdx] )

    if( nItemIdx != 6 )
        give_item( id, g_szItemsList[nItemIdx] )

    return
}

stock GivePrimaryAmmo( id )
{
    new nWeapons[32], nNum, i, j, k
    new szWeaponName[32]

    // Only give Primary Ammo for Guns Carried
    get_user_weapons( id, nWeapons, nNum )
    for( i = 0; i < nNum; i++ )
    {
        get_weaponname( nWeapons[i], szWeaponName, 31 )
        for( j = OFFSET_SHOTGUN; j < MAX_WEAPONS; j++ )
        {
            if( equali( szWeaponName, g_szWeaponList[j] ) )
            {
                for( k = 0; k < g_nWeaponData[j][1]; k++ )
                    give_item( id, g_szAmmoList[g_nWeaponData[j][0]] )
            }
        }
    }
    return
}

stock GiveSecondaryAmmo( id )
{
    new nWeapons[32], nNum, i, j, k
    new szWeaponName[32]

    // Only give Secondary Ammo for Pistols Carried
    get_user_weapons( id, nWeapons, nNum )
    for( i = 0; i < nNum; i++ )
    {
        get_weaponname( nWeapons[i], szWeaponName, 31 )
        for( j = 0; j < OFFSET_SHOTGUN; j++ )
        {
            if( equali( szWeaponName, g_szWeaponList[j] ) )
            {
                for( k = 0; k < g_nWeaponData[j][1]; k++ )
                    give_item( id, g_szAmmoList[g_nWeaponData[j][0]] )
            }
        }
    }
    return
}

#if defined WEAPONS_DROP
stock drop_p_weapons(id)
{
     static weapons[32], num
     get_user_weapons( id, weapons, num )
    
     for ( new i = 0; i < num; i++ )
     {
          if( ( 1<<weapons[i] ) & ( (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|
                                    (1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|
                                    (1<<CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|
                                    (1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90) ) )
          {
               static wname[32]
               get_weaponname( weapons[i], wname, sizeof wname - 1 )
               engclient_cmd( id, "drop", wname )
          }
     }
}

stock drop_s_weapons(id)
{
     static weapons[32], num
     get_user_weapons( id, weapons, num )
    
     for ( new i = 0; i < num; i++ )
     {
          if( ( 1<<weapons[i] ) & ( (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|
                (1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE) ) )
          {
               static wname[32]
               get_weaponname( weapons[i], wname, sizeof wname - 1 )
               engclient_cmd( id, "drop", wname )
          }
     }
}
#endif
//
//
///////////////////////////////////////////////////////////////////////////////////////////


Стандартное?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
cah9
сообщение 13.10.2012, 14:12
Сообщение #10
Стаж: 13 лет

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

Цитата(dron34 @ 13.10.2012, 21:04) *
Стандартное?


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