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

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

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

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

5 страниц V  « 2 3 4 »

Ping Control 0.1.5. Обновлённая версия от 01.04.2014 от trollface (Оптимизированный Ping Control ожил)

, Закачик: intercs. Автор: Freedo.m. Обновление от trollface.
Статус пользователя Mikasa
сообщение 30.3.2014, 2:18
Сообщение #41
Стаж: 10 лет

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

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

Цитата(csnet @ 30.3.2014, 3:17) *
тогда все верно
делаем какой нибудь
putinserver и чекаем игрока первые 2 минуты дальше не трогаем
ты прав
ps.gif одна голова хорошо а две лучше

Обновите плагин нормально.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 30.3.2014, 2:50
Сообщение #42
Стаж: 10 лет

Сообщений: 4755
Благодарностей: 3837
Полезность: 693

Код:

#include <amxmodx>

#define ACCESS_LEVEL_IMMUNITY ADMIN_RESERVATION
#define MAX_ALLOWED_PING 120
#define MAX_WARNING_CHECK 3
#define TASK_TIME 5.0

//#define REDIRECT
#if defined REDIRECT
#define IP_REDIRECT "77.220.180.75:27015"
#endif

new warns[33], Ping , Loss

public plugin_init()
{
register_plugin("Ping Check", "1.0", "csp.admin")
}

public client_putinserver(id)
{
warns[id] = 0
set_task(TASK_TIME,"check_ping",id)
}

public check_ping(id)
{
if(!is_user_connected(id) || (get_user_flags(id) & ACCESS_LEVEL_IMMUNITY)) return // necessary check
{
get_user_ping(id, Ping, Loss)
if(Ping > MAX_ALLOWED_PING)
{
set_task(TASK_TIME,"check_ping",id) // dont loop , use delay
if(warns[id]++ >= MAX_WARNING_CHECK)
{
#if defined REDIRECT
client_cmd(id, "^"\n^";^"connect^" %s", IP_REDIRECT);
#else
server_cmd("kick #%d Ping", get_user_userid(id))
#endif
}
}
}
}


такой вариант нормально работает
проверка после захода один раз, если пинг выше то проверяет еще раз и так пока не кикнет за превышение, если пинг будет меньше на 2й проверке то таск не вызовется
Единственный минус если пинг первый раз не был выше то дальнейших проверок не будет но учитывая что amx_ping > 120 то пингеров в любом случае отсеет
кому мало влепите флаг "a" и 2-3 проверки тогда сделайте.

Отредактировал: csnet, - 30.3.2014, 3:01


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Mikasa
сообщение 30.3.2014, 3:01
Сообщение #43
Стаж: 10 лет

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

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

Цитата
#define MAX_SECONDS 10.0 // Анти-реконнект секунд для захода на сервер.

Про него забыли.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 30.3.2014, 3:02
Сообщение #44
Стаж: 10 лет

Сообщений: 4755
Благодарностей: 3837
Полезность: 693

в плагине не было проверки на реконнект. Я написал что этим должны заниматься сторонние плагины. Да и предложите как чекать на реконнект?
одни по нику, вторые по стимайди записанным в массив, создаем Trie и чекаем на совпадение
Отдельный плагин не создаст нагрузки лишней.

Отредактировал: csnet, - 30.3.2014, 3:04


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Mikasa
сообщение 30.3.2014, 3:04
Сообщение #45
Стаж: 10 лет

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

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

Хватит редактировать свои посты!

Отредактировал: TouchDev1l, - 30.3.2014, 3:05
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 30.3.2014, 3:06
Сообщение #46
Стаж: 10 лет

Сообщений: 4755
Благодарностей: 3837
Полезность: 693

да я свой гангейм дописывал. спал по 4 часа в течении дня. Зы вроде все баги убрал, завтра на онлайне его тестану.
я давал ТС-у ссылку на код антиреконекта и попросил потестить, прошла неделя наверно он так и не отписал.
Честное слово, пинг кикер с его нагрузкой это ваша самая малая часть из проблем. учитывая колво кода в других плагинах censored2.gif

Отредактировал: csnet, - 30.3.2014, 3:07


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Mikasa
сообщение 30.3.2014, 3:13
Сообщение #47
Стаж: 10 лет

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

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

От Фридома?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя xoymiii
сообщение 30.3.2014, 19:22
Сообщение #48


Стаж: 11 лет

