Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

18 страниц V  « 15 16 17 »

Yet Another Voteban

, Баним негодяев бесплатно без смс и регистрации
Статус пользователя Bloo
сообщение 8.6.2016, 13:53
Сообщение #301


Стаж: 10 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

TauJIeP, лучше позно чем никогда. Это проблема не плагина, а клиентов которые блокируют messagemode
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя antohab
сообщение 12.6.2016, 11:50
Сообщение #302
Стаж: 9 лет 9 месяцев

Сообщений: 35
Благодарностей: 10
Полезность: 218

AndrewZ, Предложил бы вместо своей причины сделать пяток заготовленых причин (как в меню бана админа). А то большая часть банов идет с неадекватной причиной (мат, оскорбления). Так же отпадет проблема с неработающим вводом причины у проблемных сборок. Или сделать настройку: 1. список причин 2. Своя причина 3. Список + своя.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя TauJIeP
сообщение 12.6.2016, 19:30
Сообщение #303


Стаж: 11 лет
Город: Уральск

Сообщений: 429
Благодарностей: 57
Полезность: < 0

Bloo, Это не проблема. А протектор какойто. Мне их всех что заставлять переходить на другую кс 1.6 из за этого

Отредактировал: TauJIeP, - 12.6.2016, 19:31
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
voed
сообщение 12.6.2016, 20:15
Сообщение #304
Стаж: 9 лет 9 месяцев

Сообщений: 2593
Благодарностей: 1760
Полезность: 405

Спамьте AndrewZ'у в личку, чтоб делал апдейт, и я исправлю эту проблему. А то "там что-то еще не работало, надо посмотреть" длится уже третий месяц smile.gif
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Bloo
сообщение 15.6.2016, 13:31
Сообщение #305


Стаж: 10 лет

Сообщений: 15547
Благодарностей: 6971
Полезность: 1206

TauJIeP, это не конкретно протектор, а не корректно настроенный их blacklist. Что ж теперь, из за кривых сборок отказываться везде от messagemode? используйте альтернативные плагины без ввода своей причины.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя leshiy
сообщение 25.7.2016, 10:02
Сообщение #306


Стаж: 10 лет

Сообщений: 82
Благодарностей: 19
Полезность: 156

Цитата(AndrewZ @ 16.1.2014, 23:45) *
Что думаете насчет наказания инициатора вотебана, в случае, если голосование не состоялось

Только хотел про это написать. Может сделаете это кваром? Кому надо, тот включит.

Отредактировал: leshiy, - 25.7.2016, 10:52
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Klicka
сообщение 10.2.2017, 21:31
Сообщение #307
Стаж: 10 лет

Сообщений: 7
Благодарностей: 1
Полезность: 0

AndrewZ, установил, работает, но почему то на 3ем скрине такого меню не появляется, убрать флаг времени бана, не вижу где выбирать на сколько банить
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 26.10.2017, 10:42
Сообщение #308


Иконка группы

Стаж: 15 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Обновил шапку темы - добавил 1.7 версию и ссылку на гитхаб, там ниче нового особо нет, прост кое че поправили и вроде все.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dillon
сообщение 14.12.2017, 17:16
Сообщение #309


Стаж: 11 лет
Город: Москва

Сообщений: 49
Благодарностей: 3
Полезность: 46

Цитата(AndrewZ @ 26.10.2017, 10:42) *
Обновил шапку темы - добавил 1.7 версию и ссылку на гитхаб, там ниче нового особо нет, прост кое че поправили и вроде все.

Цитата(antohab @ 12.6.2016, 11:50) *
AndrewZ, Предложил бы вместо своей причины сделать пяток заготовленых причин (как в меню бана админа). А то большая часть банов идет с неадекватной причиной (мат, оскорбления). Так же отпадет проблема с неработающим вводом причины у проблемных сборок. Или сделать настройку: 1. список причин 2. Своя причина 3. Список + своя.

+1
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя best101
сообщение 10.9.2018, 20:14
Сообщение #310


Стаж: 8 лет

Сообщений: 155
Благодарностей: 6
Полезность: < 0

AndrewZ, подскажи, что и где удалить, что бы НЕ вписывать причину бана. Что бы была просто voteban. А то много "грамотных" игроков...

Cкрытый текст

/*
* Yet Another Voteban AMXX Plugin
*
* — удобный и симпатичный голосовальщик за бан игроков
* для Ваших великолепных серверов Counter-Strike 1.6.
*
*
* Авторы: AndrewZ и voed.
*
*
* Переменные плагина:
*
* yav_time_default "10" — стандартное время бана в минутах, доступное для простых смертных (1 значение).
* yav_time "10" — дополнительное время бана для игроков с флагом доступа "yav_time_access" (от 1 до 5 значений, через пробел).
* yav_ban_type "2" — тип бана: -2 = BANID (STEAMID); -1 = ADDIP; 1 = AMXBANS; 2 = FRESHBANS; 3 = ADVANCED BANS; 4 = SUPERBAN; 5 = MULTIBAN.
* yav_delay "5" — задержка между голосованиями, в минутах.
* yav_duration "15" — длительность голосования.
* yav_percent "60" — необходимый процент проголосовавших игроков для осуществления бана (1-100).
* yav_min_players "4" — минимум игроков на сервере для возможности открыть меню голосования.
* yav_spec_admins "0" — учитывать ли админов в команде наблюдателей как активных админов. (1 - учитывать, 0 - пропускать)
* yav_roundstart_delay "-1" — блокировка вызова голосования в начале раунда, в секундах. (Целое или дробное положительное значение - блокировка на указанное время, "-1" - блокировка до конца mp_buytime, "0" - отключить, не блокировать)
* yav_access "" — флаг доступа к меню голосования. (Можно указать несколько: "abc", либо оставить пустым "", чтобы разрешить использовать всем).
* yav_time_access "" — флаг доступа к выбору времени бана и к голосованию без кулдауна. (Можно указать несколько: "abc", либо оставить пустым "", чтобы отключить).
* yav_admin_access "" — флаг админа для блока голосования и включения оповещения админов. (Можно указать несколько: "abc", либо оставить пустым "", чтобы отключить).
* yav_immunity_access "t" — флаг иммунитета к вотебану. (Можно указать несколько: "abc", либо оставить пустым "", чтобы отключить).
* yav_log_to_file "1" — логирование банов в файл "addons\amxmodx\logs". Название логов "YAV_ГГГГДДММ.log".
*/

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

#define PLUGIN "Yet Another Voteban"
#define VERSION "1.7"
#define AUTHOR "AndrewZ/voed/wopox1337"

#define PDATA_SAFE 2
#define OFFSET_LINUX 5
#define OFFSET_CSMENUCODE 205

#define MAX_PLAYERS 32
#define MSGS_PREFIX "YAV"

#define TID_ENDVOTE 5051
#define TID_BLOCKVOTE 5052

enum
{
MENU_SOUND_SELECT, // 0
MENU_SOUND_DENY, // 1
MENU_SOUND_SUCCESS // 2
}

new g_pcvr_DefaultTime, g_pcvr_Time, g_pcvr_BanType, g_pcvr_Delay,
g_pcvr_Duration, g_pcvr_Percent, g_pcvr_MinPlayers, g_pcvr_SpecAdmins,
g_pcvr_RoundStartDelay, g_pcvr_mpBuyTime,
g_pcvr_Access, g_pcvr_TimeAccess, g_pcvr_AdminAccess, g_pcvr_ImmunityAccess,
g_pcvr_LogToFile

new g_szMenuSounds[][] =
{
"buttons/lightswitch2.wav", // 0
"buttons/button2.wav", // 1
"buttons/blip1.wav" // 2
}

new g_szUserReason[ MAX_PLAYERS + 1 ][ 26 ],
g_iUserSelectedID[ MAX_PLAYERS + 1 ],
g_iUserBanTime[ MAX_PLAYERS + 1 ],
g_iTotalVotes[ MAX_PLAYERS + 1 ],
g_iUserGametime[ MAX_PLAYERS + 1 ]

new g_szInitiator[ 3 ][ 35 ],
g_iBanID,
g_iBanTime,
g_szBanReason[ 26 ]

new bool:g_bIsVoteStarted, bool:g_bIsVoteBlocked
new g_szParsedCvarTime[ 5 ][ 8 ]

public plugin_precache()
{
new i

for( i = 0; i < sizeof g_szMenuSounds; i ++ )
precache_sound( g_szMenuSounds[ i ] )
}

public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR )

g_pcvr_DefaultTime = register_cvar( "yav_time_default", "10" )
g_pcvr_Time = register_cvar( "yav_time", "10" )
g_pcvr_BanType = register_cvar( "yav_ban_type", "2" )
g_pcvr_Delay = register_cvar( "yav_delay", "5" )
g_pcvr_Duration = register_cvar( "yav_duration", "15" )
g_pcvr_Percent = register_cvar( "yav_percent", "60" )
g_pcvr_MinPlayers = register_cvar( "yav_min_players", "4" )
g_pcvr_SpecAdmins = register_cvar( "yav_spec_admins", "0" )
g_pcvr_RoundStartDelay = register_cvar( "yav_roundstart_delay", "-1" )
g_pcvr_Access = register_cvar( "yav_access", "" )
g_pcvr_TimeAccess = register_cvar( "yav_time_access", "" )
g_pcvr_AdminAccess = register_cvar( "yav_admin_access", "" )
g_pcvr_ImmunityAccess = register_cvar( "yav_immunity_access", "t" )
g_pcvr_LogToFile = register_cvar( "yav_log_to_file", "1" )

