Ошибка Lite Voteban.amxx

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
400
Реакции
147
Помог
11 раз(а)
Ошибка
L 04/26/2019 - 08:16:34: Start of error session.
L 04/26/2019 - 08:16:34: Info (map "de_dust2") (file "addons/amxmodx/logs/error_20190426.log")
L 04/26/2019 - 08:16:34: Player 15 is not in game.
L 04/26/2019 - 08:16:34: [AMXX] Displaying debug trace (plugin "lite_voteban.amxx", version "1.4")
L 04/26/2019 - 08:16:34: [AMXX] Run time error 10: native error (native "menu_display")
L 04/26/2019 - 08:16:34: [AMXX] [0] lite_voteban250419.sma::VoteBanAction (line 209)
L 04/26/2019 - 08:16:34: [AMXX] [1] lite_voteban250419.sma::ReasonsMenuHandler (line 164)
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5241 (http://www.amxmodx.org)
Authors:
David "BAILOPAN" Anderson, Pavol "PM OnoTo" Marko
Felix "SniperBeamer" Geyer, Jonny "Got His Gun" Bergstrom
Lukasz "SidLuke" Wlasinski, Christian "Basic-Master" Hammacher
Borja "faluco" Ferrer, Scott "DS" Ehlert
Compiled: Jan 30 2019 07:09:07
Built from: https://github.com/alliedmodders/amxmodx/commit/2110037
Build ID: 5241:2110037
Core mode: JIT+ASM32
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.4.0.643-dev
Build date: 09:50:09 Apr 28 2018 (1477)
Build from: https://github.com/dreamstalker/rehlds/commit/5fdafc1
ReGamedll
ReGameDLL version: 5.7.0.301-dev
Build date: 00:28:14 Apr 9 2018
Build from: https://github.com/s1lentq/ReGameDLL_CS/commit/fe0ea9a
Версия Metamod
Metamod v1.21p37  2013/05/30 (5:13)
by Will Day
http://www.metamod.org/
Patch: Metamod-P (mm-p) v37
by Jussi Kivilinna
http://metamod-p.sourceforge.net/
compiled: May 30 2013, 11:41:16 EET (optimized)
Список метамодулей
Currently loaded plugins:
description stat pend file vers src load unlod
[ 1] Reunion RUN - reunion_mm_i386. v0.1.0.9 ini Start Never
[ 2] ReAuthCheck RUN - reauthcheck_mm_i v0.1.6 ini Start Never
[ 3] VoiceTranscoder RUN - VoiceTranscoder. v2017RC3 ini ANY ANY
[ 4] SafeNameAndChat RUN - SafeNameAndChat. v1.1 ini ANY ANY
[ 5] AMX Mod X RUN - amxmodx_mm_i386. v1.9.0.5 ini Start ANY
[ 6] Rechecker RUN - rechecker_mm_i38 v2.5 ini Chlvl ANY
[ 7] ReSemiclip RUN - resemiclip_mm_i3 v2.3.9 ini Chlvl ANY
[ 8] WHBlocker RUN - whblocker_mm_i38 v1.5.696 ini Chlvl ANY
[ 9] ReSRDetector RUN - resrdetector_mm_ v0.1.0 ini Chlvl ANY
[10] MySQL RUN - mysql_amxx_i386. v1.9.0.5 pl5 ANY ANY
[11] Fun RUN - fun_amxx_i386.so v1.9.0.5 pl5 ANY ANY
[12] Engine RUN - engine_amxx_i386 v1.9.0.5 pl5 ANY ANY
[13] FakeMeta RUN - fakemeta_amxx_i3 v1.9.0.5 pl5 ANY ANY
[14] ReAPI RUN - reapi_amxx_i386. v5.6.0.1 pl5 ANY Never
[15] CStrike RUN - cstrike_amxx_i38 v1.9.0.5 pl5 ANY ANY
[16] ReAimDetector RUN - reaimdetector_am v0.2.2 pl5 ANY Never
[17] Ham Sandwich RUN - hamsandwich_amxx v1.9.0.5 pl5 ANY ANY
[18] CSDM2 RUN - csdm_amxx_i386.s v2.1.3c- pl5 ANY ANY
18 plugins, 18 running
Список плагинов
[  1] admin_loader            0.3.7       kanagava          admin_loader.am  running  
[ 2] Admin ESP 0.3 Kost & miRror | admin_esp_mini. running
[ 3] fb_forwards 0.1.7 Kanagava & Realu fb_forwards.amx running
[ 4] FreshBans 1.3.9b kanagava fresh_bans_138_ running
[ 5] ReAimDetector API 0.2.2 ReHLDS Team reaimdetector.a running
[ 6] CSDM Main 2.1.3c CSDM Team csdm_main.amxx running
[ 7] CSDM Equip 2.1.3c CSDM Team csdm_equip.amxx running
[ 8] CSDM Misc 2.1.3c CSDM Team csdm_misc.amxx running
[ 9] CSDM Spawns 2.1.3c CSDM Team csdm_spawn_pres running
[ 10] CSDM Stripper 2.1.3c KWo csdm_stripper.a running
[ 11] CSDM Protection 2.1.3c BAILOPAN csdm_protection running
[ 12] Ultimate Chats Control 5.2(c) neygomon ucc.amxx debug
[ 13] CSStatsX SQL 0.7.4+1 serfreeman1337 csstatsx_sql.am running
[ 14] AES: StatsX 0.5.8 Vega serfreeman1337/s aes_statsx_cstr running
[ 15] Admin Commands 1.9.0.5241 AMXX Dev Team admincmd.amxx running
[ 16] Menus Front-End 1.5 neugomon menufront_end.a running
[ 17] Commands Menu 1.9.0.5241 AMXX Dev Team cmdmenu.amxx running
[ 18] Players Menu 1.9.0.5241 AMXX Dev Team plmenu.amxx running
[ 19] Maps Menu 1.9.0.5241 AMXX Dev Team mapsmenu.amxx running
[ 20] Admin Votes 1.9.0.5241 Wildness Team adminvote.amxx running
[ 21] Map Manager 0.5.7 CSDM Mistrick | neygo mapmanager.amxx running
[ 22] DemoRecoder 1.1 neygomon amx_demorec.amx running
[ 23] Parachute No Model 1.4 Name_PNM Parachute_No_Mo running
[ 24] Reset Score 1.0 AndrewZ resetscore.amxx running
[ 25] Advert Messages 1.2 neygomon adverts.amxx running
[ 26] [ReAPI] Custom Models 1.6.1 neugomon aacustom_models running
[ 27] [reAPI] Flash Control 1.2 neugomon flash_control.a running
[ 28] Player Status 1.0 Player Status player_status.a running
[ 29] AFK Control 1.4.1 [NoR neygomon afk_control.amx running
[ 30] Show timeleft for CSDM 1.0 neygomon timer.amxx running
[ 31] Advanced Experience Sy 0.5.8 Vega serfreeman1337/s aes_main.amxx running
[ 32] AES: CStrike Addon 0.5.8 Vega serfreeman1337/s aes_exp_cstrike running
[ 33] AES: Informer 0.5.8 Vega serfreeman1337/s aes_informer.am running
[ 34] AES: Admin Tools 0.5.8 Vega serfreeman1337/s aes_exp_editor. running
[ 35] Lite VoteBan 1.4 neygomon lite_voteban.am running
[ 36] Lite Translit 2.8 neygomon lite_translit.a running
36 plugins, 36 running
Автор плагина
neygomon
Версия плагина
1.4
Исходный код
#include <amxmodx>
#define ADMIN_NONE -1

#if AMXX_VERSION_NUM < 183
#include <colorchat>
#endif

#define MIN_PLAYERS 3 // Минимальное кол-во игроков на сервере для запуска голосования
#define BAN_RATIO 0.4 // Коэффицент голосов для бана. 0.1 - 10% | 1.0 - 100%
#define VB_DELAY 180 // Время(в секундах) между голосованиями. Защита от лалок, которые хотят всех перебанить xD
#define VB_TIME 10.0 // Продолжительность голосования
#define VB_BANTIME 60 // Время бана в минутах
#define ACCESS ADMIN_NONE // Доступ к функциям вотебана. Чтобы разрешить всем использовать поставьте ADMIN_NONE
// Стандартные причины VoteBan. Не указывайте больше 8-ми. Может сломаться менюшка :D
// Пункт "Своя причина" добавляется в конце списка.
new g_aBanReasons[][64] =
{
"[VoteBan] AimBot",
"[VoteBan] WallHack",
"[VoteBan] Неадекват",
"[VoteBan] Оскорбления",
"[VoteBan] Текстуры",
"[VoteBan] Реклама/Флуд",
"[VoteBan] Мешает играть"
}

new g_iReasonsMenu;
new g_iVoteMenu;
new _access, callback, ItemData[3];

new g_iInsider;
new g_iVoteStartTime;
new g_iVoteCount, bool:g_bIsVoted[33];
new g_iVictim;
new g_sBanReason[256];

new g_iVoteBanPlayersNum, g_iVoteBanPlayers[33];

public plugin_init()
{
#define VERSION "1.4"
register_plugin("Lite VoteBan", VERSION, "neygomon");
register_cvar("lite_voteban", VERSION, FCVAR_SERVER | FCVAR_SPONLY);

register_clcmd("say /voteban", "ClCmdVoteban");
register_clcmd("say_team /voteban", "ClCmdVoteban");
register_clcmd("vtb_reason", "ClCmdReason");
}

public plugin_cfg()
{
g_iReasonsMenu = menu_create("\d[\rVoteBan\d] \yВыберите причину бана\w", "ReasonsMenuHandler");
g_iVoteMenu = menu_create("UNNAMED_MENU", "VoteMenuHandler");

menu_setprop(g_iReasonsMenu, MPROP_EXIT, MEXIT_NEVER);
menu_setprop(g_iReasonsMenu, MPROP_PERPAGE, 0);
menu_setprop(g_iVoteMenu, MPROP_EXIT, MEXIT_NEVER);

new num[3];
for(new i; i < sizeof g_aBanReasons; i++)
{
num_to_str(i, num, charsmax(num));
menu_additem(g_iReasonsMenu, g_aBanReasons[i], num);
}
menu_addblank(g_iReasonsMenu, 0);
menu_additem(g_iReasonsMenu, "\yСвоя причина", "69");

menu_additem(g_iVoteMenu, "\rДа", "1");
menu_additem(g_iVoteMenu, "\yНет", "0");
}

public client_disconnected(id)
{
if(g_bIsVoted[id])
{
g_bIsVoted[id] = false;
g_iVoteCount--;
}
}

public ClCmdVoteban(id)
{
#if ACCESS != ADMIN_NONE
if(~get_user_flags(id) & ACCESS)
{
new flag[25]; get_flags(ACCESS, flag, charsmax(flag));
client_print_color(id, 0, "^1[^4VoteBan^1] ^1Доступ ^4запрещен^1! Разрешено только игрокам с флагами ^3%s^4!", flag);
return PLUGIN_HANDLED;
}
#endif
static players[32], pnum, iVtbDelay;
if(g_iInsider)
return client_print_color(id, 0, "^1[^4VoteBan^1] ^1Голосование ^3уже ^4запущено^1!");
if((iVtbDelay = g_iVoteStartTime + VB_DELAY - get_systime()) > 0)
return client_print_color(id, 0, "^1[^4VoteBan^1] ^1Голосование будет ^3доступно ^1через ^3%d ^4мин. ^3%d ^4сек.", (iVtbDelay / 60), (iVtbDelay % 60));
get_players(players, pnum);
if(MIN_PLAYERS > pnum)
return client_print_color(id, 0, "^1[^4VoteBan^1] ^1Необходимо не менее ^4%d ^3игроков ^1для ^4запуска голосования^1!", MIN_PLAYERS);

g_iVoteBanPlayersNum = 0;
for(new i; i < pnum; i++)
{
if(get_user_flags(players[i]) & ADMIN_KICK)
return client_print_color(id, 0, "^1[^4VoteBan^1] ^1На сервере ^3присутствует ^4администратор^1!");
g_iVoteBanPlayers[g_iVoteBanPlayersNum++] = players[i];
}
return SelectPlayerOnBan(id);
}

public SelectPlayerOnBan(id)
{
new iPlayersMenu = menu_create("\d[\rVoteBan\d] \yВыберите игрока\w", "PlayersMenuHandler");
new iCallBack = menu_makecallback("PlayersMenuCallback");
menu_setprop(iPlayersMenu, MPROP_BACKNAME, "Назад");
menu_setprop(iPlayersMenu, MPROP_NEXTNAME, "Далее");
menu_setprop(iPlayersMenu, MPROP_EXITNAME, "Выход");

new name[32], num[3];
for(new i; i < g_iVoteBanPlayersNum; i++)
{
if(g_iVoteBanPlayers[i] == id) continue;
get_user_name(g_iVoteBanPlayers[i], name, charsmax(name));
num_to_str(g_iVoteBanPlayers[i], num, charsmax(num));
menu_additem(iPlayersMenu, name, num, 0, iCallBack);
}
menu_display(id, iPlayersMenu, 0);
return PLUGIN_HANDLED;
}

public PlayersMenuCallback(id, menu, item)
{
static ItemName[32], ItemNewName[64];
menu_item_getinfo(menu, item, _access, ItemData, charsmax(ItemData), ItemName, charsmax(ItemName), callback);
if(get_user_flags(str_to_num(ItemData)) & ADMIN_LEVEL_G)
{
formatex(ItemNewName, charsmax(ItemNewName), "\d%s \y[\rИммунитет\y]", ItemName);
menu_item_setname(menu, item, ItemNewName);
return ITEM_DISABLED;
}
return ITEM_ENABLED;
}

public PlayersMenuHandler(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu);
return PLUGIN_HANDLED;
}
menu_item_getinfo(menu, item, _access, ItemData, charsmax(ItemData), _, _, callback);
g_iVictim = str_to_num(ItemData);
menu_destroy(menu);
return menu_display(id, g_iReasonsMenu);
}

