Здравствуйте! Прошу помочь с кодом плагина, не работает статус VIP в табе, не выдаются гранаты, нет оповещения как в чате, так и звукового при входе VIP игрока. Такое ощущение, что квары не работают..
Код:
#include <amxmodx>
#include <amxmisc>
#include <cstrike>
#include <fun>
#include <fakemeta>
#include <hamsandwich>
/*================================================================================
Данные о плагине
=================================================================================*/
#define PLUGIN "ViP Menu"
#define VERSION "1.5"
#define AUTHOR "Jack Daniel`s Lol :("
/*================================================================================
Константы/Массивы и остальное
=================================================================================*/
native set_hg_auto_equip_status(id, new_status)
new bool:give_deagle[33], bool:give_hpgrenade[33], total_rounds, vip_menu_usage_count[33];
new g_icvars[8], g_ilcvars[8], g_iMaxPlayers;
/*================================================================================
Загрузка кваров
=================================================================================*/
public plugin_cfg()
{
new file[128]; get_configsdir(file,charsmax(file))
format(file, charsmax(file), "%s/vip_menu.cfg", file)
if(file_exists(file)) server_cmd("exec %s", file), server_exec()
}
/*================================================================================
Гл. Функция
=================================================================================*/
public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR);
register_logevent("RoundStart", 2, "1=Round_Start");
register_event("TextMsg" , "event_restart", "a", "2=#Game_will_restart_in","2=#Game_Commencing");
RegisterHam(Ham_Spawn, "player", "player_Spawn_Post" , 1);
register_menu("Vip_Menu", 1024, "Handle_Vip_Menu");
register_concmd("vipmenu", "OpenVipMenu");
register_clcmd("say /vipmenu", "OpenVipMenu");
register_clcmd("say_team /vipmenu", "OpenVipMenu");
register_dictionary("vip_menu.txt");
//Квары
g_icvars[0] = register_cvar("vm_start_round","3") // Раунд с которого будет доступно вип меню
g_icvars[1] = register_cvar("vm_round_usage_limit","2") // Сколько раз за раунд можно использовать меню. Если 0, то неограниченное число раз
g_icvars[2] = register_cvar("vm_awp_start_round","4") // Номер раунда с которого будет доступно авп из вип меню
g_icvars[3] = register_cvar("vm_showscore_status","1") // Показывать или нет надпись VIP в таблице счета
g_icvars[4] = register_cvar("vm_connect_chat_announce","1") // Оповещать (1) или нет (0) всех сообщением в чате при коннекте вип игрока
g_icvars[5] = register_cvar("vm_connect_sound","1") // Проигрывать (1) или нет (0), звук при входе вип игрока на сервер
g_icvars[6] = register_cvar("vm_access_flags","t") // Флаги доступа игроков, которым будет доступно вип меню
g_icvars[7] = register_cvar("vm_give_money","5000")
//Отключение на картах
new sPref[][] = {"awp_", "aim_", "35hp_", "fy_"};
new map[32]; get_mapname(map, charsmax(map));
for(new i; i < sizeof sPref; i++)
{
if(containi(map, sPref[i]) != -1)
{
pause("ad");
return;
}
}
//Квары в массив..
g_ilcvars[0] = get_pcvar_num(g_icvars[0]);
g_ilcvars[1] = get_pcvar_num(g_icvars[1]);
g_ilcvars[2] = get_pcvar_num(g_icvars[2]);
g_ilcvars[3] = get_pcvar_num(g_icvars[3]);
g_ilcvars[4] = get_pcvar_num(g_icvars[4]);
g_ilcvars[5] = get_pcvar_num(g_icvars[5]);
cvar_to_flags(g_icvars[6], g_ilcvars[6]);
g_ilcvars[7] = get_pcvar_num(g_icvars[7]);
g_iMaxPlayers = get_maxplayers();
}
public plugin_precache()
{
if (g_ilcvars[5]) {
precache_sound("vip_menu/connect_vip.wav");
}
}
/*================================================================================
Подключение игрока
=================================================================================*/
public client_connect(id)
{
give_hpgrenade[id] = false
give_deagle[id] = false
set_hg_auto_equip_status(id, 0)
new name[32]; get_user_name(id, name, 31)
if (get_user_flags(id) & g_ilcvars[6]) {
if (g_ilcvars[4]) {
PrintInChat(0, "%L", LANG_PLAYER, "VM_CONNECT_CHAT_ANNOUNCE", name)
}
if(g_ilcvars[5]) {
emit_sound(0,CHAN_STATIC,"vip_menu/connect_vip.wav",1.0,ATTN_NORM,0,PITCH_NORM)
}
}
}
/*================================================================================
Новый раунд
=================================================================================*/
public RoundStart(){
total_rounds++
arrayset(vip_menu_usage_count, 0, charsmax(vip_menu_usage_count));
}
/*================================================================================
Рестарт раунда или начало игры
=================================================================================*/
public event_restart()
{
total_rounds = 0;
for(new id = 1; id <= g_iMaxPlayers; id++){
set_hg_auto_equip_status(id, 0)
}
arrayset(give_hpgrenade, false, charsmax(give_hpgrenade));
}
public player_Spawn_Post(id)
{
if (!is_user_alive(id) || !(get_user_flags(id) & g_ilcvars[6])) {
return;
}
if (total_rounds >= g_ilcvars[0]) {
give_vip_equip(id);
}
}
/*================================================================================
Меню
=================================================================================*/
public OpenVipMenu(id)
{
if(!is_user_alive(id)) {
PrintInChat(id, "%L", LANG_PLAYER, "VM_FOR_ALIVE_WARNING")
return PLUGIN_HANDLED;
}
if(!(get_user_flags(id) & g_ilcvars[6])) {
PrintInChat(id, "%L", LANG_PLAYER, "VM_NOT_ACCESS_WARNING")
return PLUGIN_HANDLED;
}
if(total_rounds < g_ilcvars[0]) {
PrintInChat(id, "%L", LANG_PLAYER, "VM_ROUND_LIMIT_WARNING", (g_ilcvars[0] == 2) ? "о" : "", g_ilcvars[0])
return PLUGIN_HANDLED;
}
if (g_ilcvars[1] && vip_menu_usage_count[id] >= g_ilcvars[1]) {
PrintInChat(id, "%L", LANG_PLAYER, "VM_MAX_USAGE_WARNING")
return PLUGIN_HANDLED;
}
new name[32]; get_user_name(id, name, charsmax(name));
new menu[512], iLen = 0;
iLen = formatex(menu[iLen], charsmax(menu) - iLen, "%L^n^n", LANG_PLAYER, "VM_TITLE_NAME", name);
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "%L^n", LANG_PLAYER, "VM_ITEM_NAME1", g_ilcvars[7]);
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "%L^n", LANG_PLAYER, "VM_ITEM_NAME2");
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "%L^n", LANG_PLAYER, "VM_ITEM_NAME3");
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "%L^n", LANG_PLAYER, "VM_ITEM_NAME4");
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "%L^n", LANG_PLAYER, "VM_ITEM_NAME5");
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "%L^n", LANG_PLAYER, "VM_ITEM_NAME6",give_hpgrenade[id]?"[\yВкл\w]":"[\yВыкл\w]");
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "%L^n^n", LANG_PLAYER, "VM_ITEM_NAME7",give_deagle[id]?"[\yВкл\w]":"[\yВыкл\w]");
iLen += formatex(menu[iLen], charsmax(menu) - iLen, "%L^n", LANG_PLAYER, "VM_EXIT");
show_menu(id, 1024, menu, -1, "Vip_Menu");
return PLUGIN_HANDLED;
}
public Handle_Vip_Menu(id, key)
{
if (!is_user_connected(id))
return PLUGIN_HANDLED;
switch(key)
{
case 0:
{
cs_set_user_money(id, cs_get_user_money(id) + g_ilcvars[7]);
vip_menu_usage_count[id]++
PrintInChat(id, "%L", LANG_PLAYER, "VM_MONEY", g_ilcvars[7])
}
case 1:
{
drop_user_weapons(id, 1)
give_item(id, "weapon_m4a1")
cs_set_user_bpammo(id, CSW_M4A1, 90);
vip_menu_usage_count[id]++
PrintInChat(id, "%L", LANG_PLAYER, "VM_M4A1")
}
case 2:
{
drop_user_weapons(id, 1)
give_item(id, "weapon_ak47")
cs_set_user_bpammo(id, CSW_AK47, 90);
vip_menu_usage_count[id]++
PrintInChat(id, "%L", LANG_PLAYER, "VM_AK47")
}
case 3:
{
if(total_rounds < g_ilcvars[2]){
PrintInChat(id, "%L", LANG_PLAYER, "VM_AWP_RESTRICT_MSG", g_ilcvars[2], total_rounds)
}else{
drop_user_weapons(id, 1)
give_item(id, "weapon_awp")
cs_set_user_bpammo(id, CSW_AWP, 30);
vip_menu_usage_count[id]++
PrintInChat(id, "%L", LANG_PLAYER, "VM_AWP")
}
}
case 4:
{
drop_user_weapons(id, 1)
give_item(id, "weapon_famas")
cs_set_user_bpammo(id, CSW_FAMAS, 90);
vip_menu_usage_count[id]++
PrintInChat(id, "%L", LANG_PLAYER, "VM_FAMAS")
}
case 5:
{
if(give_hpgrenade[id]){
give_hpgrenade[id] = false
set_hg_auto_equip_status(id, 0)
}else{
give_hpgrenade[id] = true
set_hg_auto_equip_status(id, 1)
}
OpenVipMenu(id)
PrintInChat(id, "%L", LANG_PLAYER, "VM_AUTO_GIVE_HPGRENADE", give_hpgrenade[id]?"!tвключена!":"!tвыключена!")
}
case 6:
{
give_deagle[id] = !give_deagle[id];
OpenVipMenu(id)
PrintInChat(id, "%L", LANG_PLAYER, "VM_AUTO_GIVE_DEAGLE", give_deagle[id]?"!tвключена!":"!tвыключена!")
}
default: return PLUGIN_HANDLED;
}
return PLUGIN_HANDLED;
}
/*================================================================================
Стоки и Остальное
=================================================================================*/
give_vip_equip(id)
{
give_item(id,"weapon_flashbang")
give_item(id,"weapon_flashbang")
give_item(id,"weapon_hegrenade")
give_item(id,"weapon_smokegrenade");
give_item(id, "item_assaultsuit");
if(give_deagle[id]){
drop_user_weapons(id, 2)
give_item(id, "weapon_deagle");
cs_set_user_bpammo(id, CSW_DEAGLE, 35);
}
}
stock drop_user_weapons(iPlayer, iSlotStrip){
new iWpn = get_pdata_cbase(iPlayer, 367 + iSlotStrip, 5);
while(iWpn != FM_NULLENT)
{
ExecuteHamB(Ham_Weapon_RetireWeapon, iWpn);
ExecuteHam(Ham_RemovePlayerItem, iPlayer, iWpn);
ExecuteHam(Ham_Item_Kill, iWpn);
set_pev(iPlayer, pev_weapons, pev(iPlayer, pev_weapons) & ~(1<<get_pdata_int(iWpn, 43 ,4)));
iWpn = get_pdata_cbase(iWpn, 42, 4);
}
}
stock cvar_to_flags(cvar_ptr, &var){
new cvar_value[32];
get_pcvar_string(cvar_ptr, cvar_value, charsmax(cvar_value));
var = read_flags(cvar_value);
if (var == 0) {
var = ADMIN_USER;
}
}
stock PrintInChat(const id, const input[], any:...){
new count = 1, players[32]
static msg[191]
vformat(msg, charsmax(msg), input, 3)
replace_all(msg, charsmax(msg), "!g", "^4") // Green Color
replace_all(msg, charsmax(msg), "!n", "^1") // Default Color
replace_all(msg, charsmax(msg), "!t", "^3") // Team Color
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (!is_user_connected(players[i])) continue;
message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}