g_pcvr_mpBuyTime = register_cvar( "mp_buytime", "" )

register_event( "HLTV", "event_newround", "a", "1=0", "2=0" )

register_clcmd( "say /voteban", "show_voteban_players_menu" )
register_clcmd( "say_team /voteban", "show_voteban_players_menu" )
register_clcmd( "amx_votebanmenu", "show_voteban_main_menu" )

register_clcmd( "voteban_reason", "cmd_voteban_reason" )

register_dictionary( "yet_another_voteban.txt" )
}

public plugin_cfg()
{
new szData[ 44 ]; get_pcvar_string( g_pcvr_Time, szData, charsmax( szData ) )

parse( szData, g_szParsedCvarTime[ 0 ], 7,
g_szParsedCvarTime[ 1 ], 7,
g_szParsedCvarTime[ 2 ], 7,
g_szParsedCvarTime[ 3 ], 7,
g_szParsedCvarTime[ 4 ], 7 )
}

public event_newround()
{
new Float:fCvar
fCvar = get_pcvar_float( g_pcvr_RoundStartDelay )

if( fCvar == 0.0 )
return

if( task_exists( TID_BLOCKVOTE ) )
remove_task( TID_BLOCKVOTE )

if( fCvar == -1.0 )
fCvar = get_pcvar_float( g_pcvr_mpBuyTime ) * 60

g_bIsVoteBlocked = true
set_task( fCvar, "task_unblock_vote", TID_BLOCKVOTE )
}

public task_unblock_vote()
g_bIsVoteBlocked = false

public client_connect( id )
clear_user_voteban_data( id )

public client_disconnect( id )
clear_user_voteban_data( id )

public clear_user_voteban_data( id )
{
g_iUserSelectedID[ id ] = 0
g_iUserBanTime[ id ] = get_pcvar_num( g_pcvr_DefaultTime )
arrayset( g_szUserReason[ id ], 0, sizeof( g_szUserReason ) )

if( g_iBanID == id )
clear_voteban_data()
}

public clear_voteban_data()
{
if( task_exists( TID_ENDVOTE ) )
remove_task( TID_ENDVOTE )

g_bIsVoteStarted = false
g_iBanID = 0
g_iBanTime = 0
arrayset( g_szBanReason, 0, sizeof( g_szBanReason ) )
arrayset( g_iTotalVotes, 0, MAX_PLAYERS + 1 )
}

public cmd_voteban_reason( id )
{
new i, szArgs[ 26 ], szBlock[][] = { "!g", "!y", "!t", "%", "#", "", "", "", "" }

read_args( szArgs, charsmax( szArgs ) )
remove_quotes( szArgs )

for( i = 0; i < sizeof( szBlock ); i ++ )
replace_all( szArgs, charsmax( szArgs ), szBlock[ i ], "" )

g_szUserReason[ id ] = szArgs

show_voteban_main_menu( id )

return PLUGIN_HANDLED
}

public show_voteban_players_menu( id )
{
if( !is_voteban_available( id ) )
return PLUGIN_HANDLED

new iMenu, i, szTemp[ 64 ], szName[ 32 ], szFlags[ 23 ], szId[ 3 ]

formatex( szTemp, charsmax( szTemp ), "\y%L\R", id, "VOTEBAN_MENU_PLAYERS_TITLE" ) // Выбор игрока
iMenu = menu_create( szTemp, "handler_voteban_players_menu" )

for( i = 1; i <= MAX_PLAYERS; i ++ )
{
if( !get_user_status( i ) || ( i == id ) )
continue

get_user_name( i, szName, charsmax( szName ) )
get_pcvar_string( g_pcvr_ImmunityAccess, szFlags, charsmax( szFlags ) )

if( get_user_flags( i ) & read_flags( szFlags ) )
formatex( szTemp, charsmax( szTemp ), "\d%s \r*", szName )
else
formatex( szTemp, charsmax( szTemp ), "\w%s", szName )

num_to_str( i, szId, charsmax( szId ) )

menu_additem( iMenu, szTemp, szId, ADMIN_ALL )
}

if( !menu_items( iMenu ) )
{
menu_destroy( iMenu )
return PLUGIN_HANDLED
}

formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_BACK" )
menu_setprop( iMenu, MPROP_BACKNAME, szTemp )

formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_NEXT" )
menu_setprop( iMenu, MPROP_NEXTNAME, szTemp )

formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_EXIT" )
menu_setprop( iMenu, MPROP_EXITNAME, szTemp )

menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\w" )

if( pev_valid( id ) == PDATA_SAFE )
set_pdata_int( id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX )

menu_display( id, iMenu, 0 )

return PLUGIN_HANDLED
}

public handler_voteban_players_menu( id, iMenu, iItem )
{
if( !is_voteban_available( id ) || ( iItem == MENU_EXIT ) )
{
menu_destroy( iMenu )
client_spk( id, MENU_SOUND_SELECT )

return PLUGIN_HANDLED
}

new szData[ 3 ], szName[ 32 ], iAccess, iCallback, sId
menu_item_getinfo( iMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), iCallback )

sId = str_to_num( szData )

if( get_user_status( sId ) )
{
new szFlags[ 23 ]
get_pcvar_string( g_pcvr_ImmunityAccess, szFlags, charsmax( szFlags ) )

if( !( get_user_flags( sId ) & read_flags( szFlags ) ) )
{
g_iUserSelectedID[ id ] = sId
show_voteban_main_menu( id )
client_spk( id, MENU_SOUND_SELECT )
}
else
{
show_voteban_players_menu( id )
yet_another_print_color( id, "%L", id, "VOTEBAN_IMMUNITY" ) // Выбранный игрок имеет иммунитет к бану.
client_spk( id, MENU_SOUND_DENY )
}
}
else
{
yet_another_print_color( id, "%L", id, "VOTEBAN_LEAVE" ) // Выбранный игрок недоступен для выбора, возможно он покинул сервер.
client_spk( id, MENU_SOUND_DENY )
}

menu_destroy( iMenu )

return PLUGIN_HANDLED
}

public show_voteban_main_menu( id )
{
if( !is_voteban_available( id ) )
return PLUGIN_HANDLED

new iMenu, szTemp[ 64 ], sId

sId = g_iUserSelectedID[ id ]

formatex( szTemp, charsmax( szTemp ), "\y%L", id, "VOTEBAN_MENU_TITLE" ) // Голосование за бан
iMenu = menu_create( szTemp, "handler_voteban_main_menu" )

// === 1 ===

if( get_user_status( sId ) )
{
new szName[ 32 ]
get_user_name( sId, szName, charsmax( szName ) )

formatex( szTemp, charsmax( szTemp ), "%L \y%s", id, "VOTEBAN_MENU_PLAYER", szName ) // Игрок:
}
else formatex( szTemp, charsmax( szTemp ), "%L \d%L", id, "VOTEBAN_MENU_PLAYER", id, "VOTEBAN_MENU_SELECT_PLAYER" ) // Выбрать игрока

menu_additem( iMenu, szTemp, "1", ADMIN_ALL )

// =========


// === 2 ===

if( g_szUserReason[ id ][ 0 ] )
formatex( szTemp, charsmax( szTemp ), "%L \y%s^n", id, "VOTEBAN_MENU_REASON", g_szUserReason[ id ] ) // Причина

else formatex( szTemp, charsmax( szTemp ), "%L \d%L^n", id, "VOTEBAN_MENU_REASON", id, "VOTEBAN_MENU_ENTER_REASON" ) // Причина || Ввести причину бана

menu_additem( iMenu, szTemp, "2", ADMIN_ALL )

// =========


// === 3 ===

new szFlags[ 23 ]
get_pcvar_string( g_pcvr_TimeAccess, szFlags, charsmax( szFlags ) )

if( get_user_flags( id ) & read_flags( szFlags ) )
{
formatex( szTemp, charsmax( szTemp ), "%L \y%i %L^n", id, "VOTEBAN_MENU_TIME", g_iUserBanTime[ id ], id, "VOTEBAN_MENU_MINUTES" ) // Время бана || минут
menu_additem( iMenu, szTemp, "3", ADMIN_ALL )
}

// =========

// === 4 ===

new iAdmins = get_admins_online()

if( iAdmins )
formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_NOTIFY", iAdmins ) // Сообщить администратору (\y%d в сети\w)
else
formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_START_VOTE" ) // Начать голосование

menu_additem( iMenu, szTemp, "4", ADMIN_ALL )

// =========


formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_EXIT" )
menu_setprop( iMenu, MPROP_EXITNAME, szTemp )

menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\w" )

if( pev_valid( id ) == PDATA_SAFE )
set_pdata_int( id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX )

menu_display( id, iMenu, 0 )

return PLUGIN_HANDLED
}

public handler_voteban_main_menu( id, iMenu, iItem )
{
if( !is_voteban_available( id ) || ( iItem == MENU_EXIT ) )
{
menu_destroy( iMenu )
clear_user_voteban_data( id )
client_spk( id, MENU_SOUND_SELECT )

return PLUGIN_HANDLED
}

new szData[ 3 ], szName[ 32 ], iAccess, iCallback, iKey
menu_item_getinfo( iMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), iCallback )