Сообщений: 769
Благодарностей: 244
Полезность: 567

вот мой вариант этого плагина, просто на зм сервере 7 минут до конца раунда долго ждать и не кикало никого...
Скрытый текст
Код:
#include <amxmodx>
#include <hamsandwich>

#define ACCESS_LEVEL_IMMUNITY ADMIN_IMMUNITY // флаг иммунитета
#define MAX_ALLOWED_PING 150 // допустимый пинг
#define TIME_CHECK 15.0 // время проверки пинга (не ставьте меньше)
#define MAX_WARNING_CHECK 3 // количество предупреждений до кика
#define CHECK(%0) (get_user_flags(%0) & ACCESS_LEVEL_IMMUNITY || is_user_bot(%0))

//#define REDIRECT
#if defined REDIRECT
#define IP_REDIRECT "127.0.0.1:27015"
#endif

new g_maxplayers

new warns[33], Ping , Loss

public plugin_init()
{
register_plugin("Ping Check", "1.0", "csp.admin")
g_maxplayers = get_maxplayers()
set_task(TIME_CHECK, "ping_check", _, _, _, "b")
}

public client_connect(id) warns[id] = 0

public ping_check(id)
{
for (new i = 1; i <= g_maxplayers; i++)
{
if (!is_user_connected(i) || CHECK(i) || is_user_hltv(i))
return

new name[32]

get_user_ping(i, Ping, Loss)

if(Ping > MAX_ALLOWED_PING)
{
warns[i]++
client_print(i, print_chat, "Предупреждение %d из %d за высокий пинг!", warns[i], MAX_WARNING_CHECK)
if(warns[i] >= MAX_WARNING_CHECK)
{
get_user_name(i, name, charsmax(name))
#if defined REDIRECT
client_cmd(i, "^"CoNnEcT^" %s", IP_REDIRECT);
#endif
client_print(0, print_chat, "Игрок %s был кикнут из-за плохого соединения", name)
server_cmd("kick #%d Вы были кикнуты из-за плохого соединения", get_user_userid(i))
}
}
}
}


Отредактировал: xoymiii, - 30.3.2014, 20:46
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
trollface
сообщение 30.3.2014, 19:52
Сообщение #49
Стаж: 10 лет

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

xoymiii,
собственно чем он лучше оригинального Ping Control?:)))
ps.gif не хочу ничего плохого сказать, но все эти велосипеды уже надоедают.
Freedo.m хороший кодер, у него максимально оптимизированные плагины... (afk control не в счет. это просто ппц :D)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
etkins
сообщение 30.3.2014, 20:40
Сообщение #50
Стаж: 15 лет

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

а что тут реально редирект на другой сервер работает со стимом ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя kapik
сообщение 31.3.2014, 7:32
Сообщение #51
Стаж: 13 лет

Сообщений: 72
Благодарностей: 4
Полезность: 48

Цитата(9iky6 @ 30.3.2014, 0:20) *
Максимально снизить нагрузку... LOL....

Код:
#define MAX_ALLOWED_PING 5

public check_ping(i)
{
if(is_user_alive(i)) return;
get_user_ping(i, Ping, Loss)
if(Ping > MAX_ALLOWED_PING)
{
if(warns[i]++ >= MAX_WARNING_CHECK)
{
#if defined REDIRECT
client_cmd(i, "^"\n^";^"connect^" %s", IP_REDIRECT);
#else
server_cmd("kick #%d Вы были кикнуты из-за плохого соединения", get_user_userid(i))
#endif
}
}
check_ping(i);
}


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

P.S. В этой гонке победой будет усиление нагрузки на сервер. Смотрите, когда всё будет крашиться - будет поздно ворочать потраченные на всё это деньги. Если интерисует => могу дать хорошый вариант, который я делал на основе прошлой версии. В общем счете делает 15 проверок (MAX_WARNING_CHECK*3), полторы минуты. Больше плагин игрока не трогает (если он нормальный, тут же чекается всю игру!!! LOL). Редирект работать будет на стим и нон-стим (не хакинг. Просто руки прямые). Никогда не будет проблем никаких.

Поделись своим вариантом , будем признательны !
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
trollface
сообщение 31.3.2014, 9:02
Сообщение #52
Стаж: 10 лет

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

Код:
#include <amxmodx>

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

#pragma semicolon 1

#define MAX_PLAYERS 32
#define TASK_PING_CHECK 242984

