Не корректно работает HUD меню в LiteVoteban

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
673
Реакции
146
Помог
11 раз(а)
Ошибка
-
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5271
Билд
Protocol version 48
Exe version 1.1.2.7/Stdio (cstrike)
ReHLDS version: 3.8.0.711-dev
Build date: 13:13:38 Feb 6 2021 (2492)
ReGamedll
ReGameDLL version: 5.20.0.492-dev
Build date: 15:26:35 Jan 4 2021
Версия 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] AMX Mod X        RUN   -    amxmodx_mm_i386.  v1.9.0.5  ini   Start ANY  
[ 2] dproto_EF RUN - dproto.so v0.9.582 ini Start Never
[ 3] LocalizeBug Fix RUN - localizebugfix.s v2.4 ini Start Never
[ 4] VoiceTranscoder RUN - VoiceTranscoder. v2017RC5 ini ANY
[ 5] hackdetector RUN - hackdetector_amx v0.15.32 pl1 ANY
[ 6] CStrike RUN - cstrike_amxx_i38 v1.9.0.5 pl1 ANY
[ 7] Engine RUN - engine_amxx_i386 v1.9.0.5 pl1 ANY
[ 8] FakeMeta RUN - fakemeta_amxx_i3 v1.9.0.5 pl1 ANY
[9] Ham Sandwich RUN - hamsandwich_amxx v1.9.0.5 pl1 ANY ANY
[10] MySQL RUN - mysql_amxx_i386. v1.9.0.5 pl1 ANY ANY
[11] CSX RUN - csx_amxx_i386.so v1.9.0.5 pl1 ANY ANY
[12] Fun RUN - fun_amxx_i386.so v1.9.0.5 pl1 ANY ANY
[13] ReAPI RUN - reapi_amxx_i386.so v5.19.0.211-dev pl2 ANY
Список плагинов
[1] AIM detector            v0.9.2cs     kanagava          aim_detector.am  running  
[ 2] FreshBans v1.4.2b kanagava fresh_bans.amxx running
[ 3] Admin Loader v3.5 neygomon admin_loader.am running
[ 4] StatsX v1.9.0 AMXX Dev Team statsx_shell.am running
[ 5] Admin Chat v1.9.0.5271 AMXX Dev Team adminchat.amxx running
[ 6] Admin Commands v1.9.0.5271 AMXX Dev Team admincmd.amxx running
[ 7] Admin Votes v1.9.0.5271 AMXX Dev Team adminvote.amxx running
[ 8] Menus Front-End v1.9.0.5271 AMXX Dev Team menufront.amxx running
[ 9] Commands Menu v1.9.0.5271 AMXX Dev Team cmdmenu.amxx running
[ 10] Players Menu v1.9.0.5271 AMXX Dev Team plmenu.amxx running
[ 11] Maps Menu v1.9.0.5271 AMXX Dev Team mapsmenu.amxx running
[ 12] Plugin Menu v1.9.0.5271 AMXX Dev Team pluginmenu.amxx running
[ 13] Scrolling Message v1.9.0.5271 AMXX Dev Team scrollmsg.amxx running
[ 14] Info. Messages v1.9.0.5271 AMXX Dev Team imessage.amxx running
[ 15] Map Manager v2.5.61 Mistrick mapmanager.amxx running
[ 16] Map Manager: Sub Plugi v0.1 Mistrick mapmanager_subp running
[ 17] TimeLeft v1.9.0.5271 AMXX Dev Team timeleft.amxx running
[ 18] Stats Configuration v1.9.0.5271 AMXX Dev Team statscfg.amxx running
[ 19] GGAMXX v2.12 Avalanche gg.amxx running
[ 20] Auto Team Balance Adva v1.5.1 Radius auto_team_balan running
[ 21] Autoresponder/Advertis v0.5 MaximusBrood ad_manager.amxx running
[ 22] Blue Fade v0.1 Stimul Blue_Fade.amxx running
[ 23] Auto recording demo v2.0 IzI | Bonaqua (R amx_autodemorec running
[ 24] Admin Gag v1.0 AndrewZ admin_gag.amxx running
[ 25] mute v1.0 Aziz mute.amxx running
[ 26] AFK v2.3 rapara13/Nordic afk.amxx running
[ 27] Admin Prefixes v4.1 m0skVi4a ;] admin_prefixes. running
[ 28] Spawn Protection v7.0 Peli spawnprotection running
[ 29] Custom Models v1.3.2 neugomon custom_models.a running
[ 30] Round Non-Stop v0.3.6 Simon Logic round_nonstop.a running
[ 31] HeadShot Blood v1.1 [CSMods] & tuty hs_blood.amxx running
[ 32] BlockDropShield v1.0 [CSMods] block_drop_shield.amxx debug
[ 33] Lite VoteBan v1.4 neygomon lite_voteban.am running
Автор плагина
neygomon
Версия плагина
1.4
Исходный код
#include <amxmodx>
#define ADMIN_NONE -1

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

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[128];

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[\rLite VoteBan\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));
ChatColor(id, "^1[^4WARN^1] ^4Доступ запрещен! Разрешено только игрокам с флагами ^3%s^4!", flag);
return PLUGIN_HANDLED;
}
#endif
static players[32], pnum, iVtbDelay;
if(g_iInsider)
return ChatColor(id, "^1[^4 Voteban^1] ^4Голосование ^3уже запущено^4!");
if((iVtbDelay = g_iVoteStartTime + VB_DELAY - get_systime()) > 0)
return ChatColor(id, "^1[^4VVV Voteban^1] ^4Голосование будет доступно через ^3%d ^4мин. ^3%d ^4сек.", (iVtbDelay / 60), (iVtbDelay % 60));
get_players(players, pnum);
if(MIN_PLAYERS > pnum)
return ChatColor(id, "^1[^4VVV Voteban^1] ^4Необходимо не менее ^3%d ^4игроков для запуска голосования!", MIN_PLAYERS);

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