public ReasonsMenuHandler(id, menu, item)
{
menu_item_getinfo(menu, item, _access, ItemData, charsmax(ItemData), _, _, callback);
new ReasonId = str_to_num(ItemData);
if(ReasonId == 69) client_cmd(id, "messagemode vtb_reason");
else if(0 <= ReasonId < sizeof g_aBanReasons)
{
g_sBanReason = g_aBanReasons[ReasonId];
VoteBanAction(id);
}
return PLUGIN_HANDLED;
}

public ClCmdReason(id)
{
#if ACCESS != ADMIN_NONE
if(~get_user_flags(id) & ACCESS)
{
new flag[25]; get_flags(ACCESS, flag, charsmax(flag));
client_print_color(id, 0, "^1[^4VoteBan^1] ^1Доступ ^4запрещён^1! Разрешено только игрокам с флагами ^3%s^4!", flag);
return PLUGIN_HANDLED;
}
#endif
static sReason[128];
read_args(sReason, charsmax(sReason));
remove_quotes(sReason);
g_sBanReason = sReason[0] ? sReason : "unknown";
return VoteBanAction(id);
}

VoteBanAction(id)
{
static sInsName[32], sVicName[32], sTitle[256];
get_user_name(id, sInsName, charsmax(sInsName));
get_user_name(g_iVictim, sVicName, charsmax(sVicName));
formatex(sTitle, charsmax(sTitle), "\rЗабанить \y%s\w?^n\rПричина\w: \y%s^n\dЗапустил \r%s", sVicName, g_sBanReason, sInsName);
menu_setprop(g_iVoteMenu, MPROP_TITLE, sTitle);

//лог
new title[256]; new time[64];
get_time ("%d.%m.%Y # %H:%M:%S", time, charsmax(time));
formatex(title, charsmax(title), "%s | Запустил игрок %s против %s. Причина: %s", time, sInsName, sVicName, g_sBanReason);
write_file("/addons/amxmodx/logs/voteban.log", title, -1);
//конец

g_iInsider = id;
g_iVoteStartTime = get_systime();
g_iVoteCount = 0;
arrayset(g_bIsVoted, false, sizeof(g_bIsVoted));

for(new i; i < g_iVoteBanPlayersNum; ++i)
{
if(g_iVoteBanPlayers[i] != g_iVictim)
menu_display(g_iVoteBanPlayers[i], g_iVoteMenu);
}
return set_task(VB_TIME, "VoteBanResults");
}