iKey = str_to_num( szData )

switch( iKey )
{
case 1:
{
show_voteban_players_menu( id )
client_spk( id, MENU_SOUND_SELECT )
}

case 2:
{
client_cmd( id, "messagemode voteban_reason" )
client_spk( id, MENU_SOUND_SELECT )
}

case 3:
{
show_voteban_time_menu( id )
client_spk( id, MENU_SOUND_SELECT )
}

case 4:
{
new sId = g_iUserSelectedID[ id ]

if( !get_user_status( sId ) )
{
yet_another_print_color( id, "%L", id, "VOTEBAN_NEED_PLAYER" ) // Вы должны выбрать игрока
show_voteban_main_menu( id )
client_spk( id, MENU_SOUND_DENY )
}

else if( !g_szUserReason[ id ][ 0 ] )
{
yet_another_print_color( id, "%L", id, "VOTEBAN_NEED_REASON" ) // Вы должны ввести причину бана
show_voteban_main_menu( id )
client_spk( id, MENU_SOUND_DENY )
}

else
{
new szFlags[ 23 ], iAdmins = get_admins_online()

if( iAdmins )
{
new i, szSelectedName[ 32 ], szName[ 32 ]

for( i = 1; i <= MAX_PLAYERS; i ++ )
{
get_pcvar_string( g_pcvr_AdminAccess, szFlags, charsmax( szFlags ) )

if( !get_user_status( i ) || !( get_user_flags( i ) & read_flags( szFlags ) ) )
continue

get_user_name( sId, szSelectedName, charsmax( szSelectedName ) )
get_user_name( id, szName, charsmax( szName ) )
yet_another_print_color( i, "%L", i, "VOTEBAN_ADMIN_NOTIFICATION", szName, szSelectedName, g_szUserReason[ id ] ) // %s хочет забанить %s за "%s".
client_spk( i, MENU_SOUND_SUCCESS )
}

yet_another_print_color( id, "%L", id, "VOTEBAN_ADMIN_NOTIFIED", iAdmins ) // Администраторов уведомлено о вашей жалобе: %d.
client_spk( id, MENU_SOUND_SUCCESS )
clear_user_voteban_data( id )

return PLUGIN_HANDLED
}

get_pcvar_string( g_pcvr_TimeAccess, szFlags, charsmax( szFlags ) )

get_user_name( id, g_szInitiator[ 0 ], 34 )
get_user_ip( id, g_szInitiator[ 1 ], 34, 1 )
get_user_authid( id, g_szInitiator[ 2 ], 34 )

g_iBanID = sId
g_szBanReason = g_szUserReason[ id ]

if( get_user_flags( id ) & read_flags( szFlags ) )
g_iBanTime = g_iUserBanTime[ id ]

else g_iBanTime = get_pcvar_num( g_pcvr_DefaultTime )

clear_user_voteban_data( id )

g_bIsVoteStarted = true

show_voteban_menu( id )

g_iUserGametime[ id ] = floatround( get_gametime() )
set_task( get_pcvar_float( g_pcvr_Duration ), "task_end_vote", TID_ENDVOTE )
}
}
}

menu_destroy( iMenu )

return PLUGIN_HANDLED
}

public show_voteban_time_menu( id )
{
new iMenu, i, szTemp[ 190 ]

formatex( szTemp, charsmax( szTemp ), "\y%L", id, "VOTEBAN_MENU_TIME_TITLE" ) // Выбор срока бана
iMenu = menu_create( szTemp, "handler_voteban_time_menu" )

for( i = 0; i < sizeof( g_szParsedCvarTime ); i ++ )
{
if( !g_szParsedCvarTime[ i ][ 0 ] )
break

formatex( szTemp, charsmax( szTemp ), "%s %L", g_szParsedCvarTime[ i ], id, "VOTEBAN_MENU_MINUTES" ) // минут

menu_additem( iMenu, szTemp, "", ADMIN_ALL )
}

formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_EXIT" )
menu_setprop( iMenu, MPROP_EXITNAME, szTemp )

menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\w" )

if( pev_valid( id ) == PDATA_SAFE )
set_pdata_int( id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX )

menu_display( id, iMenu, 0 )

return PLUGIN_HANDLED
}

public handler_voteban_time_menu( id, iMenu, iItem )
{
if( !is_voteban_available( id ) || ( iItem == MENU_EXIT ) )
{
menu_destroy( iMenu )
clear_user_voteban_data( id )
client_spk( id, MENU_SOUND_SELECT )

return PLUGIN_HANDLED
}

switch( iItem )
{
case 0..4: g_iUserBanTime[ id ] = str_to_num( g_szParsedCvarTime[ iItem ] )
}

show_voteban_main_menu( id )
client_spk( id, MENU_SOUND_SELECT )

menu_destroy( iMenu )

return PLUGIN_HANDLED
}

public show_voteban_menu( id )
{
new i

for( i = 1; i <= MAX_PLAYERS; i ++ )
{
if( !get_user_status( i ) || i == g_iBanID )
continue

new szName[ 32 ], szBanName[ 32 ]
get_user_name( id, szName, charsmax( szName ) )
get_user_name( g_iBanID, szBanName, charsmax( szBanName ) )

client_spk( i, MENU_SOUND_SUCCESS )
yet_another_print_color( i, "%L", i, "VOTEBAN_WHO_START", szName, szBanName, g_szBanReason ) // начал голосование за бан

if( i == id )
{
add_vote( id )
continue
}

new iMenu, szTemp[ 64 ]

formatex( szTemp, charsmax( szTemp ), "\y%L", i, "VOTEBAN_MENU_TITLE" ) // Голосование за бан
iMenu = menu_create( szTemp, "handler_voteban_menu" )

formatex( szTemp, charsmax( szTemp ), "%L", i, "VOTEBAN_MENU_YES" )
menu_additem( iMenu, szTemp, "", ADMIN_ALL )

formatex( szTemp, charsmax( szTemp ), "%L", i, "VOTEBAN_MENU_NO" )
menu_additem( iMenu, szTemp, "", ADMIN_ALL )

menu_addblank( iMenu, 1 )

formatex( szTemp, charsmax( szTemp ), "\w%L \y%s", i, "VOTEBAN_MENU_PLAYER", szBanName ) // Игрок
menu_addtext( iMenu, szTemp, 1 )

formatex( szTemp, charsmax( szTemp ), "\w%L \y%s", i, "VOTEBAN_MENU_REASON", g_szBanReason ) // Причина
menu_addtext( iMenu, szTemp, 1 )

formatex( szTemp, charsmax( szTemp ), "\w%L \y%s", i, "VOTEBAN_MENU_INITIATOR", szName ) // Инициатор
menu_addtext( iMenu, szTemp, 1 )

menu_setprop( iMenu, MPROP_EXIT, MEXIT_NEVER )

menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\w" )

if( pev_valid( i ) == PDATA_SAFE )
set_pdata_int( id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX )

menu_display( i, iMenu, 0 )
}
}

public handler_voteban_menu( id, iMenu, iItem )
{
if( iItem == 0 )
add_vote( id )
else
{
menu_destroy( iMenu )
client_spk( id, MENU_SOUND_SELECT )

return PLUGIN_HANDLED
}

client_spk( id, MENU_SOUND_SELECT )

return PLUGIN_HANDLED
}

public add_vote( id )
{
if( !get_user_status( id ) )
return PLUGIN_HANDLED

if( !g_bIsVoteStarted )
{
yet_another_print_color( id, "%L", id, "VOTEBAN_ALREADY_FINISHED" ) // Голосование уже закончено.
return PLUGIN_HANDLED
}

g_iTotalVotes[ g_iBanID ] ++

new iTotalVotes, iNeedVotes
iTotalVotes = g_iTotalVotes[ g_iBanID ]
iNeedVotes = get_pcvar_num( g_pcvr_Percent ) * get_players_online() / 100

if( iTotalVotes < iNeedVotes )
{
new i, szName[ 32 ]

get_user_name( g_iBanID, szName, charsmax( szName ) )

for( i = 1; i <= MAX_PLAYERS; i ++ )
{
if( is_user_connected( i ) )
{
if( i != g_iBanID )
client_print( i, print_center, "%L", i, "VOTEBAN_VOTE", szName, iTotalVotes, iNeedVotes ) // За бан %s проголосовало: %d, нужно: %d.
}
}
}

else
{
ban_player( g_iBanID )
}

return PLUGIN_HANDLED
}

public ban_player( iBanID )
{
if( task_exists( TID_ENDVOTE ) )
remove_task( TID_ENDVOTE )

if( !get_user_status( iBanID ) )
{
clear_voteban_data()
return PLUGIN_HANDLED
}

new i, szName[ 32 ], szIP[ 16 ], szAuthID[ 35 ], iUserID, iTime

get_user_name( iBanID, szName, charsmax( szName ) )
get_user_ip( iBanID, szIP, charsmax( szIP ), 1 )
get_user_authid( iBanID, szAuthID, charsmax( szAuthID ) )
iUserID = get_user_userid( iBanID )
iTime = g_iBanTime

switch( get_pcvar_num( g_pcvr_BanType ) )
{
case -2: server_cmd( "banid %d ^"%s^" kick", iTime, szAuthID ) // BAN AUTHID (STEAMID)
case -1: server_cmd( "addip %d %s", iTime, szIP ) // BAN IP
case 1: server_cmd( "amx_ban %d ^"%s^" ^"[%s] %s^"", iTime, szAuthID, MSGS_PREFIX, g_szBanReason ) // AMXBANS
case 2: server_cmd( "fb_ban %d #%d ^"[%s] %s^"", iTime, iUserID, MSGS_PREFIX, g_szBanReason ) // FRESH BANS
case 3: server_cmd( "amx_ban ^"%s^" %d ^"[%s] %s^"", szAuthID, iTime, MSGS_PREFIX, g_szBanReason ) // ADVANCED BANS
case 4: server_cmd( "amx_superban #%d %d ^"[%s] %s^"", iUserID, iTime, MSGS_PREFIX, g_szBanReason ) // SUPERBAN
case 5: server_cmd( "amx_multiban #%d %d ^"[%s] %s^"", iUserID, iTime, MSGS_PREFIX, g_szBanReason ) // MULTIBAN
}

for( i = 1; i <= MAX_PLAYERS; i ++ )
{
if( !get_user_status( i ) || ( i == iBanID ) )
continue

yet_another_print_color( i, "%L", i, "VOTEBAN_BANNED", szName ) // %s забанен через голосование!
}

if( get_pcvar_num( g_pcvr_LogToFile ) )
{
new y, m, d, szTemp[ 32 ]

date( y, m, d )
formatex( szTemp, charsmax( szTemp ), "YAV_%d%02d%02d.log", y, m, d )
log_to_file( szTemp, "Player ^"%s^" banned by initiator ^"%s^" for ^"%s^" (STEAM ID %s) (IP %s)", szName, g_szInitiator[ 0 ], g_szBanReason, g_szInitiator[ 2 ], g_szInitiator[ 1 ] )
}

clear_voteban_data()

return PLUGIN_HANDLED
}

public task_end_vote()
{
new i

for( i = 1; i <= MAX_PLAYERS; i ++ )
{
if( !is_user_connected( i ) )
continue

yet_another_print_color( i, "%L", i, "VOTEBAN_ENDED" ) // Голосование за бан провалено.
}

clear_voteban_data()

g_bIsVoteStarted = false
}

stock bool:is_voteban_available( id )
{
if( g_bIsVoteBlocked )
{
yet_another_print_color( id, "%L", id, "VOTEBAN_BLOCKED" ) // В данный момент голосование недоступно.
return false
}

if( g_bIsVoteStarted )
{
yet_another_print_color( id, "%L", id, "VOTEBAN_ALREADY_STARTED" ) // В данный момент уже идёт голосование.
return false
}

new szFlags, szCvarsFlags[ 3 ][ 23 ]

szFlags = get_user_flags( id )
get_pcvar_string( g_pcvr_AdminAccess, szCvarsFlags[ 0 ], charsmax( szCvarsFlags ) )
get_pcvar_string( g_pcvr_TimeAccess, szCvarsFlags[ 1 ], charsmax( szCvarsFlags ) )
get_pcvar_string( g_pcvr_Access, szCvarsFlags[ 2 ], charsmax( szCvarsFlags ) )

if( szCvarsFlags[ 2 ][ 0 ] && !( szFlags & read_flags( szCvarsFlags[ 2 ] ) ) )
{
yet_another_print_color( id, "%L", id, "VOTEBAN_NO_ACCESS" ) // К сожалению, у вас нет доступа к голосованию за бан.

return false
}

if( szFlags & read_flags( szCvarsFlags[ 0 ] ) )
{
yet_another_print_color( id, "%L", id, "VOTEBAN_YOU_ADMIN" ) // Используйте своё бан-меню.

return false
}

if( g_iUserGametime[ id ] )
{
new iInterim, iDelayCvar

iInterim = floatround( get_gametime() ) - g_iUserGametime[ id ]
iDelayCvar = get_pcvar_num( g_pcvr_Delay )

if( szCvarsFlags[ 1 ][ 0 ] && ( szFlags & read_flags( szCvarsFlags[ 1 ] ) ) )
return true

else if( iInterim < iDelayCvar * 60 )
{
yet_another_print_color( id, "%L", id, "VOTEBAN_DELAY", ( iDelayCvar - ( iInterim / 60 ) ) + 1 ) // Вы должны подождать еще %d мин. после предыдущего голосования.

return false
}
}

if( get_players_online() < get_pcvar_num( g_pcvr_MinPlayers ) )
{
yet_another_print_color( id, "%L", id, "VOTEBAN_NOT_ENOUGH_PLAYERS" ) // Недостаточно игроков, чтобы начать голосование.

return false
}

return true
}

stock get_admins_online()
{
new i, iAdmins, iTeam

iAdmins = 0

for( i = 1; i <= MAX_PLAYERS; i ++ )
{
new szFlags[ 23 ]; get_pcvar_string( g_pcvr_AdminAccess, szFlags, charsmax( szFlags ) )

if( !get_user_status( i ) )
continue

if( !( get_user_flags( i ) & read_flags( szFlags ) ) )
continue

if( get_pcvar_num( g_pcvr_SpecAdmins ) )
iAdmins ++
else
{
iTeam = get_user_team( i )

if( !( ( iTeam == 2 ) || ( iTeam == 1 ) ) )
continue

iAdmins ++
}
}

return iAdmins
}

stock get_players_online()
{
new i, iPlayers, iTeam

for( i = 1; i <= MAX_PLAYERS; i ++ )
{
if( !get_user_status( i ) )
continue

iTeam = get_user_team( i )

if( !( ( iTeam == 2 ) || ( iTeam == 1 ) ) )
continue

iPlayers ++
}

return iPlayers
}

stock client_spk( id, iSoundID )
client_cmd( id, "spk %s", g_szMenuSounds[ iSoundID ] )

stock get_user_status( id )
{
if( !is_user_connected( id ) || is_user_hltv( id ) || is_user_bot( id ) )
return 0

return 1
}

stock yet_another_print_color( id, szInput[], any:... )
{
new szMessage[ 190 ]

vformat( szMessage, charsmax( szMessage ), szInput, 3 )
format( szMessage, charsmax( szMessage ), "^1[^4%s^1] %s", MSGS_PREFIX, szMessage )

replace_all( szMessage, charsmax( szMessage ), "!g", "^4" ) // Green Color
replace_all( szMessage, charsmax( szMessage ), "!n", "^1" ) // Default Color
replace_all( szMessage, charsmax( szMessage ), "!t", "^3" ) // Team Color


#if AMXX_VERSION_NUM < 183

new i, iNum = 1, iPlayers[ 32 ]

if( id ) iPlayers[ 0 ] = id; else get_players( iPlayers, iNum, "h" )
{
for( i = 0; i < iNum; i ++ )
{
if( !is_user_connected( iPlayers[ i ] ) )
continue

message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, iPlayers[ i ] )
write_byte( iPlayers[ i ] )
write_string( szMessage )
message_end()
}
}

#else
client_print_color( id, print_team_default, szMessage )
#endif

return 1
}

Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя lceman
сообщение 20.9.2018, 23:45
Сообщение #311
Стаж: 14 лет

Сообщений: 192
Благодарностей: 29
Полезность: < 0

От админа одного из мониторингов. Сервер попадал в бан из-за этого плагина.
Цитата
Изучил плагин. Этот voteban имеет проблему с безопасностью. Если указать причину voteban как команду, например motd_write, то переданный текст попадёт под управление банса и будет отправлен клиенту. FB в свою очередь тоже я как понял дополнительных проверок не делает.

В итоге любой игрок может спровоцировать отправку запрещенных команд, если голосование будет удачным, и, как следствие, бан сервера.

Добавил исключение в плагин.


Автор, посмотри изменения:
Cкрытый текст

Код
/*    
*    Yet Another Voteban AMXX Plugin
*
*    — удобный и симпатичный голосовальщик за бан игроков
*    для Ваших великолепных серверов Counter-Strike 1.6.
*
*
*     Авторы: AndrewZ и voed.
*
*
*    Переменные плагина:
*
*    yav_time_default "5"         — стандартное время бана в минутах, доступное для простых смертных (1 значение).
*    yav_time "60 180"     — дополнительное время бана для игроков с флагом доступа "yav_time_access" (от 1 до 5 значений, через пробел).
*    yav_ban_type "2"         — тип бана: -2 = BANID (STEAMID); -1 = ADDIP; 1 = AMXBANS; 2 = FRESHBANS; 3 = ADVANCED BANS; 4 = SUPERBAN; 5 = MULTIBAN.
*    yav_delay "3"             — задержка между голосованиями, в минутах.
*    yav_duration "15"        — длительность голосования.
*    yav_percent "60"        — необходимый процент проголосовавших игроков для осуществления бана (1-100).
*    yav_min_players "3"        — минимум игроков на сервере для возможности открыть меню голосования.
*    yav_spec_admins "0"        — учитывать ли админов в команде наблюдателей как активных админов. (1 - учитывать, 0 - пропускать)
*    yav_roundstart_delay "-1"    — блокировка вызова голосования в начале раунда, в секундах. (Целое или дробное положительное значение - блокировка на указанное время, "-1" - блокировка до конца mp_buytime, "0" - отключить, не блокировать)
*    yav_access ""            — флаг доступа к меню голосования. (Можно указать несколько: "abc", либо оставить пустым "", чтобы разрешить использовать всем).
*    yav_time_access "b"        — флаг доступа к выбору времени бана и к голосованию без кулдауна. (Можно указать несколько: "abc", либо оставить пустым "", чтобы отключить).
*    yav_admin_access "d"        — флаг админа для блока голосования и включения оповещения админов. (Можно указать несколько: "abc", либо оставить пустым "", чтобы отключить).
*    yav_immunity_access "a"        — флаг иммунитета к вотебану. (Можно указать несколько: "abc", либо оставить пустым "", чтобы отключить).
*    yav_log_to_file "0"        — логирование банов в файл "addons\amxmodx\logs". Название логов "YAV_ГГГГДДММ.log".
*/