public SelectPlayerOnBan(id)
{
new iPlayersMenu = menu_create("\d[\rVVV Voteban\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_IMMUNITY)
{
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));
ChatColor(id, "^1[^4WARN^1] ^4Доступ запрещен! Разрешено только игрокам с флагами ^3%s^4!", flag);
return PLUGIN_HANDLED;
}
#endif
static sReason[64];
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);

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

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);
}
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); // визуально закрываем меню.
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)
{
#if VB_TYPE == 0
server_cmd("kick #%d ^"%s^"", get_user_userid(g_iVictim), g_sBanReason);
#endif
#if VB_TYPE == 1
server_cmd("amx_ban %d #%d ^"%s^"", VB_BANTIME, get_user_userid(g_iVictim), g_sBanReason);
#endif
#if VB_TYPE == 2
server_cmd("amx_superban #%d %d ^"%s^"", get_user_userid(g_iVictim), VB_BANTIME, g_sBanReason);
#endif
ChatColor(0, "^1[^4VVV Voteban^1] ^4Голосование завершено! Игрок ^3%s ^1был ^3забанен^4! ^1[^4Голосов: ^3%d ^1| ^4Необходимо: ^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
{
ChatColor(0, "^1[^4VVV Voteban^1] ^4Голосование завершено! Игрок ^3%s ^1не был ^3забанен^4! ^1[^4Голосов: ^3%d ^1| ^4Необходимо: ^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);
}
}
else ChatColor(g_iInsider, "^1[^4VVV Voteban^1] ^4Наказать не удалось... Игрок покинул сервер :(");
g_iInsider = g_iVictim = 0;
}

stock ChatColor(const id, const szMessage[], any:...)
{
static pnum, players[32], szMsg[190], IdMsg;
vformat(szMsg, charsmax(szMsg), szMessage, 3);

if(!IdMsg) IdMsg = get_user_msgid("SayText");

if(id)
{
if(!is_user_connected(id)) return 1;
players[0] = id;
pnum = 1;
}
else get_players(players, pnum, "ch");

for(new i; i < pnum; i++)
{
message_begin(MSG_ONE, IdMsg, .player = players[i]);
write_byte(players[i]);
write_string(szMsg);
message_end();
}
return 1;
}
В меню вотебана, если перейти, например, со страницы 1 (где есть игроки с иммунитетом) на страницу 2, а потом снова вернуться на страницу 1, то некорректно отображается текст рядом с никнеймом игроков, у которых есть иммунитет (скрины 2 и 3).
Также иногда, но не всегда, в чате появляются лишние символы, дублируются последние два что ли (на скрине 1 видно)
 
В этой теме было размещено решение! Перейти к решению.

Download all Attachments

Сообщения
673
Реакции
146
Помог
11 раз(а)
Алексеич, я.
Находил решения других проблем от BlackSignature и еще от кого-то, уже не помню. Тут на форуме же решения брал. Проблемы с логами были и тд, сейчас все ок, только с менюшкой решить осталось.
 
Сообщения
45
Реакции
24
wood-grouse, может конфликтует? попробуйте глянуть при вырубленных плагинах кроме этой, да и список плагинов думаю вы не весь приложили, у вас нет ни одного написанного платного плагина? странно как то
 
  • Нравится
Реакции: Diaz
Сообщения
673
Реакции
146
Помог
11 раз(а)
@exxxclusive,представь себе, НИ ОДНОГО, кроме AIM detector)))
 
Сообщения
673
Реакции
146
Помог
11 раз(а)
Разобрался с чатом. Оказалось, слишком много символов, поэтому съезжало уведомление о бане.
А вот с худом странные вещи)))
Если постоянно переходить со страницы 1 (где есть игрок с иммунитетом) на 2 страницу, а потом со 2 на 1-ю, то сжираются по одному символу, и в итоге от никнейма игрока ничего не останется, останется просто [иммунитет])))
 

Вложения

  • 28.1 KB Просмотры: 259

iPlague

♿️
Сообщения
230
Реакции
130
Помог
2 раз(а)
wood-grouse, вставить строку 130

Код:
        server_print("ItemName %s", ItemName);
        server_print("ItemNewName %s", ItemNewName);
Тоже интересно чё так..
 
Сообщения
673
Реакции
146
Помог
11 раз(а)
iPlague , теперь просто серым подсвечивается, но забанить нельзя))
Nordic Warrior вообще никаких изменений((
 

Вложения

Сообщения
3,582
Реакции
1,570
Помог
137 раз(а)
Короче.
Код:
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_IMMUNITY)
    {
        formatex(ItemNewName, charsmax(ItemNewName), "\d%s \y[\rИммунитет\y]", ItemName);
        menu_item_setname(menu, item, ItemNewName);
        return ITEM_DISABLED;
    }
    return ITEM_ENABLED;
}
->
Код:
public PlayersMenuCallback(id, menu, item)
{
    menu_item_getinfo(menu, item, _access, ItemData, charsmax(ItemData), _, _, callback);
    g_iVictim = str_to_num(ItemData);
    if(get_user_flags(g_iVictim) & ADMIN_IMMUNITY)
    {
        menu_item_setname(menu, item, fmt("%n \y[\rИммунитет\y]", g_iVictim));
        return ITEM_DISABLED;
    }
    return ITEM_ENABLED;
}
 
Статус
В этой теме нельзя размещать новые ответы.

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

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