public VoteMenuHandler(id, menu, item)
{
if(item != MENU_EXIT)
{
menu_item_getinfo(menu, item, _access, ItemData, charsmax(ItemData), _, _, callback);
if(str_to_num(ItemData))
{
g_iVoteCount++;
g_bIsVoted[id] = true;
}
}
return PLUGIN_HANDLED;
}

public VoteBanResults()
{
show_menu(0, 0, "^n", 1); // визуально закрываем меню.
new title[256];
if(is_user_connected(g_iVictim))
{
new iVoteBanMinVotes = floatround(BAN_RATIO * float(g_iVoteBanPlayersNum));
new name[32]; get_user_name(g_iVictim, name, charsmax(name));
if(g_iVoteCount >= iVoteBanMinVotes)
{
server_cmd("amx_ban %d #%d ^"%s^"", VB_BANTIME, get_user_userid(g_iVictim), g_sBanReason);

//лог
formatex(title, charsmax(title), "Статус удачно. Причина: %s ^n---", g_sBanReason);
write_file("/addons/amxmodx/logs/voteban.log", title, -1);
//конец

client_print_color(0, 0, "^1[^4VoteBan^1] ^1Голосование ^4завершено^1! Игрок ^3%s ^4забанен^1! ^1[^4Голосов^1: ^3%d ^1| ^4Необходимо^1: ^3%d^1]", name, g_iVoteCount, iVoteBanMinVotes);
log_amx("VoteBan SUCCESS. Player ^"%s^" [Reason: ^"%s^"][Vote: %d | MinVote: %d]", name, g_sBanReason, g_iVoteCount, iVoteBanMinVotes);
}
else
{
client_print_color(0, 0, "^1[^4VoteBan^1] ^1Голосование ^4завершено^1! Игрок ^3%s ^1не ^4забанен^1! ^1[^4Голосов^1: ^3%d ^1| ^4Необходимо^1: ^3%d^1]", name, g_iVoteCount, iVoteBanMinVotes);
log_amx("VoteBan FAILED. Player ^"%s^" [Reason: ^"%s^"][Vote: %d | MinVote: %d]", name, g_sBanReason, g_iVoteCount, iVoteBanMinVotes);

formatex(title, charsmax(title), "Статус Нeудачно. Причина: %s ^n---", g_sBanReason);
write_file("/addons/amxmodx/logs/voteban.log", title, -1);
}
}
else client_print_color(g_iInsider, 0, "^1[^4VoteBan^1] ^1Наказать ^4не удалось... ^1Игрок покинул сервер :(");
g_iInsider = g_iVictim = 0;
}
Всем доброго времени суток форумчане. Помогите исправить ошибку. Заранее спасибо!):thank_you:
 