#include <amxmodx>
#include <amxmisc>
#include <fakemeta>

#define PLUGIN        "Yet Another Voteban"
#define VERSION        "1.7"
#define AUTHOR        "AndrewZ/voed/wopox1337"

#define PDATA_SAFE        2
#define OFFSET_LINUX        5
#define OFFSET_CSMENUCODE    205

#define MAX_PLAYERS        32
#define MSGS_PREFIX        "VOTEBAN"

#define TID_ENDVOTE     5051
#define TID_BLOCKVOTE     5052

enum
{
    MENU_SOUND_SELECT, // 0
    MENU_SOUND_DENY, // 1
    MENU_SOUND_SUCCESS // 2
}

new g_pcvr_DefaultTime, g_pcvr_Time, g_pcvr_BanType, g_pcvr_Delay,
    g_pcvr_Duration, g_pcvr_Percent, g_pcvr_MinPlayers, g_pcvr_SpecAdmins,
    g_pcvr_RoundStartDelay, g_pcvr_mpBuyTime,
    g_pcvr_Access, g_pcvr_TimeAccess, g_pcvr_AdminAccess, g_pcvr_ImmunityAccess,
    g_pcvr_LogToFile

new g_szMenuSounds[][] =
{
    "buttons/lightswitch2.wav", // 0
    "buttons/button2.wav", // 1
    "buttons/blip1.wav" // 2
}

new g_szUserReason[ MAX_PLAYERS + 1 ][ 26 ],
    g_iUserSelectedID[ MAX_PLAYERS + 1 ],
    g_iUserBanTime[ MAX_PLAYERS + 1 ],
    g_iTotalVotes[ MAX_PLAYERS + 1 ],
    g_iUserGametime[ MAX_PLAYERS + 1 ]

new g_szInitiator[ 3 ][ 35 ],
    g_iBanID,
    g_iBanTime,
    g_szBanReason[ 26 ]
    
new bool:g_bIsVoteStarted, bool:g_bIsVoteBlocked
new g_szParsedCvarTime[ 5 ][ 8 ]

public plugin_precache()
{
    new i
    
    for( i = 0; i < sizeof g_szMenuSounds; i ++ )
        precache_sound( g_szMenuSounds[ i ] )
}

public plugin_init()
{
    register_plugin( PLUGIN, VERSION, AUTHOR )
    
    g_pcvr_DefaultTime =         register_cvar( "yav_time_default", "5" )
    g_pcvr_Time =                 register_cvar( "yav_time", "5 15 30 60 180" )
    g_pcvr_BanType =             register_cvar( "yav_ban_type", "2" )
    g_pcvr_Delay =                 register_cvar( "yav_delay", "5" )
    g_pcvr_Duration =            register_cvar( "yav_duration", "15" )
    g_pcvr_Percent =             register_cvar( "yav_percent", "60" )
    g_pcvr_MinPlayers =         register_cvar( "yav_min_players", "3" )
    g_pcvr_SpecAdmins =         register_cvar( "yav_spec_admins", "0" )
    g_pcvr_RoundStartDelay =    register_cvar( "yav_roundstart_delay", "-1" )
    g_pcvr_Access =             register_cvar( "yav_access", "" )
    g_pcvr_TimeAccess =         register_cvar( "yav_time_access", "c" )
    g_pcvr_AdminAccess =         register_cvar( "yav_admin_access", "d" )
    g_pcvr_ImmunityAccess =     register_cvar( "yav_immunity_access", "a" )
    g_pcvr_LogToFile =            register_cvar( "yav_log_to_file", "1" )
    
    g_pcvr_mpBuyTime =             register_cvar( "mp_buytime", "" )
    
    register_event( "HLTV", "event_newround", "a", "1=0", "2=0" )
    
    register_clcmd( "say /voteban", "show_voteban_players_menu" )
    register_clcmd( "say_team /voteban", "show_voteban_players_menu" )
    register_clcmd( "amx_votebanmenu", "show_voteban_main_menu" )
    
    register_clcmd( "voteban_reason", "cmd_voteban_reason" )

    register_dictionary( "yet_another_voteban.txt" )
}

public plugin_cfg()
{
    new szData[ 44 ]; get_pcvar_string( g_pcvr_Time, szData, charsmax( szData ) )
    
    parse( szData,    g_szParsedCvarTime[ 0 ], 7,
            g_szParsedCvarTime[ 1 ], 7,
            g_szParsedCvarTime[ 2 ], 7,
            g_szParsedCvarTime[ 3 ], 7,
            g_szParsedCvarTime[ 4 ], 7 )
}

public event_newround()
{
    new Float:fCvar
    fCvar = get_pcvar_float( g_pcvr_RoundStartDelay )
    
    if( fCvar == 0.0 )
        return

    if( task_exists( TID_BLOCKVOTE ) )
        remove_task( TID_BLOCKVOTE )
    
    if( fCvar == -1.0 )
        fCvar = get_pcvar_float( g_pcvr_mpBuyTime ) * 60
    
    g_bIsVoteBlocked = true
    set_task( fCvar, "task_unblock_vote", TID_BLOCKVOTE )
}

public task_unblock_vote()
    g_bIsVoteBlocked = false
    
public client_connect( id )
    clear_user_voteban_data( id )

public client_disconnect( id )
    clear_user_voteban_data( id )

public clear_user_voteban_data( id )
{
    g_iUserSelectedID[ id ] = 0
    g_iUserBanTime[ id ] = get_pcvar_num( g_pcvr_DefaultTime )
    arrayset( g_szUserReason[ id ], 0, sizeof( g_szUserReason ) )
    
    if( g_iBanID == id )
        clear_voteban_data()
}

public clear_voteban_data()
{
    if( task_exists( TID_ENDVOTE ) )
        remove_task( TID_ENDVOTE )
    
    g_bIsVoteStarted = false
    g_iBanID = 0
    g_iBanTime = 0
    arrayset( g_szBanReason, 0, sizeof( g_szBanReason ) )
    arrayset( g_iTotalVotes, 0, MAX_PLAYERS + 1 )
}

public cmd_voteban_reason( id )
{
    new i, szArgs[ 26 ], szBlock[][] = { "!g", "!y", "!t", "%", "#", "^"", "", "", "", "" }
    
    read_args( szArgs, charsmax( szArgs ) )
    remove_quotes( szArgs )
    
    for( i = 0; i < sizeof( szBlock ); i ++ )
        replace_all( szArgs, charsmax( szArgs ), szBlock[ i ], "" )
    
    g_szUserReason[ id ] = szArgs
    
    show_voteban_main_menu( id )
    
    return PLUGIN_HANDLED
}

public show_voteban_players_menu( id )
{
    if( !is_voteban_available( id ) )
        return PLUGIN_HANDLED
    
    new iMenu, i, szTemp[ 64 ], szName[ 32 ], szFlags[ 23 ], szId[ 3 ]
    
    formatex( szTemp, charsmax( szTemp ), "\y%L\R", id, "VOTEBAN_MENU_PLAYERS_TITLE" ) // Выбор игрока
    iMenu = menu_create( szTemp, "handler_voteban_players_menu" )
    
    for( i = 1; i <= MAX_PLAYERS; i ++ )
    {
        if( !get_user_status( i ) || ( i == id ) )
            continue
        
        get_user_name( i, szName, charsmax( szName ) )
        get_pcvar_string( g_pcvr_ImmunityAccess, szFlags, charsmax( szFlags ) )
        
        if( get_user_flags( i ) & read_flags( szFlags ) )
            formatex( szTemp, charsmax( szTemp ), "\d%s \r*", szName )
        else
            formatex( szTemp, charsmax( szTemp ), "\w%s", szName )
        
        num_to_str( i, szId, charsmax( szId ) )
        
        menu_additem( iMenu, szTemp, szId, ADMIN_ALL )
    }
    
    if( !menu_items( iMenu ) )
    {
        menu_destroy( iMenu )
        return PLUGIN_HANDLED
    }
    
    formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_BACK" )
    menu_setprop( iMenu, MPROP_BACKNAME, szTemp )
    
    formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_NEXT" )
    menu_setprop( iMenu, MPROP_NEXTNAME, szTemp )
    
    formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_EXIT" )
    menu_setprop( iMenu, MPROP_EXITNAME, szTemp )
    
    menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\w" )
    
    if( pev_valid( id ) == PDATA_SAFE )
        set_pdata_int( id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX )
    
    menu_display( id, iMenu, 0 )
    
    return PLUGIN_HANDLED
}

public handler_voteban_players_menu( id, iMenu, iItem )
{
    if( !is_voteban_available( id ) || ( iItem == MENU_EXIT ) )
    {
        menu_destroy( iMenu )
        client_spk( id, MENU_SOUND_SELECT )
        
        return PLUGIN_HANDLED
    }
    
    new szData[ 3 ], szName[ 32 ], iAccess, iCallback, sId
    menu_item_getinfo( iMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), iCallback )
    
    sId = str_to_num( szData )
    
    if( get_user_status( sId ) )
    {
        new szFlags[ 23 ]
        get_pcvar_string( g_pcvr_ImmunityAccess, szFlags, charsmax( szFlags ) )
    
        if( !( get_user_flags( sId ) & read_flags( szFlags ) ) )
        {
            g_iUserSelectedID[ id ] = sId
            show_voteban_main_menu( id )
            client_spk( id, MENU_SOUND_SELECT )
        }
        else
        {
            show_voteban_players_menu( id )
            yet_another_print_color( id, "%L", id, "VOTEBAN_IMMUNITY" ) // Выбранный игрок имеет иммунитет к бану.
            client_spk( id, MENU_SOUND_DENY )
        }
    }
    else
    {
        yet_another_print_color( id, "%L", id, "VOTEBAN_LEAVE" ) // Выбранный игрок недоступен для выбора, возможно он покинул сервер.
        client_spk( id, MENU_SOUND_DENY )
    }

    menu_destroy( iMenu )
    
    return PLUGIN_HANDLED
}

public show_voteban_main_menu( id )
{
    if( !is_voteban_available( id ) )
        return PLUGIN_HANDLED
    
    new iMenu, szTemp[ 64 ], sId
    
    sId = g_iUserSelectedID[ id ]
    
    formatex( szTemp, charsmax( szTemp ), "\y%L", id, "VOTEBAN_MENU_TITLE" ) // Голосование за бан
    iMenu = menu_create( szTemp, "handler_voteban_main_menu" )

// === 1 ===

    if( get_user_status( sId ) )
    {
        new szName[ 32 ]
        get_user_name( sId, szName, charsmax( szName ) )
        
        formatex( szTemp, charsmax( szTemp ), "%L \y%s", id, "VOTEBAN_MENU_PLAYER", szName ) // Игрок:
    }
    else formatex( szTemp, charsmax( szTemp ), "%L \d%L", id, "VOTEBAN_MENU_PLAYER", id, "VOTEBAN_MENU_SELECT_PLAYER" ) // Выбрать игрока

    menu_additem( iMenu, szTemp, "1", ADMIN_ALL )
    
// =========
    

// === 2 ===

    if( g_szUserReason[ id ][ 0 ] )
        formatex( szTemp, charsmax( szTemp ), "%L \y%s^n", id, "VOTEBAN_MENU_REASON", g_szUserReason[ id ] ) // Причина
        
    else formatex( szTemp, charsmax( szTemp ), "%L \d%L^n", id, "VOTEBAN_MENU_REASON", id, "VOTEBAN_MENU_ENTER_REASON"  ) // Причина || Ввести причину бана
    
    menu_additem( iMenu, szTemp, "2", ADMIN_ALL )
    
// =========
    

// === 3 ===

    new szFlags[ 23 ]
    get_pcvar_string( g_pcvr_TimeAccess, szFlags, charsmax( szFlags ) )
    
    if( get_user_flags( id ) & read_flags( szFlags ) )
    {
        formatex( szTemp, charsmax( szTemp ), "%L \y%i %L^n", id, "VOTEBAN_MENU_TIME", g_iUserBanTime[ id ], id, "VOTEBAN_MENU_MINUTES" ) // Время бана || минут
        menu_additem( iMenu, szTemp, "3", ADMIN_ALL )
    }
    
// =========

// === 4 ===
    
    new iAdmins = get_admins_online()
    
    if( iAdmins )
        formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_NOTIFY", iAdmins ) // Сообщить администратору (\y%d в сети\w)
    else
        formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_START_VOTE" ) // Начать голосование
    
    menu_additem( iMenu, szTemp, "4", ADMIN_ALL )
    
// =========

    
    formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_EXIT" )
    menu_setprop( iMenu, MPROP_EXITNAME, szTemp )
    
    menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\w" )
    
    if( pev_valid( id ) == PDATA_SAFE )
        set_pdata_int( id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX )
    
    menu_display( id, iMenu, 0 )
    
    return PLUGIN_HANDLED
}

public handler_voteban_main_menu( id, iMenu, iItem )
{
    if( !is_voteban_available( id ) || ( iItem == MENU_EXIT ) )
    {
        menu_destroy( iMenu )
        clear_user_voteban_data( id )
        client_spk( id, MENU_SOUND_SELECT )
        
        return PLUGIN_HANDLED
    }
    
    new szData[ 3 ], szName[ 32 ], iAccess, iCallback, iKey
    menu_item_getinfo( iMenu, iItem, iAccess, szData, charsmax( szData ), szName, charsmax( szName ), iCallback )
    
    iKey = str_to_num( szData )
    
    switch( iKey )
    {
        case 1:
        {
            show_voteban_players_menu( id )
            client_spk( id, MENU_SOUND_SELECT )
        }
        
        case 2:
        {
            client_cmd( id, "messagemode voteban_reason" )
            client_spk( id, MENU_SOUND_SELECT )
        }
        
        case 3:
        {
            show_voteban_time_menu( id )
            client_spk( id, MENU_SOUND_SELECT )
        }
        
        case 4:
        {
            new sId = g_iUserSelectedID[ id ]
            
            if( !get_user_status( sId ) )
            {
                yet_another_print_color( id, "%L",  id, "VOTEBAN_NEED_PLAYER" ) // Вы должны выбрать игрока
                show_voteban_main_menu( id )
                client_spk( id, MENU_SOUND_DENY )
            }
            
            else if( !g_szUserReason[ id ][ 0 ] )
            {
                yet_another_print_color( id, "%L",  id, "VOTEBAN_NEED_REASON" ) // Вы должны ввести причину бана
                show_voteban_main_menu( id )
                client_spk( id, MENU_SOUND_DENY )
            }
            
            else
            {    
                new szFlags[ 23 ], iAdmins = get_admins_online()
                
                if( iAdmins )
                {
                    new i, szSelectedName[ 32 ], szName[ 32 ]
                    
                    for( i = 1; i <= MAX_PLAYERS; i ++ )
                    {
                        get_pcvar_string( g_pcvr_AdminAccess, szFlags, charsmax( szFlags ) )
        
                        if( !get_user_status( i ) || !( get_user_flags( i ) & read_flags( szFlags ) ) )
                            continue
                            
                        get_user_name( sId, szSelectedName, charsmax( szSelectedName ) )
                        get_user_name( id, szName, charsmax( szName ) )
                        yet_another_print_color( i, "%L",  i, "VOTEBAN_ADMIN_NOTIFICATION", szName, szSelectedName, g_szUserReason[ id ] ) // %s хочет забанить %s за "%s".
                        client_spk( i, MENU_SOUND_SUCCESS )
                    }
                    
                    yet_another_print_color( id, "%L",  id, "VOTEBAN_ADMIN_NOTIFIED", iAdmins ) // Администраторов уведомлено о вашей жалобе: %d.
                    client_spk( id, MENU_SOUND_SUCCESS )
                    clear_user_voteban_data( id )
                    
                    return PLUGIN_HANDLED
                }
                
                get_pcvar_string( g_pcvr_TimeAccess, szFlags, charsmax( szFlags ) )
                
                get_user_name( id, g_szInitiator[ 0 ], 34 )
                get_user_ip( id, g_szInitiator[ 1 ], 34, 1 )
                get_user_authid( id, g_szInitiator[ 2 ], 34 )
                
                g_iBanID = sId
                g_szBanReason = g_szUserReason[ id ]
                
                if( get_user_flags( id ) & read_flags( szFlags ) )
                    g_iBanTime = g_iUserBanTime[ id ]
                
                else g_iBanTime = get_pcvar_num( g_pcvr_DefaultTime )
                
                clear_user_voteban_data( id )
                
                g_bIsVoteStarted = true
                
                show_voteban_menu( id )
                
                g_iUserGametime[ id ] = floatround( get_gametime() )
                set_task( get_pcvar_float( g_pcvr_Duration ), "task_end_vote", TID_ENDVOTE )
            }
        }
    }
    
    menu_destroy( iMenu )
    
    return PLUGIN_HANDLED
}

public show_voteban_time_menu( id )
{
    new iMenu, i, szTemp[ 190 ]

    formatex( szTemp, charsmax( szTemp ), "\y%L", id, "VOTEBAN_MENU_TIME_TITLE" ) // Выбор срока бана
    iMenu = menu_create( szTemp, "handler_voteban_time_menu" )

    for( i = 0; i < sizeof( g_szParsedCvarTime ); i ++ )
    {
        if( !g_szParsedCvarTime[ i ][ 0 ] )
            break
        
        formatex( szTemp, charsmax( szTemp ), "%s %L", g_szParsedCvarTime[ i ], id, "VOTEBAN_MENU_MINUTES" ) // минут
        
        menu_additem( iMenu, szTemp, "", ADMIN_ALL )
    }
    
    formatex( szTemp, charsmax( szTemp ), "%L", id, "VOTEBAN_MENU_EXIT" )
    menu_setprop( iMenu, MPROP_EXITNAME, szTemp )
    
    menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\w" )
    
    if( pev_valid( id ) == PDATA_SAFE )
        set_pdata_int( id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX )
    
    menu_display( id, iMenu, 0 )
    
    return PLUGIN_HANDLED
}

