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

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
707
Реакции
150
Помог
11 раз(а)
Ошибка
-
ОС
Linux
Amx Mod X
AMX Mod X 1.9.0.5271
C++
Билд
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)
C++
ReGamedll
ReGameDLL version: 5.20.0.492-dev
Build date: 15:26:35 Jan  4 2021
C++
Версия 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
C++
Список метамодулей
[ 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
C++
Список плагинов
[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
C++
Автор плагина
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;
}
C++
В меню вотебана, если перейти, например, со страницы 1 (где есть игроки с иммунитетом) на страницу 2, а потом снова вернуться на страницу 1, то некорректно отображается текст рядом с никнеймом игроков, у которых есть иммунитет (скрины 2 и 3).
Также иногда, но не всегда, в чате появляются лишние символы, дублируются последние два что ли (на скрине 1 видно)
 
В этой теме было размещено решение! Перейти к решению.

Download all Attachments

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

Вложения

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

iPlague

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

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

Вложения

Сообщения
3,593
Реакции
1,579
Помог
141 раз(а)
Короче.
Код:
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;
}
C++
->
Код:
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;
}
C++
 
Статус
В этой теме нельзя размещать новые ответы.

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

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