В этой теме было размещено решение! Перейти к решению.
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
Код:
-if(g_iVoteBanPlayers[i] != g_iVictim)
+if(is_user_connected(g_iVoteBanPlayers[i]) && g_iVoteBanPlayers[i] != g_iVictim)
Быстрофикс. Получение списка игроков по хорошему надо переделать. Тут дело именно в том, что получение не там, где надо.
 
Сообщения
400
Реакции
147
Помог
11 раз(а)
BlackSignature, спасибо!) проверю отпишусь!) а что со списком не так (всё больше новых становится функций и т.д., более старое уходит в "архив")?! :smile3::thank_you:
 
Последнее редактирование:
Сообщения
1,304
Реакции
2,303
Помог
57 раз(а)
Izmayl7, список игроков формируется в ClCmdVoteban(), т.е. по команде /voteban. А между ней и запуском войта (когда меню показывает игрокам) может пройти сколько угодно времени. Игроки в этом промежутке могут выходить/заходить. При текущей схеме, сам видишь, бьёт ошибку, что игрок не подключён. Т.е. кто-то изначально попал в список плееров, и вышел после этого, ещё до начала голосования. Ещё потенциальная проблема - меню войта может показывать не всем. Т.е. в пролёте те, кто зашёл уже после /voteban.