public handler_voteban_time_menu( id, iMenu, iItem )
{
    if( !is_voteban_available( id ) || ( iItem == MENU_EXIT ) )
    {
        menu_destroy( iMenu )
        clear_user_voteban_data( id )
        client_spk( id, MENU_SOUND_SELECT )
        
        return PLUGIN_HANDLED
    }
    
    switch( iItem )
    {
        case 0..4: g_iUserBanTime[ id ] = str_to_num( g_szParsedCvarTime[ iItem ] )
    }
    
    show_voteban_main_menu( id )
    client_spk( id, MENU_SOUND_SELECT )
    
    menu_destroy( iMenu )
    
    return PLUGIN_HANDLED
}

public show_voteban_menu( id )
{
    new i
    
    for( i = 1; i <= MAX_PLAYERS; i ++ )
    {
        if( !get_user_status( i ) || i == g_iBanID )
            continue
        
        new szName[ 32 ], szBanName[ 32 ]
        get_user_name( id, szName, charsmax( szName ) )
        get_user_name( g_iBanID, szBanName, charsmax( szBanName ) )

        client_spk( i, MENU_SOUND_SUCCESS )
        yet_another_print_color( i, "%L", i, "VOTEBAN_WHO_START", szName, szBanName, g_szBanReason ) // начал голосование за бан
        
          if( i == id )
        {
            add_vote( id )
            continue
        }
        
        new iMenu, szTemp[ 64 ]
        
        formatex( szTemp, charsmax( szTemp ), "\y%L", i, "VOTEBAN_MENU_TITLE" ) // Голосование за бан
        iMenu = menu_create( szTemp, "handler_voteban_menu" )
        
        formatex( szTemp, charsmax( szTemp ), "%L", i, "VOTEBAN_MENU_YES" )
        menu_additem( iMenu, szTemp, "", ADMIN_ALL )
        
        formatex( szTemp, charsmax( szTemp ), "%L", i, "VOTEBAN_MENU_NO" )
        menu_additem( iMenu, szTemp, "", ADMIN_ALL )
        
        menu_addblank( iMenu, 1 )
        
        formatex( szTemp, charsmax( szTemp ), "\w%L \y%s", i, "VOTEBAN_MENU_PLAYER", szBanName ) // Игрок
        menu_addtext( iMenu, szTemp, 1 )
        
        formatex( szTemp, charsmax( szTemp ), "\w%L \y%s", i, "VOTEBAN_MENU_REASON", g_szBanReason ) // Причина
        menu_addtext( iMenu, szTemp, 1 )
        
        formatex( szTemp, charsmax( szTemp ), "\w%L \y%s", i, "VOTEBAN_MENU_INITIATOR", szName ) // Инициатор
        menu_addtext( iMenu, szTemp, 1 )
        
        menu_setprop( iMenu, MPROP_EXIT, MEXIT_NEVER )
        
        menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\w" )
        
        if( pev_valid( i ) == PDATA_SAFE )
            set_pdata_int( id, OFFSET_CSMENUCODE, 0, OFFSET_LINUX )
        
        menu_display( i, iMenu, 0 )
    }
}

public handler_voteban_menu( id, iMenu, iItem )
{
    if( iItem == 0 )
        add_vote( id )
    else
    {
        menu_destroy( iMenu )
        client_spk( id, MENU_SOUND_SELECT )
        
        return PLUGIN_HANDLED
    }
    
    client_spk( id, MENU_SOUND_SELECT )
    
    return PLUGIN_HANDLED
}

public add_vote( id )
{
    if( !get_user_status( id ) )
        return PLUGIN_HANDLED
    
    if( !g_bIsVoteStarted )
    {
        yet_another_print_color( id, "%L",  id, "VOTEBAN_ALREADY_FINISHED" ) // Голосование уже закончено.
        return PLUGIN_HANDLED
    }

    g_iTotalVotes[ g_iBanID ] ++
    
    new iTotalVotes, iNeedVotes
    iTotalVotes = g_iTotalVotes[ g_iBanID ]
    iNeedVotes = get_pcvar_num( g_pcvr_Percent ) * get_players_online() / 100
    
    if( iTotalVotes < iNeedVotes )
    {
        new i, szName[ 32 ]
        
        get_user_name( g_iBanID, szName, charsmax( szName ) )
        
        for( i = 1; i <= MAX_PLAYERS; i ++ )
        {
            if( is_user_connected( i ) )
            {
                if( i != g_iBanID )
                    client_print( i, print_center, "%L", i, "VOTEBAN_VOTE", szName, iTotalVotes, iNeedVotes ) // За бан %s проголосовало: %d, нужно: %d.
            }
        }
    }
    
    else
    {
        ban_player( g_iBanID )
    }
    
    return PLUGIN_HANDLED
}

public ban_player( iBanID )
{
    if( task_exists( TID_ENDVOTE ) )
        remove_task( TID_ENDVOTE )
    
    if( !get_user_status( iBanID ) )
    {
        clear_voteban_data()
        return PLUGIN_HANDLED
    }
    
    new i, szName[ 32 ], szIP[ 16 ], szAuthID[ 35 ], iUserID, iTime
    
    get_user_name( iBanID, szName, charsmax( szName ) )
    get_user_ip( iBanID, szIP, charsmax( szIP ), 1 )
    get_user_authid( iBanID, szAuthID, charsmax( szAuthID ) )
    iUserID = get_user_userid( iBanID )
    iTime = g_iBanTime
    
    switch( get_pcvar_num( g_pcvr_BanType ) )
    {
        case -2: server_cmd( "banid %d ^"%s^" kick", iTime, szAuthID ) // BAN AUTHID (STEAMID)
        case -1: server_cmd( "addip %d %s", iTime, szIP ) // BAN IP
        case 1: server_cmd( "amx_ban %d ^"%s^" ^"[%s] %s^"", iTime, szAuthID, MSGS_PREFIX, g_szBanReason ) // AMXBANS
        case 2: server_cmd( "fb_ban %d #%d ^"[%s] %s^"", iTime, iUserID, MSGS_PREFIX, g_szBanReason ) // FRESH BANS
        case 3: server_cmd( "amx_ban ^"%s^" %d ^"[%s] %s^"", szAuthID, iTime, MSGS_PREFIX, g_szBanReason ) // ADVANCED BANS
        case 4: server_cmd( "amx_superban #%d %d ^"[%s] %s^"", iUserID, iTime, MSGS_PREFIX, g_szBanReason ) // SUPERBAN
        case 5: server_cmd( "amx_multiban #%d %d ^"[%s] %s^"", iUserID, iTime, MSGS_PREFIX, g_szBanReason ) // MULTIBAN
    }
    
    for( i = 1; i <= MAX_PLAYERS; i ++ )
    {
        if( !get_user_status( i ) || ( i == iBanID ) )
            continue
        
        yet_another_print_color( i, "%L", i, "VOTEBAN_BANNED", szName ) // %s забанен через голосование!
    }
    
    if( get_pcvar_num( g_pcvr_LogToFile ) )
    {
        new y, m, d, szTemp[ 32 ]
        
        date( y, m, d )
        formatex( szTemp, charsmax( szTemp ), "YAV_%d%02d%02d.log", y, m, d )
        log_to_file( szTemp, "Player ^"%s^" banned by initiator ^"%s^" for ^"%s^" (STEAM ID %s) (IP %s)", szName, g_szInitiator[ 0 ], g_szBanReason, g_szInitiator[ 2 ], g_szInitiator[ 1 ] )
    }
    
    clear_voteban_data()
    
    return PLUGIN_HANDLED
}

public task_end_vote()
{
    new i
    
    for( i = 1; i <= MAX_PLAYERS; i ++ )
    {
        if( !is_user_connected( i ) )
            continue
            
        yet_another_print_color( i, "%L",  i, "VOTEBAN_ENDED" ) // Голосование за бан провалено.
    }
    
    clear_voteban_data()
    
    g_bIsVoteStarted = false
}