#define BIT_VALID(%1,%2) (%1 & (1 << (%2 & 31)))
#define BIT_ADD(%1,%2) %1 |= (1 << (%2 & 31))
#define BIT_SUB(%1,%2) %1 &= ~(1 << (%2 & 31))

new g_iBitClientValid, g_iWarning[MAX_PLAYERS + 1];
new g_iMaxPlayers, g_iCountCheck[MAX_PLAYERS + 1];

public plugin_init()
{
register_plugin("Ping Control", "0.1.5", "Freedo.m | neygomon");
g_iMaxPlayers = get_maxplayers();
set_task(INTERVAL_CHECK, "PingCheck", TASK_PING_CHECK, _, _, "b");
}

public client_putinserver(id)
{
if(get_user_flags(id) & ACCESS_LEVEL_IMMUNITY || is_user_bot(id) || is_user_hltv(id)) return;
g_iWarning[id] = 0;
g_iCountCheck[id] = 0;
BIT_ADD(g_iBitClientValid, id);
}

public client_disconnect(id) BIT_SUB(g_iBitClientValid, id);

public PingCheck()
{
static i, iPing, iLoss;
for(i=1; i <= g_iMaxPlayers; i++)
{
if(BIT_VALID(g_iBitClientValid, i) && get_user_ping(i, iPing, iLoss))
{
if(g_iCountCheck[i] < CHECK_COUNT)
{
if(iPing > MAX_ALLOWED_PING || iLoss > MAX_ALLOWED_LOSS)
{
if(++g_iWarning[i] >= MAX_WARNING_CHECK)
{
//log_to_file("ping_control.log", "Ping: %d | Loss: %d", iPing, iLoss);
static name[32];
get_user_name(i, name, charsmax(name));
#if AMXX_VERSION_NUM < 183
client_print(0, print_chat, "[PingControl] %s был удален с сервера за плохое соединение!", name);
#else
client_print_color(0, 0, "^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
#endif
server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(i));

}
}
else if(g_iWarning[i]) g_iWarning[i]--;
g_iCountCheck[i]++;
}
}
}
}


Отредактировал: trollface, - 31.3.2014, 9:18
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 5 раз
   + Цитировать сообщение
Статус пользователя 9iky6
сообщение 31.3.2014, 11:04
Сообщение #53


Стаж: 12 лет

Сообщений: 143
Благодарностей: 47
Полезность: 260

trollface, биты сбросьте после проверок и прочекайте перед циклом g_iBitClientValid, если он = 0, то игроков нет.

Цитата(etkins @ 31.3.2014, 0:40) *
а что тут реально редирект на другой сервер работает со стимом ?

А что стим-игроки не люди чтоли, чтобы их не редиректило? Если кому-то удобно перевести людей на зеркало или на соседнюю локацию, почему бы нет? Я думаю и сами игроки будут не против этого
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя csnet
сообщение 31.3.2014, 11:16
Сообщение #54
Стаж: 10 лет

Сообщений: 4755
Благодарностей: 3837
Полезность: 693

ну вот это то о чем я говорил, чтобы не чекало на пустом сервере


go v cs:go
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
trollface
сообщение 31.3.2014, 12:03
Сообщение #55
Стаж: 10 лет

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

9iky6,
csnet,
вы серьезно?
Что изменится от того, что не будет проверки? Или вы решили сэкономить 0.000001% проца?:)
Лишняя проверка, ИМХО.
Единственное, что при пустом сервере не будут циклы гоняться(Нужно в основном тем, кто "максимально оптимизирует", добавляя лишние проверки LOL)

Этот цикл не создаст никакой нагрузки в принципе, потому что все упрется в проверку на
Код:
if(BIT_VALID(g_iBitClientValid, i) && get_user_ping(i, iPing, iLoss)) 

такие циклы хоть ежесекундно запускайте, серверу от этого не горячо, не холодно. игроков нет и проверок нет дальше битов.

ps.gif Исходя из этого, считаю лишним проверять наличие игроков...
Кому нужен огород, может проверять. Мне лично не надо:)

ps.gifps.gif Насчет сброса битов не понял... Зачем и почему сбрасывать?

Отредактировал: trollface, - 31.3.2014, 12:32
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя intercs
сообщение 1.4.2014, 19:25
Сообщение #56


Стаж: 11 лет

Сообщений: 727
Благодарностей: 408
Полезность: 504

Так ребяты, приветствую всех...
Был погружен в арбайтен и теперь слегка наладил свободное время и готов к дальнейшим обсуждениям и тестам.
Глянул, что оказывается тут прям стасти кипят-)

Возникли за это время вопросы:
1) В итоге для всех и вся на форуме какую лучше версию обновить в первом посте?
2) Забыл... Вспомню дам знать, но пункт был важнее первого-))) А вспомнил фигню и солидарен с csnet, что анти-рекконнект лучше и правда забыть, т.к. и правда во избежании ошибок есть иные плагины по рекконектам, которые идеально справляются со своей работой, чем впихивать новый код в данные версии и потом исправлять ошибки, которыми мы можем навредить нечаянно негаданно...

Отредактировал: intercs, - 1.4.2014, 19:26
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя primm
сообщение 1.4.2014, 19:36
Сообщение #57


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

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

версию поставил от trollface, 52 пост, спасибо ему. Кикает исправно и серверку вроде сразу полегчало.)

Отредактировал: primm, - 1.4.2014, 19:37
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя intercs
сообщение 1.4.2014, 20:08
Сообщение #58


Стаж: 11 лет

Сообщений: 727
Благодарностей: 408
Полезность: 504

Цитата(primm @ 1.4.2014, 21:36) *
версию поставил от trollface, 52 пост, спасибо ему. Кикает исправно и серверку вроде сразу полегчало.)

Тогда супер-) Обновляю версию с описанием автора обновления и ссылку на его пост.
Только как быть с вопросом, видимо от знатока:
Цитата(9iky6 @ 31.3.2014, 13:04) *
trollface, биты сбросьте после проверок и прочекайте перед циклом g_iBitClientValid, если он = 0, то игроков нет.

А ему в ответ:
Цитата(trollface @ 31.3.2014, 14:03) *
ps.gifps.gif Насчет сброса битов не понял... Зачем и почему сбрасывать?

Как быть, стоит уже обновлять первый пост или же стоит подождать баталий?

Отредактировал: intercs, - 1.4.2014, 20:19
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
trollface
сообщение 1.4.2014, 20:34
Сообщение #59
Стаж: 10 лет

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

intercs,
не буду что либо говорить, расхваливая себя, НО не вижу смысла проверять значение бита.
ибо пустому серверу не важна нагрузка, на то он и пустой, что там нет никого и никому это мешать не может...
Как вариант, можно добавить в начало функции PingCheck() строку [для любителей псевдооптимизаций, путем добавления лишних проверок]:
Код:
if(get_playersnum(1) < 1) return;

А сама переменная g_iBitClientValid будет равна нулю, ибо она назначается игроку. Глобально она равна нулю... [ Не буду утверждать. Пусть поправят, если не прав. ]

Отредактировал: trollface, - 1.4.2014, 20:36
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя intercs
сообщение 1.4.2014, 20:48
Сообщение #60


Стаж: 11 лет

Сообщений: 727
Благодарностей: 408
Полезность: 504

Цитата(trollface @ 1.4.2014, 22:34) *
intercs,
не буду что либо говорить, расхваливая себя, НО не вижу смысла проверять значение бита.
ибо пустому серверу не важна нагрузка, на то он и пустой, что там нет никого и никому это мешать не может...
Как вариант, можно добавить в начало функции PingCheck() строку [для любителей псевдооптимизаций, путем добавления лишних проверок]:
Код:
if(get_playersnum(1) < 1) return;

А сама переменная g_iBitClientValid будет равна нулю, ибо она назначается игроку. Глобально она равна нулю... [ Не буду утверждать. Пусть поправят, если не прав. ]


Я хз, ничерта не смыслю-)
Поэтому буду ждать итоговых баталий и экспертных заключений.
И если баталий более не будет, то тогда обновлю версию от твоегоимени на обозрение всех...

Редирект мож добавить на др. сервера, что скажешь?
Ну мол или кик выбрать или задефайнить кик и сделать перенаправление из-за пинга или нафиг нужна эта чушь?
Т.к. бывает на 1 сервере у человека пинг высокий, а редирекнулся на 2 сервер и тут хоп и пинг там у него норм.
Но если делать, то тогда как-то надо уведомить человека, мол почему он оказался на др. сервере или худом или хз как ещё... А то некультурно.

Отредактировал: intercs, - 1.4.2014, 20:57
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
5 страниц V  « 2 3 4 »
 
Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: