Помощь по изменению плагина Ping_Control

Статус
Новые ответы в этой теме размещать нельзя.

Molodoi

Пользователь
Регистрация
14 Июн 2017
Сообщения
167
Симпатии
17
Пол
Мужской
#1
Уважаемые гуру скриптинга нужна маленькая помощь по переделке плагина от Neugomon , а именно хочу в этот плагин
#include <amxmodx>

#define ACCESS_LEVEL_IMMUNITY (ADMIN_BAN|ADMIN_RCON) // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING 150 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX 30 // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS 30 // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK 2 // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK 30.0 // Интервал между проверками, чем меньше значение, тем больше нагрузка на сервер.

#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", "1.4", "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)) continue;
if(++g_iCountCheck[players] < MAX_WARNING_CHECK + 1)
{
get_user_ping(players, iPing, iLoss)

if(iPing >= MAX_ALLOWED_PING || iLoss > MAX_ALLOWED_LOSS || abs(iPing - g_iLastPing[players]) > MAX_FLUX)
{
if(++g_iWarning[players] >= MAX_WARNING_CHECK)
{
static name[32]; get_user_name(players, name, charsmax(name));
ChatColor("^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
server_cmd("kick #%d ^"Ваш пинг нестабилен...! Нормализируйте пинг и заходите играть^"", get_user_userid(players));
}
else g_iCountCheck[players]--;
}
else if(g_iWarning[players]) g_iWarning[players]--;
g_iLastPing[players] = iPing;
}
}
}

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

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

get_players(players, pnum, "ch");

for(new i; i < pnum; i++)
{
message_begin(MSG_ONE, IdMsg, .player = players);
write_byte(players);
write_string(szMsg);
message_end();
}
}
добавить такие сообщения когда игрок зашол на сервер
* Игроки с пингом выше (тут значения) будут и кикнуты с сервера!
 

Le$hiy

Постоялец
Регистрация
10 Июн 2017
Сообщения
191
Симпатии
67
Пол
Мужской
#2
Откуда у тебя версия 1.4, если на форуме только 1.31? Biggrin И что в ней нового? Убран деффайн на максимальное количество проверок одного игрока? В общем у меня твоя версия не компилится даже, ошибок тьма. Вот тебе версия 1.31 с твоими "хотелками". Только у меня текст сообщений в чате свой ну и свои настройки (поменяй).
PHP:
#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))

#if AMXX_VERSION_NUM < 183                                                                                          
    #include <colorchat>
#endif 

#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", "1.31", "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 uvedomlenie(id)
{
    if(is_user_connected(id))
    {
    client_print_color (id, print_team_default, "^1[^4PingControl^1] Игроки с пингом выше ^3%s ^1и потерями выше ^3%s ^1будут кикнуты с сервера!", MAX_ALLOWED_PING, MAX_ALLOWED_LOSS)
    }
}

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)
                {                   
                    static name[32]; get_user_name(players[i], name, charsmax(name));
                    client_print_color (0, print_team_default, "^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
                    server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players[i]));
                }
            }
            else if(g_iWarning[players[i]]) g_iWarning[players[i]]--;
            g_iLastPing[players[i]] = iPing;   
        }
    }
}
в следующий раз вставляй код нормально, а не через жопу
 

Andrey777best

Пользователь
Регистрация
10 Июн 2017
Сообщения
24
Симпатии
2
Пол
Мужской
#4
Le$hiy, Неугомон выкладывал версию в теме 1.4 измпненял проверки.
 

Molodoi

Пользователь
Регистрация
14 Июн 2017
Сообщения
167
Симпатии
17
Пол
Мужской
#5
Le$hiy, поставил не выводит сообщения хоть и пишет что плагин работает (
[doublepost=1498555392][/doublepost]P.S может какой то колор чат надо ??? Тобиш скомпилировать с ним ?
 

Le$hiy

Постоялец
Регистрация
10 Июн 2017
Сообщения
191
Симпатии
67
Пол
Мужской
#6
Molodoi, сообщение должно выводиться всего 1 раз - после коннекта игрока.
PHP:
#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))

#if AMXX_VERSION_NUM < 183                                                                                         
    #include <colorchat>
#endif

#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", "1.31", "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 uvedomlenie(id)
{
    if(!is_user_connected(id)) return;
    client_print_color (id, print_team_default, "^1[^4PingControl^1] Игроки с пингом выше ^3%s ^1и потерями выше ^3%s ^1будут кикнуты с сервера!", MAX_ALLOWED_PING, MAX_ALLOWED_LOSS)
}

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)
                {                   
                    static name[32]; get_user_name(players[i], name, charsmax(name));
                    client_print_color (0, print_team_default, "^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
                    server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players[i]));
                }
            }
            else if(g_iWarning[players[i]]) g_iWarning[players[i]]--;
            g_iLastPing[players[i]] = iPing;   
        }
    }
}
 

MakapoH.

Разработчик
Регистрация
8 Июн 2017
Сообщения
91
Симпатии
52
Пол
Мужской
#7
Le$hiy, С чего бы? Ты же просто добавил паблик функцию, но нигде не юзаешь) Либо таском, либо просто в путинсервере
 

Le$hiy

Постоялец
Регистрация
10 Июн 2017
Сообщения
191
Симпатии
67
Пол
Мужской
#9
MakapoH., значит я лошара. Просто видел где-то, чтобы так добавляли дополнительные уведомления.
Molodoi, тогда сорян, даже такой простяцкой штуки я сделать не могу(.
[doublepost=1498557833][/doublepost]MakapoH., покажи, как надо было
 

MakapoH.

Разработчик
Регистрация
8 Июн 2017
Сообщения
91
Симпатии
52
Пол
Мужской
#11
PHP:
#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))

#if AMXX_VERSION_NUM < 183                                                                                         
    #include <colorchat>
#endif

#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", "1.31", "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;
    set_task(5.0, "uvedomlenie", id);
}

public uvedomlenie(id)
{
    if(!is_user_connected(id)) return;
    client_print_color (id, print_team_default, "^1[^4PingControl^1] Игроки с пингом выше ^3%s ^1и потерями выше ^3%s ^1будут кикнуты с сервера!", MAX_ALLOWED_PING, MAX_ALLOWED_LOSS)
}

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)
                {                   
                    static name[32]; get_user_name(players[i], name, charsmax(name));
                    client_print_color (0, print_team_default, "^1[^4PingControl^1] ^3%s ^1был удален с сервера за плохое соединение!", name);
                    server_cmd("kick #%d ^"Вы были кикнуты из-за плохого соединения^"", get_user_userid(players[i]));
                }
            }
            else if(g_iWarning[players[i]]) g_iWarning[players[i]]--;
            g_iLastPing[players[i]] = iPing;   
        }
    }
}
 

Molodoi

Пользователь
Регистрация
14 Июн 2017
Сообщения
167
Симпатии
17
Пол
Мужской
#12
MakapoH., спасибки щя протестим сообщим!
[doublepost=1498558997][/doublepost]MakapoH., не фуричет аааааааа помогите !!!!!
[doublepost=1498559551][/doublepost]Может возьмите этот как варик за идею переделки
PHP:
/* AMX Mod script.
*
* (c) 2002-2003, OLO
* modified by shadow
* This file is provided as is (no warranties).
*
* Players with immunity won't be checked
*/

#include <amxmodx>
#include <amxmisc>

new g_Ping[33]
new g_Samples[33]

public plugin_init()
{
  register_plugin("High Ping Kicker (Steam)","0.16.2","OLO/shadow")
  register_concmd("amx_hpk","cmdHpk",ADMIN_KICK,"- configures high_ping_kicker plugin")
  register_cvar("amx_hpk_ping","200")
  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 )
}

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[])
  client_print( param[0] ,print_chat,"* Игроки с пингом выше %d будут отпизжены и кикнуты с сервера!", 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)
  client_print(0,print_chat,"",name)
  server_cmd("kick #%d ^"У тебя большой Пинг зайди позже...^"",get_user_userid(id))
  log_amx("", 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   
}
[doublepost=1498559640][/doublepost]Я прсто не скриптер и не знаю как оно должно бить но в етом варианте работает
 

shram47

Пользователь
Регистрация
22 Июн 2017
Сообщения
117
Симпатии
29
Пол
Мужской
#13
почему бы не сделать проверку на clinet_connect и сделать вывод сообщения через 15 секунд после входа?
 

Molodoi

Пользователь
Регистрация
14 Июн 2017
Сообщения
167
Симпатии
17
Пол
Мужской
#14
shram47, если бы так то было б вообще супер !
 

neygomon

Его Темнейшество :j
Команда форума
Администратор
Регистрация
8 Июн 2017
Сообщения
649
Симпатии
302
Пол
Мужской
#16
shram47, ну а почему бы предложить хуйню?
ведь это так просто....
[doublepost=1498644720][/doublepost]
MakapoH., не фуричет аааааааа помогите !!!!!
и не будет работать потому что у тебя есть иммунитет к функциям плагина.
без админки чекай... -__-

ps нубы
 

Molodoi

Пользователь
Регистрация
14 Июн 2017
Сообщения
167
Симпатии
17
Пол
Мужской
#18
neygomon, я понимаю о чом ты но сначало надо было самому протестить и писать что ктото Noob
[doublepost=1498648333][/doublepost]P.S не показует значения!
 

sonyx

Команда форума
Модератор
Регистрация
8 Июн 2017
Сообщения
415
Симпатии
220
Пол
Мужской
#19
Вот это
PHP:
public client_putinserver(id)
{
    if(is_immunity(id)) return;
    set_bit(g_iBitValid, id);
    g_iWarning[id] = g_iCountCheck[id] = 0;
    set_task(5.0, "uvedomlenie", id);
}
заменить на это
PHP:
public client_putinserver(id)
{
    set_task(5.0, "uvedomlenie", id);
    if(is_immunity(id)) return;
    set_bit(g_iBitValid, id);
    g_iWarning[id] = g_iCountCheck[id] = 0;
}
и будет вам ЩАСЬТЕComando
[doublepost=1498652895][/doublepost]ибо таск после ретурна это ...
 

MakapoH.

Разработчик
Регистрация
8 Июн 2017
Сообщения
91
Симпатии
52
Пол
Мужской
#20
sonyx, тоже самое, что и после. Просто не будет уведомлять админов.

UPD: Чекнул свою версию - работает без каких-либо проблем. Разве что %s заменить на %d.
 
Последнее редактирование:
Статус
Новые ответы в этой теме размещать нельзя.