stock bool:is_voteban_available( id )
{
    if( g_bIsVoteBlocked )
    {
        yet_another_print_color( id, "%L",  id, "VOTEBAN_BLOCKED" ) // В данный момент голосование недоступно.
        return false
    }

    if( g_bIsVoteStarted )
    {
        yet_another_print_color( id, "%L",  id, "VOTEBAN_ALREADY_STARTED" ) // В данный момент уже идёт голосование.
        return false
    }
    
    new szFlags, szCvarsFlags[ 3 ][ 23 ]
    
    szFlags = get_user_flags( id )
    get_pcvar_string( g_pcvr_AdminAccess, szCvarsFlags[ 0 ], charsmax( szCvarsFlags ) )
    get_pcvar_string( g_pcvr_TimeAccess, szCvarsFlags[ 1 ], charsmax( szCvarsFlags ) )
    get_pcvar_string( g_pcvr_Access, szCvarsFlags[ 2 ], charsmax( szCvarsFlags ) )
    
    if( szCvarsFlags[ 2 ][ 0 ] && !( szFlags & read_flags( szCvarsFlags[ 2 ] ) ) )
    {
        yet_another_print_color( id, "%L",  id, "VOTEBAN_NO_ACCESS" ) // К сожалению, у вас нет доступа к голосованию за бан.
        
        return false
    }
    
    if( szFlags & read_flags( szCvarsFlags[ 0 ] ) )
    {
        yet_another_print_color( id, "%L",  id, "VOTEBAN_YOU_ADMIN" ) // Используйте своё бан-меню.
        
        return false
    }
    
    if( g_iUserGametime[ id ] )
    {
        new iInterim, iDelayCvar
        
        iInterim = floatround( get_gametime() ) - g_iUserGametime[ id ]
        iDelayCvar = get_pcvar_num( g_pcvr_Delay )
        
        if( szCvarsFlags[ 1 ][ 0 ] && ( szFlags & read_flags( szCvarsFlags[ 1 ] ) ) )
            return true
        
        else if( iInterim < iDelayCvar * 60 )
        {
            yet_another_print_color( id, "%L",  id, "VOTEBAN_DELAY", ( iDelayCvar - ( iInterim / 60 ) ) + 1 ) // Вы должны подождать еще %d мин. после предыдущего голосования.
            
            return false
        }
    }
    
    if( get_players_online() < get_pcvar_num( g_pcvr_MinPlayers ) )
    {
        yet_another_print_color( id, "%L",  id, "VOTEBAN_NOT_ENOUGH_PLAYERS" ) // Недостаточно игроков, чтобы начать голосование.
        
        return false
    }

    return true
}

stock get_admins_online()
{
    new i, iAdmins, iTeam
    
    iAdmins = 0
    
    for( i = 1; i <= MAX_PLAYERS; i ++ )
    {
        new szFlags[ 23 ]; get_pcvar_string( g_pcvr_AdminAccess, szFlags, charsmax( szFlags ) )
        
        if( !get_user_status( i ) )
            continue
        
        if( !( get_user_flags( i ) & read_flags( szFlags ) ) )
            continue
            
        if( get_pcvar_num( g_pcvr_SpecAdmins ) )        
            iAdmins ++
        else
        {
            iTeam = get_user_team( i )
            
            if( !( ( iTeam == 2 ) || ( iTeam == 1 ) ) )
                continue
                
            iAdmins ++
        }
    }
    
    return iAdmins
}

stock get_players_online()
{
    new i, iPlayers, iTeam
    
    for( i = 1; i <= MAX_PLAYERS; i ++ )
    {
        if( !get_user_status( i ) )
            continue
        
        iTeam = get_user_team( i )
        
        if( !( ( iTeam == 2 ) || ( iTeam == 1 ) ) )
            continue

        iPlayers ++
    }
    
    return iPlayers
}

stock client_spk( id, iSoundID )
    client_cmd( id, "spk %s", g_szMenuSounds[ iSoundID ] )
    
stock get_user_status( id )
{
    if( !is_user_connected( id ) || is_user_hltv( id ) || is_user_bot( id ) )
        return 0
        
    return 1
}
    
stock yet_another_print_color( id, szInput[], any:... )
{
    new szMessage[ 190 ]
  
    vformat( szMessage, charsmax( szMessage ), szInput, 3 )
    format( szMessage, charsmax( szMessage ), "^1[^4%s^1] %s", MSGS_PREFIX, szMessage )
    
    replace_all( szMessage, charsmax( szMessage ), "!g", "^4" ) // Green Color
    replace_all( szMessage, charsmax( szMessage ), "!n", "^1" ) // Default Color
    replace_all( szMessage, charsmax( szMessage ), "!t", "^3" ) // Team Color
  
    
#if AMXX_VERSION_NUM < 183

    new i, iNum = 1, iPlayers[ 32 ]
    
    if( id ) iPlayers[ 0 ] = id; else get_players( iPlayers, iNum, "h" )
    {
        for( i = 0; i < iNum; i ++ )
        {
            if( !is_user_connected( iPlayers[ i ] ) )
                continue
                
            message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, iPlayers[ i ] )
            write_byte( iPlayers[ i ] )
            write_string( szMessage )
            message_end()
        }
    }
    
#else
    client_print_color( id, print_team_default, szMessage )
#endif

    return 1
}


Отредактировал: lceman, - 20.9.2018, 23:47
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
IIuKa
сообщение 29.10.2018, 22:18
Сообщение #312
Стаж: 11 лет

Сообщений: 667
Благодарностей: 29
Полезность: < 0

после бана через этот вотебан игроков нету в бан листе? как исправить? бан проходит черех фрешбанс
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csparena
сообщение 30.10.2018, 6:28
Сообщение #313


Стаж: 8 лет 6 месяцев

Сообщений: 2377
Благодарностей: 541
Полезность: 106

Цитата(IIuKa @ 30.10.2018, 0:18) *
после бана через этот вотебан игроков нету в бан листе? как исправить? бан проходит черех фрешбанс


Они туда и не попадут
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
podbot
сообщение 30.10.2018, 7:08
Сообщение #314
Стаж: 9 лет

Сообщений: 1242
Благодарностей: 366
Полезность: < 0

IIuKa, значит он не банит, либо через другую систему. yav_ban_type 2 стоит?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Drakosha
сообщение 30.10.2018, 13:14
Сообщение #315
Стаж: 7 лет 5 месяцев

Сообщений: 140
Благодарностей: 28
Полезность: 38

Цитата(IIuKa @ 30.10.2018, 1:18) *
после бана через этот вотебан игроков нету в бан листе? как исправить? бан проходит черех фрешбанс

если бан меньше пяти минут по дефолту(или как у тебя выставлено в кфг фреш банса, то они и не будут попадать ни вотебан ни сам фреш банс
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
podbot
сообщение 6.11.2018, 2:55
Сообщение #316
Стаж: 9 лет

Сообщений: 1242
Благодарностей: 366
Полезность: < 0

Цитата(IIuKa @ 29.10.2018, 23:18) *
после бана через этот вотебан игроков нету в бан листе? как исправить? бан проходит черех фрешбанс

fb_cachetime "0"
чет только нашел это))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя AndrewZ
сообщение 22.11.2018, 22:41
Сообщение #317


Иконка группы

Стаж: 15 лет
Город: Санкт-Петербург


Сообщений: 4700
Благодарностей: 2452
Полезность: 1018

Обновил до версии 1.8. Если обнаружите какие-то проблемы, то сразу пишите, пожалуйста, сюда — исправим.

v1.8:
  1. Старые версии AMXX (ниже 1.8.3) более не поддерживаются;
  2. Исправлены различные ошибки;
  3. Исправлены возможные уязвимости;
  4. Исправлена ошибка, которая могла привести к сбросу mp_buytime.
  5. Информация о кварах теперь подробно указана для 'amxx cvars' (потому, что почему бы и нет);
  6. Удалён квар yav_min_players;
  7. Изменен квар yav_roundstart_delay: добавлено значение "-2" = блокировка на время mp_freezetime;
  8. Добавлен квар yav_ban_reason для включения возможности указания своих причин бана; --- подробнее в шапке, под спойлером (настройки)
  9. Добавлен квар yav_min_votes для указания минимального количества голосов ЗА, чтобы голосование могло состояться;
  10. Голосование отменяется при выходе с сервера игрока, за которого оно проводилось, а остальные игроки получают оповещение этого события;
  11. Если включен квар yav_roundstart_delay, игроки получат подробную информацию о том, почему меню заблокировано.




Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 3 раз
   + Цитировать сообщение
Статус пользователя lceman
сообщение 24.11.2018, 22:27
Сообщение #318
Стаж: 14 лет

Сообщений: 192
Благодарностей: 29
Полезность: < 0

Спасибо за обновление.
Но минус за отсутствие поддержки 1.8.2 :(
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя dehost
сообщение 24.11.2018, 22:30
Сообщение #319


Стаж: 11 лет

Сообщений: 3147
Благодарностей: 1431
Полезность: 486

Цитата(lceman @ 24.11.2018, 23:27) *
Спасибо за обновление.
Но минус за отсутствие поддержки 1.8.2 :(

Это вам минус за 1.8.2 - он более не актуален.


Золотое правило нравственности:
"Относись к людям так, как хочешь, чтобы относились к тебе."
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Izmayl7
сообщение 24.11.2018, 23:50
Сообщение #320
Стаж: 7 лет 11 месяцев

Сообщений: 831
Благодарностей: 312
Полезность: 578

dehost, почему же неактуален?! допустим есть некоторые плагины, которые под 1.8.3 или 1.9.0 , предоставляемые тем или иным скриптером, свои плагины
- держателям серверов (не предоставляют исходники плагинов, не хотят переписывать или хотят, но нету времени или еще какие-то личные, семейные дела и т.д, ряду тому причин, о которых мы не знаем, то что делать-то в таком случае а?!) и что же теперь значит 1.8.2 неактуален?! устарел да. но как говорится "старый конь борозды не испортит", как-то так. или в 1.8.3 или в 1.9.0 и выше версии, багов не возникает - всё пофикшено?! dntknw.gif

Отредактировал: Izmayl7, - 24.11.2018, 23:59
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
18 страниц V  « 15 16 17 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: