- Ошибка
-
L 03/21/2020 - 07:53:52: String formatted incorrectly - parameter 2 (total 1)
L 03/21/2020 - 07:53:52: [AMXX] Displaying debug trace (plugin "csr_voteban.amxx", version "0.8.5beta")
L 03/21/2020 - 07:53:52: [AMXX] Run time error 25: parameter error
L 03/21/2020 - 07:53:52: [AMXX] [0] csr_voteban.sma::cmd_ban_player (line 509)
L 03/21/2020 - 07:53:52: [AMXX] [1] csr_voteban.sma::finish_vote (line 481)
L 03/21/2020 - 07:56:38: String formatted incorrectly - parameter 2 (total 1)
L 03/21/2020 - 07:56:38: [AMXX] Displaying debug trace (plugin "csr_voteban.amxx", version "0.8.5beta")
- ОС
- Linux
- Amx Mod X
-
AMX Mod X 1.9.0.5263
- Билд
-
Protocol version 48
Exe version 1.6.3.7/Stdio (cstrike)
ReHLDS version: 3.7.0.693-dev
Build date: 18:20:58 Jan 28 2020 (2117)
Build from: https://github.com/dreamstalker/rehlds/commit/c4cecf5
- ReGamedll
-
ReGameDLL version: 5.14.0.456-dev
Build date: 12:02:14 Mar 13 2020
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/9461d03
- Версия Metamod
-
Metamod-r v1.3.0.128, API (5:13)
Metamod-r build: 17:47:54 Aug 24 2018
Metamod-r from: https://github.com/theAsmodai/metamod-r/commit/0cf2f70
- Список метамодулей
-
[ 1] Reunion RUN - reunion.so v0.1.0.92c ini Start Never
[ 2] VoiceTranscoder RUN - vtc.so v2017RC5 ini ANY
[ 3] AMX Mod X RUN - amxmodx.so v1.9.0.5263 ini Start ANY
[ 4] Rechecker RUN - rechecker.so v2.5 ini ANY
[ 5] ReSemiclip RUN - resemiclip.so v2.3.9 ini ANY
[ 6] WHBlocker RUN - whblocker.so v1.5.696 ini ANY
[ 7] CStrike RUN - cstrike_amxx_i386.so v1.9.0.5219 pl3 ANY
[ 8] ReAPI RUN - reapi_amxx_i386.so v5.12.0.192-dev pl3 ANY Never
[ 9] AuthEmu RUN - authemu_amxx_i386.so v4.2.12.311-dev+m pl3 ANY Never
[10] MySQL RUN - mysql_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[11] FakeMeta RUN - fakemeta_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[12] Engine RUN - engine_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[13] GeoIP RUN - geoip_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[14] Ham Sandwich RUN - hamsandwich_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[15] Fun RUN - fun_amxx_i386.so v1.9.0.5263 pl3 ANY ANY
[16] ReAimDetector RUN - reaimdetector_amxx_i386.so v0.2.2 pl3 ANY Never
[17] C4 Control RUN - c4_control_amxx_i386.so v1.0.2 pl3 ANY ANY
- Список плагинов
-
[ 1] Ultimate Chats Control v5.2(c) neygomon ultimate_chats_ running
[ 2] Admin Loader v3.3.1 neygomon | Radiu admin_loader.am running
[ 3] CSStatsX SQL v0.7.4+2 serfreeman1337 aes_csstatsx_sq running
[ 4] [183] Analizator v19.11.04 SKAJIbnEJIb analizator.amxx running
[ 5] FreshBans v1.4.2b kanagava fresh_bans.amxx running
[ 6] Admin Commands v1.9.0.5235 AMXX Dev Team admincmd.amxx running
[ 7] Commands Menu v1.9.0.5235 AMXX Dev Team cmdmenu.amxx running
[ 8] NextMap v1.9.0.5235 AMXX Dev Team nextmap.amxx running
[ 9] Restrict Weapons v1.9.0.5235 AMXX Dev Team restmenu.amxx running
[ 10] TimeLeft v1.9.0.5235 AMXX Dev Team timeleft.amxx running
[ 11] Admin Votes v1.9.0.5235 AMXX Dev Team adminvote.amxx running
[ 12] CS Stats Logging v1.9.0.5235 AMXX Dev Team stats_logging.a running
[ 13] Vip_rbs.amxx vunknown unknown vip_rbs.amxx stopped
[ 14] Ping Checker v26.0.1 RC1 h1k3 ping_checker.am running
[ 15] Map Manager: Core v3.0.0 Mistrick map_manager.amx running
[ 16] AWP Restrictions v1.5.1 Radius awp_restriction running
[ 17] Team Control v1.6.0 Radius team_control.am running
[ 18] Menus Front-End v1.5 neugomon menufront.amxx running
[ 19] ReAimDetector API v0.2.2 ReHLDS Team reaimdetector.a running
[ 20] [ReAPI] No Team Flash v0.0.3 Vaqtincha no_team_flash_l running
[ 21] Change Game Name v1.2 ReHLDS Team change_game_nam running
[ 22] [182] Parachute RBS v17.12.12 KRoT@L/JTP10181 parachute_rbs.a running
[ 23] Maps Menu v1.1.4 neugomon maps_menu.amxx running
[ 24] Players Menu v1.7 neugomon players_menu.am running
[ 25] Lite Translit v2.8 neygomon lite_translit1. running
[ 26] Advert Messages v1.5.5 Radius advert_messages running
[ 27] Block grande info v1.0 neygomon block_granade_i running
[ 28] Warmup v1.2.2 Radius warmup.amxx stopped
[ 29] Night Mode v1.2.3 Radius night_mode.amxx running
[ 30] Admin Free Look v1.3.4 Radius admin_free_look running
[ 31] Screen Fade v0.1 ko1dun screenfade3.amx running
[ 32] unknown v19.12.09 SKAJIbnEJIb reset_score_nam running
[ 33] C4 Control v1.3.2 Radius c4_control.amxx running
[ 34] Custom Smoke v1.07 bionext custom_smoke.am running
[ 35] Stats Configuration v1.9.0.5235 AMXX Dev Team statscfg.amxx running
[ 36] Say me and Say hp v1.4 neygomon say_me_and_hp.a running
[ 37] Autoresponder/Advertis v0.5 MaximusBrood reklama_in_chat running
[ 38] In-Game Ads v1.83 stupok in_game_ads.amx running
[ 39] SF Warn Menu v0.1.4g serfreeman1337 sf_warn_menu.am running
[ 40] Advanced Client Checke v0.3.6 Mistrick advanced_client running
[ 41] Welcome v0.1 GordonFreeman welcome.amxx running
[ 42] [183] Damager RBS v19.08.30 SKAJIbnEJIb damager_rbs.amx running
[ 43] [183] Fast Hack Detect v19.03.12 Valer4 fast_hack_detec running
[ 44] Time for info v1.0 neugomon time_for_info.a running
[ 45] Auto Demo Recorder v2.3 F@nt0M auto_demo_recor running
[ 46] [183] Top Award RBS v19.08.28 SKAJIbnEJIb topaward_rbs.am running
[ 47] Block HudTextArgs v1.0 ConnorMcLeod block_hudtextar running
[ 48] Admin Voice Chat v0.2 mx?! admin_voice_cha running
[ 49] Voteban CSR v0.8.5beta Leo_[BH] csr_voteban.amx debug
[ 50] CS AFK Manager v1.0.6 (amx Freeman afk_manager.amx running
[ 51] Lite Admin ESP v1.0 neygomon lite_admin_esp. running
[ 52] unknown vunknown unknown ucc_api_example running
[ 53] UCC Addon: VoteGAG v1.2 neygomon ucc_votegag.amx running
[ 54] Advanced Experience Sy v0.5.9 [REA serfreeman1337/s aes_main.amxx running
[ 55] AES: StatsX v0.5.9 [REA serfreeman1337/s aes_statsx.amxx running
[ 56] AES: CStrike Addon v0.5.9 [REA serfreeman1337/s aes_exp_cstrike running
[ 57] AES: Informer v0.5 Vega serfreeman1337 aes_informer.am running
[ 58] AES: Admin Tools v0.5.9 [REA serfreeman1337/s aes_exp_editor. running
[ 59] AES: StatsX Info Rank v0.1 serfreeman1337 aes_statsx_info running
[ 60] Map Manager: Core v3.0.4 Mistrick map_manager_cor running
[ 61] Map Manager: Scheduler v0.1.2 Mistrick map_manager_sch running
[ 62] Map Manager: Rtv v0.1.0 Mistrick map_manager_rtv running
[ 63] Map Manager: Nominatio v0.1.0 Mistrick map_manager_nom running
[ 64] Map Manager: BlockList v0.0.3 Mistrick map_manager_blo running
[ 65] Map Manager: Online so v0.0.2 Mistrick map_manager_onl running
[ 66] Map Manager: Effects v0.0.8 Mistrick map_manager_eff running
[ 67] Map Manager: Informer v0.0.5 Mistrick map_manager_inf running
[ 68] Map Manager: Advanced v0.0.5 Mistrick map_manager_adv running
- Автор плагина
- Leo_[BH]
- Версия плагина
- v0.8.5beta
- Исходный код
-
// Внимание! Это Бета-версия плагина. Она недоработана и содержит ошибки.
// Если вы нашли баг, пожалуйста, обратитесь к автору плагина с отчётом: http://vk.com/leo_bh / https://dev-cs.ru/resources/696/history
// О выходе новой версии будет уведомлено на http://vk.com/cs_rain / https://dev-cs.ru/resources/696/history
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#include <amxmodx>
#define VERSION "0.8.5beta"
// - - - - - - - - - - - - - - - - - - - -
// #define SHOWBOTSINMENU // Расскоментируйте, если хотите видеть ботов в меню голосования за бан
new const vtb_config[] = { "addons/amxmodx/configs/csr_vtb/voteban.cfg" } // путь к файлу конфигурации
#define VOTETASKID 500 // Индентификатор для set_task
// - - - - - - - - - - - - - - - - - - - -
enum _:VOTE_TYPE
{
ALL_VOTES, // итогое количество голосов
VOTE_ZZZ, // количество проголосовавших "Все-равно"
VOTE_NOT, // количество проголосовавших "ПРОТИВ"
VOTE_YES // количество проголосовавших "ЗА"
}
new g_Votes[VOTE_TYPE]; // Количество голосов
// - - - - - - - - - - - - - - - - - - - -
new bool:VOTENOW, // голосование идет в настоящее время
iTarget, // индекс "подсудимого"
iBanner, // индекс инициатора голосования
Float:next_time_avaliable_vote[33], // время, когда вызов голосования будет доступен следующий раз (0 - глобальное время для всех, от 1 до 32 для игроков)
me_target[33], // индекс игрока, кого "я" выбрал и хочу забанить
// Глобальные переменные ниже доступные для настройки с помощью файла конфигурации
g_bantime, // время бана
g_reason, // причина бана
g_ban_string, // строка для бана - команда, которая отправляется на сервер чтобы забанить игрока
g_vote_time, // время голосования (секунд)
g_timer_revote_global, // через сколько секунд будет доступно вновь голосование (глобально)
g_timer_revote_individual, // через сколько секунд будет доступно вновь голосование (индивидуально)
g_only_good_pl_start_vtb, // запускать голосования могут только опытные игроки?
g_only_good_voters, // участвовать в голосованиях могут только опытные игроки?
g_show_menu_for_banner, // давать право голоса инициатору голосования (1) или засчитывать голос автоматически (0)
g_need_frags_for_good_pl // сколько требуется набрать фрагов в статистике, чтобы считаться хорошим игроком?
// - - - - - - - - - - - - - - - - - - - -
// Список клиентских команд для открытия меню вотебана
new const g_clcmds[][] = { "amx_vtb",
"say voteban", "say_team voteban", "say /voteban", "say_team /voteban", "say .voteban", "say_team .voteban",
"say vtb", "say_team vtb", "say /vtb", "say_team /vtb", "say .vtb", "say_team .vtb" }
// - - - - - - - - - - - - - - - - - - - -
public plugin_init()
{
register_plugin("Voteban CSR", VERSION, "Leo_[BH]")
register_cvar("csr_voteban",VERSION,FCVAR_SERVER|FCVAR_SPONLY)
register_dictionary("voteban_csr.txt")
g_bantime = register_cvar("vtb_ban_time", "1200") // minutes
g_reason = register_cvar("vtb_reason_ban", "VOTEBAN")
g_ban_string = register_cvar("vtb_ban_string", "amx_ban %time% %steamid% %reason%")
g_vote_time = register_cvar("vtb_votetime", "20.0") // seconds
g_timer_revote_global = register_cvar("vtb_revote_timer_global", "120.0") // seconds
g_timer_revote_individual = register_cvar("vtb_revote_timer", "300.0") // seconds
g_only_good_pl_start_vtb = register_cvar("vtb_startvote_only_good_plrs", "0")
g_only_good_voters = register_cvar("vtb_vote_only_good_players", "0")
g_show_menu_for_banner = register_cvar("vtb_show_menu_for_banner", "1")
g_need_frags_for_good_pl = register_cvar("vtb_goodplayer_csx_frags", "50")
for(new i = 0; i < sizeof(g_clcmds); i++)
{
register_clcmd(g_clcmds[i], "cmd_to_open_vtb_menu");
}
}
public plugin_cfg()
{
server_cmd("exec %s", vtb_config)
}
// Перед первым меню проверим, доступно ли голосование на даное время. Если нет - показывает нулевое меню.
public cmd_to_open_vtb_menu(id)
{
for (new i = 1; i <= MaxClients; i++)
if(get_user_flags(i) & ADMIN_BAN)
{
client_print(id, print_chat, "%L", id, "CSR_VTB_ADMIN_ONLINE")
return PLUGIN_HANDLED;
}
if(get_pcvar_num(g_only_good_pl_start_vtb) && !is_good_player(id))
{
client_print(id, print_chat, "%L", id, "CSR_VTB_NOT_AVALIABLE_FOR_YOU")
return PLUGIN_HANDLED;
}
new Float:gametime = get_gametime()
if(gametime < next_time_avaliable_vote[id]) // individual time - индивидульное время
{
new txtbuffer[128], menu
formatex(txtbuffer, charsmax(txtbuffer), "%L", id, "CSR_VTB_TIMER", floatround(next_time_avaliable_vote[id] - gametime))
menu = menu_create(txtbuffer, "close_menu_please");
formatex(txtbuffer, charsmax(txtbuffer), "%L", id, "CSR_VTB_I_WAIT")
menu_additem(menu, txtbuffer);
menu_display(id, menu);
}
else if(gametime < next_time_avaliable_vote[0]) // global time - глобальное время
{
new txtbuffer[128], menu
formatex(txtbuffer, charsmax(txtbuffer), "%L", id, "CSR_VTB_TIMER", floatround(next_time_avaliable_vote[0] - gametime))
menu = menu_create(txtbuffer, "close_menu_please");
formatex(txtbuffer, charsmax(txtbuffer), "%L", id, "CSR_VTB_I_WAIT")
menu_additem(menu, txtbuffer);
menu_display(id, menu);
}
else
{
open_voteban_menu(id)
}
return PLUGIN_HANDLED;
}
// Первое меню - кого хотим забанить, список всех игроков.
public open_voteban_menu(id)
{
if(VOTENOW) return; // Голосование уже идет, не продолжаем
new buffertxt[64], menu
formatex(buffertxt, charsmax(buffertxt), "%L", id, "CSR_VTB_FIRST_MENU")
menu = menu_create(buffertxt, "handler_vtb_menu_one");
new player[32], num, name[32], str3[3]
#if defined SHOWBOTSINMENU
get_players(player, num, "h")
#else
get_players(player, num, "ch")
#endif
for(new i = 0; i < num; i++)
{
num_to_str(player[i], str3, charsmax(str3));
get_user_name(player[i], name, charsmax(name));
formatex(buffertxt, charsmax(buffertxt), "%s%s\w", (player[i] == id) ? "\r" : "\w", name)
menu_additem(menu, buffertxt, str3);
}
menu_display(id, menu);
}
public handler_vtb_menu_one(player, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], access, callback
menu_item_getinfo(menu, item, access, data, charsmax(data), _, 0, callback);
open_2_vtb_menu(str_to_num(data), player);
return PLUGIN_HANDLED;
}
// Сообщаем, что цель банить нельзя или открываем следующее меню open_vtb_3_menu
public open_2_vtb_menu(target, voteplayer)
{
if(VOTENOW) return; // Голосование уже идет, не продолжаем
if(!is_user_connected(target))
{
client_print(voteplayer, print_chat, "%L", voteplayer, "CSR_VTB_LEAVE_PLAYER")
return;
}
new buffertext[192], tName[32]
get_user_name(target, tName, charsmax(tName))
if(get_user_flags(target) & ADMIN_RCON)
{
formatex(buffertext, charsmax(buffertext), "%L", voteplayer, "CSR_VTB_IS_SUPER_ADMIN", tName)
}
else if(get_user_flags(target) & ADMIN_BAN)
{
formatex(buffertext, charsmax(buffertext), "%L", voteplayer, "CSR_VTB_IS_ADMIN", tName)
}
else if(get_user_flags(target) & ADMIN_IMMUNITY)
{
formatex(buffertext, charsmax(buffertext), "%L", voteplayer, "CSR_VTB_HAS_IMMUNITY", tName)
}
else if(is_good_player(target))
{
formatex(buffertext, charsmax(buffertext), "%L", voteplayer, "CSR_VTB_IS_GOOD_PLAYER", tName)
}
else
{
open_vtb_3_menu(target, voteplayer)
return; // RETURN!
}
new menu = menu_create(buffertext, "close_menu_please");
new txtbuffer[64]
formatex(txtbuffer, charsmax(txtbuffer), "%L", voteplayer, "CSR_VTB_TWO_MENU")
menu_additem(menu, txtbuffer);
menu_display(voteplayer, menu);
}
public close_menu_please(player, menu, item)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
// Подтвердите начало голосование за бан
public open_vtb_3_menu(target, voteplayer)
{
if(VOTENOW) return; // Голосование уже идет, не продолжаем
if(!is_user_connected(target))
{
client_print(voteplayer, print_chat, "%L", voteplayer, "CSR_VTB_LEAVE_PLAYER")
return;
}
me_target[voteplayer] = target // запоминаем нашу цель, кого желаем забанить
new tName[32], buffertxt[64], menu
get_user_name(target, tName, charsmax(tName))
formatex(buffertxt, charsmax(buffertxt), "%L", voteplayer, "CSR_VTB_AAAAA", tName)
menu = menu_create(buffertxt, "handler_vtb_menu_3");
formatex(buffertxt, charsmax(buffertxt), "%L", voteplayer, "CSR_VTB_BAN_THIS")
menu_additem(menu, buffertxt, "1");
formatex(buffertxt, charsmax(buffertxt), "%L", voteplayer, "CSR_VTB_CANCEL_BAN")
menu_additem(menu, buffertxt, "2");
menu_display(voteplayer, menu);
}
public handler_vtb_menu_3(player, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
new data[6], access, callback
menu_item_getinfo(menu, item, access, data, charsmax(data), _, 0, callback);
new key = str_to_num(data)
if(key == 1)
{
create_vote(player)
}
else
{
open_voteban_menu(player)
}
return PLUGIN_HANDLED;
}
// Создание голосования
public create_vote(voteplayer)
{
if(VOTENOW) return; // Голосование уже идет, не продолжаем
if(!is_user_connected(me_target[voteplayer]))
{
client_print(voteplayer, print_chat, "%L", voteplayer, "CSR_VTB_LEAVE_PLAYER")
return;
}
// Индексы запоминаем в глобальные переменные
iTarget = me_target[voteplayer] // Цель, кого хотим выгнать
iBanner = voteplayer // Инициатор голосования
// Время до следующего голосования устанавливаем
new Float:gametime = get_gametime()
next_time_avaliable_vote[voteplayer] = gametime + get_pcvar_float(g_timer_revote_individual)
next_time_avaliable_vote[0] = gametime + get_pcvar_float(g_timer_revote_global)
// Устанавливаем количество голосов по нулям
g_Votes[VOTE_YES] = 0
g_Votes[VOTE_NOT] = 0
g_Votes[VOTE_ZZZ] = 0
g_Votes[ALL_VOTES] = 0
// Ники
new iName[32], tName[32]
get_user_name(iBanner, iName, charsmax(iName))
get_user_name(iTarget, tName, charsmax(tName))
// Показываем всем кто кого хочет выгрнать
set_hudmessage(200, 100, 20, -1.0, 0.30, 2, 3.0, 5.0, 0.05, 1.0, -1);
show_hudmessage(0, "%L", LANG_PLAYER, "CSR_VTB_STARTED_HUD", tName, iName); // Выгнать игрока %s?^nИнициатор голосования: %s
// Через несколько секунд открываем меню для всех
set_task(3.0, "open_menus_for_all")
}
// Перебираем игроков и определяем, кому разрешено принимать участие в голосовании. Последним, открываем меню с правом выбора.
public open_menus_for_all()
{
if(VOTENOW) return; // Голосование уже идет, не продолжаем
if(!is_user_connected(iTarget)) return; // Если игрок смылся с сервера, смысла продолжать нету
VOTENOW = true // Голосование начато
set_task(get_pcvar_float(g_vote_time), "finish_vote", VOTETASKID) // Закончим голосование через [20] секунд
new player[32], num
#if defined SHOWBOTSINMENU
get_players(player, num, "h")
g_Votes[VOTE_YES] += 1 // добавим лишний голос за, для тестов // test
g_Votes[ALL_VOTES] += 1
#else
get_players(player, num, "ch")
#endif
// Получаем значение переменных сейчас, чтобы не обращатся каждый раз внутри цикла
new onlygoodvoters = get_pcvar_num(g_only_good_voters)
new showmenu_for_bnrs = get_pcvar_num(g_show_menu_for_banner)
for(new i = 0; i < num; i++)
{
// "Подсудимому" не будем показывать меню и давать право выбора
if(iTarget == player[i])
{
continue;
}
if(iBanner == player[i])
{
// Если vtb_show_menu_for_banner = 0, инициатору не будем показывать, но голос ему засчитаем (голос всегда "ЗА")
if(!showmenu_for_bnrs)
{
g_Votes[VOTE_YES] += 1
g_Votes[ALL_VOTES] += 1
continue;
}
}
// Если только опытным игрокам разрешается принимать участие у голосовании, неопытным не будет показано меню
if(onlygoodvoters && !is_good_player(player[i]))
{
continue;
}
show_public_votemenu(player[i])
}
/*
Выходит интересная ситуация:
если неопытные могут запускать голосования, но не могут в них участвовать,
то если инициатор голосования неопытный, а право голоса ему включено, он НЕ сможет воспользоватся этим правом голоса.
Но в случае, если вместо права голоса ему включено автоматически засчитанный голос "ЗА", то этот голос будет засчитан.
Вот такая расстановка приоритетов.
*/
}
// Меню выбора
public show_public_votemenu(id)
{
new tName[32], txtbuffer[64], menu
get_user_name(iTarget, tName, charsmax(tName))
formatex(txtbuffer, charsmax(txtbuffer), "%L", id, "CSR_VTB_PUBLICMENU_0", tName) // Исключить из сервера %s
menu = menu_create(txtbuffer, "handler_public_votemenu");
formatex(txtbuffer, charsmax(txtbuffer), "%L", id, "CSR_VTB_PUBLICMENU_1") // Все-равно
menu_additem(menu, txtbuffer, "1");
formatex(txtbuffer, charsmax(txtbuffer), "%L", id, "CSR_VTB_PUBLICMENU_2") // Нет
menu_additem(menu, txtbuffer, "2");
formatex(txtbuffer, charsmax(txtbuffer), "%L", id, "CSR_VTB_PUBLICMENU_3") // Да
menu_additem(menu, txtbuffer, "3");
menu_display(id, menu);
}
public handler_public_votemenu(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
if(!VOTENOW) return PLUGIN_HANDLED; // Нет голосования, не считаем голоса
new data[6], access, callback
menu_item_getinfo(menu, item, access, data, charsmax(data), _, 0, callback);
new key = str_to_num(data)
switch(key)
{
case 1: // Все-равно
{
g_Votes[VOTE_ZZZ] += 1
g_Votes[ALL_VOTES] += 1
}
case 2: // Нет
{
g_Votes[VOTE_NOT] += 1
g_Votes[ALL_VOTES] += 1
}
case 3: // Да
{
g_Votes[VOTE_YES] += 1
g_Votes[ALL_VOTES] += 1
}
}
return PLUGIN_HANDLED;
}
// Завершение голосования
public finish_vote()
{
// Ник цели голосвания
new tName[32]
get_user_name(iTarget, tName, charsmax(tName))
// Показываем результат по голосам
set_hudmessage(150, 150, 150, -1.0, 0.58, 2, 3.0, 6.0, 0.03, 1.0, -1);
show_hudmessage(0, "%L", LANG_PLAYER, "CSR_VTB_FINISH", tName, g_Votes[VOTE_YES], g_Votes[VOTE_NOT], g_Votes[VOTE_ZZZ], g_Votes[ALL_VOTES]);
// Результаты голосования за бан %s^nЗа: %d Против: %d Воздержались: %d Всего голосов: %d
// Голосование окончено
VOTENOW = false
// Вердикт
if(g_Votes[VOTE_YES] > g_Votes[VOTE_NOT]) // Больше ЗА, чем против
{
set_hudmessage(220, 20, 20, -1.0, 0.75, 2, 3.0, 6.0, 0.05, 1.0, -1);
show_hudmessage(0, "%L", LANG_PLAYER, "CSR_VTB_RES_BANNED", tName); // Вердикт: %s ЗАБАНЕН
client_print(0, print_chat, "%L", LANG_PLAYER, "CSR_VTB_RES_BANNED", tName); // Вердикт: %s ЗАБАНЕН
cmd_ban_player(iTarget)
}
else // Больше против, чем за или равно
{
set_hudmessage(0, 200, 0, -1.0, 0.75, 2, 3.0, 6.0, 0.05, 1.0, -1);
show_hudmessage(0, "%L", LANG_PLAYER, "CSR_VTB_RES_NOT_BANNED", tName); // Вердикт: %s оправдан
client_print(0, print_chat, "%L", LANG_PLAYER, "CSR_VTB_RES_NOT_BANNED", tName); // Вердикт: %s оправдан
}
}
// Забаним игрока!
public cmd_ban_player(player)
{
new ban_string[192], reasonban[80], SteamIDforBan[40], NameforBan[32], bantime, str_time[16]
get_pcvar_string(g_ban_string, ban_string, charsmax(reasonban))
get_pcvar_string(g_reason, reasonban, charsmax(reasonban))
get_user_authid(player, SteamIDforBan, charsmax(SteamIDforBan))
get_user_name(player, NameforBan, charsmax(NameforBan))
bantime = get_pcvar_num(g_bantime)
num_to_str(bantime, str_time, charsmax(str_time))
replace_all(ban_string, charsmax(ban_string), "%time%", str_time)
replace_all(ban_string, charsmax(ban_string), "%reason%", reasonban)
replace_all(ban_string, charsmax(ban_string), "%steamid%", SteamIDforBan)
replace_all(ban_string, charsmax(ban_string), "%name%", NameforBan)
server_cmd(ban_string)
}
// = = = = = = = = = = = = = = = = = = = = = = = = = Вторая часть плагина: Кто есть "хороший игрок"?
// Изначально был натив is_good_player, но с версии 0.6 произошло слияние плагинов
// to do: возможно, позже, снова разделить плагины на csr_voteban & vtb_who_good_player ... и забери с собой g_need_frags_for_good_pl
native get_user_stats(player, stats[8], bodyhits[8])
native get_user_stats_sql(player, stats[8], bodyhits[8])
new bool:def_csx_stats = true
new bool:csstatsx_sql = true
public plugin_natives()
{
set_native_filter("native_filter")
}
public native_filter(const name[], index, trap)
{
if(equal(name, "get_user_stats")){
if (!trap){
def_csx_stats = false
return PLUGIN_HANDLED;
}
}
if(equal(name, "get_user_stats_sql")){
if (!trap){
csstatsx_sql = false
return PLUGIN_HANDLED;
}
}
return PLUGIN_CONTINUE;
}
public is_good_player(id)
{
if(stats_get_player_frags(id) >= get_pcvar_num(g_need_frags_for_good_pl))
{
return 1;
}
return 0;
}
public stats_get_player_frags(id)
{
if(csstatsx_sql)
{
new stats[8], bodyhits[8]
get_user_stats_sql(id, stats, bodyhits)
return stats[0] // kills
}
else if(def_csx_stats)
{
new stats[8], bodyhits[8]
get_user_stats(id, stats, bodyhits)
return stats[0] // kills
}
return -1;
}
// = = = = = = = = = = = = = = = = = = = = = = = = = Конец второй части = = = = = = = = = = = = = = = = = = = = = = = = =
// Автор плагина: Leo_[BH]
// Моя группа по плагинам: http://vk.com/cs_rain
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
// Я предоставляю услуги в сфере Amx Mod X
// Написание плагинов на заказ: https://goo.gl/forms/7DwrBdaTnc0pJRqy2
// Создание сборки сервера под ключ: https://goo.gl/forms/GIyvSAw1IJ48szDn2
// Магазин плагинов: https://vk.com/cs_rain
// ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Доброго времени суток, поставил плагин, но в нём не было блокировки при админе на сервере, чтобы не запускалось голосование, выдавалось сообщение в чат и видать каряво сделал. Помогите доделать, заранее спасибо!
В этой теме было размещено решение! Перейти к решению.