Над полноценным решением сейчас не хочу думать. Но могу предложить
Код:
    for(new i; i < g_iVoteBanPlayersNum; ++i)
    {
        if(g_iVoteBanPlayers[i] != g_iVictim)
            menu_display(g_iVoteBanPlayers[i], g_iVoteMenu);
    }
Заменить на
Код:
    new pPlayers[MAX_PLAYERS], iPlCount
    get_players(pPlayers, iPlCount, "ch")
   
    for(new i; i < iPlCount; i++) {
        if(pPlayers[i] != g_iVictim)
            menu_display(pPlayers[i], g_iVoteMenu);
    }
Но вообще лучше подыскать алтернативу. Плагин логически не очень хорошо составлен. Там и в логике самого меню недочёты.
 
Сообщения
3,050
Реакции
1,739
Помог
80 раз(а)
Izmayl7 каким образом вообще запустился ксдм на рехлдс? на сколько я помню он не запускался, поэтому переписали для ре ( рексдм )
и почему бы его не использовать?
 
Сообщения
400
Реакции
147
Помог
11 раз(а)
BlackSignature, понятно!) спасибо за разъяснения!) если вылезут ошибки, то буду подыскивать альтернативой вариант вотебана. :smile3:
 
Сообщения
677
Реакции
146
Помог
11 раз(а)
Тоже иногда в логах такая ошибка проскакивает. Попробую вариант BlackSignature
 

RockTheStreet

Саппорт года
Сообщения
1,743
Реакции
344
Помог
40 раз(а)
Обратите внимание, если вы хотите заключить сделку с этим пользователем, он заблокирован
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу