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

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

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

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

Ping Kicker

Статус пользователя panicaskill
сообщение 21.7.2014, 11:08
Сообщение #1
Стаж: 12 лет
Город: Каменск-Уральский


Сообщений: 270
Благодарностей: 256
Полезность: 976

Меценат Меценат

Привет. Помогите поправить плагин.

Лог ошибки
L 07/21/2014 - 02:32:12: Start of error session.
L 07/21/2014 - 02:32:12: Info (map "de_dust2_2x2") (file "addons/amxmodx/logs/error_20140721.log")
L 07/21/2014 - 02:32:12: [AMXX] Displaying debug trace (plugin "ping.amxx", version "1.0")
L 07/21/2014 - 02:32:12: [AMXX] Run time error 4: index out of bounds
L 07/21/2014 - 02:32:12: [AMXX] [0] ping.sma::colorChat (line 211)
L 07/21/2014 - 02:32:12: [AMXX] [1] ping.sma::showWarn (line 70)

Исходный код
Код:
#include <amxmodx> 
#include <amxmisc>

enum ChatColor
{
CHATCOLOR_NORMAL = 1,
CHATCOLOR_GREEN,
CHATCOLOR_TEAM_COLOR,
CHATCOLOR_GREY,
CHATCOLOR_RED,
CHATCOLOR_BLUE,
}

new g_TeamName[][] =
{
"",
"TERRORIST",
"CT",
"SPECTATOR"
}

new g_msgSayText;
new g_msgTeamInfo;

new g_Ping[33]
new g_Samples[33]

public plugin_init()
{
register_plugin("High Ping Kicker","1.0","AUTHOR")
register_concmd("amx_hpk","cmdHpk",ADMIN_KICK,"- configures high_ping_kicker plugin")
register_cvar("amx_hpk_ping","130")
register_cvar("amx_hpk_check","12")
register_cvar("amx_hpk_tests","5")
register_cvar("amx_hpk_delay","60")

if ( get_cvar_num( "amx_hpk_check" ) < 5 ) set_cvar_num( "amx_hpk_check" , 5 )
if ( get_cvar_num( "amx_hpk_tests" ) < 3 ) set_cvar_num( "amx_hpk_tests" , 3 )

g_msgSayText = get_user_msgid("SayText");
g_msgTeamInfo = get_user_msgid("TeamInfo");
}

public client_disconnect(id)
remove_task( id )

public client_putinserver(id)
{
g_Ping[id] = 0
g_Samples[id] = 0

if ( !is_user_bot(id) )
{
new param[1]
param[0] = id
set_task( 10.0 , "showWarn" , id , param , 1 )

if (get_cvar_num("amx_hpk_tests") != 0) {
set_task( float(get_cvar_num("amx_hpk_delay")), "taskSetting", id, param , 1)
}
else {
set_task( float(get_cvar_num( "amx_hpk_tests" )) , "checkPing" , id , param , 1 , "b" )
}

}
}

public showWarn(param[])
{
colorChat(param[0], CHATCOLOR_RED, "^x01[^x04INFO^x01] Игроки с пингом выше чем ^x04%d^x01 будут кикнуты!", get_cvar_num( "amx_hpk_ping" ) )
}

public taskSetting(param[]) {
new name[32]
get_user_name(param[0],name,31)
set_task( float(get_cvar_num( "amx_hpk_tests" )) , "checkPing" , param[0] , param , 1 , "b" )
}

kickPlayer( id )
{
new name[32],authid[32]
get_user_name(id,name,31)
get_user_authid(id,authid,31)

colorChat(0, CHATCOLOR_RED, "^x01[^x04INFO^x01] Игрок ^x04%s^x01 отключен из-за высокого пинга!",name)
client_cmd(id,"echo ^"Извините, но на 'Качестве' играют с хорошим интернетом^";disconnect")
remove_task(id)
log_amx("Highpingkick: ^"%s<%d><%s>^" was kicked due highping (Average Ping ^"%d^")",
name,get_user_userid(id),authid,(g_Ping[id] / g_Samples[id]))

}

public checkPing(param[])
{
new id = param[ 0 ]

if ( get_user_flags(id) & ADMIN_IMMUNITY ) return

new p, l

get_user_ping( id , p , l )

g_Ping[ id ] += p
++g_Samples[ id ]

if ( (g_Samples[ id ] > get_cvar_num( "amx_hpk_tests" )) && (g_Ping[id] / g_Samples[id] > get_cvar_num( "amx_hpk_ping" )) )
kickPlayer(id)
}


public cmdHpk(id,level,cid){
if (!cmd_access(id,level,cid,1))
return PLUGIN_HANDLED

new ping[5]
new check_arr[5]
new tests_arr[5]
new delay_arr[5]
read_argv(1,ping,4)
read_argv(2,check_arr,4)
read_argv(3,tests_arr,4)
read_argv(4,delay_arr,4)

new check = str_to_num(check_arr)
new tests = str_to_num(tests_arr)
new delay = str_to_num(delay_arr)


if ( check < 5 ) check = 5
if ( tests < 3 ) tests = 3


if (read_argc() > 1){
set_cvar_string("amx_hpk_ping",ping)
}
if (read_argc() > 2) {
set_cvar_num("amx_hpk_check",check)
}
if (read_argc() > 3) {
set_cvar_num("amx_hpk_tests",tests)
}
if (read_argc() > 4) {
set_cvar_num("amx_hpk_delay",delay)
}

console_print(id,"Syntax: amx_hpk <ping to get kicked> <checks before kicks> <time between checks> <delay before first check in sec.>")
console_print(id,"Current High_Ping_Kicker Settings:")
console_print(id,"Maxping: %d Time between checks: %d Checkcount: %d Delay: %d",get_cvar_num("amx_hpk_ping"),get_cvar_num("amx_hpk_check"),get_cvar_num("amx_hpk_tests"),get_cvar_num("amx_hpk_delay"))
return PLUGIN_HANDLED
}

colorChat(id, ChatColor:color, const msg[], {Float,Sql,Result,_}:...)
{
new team, index, MSG_Type
new bool:teamChanged = false
static message[192]

switch(color)
{
case CHATCOLOR_NORMAL:
{
message[0] = 0x01
}
case CHATCOLOR_GREEN:
{
message[0] = 0x04
}
default:
{
message[0] = 0x03
}
}

vformat(message[1], 190, msg, 4)

if(id == 0)
{
index = findAnyPlayer()
MSG_Type = MSG_ALL
}
else
{
index = id
MSG_Type = MSG_ONE
}

if(index != 0)
{
team = get_user_team(index)

if(color == CHATCOLOR_RED && team != 1)
{
messageTeamInfo(index, MSG_Type, g_TeamName[1])
teamChanged = true
}
else if(color == CHATCOLOR_BLUE && team != 2)
{
messageTeamInfo(index, MSG_Type, g_TeamName[2])
teamChanged = true
}
else if(color == CHATCOLOR_GREY && team != 0)
{
messageTeamInfo(index, MSG_Type, g_TeamName[0])
teamChanged = true
}

messageSayText(index, MSG_Type, message)

if(teamChanged)
{
messageTeamInfo(index, MSG_Type, g_TeamName[team])
}
}
}

messageSayText(id, type, message[])
{
message_begin(type, g_msgSayText, _, id)
write_byte(id)
write_string(message)
message_end()
}

messageTeamInfo(id, type, team[])
{
message_begin(type, g_msgTeamInfo, _, id)
write_byte(id)
write_string(team)
message_end()
}

findAnyPlayer()
{
static players[32], inum, pid

get_players(players, inum, "ch")

for (new a = 0; a < inum; a++)
{
pid = players[a]

if(is_user_connected(pid))
return pid
}

return 0
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   Цитировать сообщение
Статус пользователя ex3m777
сообщение 21.7.2014, 11:11
Сообщение #2


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

Сообщений: 2037
Благодарностей: 1135
Полезность: 968

Меценат Меценат

Скрытый текст
Код:
#include <amxmodx>

#define ACCESS_LEVEL_IMMUNITY (ADMIN_MENU|ADMIN_LEVEL_H) // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING 100 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX 30 // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS 20 // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK 5 // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK 10.0 // Интервал между проверками, чем меньше значение, тем больше нагрузка на сервер.
#define CHECK_COUNT MAX_WARNING_CHECK + 3 // Количество проверок определенного игрока ( снижаем и без того маленькую нагрузку xD )

#define is_immunity(%0) ((get_user_flags(%0) & ACCESS_LEVEL_IMMUNITY) || is_user_bot(%0) || is_user_hltv(%0))

#define get_bit(%1,%2) (%1 & (1 << (%2 & 31)))
#define set_bit(%1,%2) %1 |= (1 << (%2 & 31))
#define clr_bit(%1,%2) %1 &= ~(1 << (%2 & 31))

new g_iWarning[33], g_iCountCheck[33], g_iLastPing[33], g_iBitValid;

public plugin_init()
{
register_plugin("Ping Control", "0.3", "Freedo.m | neygomon");
set_task(INTERVAL_CHECK, "PingCheck", .flags = "b");
}

public client_putinserver(id)
{
if(is_immunity(id)) return;
set_bit(g_iBitValid, id);
g_iWarning[id] = g_iCountCheck[id] = 0;
}

public client_disconnect(id)
clr_bit(g_iBitValid, id);

public PingCheck()
{
static i, iPing, iLoss, players[32], pcount;
get_players(players, pcount, "ch")

for(i=0; i < pcount; i++)
{
if(!get_bit(g_iBitValid, players[i])) continue;
if(++g_iCountCheck[players[i]] < CHECK_COUNT)
{
get_user_ping(players[i], iPing, iLoss)

if(iPing >= MAX_ALLOWED_PING || iLoss > MAX_ALLOWED_LOSS || abs(iPing - g_iLastPing[players[i]]) > MAX_FLUX)
{
if(++g_iWarning[players[i]] >= MAX_WARNING_CHECK)
{
server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players[i]));
}
}
else if(g_iWarning[players[i]]) g_iWarning[players[i]]--;
g_iLastPing[players[i]] = iPing;
}
}
}


используй этот


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя panicaskill
сообщение 21.7.2014, 11:14
Сообщение #3
Стаж: 12 лет
Город: Каменск-Уральский


Сообщений: 270
Благодарностей: 256
Полезность: 976

Меценат Меценат

grishka444,
тот нужен.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя Basaev
сообщение 21.7.2014, 11:18
Сообщение #4


Стаж: 12 лет

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

panicaskill,
А в чем отличие?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя panicaskill
сообщение 21.7.2014, 11:26
Сообщение #5
Стаж: 12 лет
Город: Каменск-Уральский


Сообщений: 270
Благодарностей: 256
Полезность: 976

Меценат Меценат

Цитата(Basaev @ 21.7.2014, 15:18) *
panicaskill,
А в чем отличие?

Отличия есть, смотря исходники обоих плагинов. Хоть я и не дружу с этим, но мне кажется так и есть. Да и я попросил помочь исправить, а не кидать аналог.
Если нужно оплатить, пишите.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя FlaZeR
сообщение 21.7.2014, 12:05
Сообщение #6
Стаж: 12 лет

Сообщений: 354
Благодарностей: 145
Полезность: 81

если не ошибаюсь, то попробуйте перекомпилировать, в папке include были файлы инклудов colorchat.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя panicaskill
сообщение 21.7.2014, 12:14
Сообщение #7
Стаж: 12 лет
Город: Каменск-Уральский


Сообщений: 270
Благодарностей: 256
Полезность: 976

Меценат Меценат

Цитата(FlaZeR @ 21.7.2014, 16:05) *
если не ошибаюсь, то попробуйте перекомпилировать, в папке include были файлы инклудов colorchat.

т.е убрать их с папки include, верно?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
XyLiGaN
сообщение 21.7.2014, 12:48
Сообщение #8
Стаж: 13 лет
Город: Югорск

Сообщений: 11668
Благодарностей: 6450
Полезность: 1052

Меценат Меценат

panicaskill,
Зачем тебе этот плагин с убогим кодом?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Basaev
сообщение 21.7.2014, 13:08
Сообщение #9


Стаж: 12 лет

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

panicaskill,
Вот на. в cfg сам все настроишь, правда без исходника я им полтора года пользуюсь, и все отлично!
Ни каких косяков пользуйся.

Отредактировал: Basaev, - 21.7.2014, 13:09
Прикрепленные файлы:
Прикрепленный файл  2986_nice_kicker.rar ( 7,55 килобайт ) Кол-во скачиваний: 12
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя FlaZeR
сообщение 26.7.2014, 15:15
Сообщение #10
Стаж: 12 лет

Сообщений: 354
Благодарностей: 145
Полезность: 81

Цитата(panicaskill @ 21.7.2014, 12:14) *
т.е убрать их с папки include, верно?

Скачай ColorChat в архиве должны быть его Include, после кидаешь их в папку компилятора (Include)
И в конце компилируешь заново плагин.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: