Русское сообщество по скриптингу

Исправить Ping_Control  [Выполнено]

Правила форума
1. Запрещено материться и оскорблять других участников форума.
2. Запрещен флуд, оффтоп, дабл постинг во всех разделах форума, кроме раздела "Болтовня".
3. Запрещено взламывать сайт/форум или наносить любой вред проекту.
4. Запрещено рекламировать другие ресурсы.
5. Запрещено создавать темы без информативного названия. Название темы должно отображать ее смысл.

В данном разделе форума разрешено создавать темы только с поиском исполнителя или заказчика.

Правила при создании новой темы:
1. При вставке кода плагина необходимо использовать тег [code=php].
2. Любые изображения должны быть загружены, как вложения к вашему сообщению.
3. При описании проблемы или запросе на помощь в редактировании плагина обязательно выкладывайте исходник sma плагина.

Re: Исправить Ping_Control

Сообщение WhiteShadow » 20 апр 2017, 18:01

Код: Выделить всё
if(++g_iWarning[players[i]] >= MAX_WARNING_CHECK)


->

Код: Выделить всё
if((++g_iWarning[players[i]] >= MAX_WARNING_CHECK) && !first20Seconds[id])


Код: Выделить всё
public noCheckPing(id)
{
    if(!is_user_connected(id)) return;

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


->

Код: Выделить всё
public noCheckPing(id)
{
    if(!is_user_connected(id)) return;

    first20Seconds[id] = false;

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


Добавлено спустя 3 минуты 49 секунд:
Andrey777,
Код: Выделить всё
#include <amxmodx>

#define ACCESS_LEVEL_IMMUNITY     (ADMIN_CVAR)     // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING     130                 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX        90            // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS     60             // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK     2            // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK         5.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");
}

new 
boolfirst20Seconds[32];

public 
client_putinserver(id)

{
    
set_task(20.0"noCheckPing"id);
    
first20Seconds[id] = true;
}

public 
noCheckPing(id)
{
    if(!
is_user_connected(id)) return;

    
first20Seconds[id] = false;
    
    if(
is_immunity(id)) return;
    
set_bit(g_iBitValidid);
    
g_iWarning[id] = g_iCountCheck[id] = 0;
}

public 
client_disconnect(id)
    
clr_bit(g_iBitValidid);

public 
PingCheck()
{
    static 
iiPingiLossplayers[32], pcount;
    
get_players(playerspcount"ch")
    
    for(
i=0pcounti++)
    {
        if(!
get_bit(g_iBitValidplayers[i])) continue;
        if(++
g_iCountCheck[players[i]] < MAX_WARNING_CHECK 1)
        {
            
get_user_ping(players[i], iPingiLoss)
            
            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) && !first20Seconds[i])
                {                    
                    static 
name[32]; get_user_name(players[i], namecharsmax(name));
                    
ChatColor("^1[^4Пинг|18+|^1] ^3%s ^1был кикнут из-за высокого ^4пинга!"name);
                    
server_cmd("kick #%d ^"Вы были кикнуты из-за высокого пингаМаксимум 130^""get_user_userid(players[i]));
                }
                else 
g_iCountCheck[players[i]]--;
            }
            else if(
g_iWarning[players[i]]) g_iWarning[players[i]]--;
            
g_iLastPing[players[i]] = iPing;    
        }
    }
}

stock ChatColor(const szMessage[], any:...)
{
    static 
pnumplayers[32], szMsg[190], IdMsg
    
vformat(szMsgcharsmax(szMsg), szMessage2);
    
    if(!
IdMsgIdMsg get_user_msgid("SayText");
    
    
get_players(playerspnum"ch");
    
    for(new 
ipnumi++)
    {
        
message_begin(MSG_ONEIdMsg, .player players[i]);
        
write_byte(players[i]);
        
write_string(szMsg);
        
message_end();
    }
}  


готовый
1. vk.cc/6xqK8B
Аватара пользователя
WhiteShadow
 
Сообщения: 28
Зарегистрирован: 20 апр 2017, 02:16
Забанен
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Языки программирования: Pawn
C++
Php
Delphi
C#

Re: Исправить Ping_Control

Сообщение Andrey777 » 20 апр 2017, 20:27

Всеравно, не понятно, что то не то.
Код: Выделить всё
#define MAX_WARNING_CHECK     2            // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK         5.0            // Интервал между проверками, чем меньше значение, тем больше нагрузка на сервер.  

С такими настройками я понимаю так что человек сможет проиграть не более 10 сек с высоким пингом, но он играет весь раунд с пингом 140-150 и его не кикает. Хотя стоит макс #define MAX_ALLOWED_PING 130
Аватара пользователя
Andrey777
 
Сообщения: 147
Зарегистрирован: 09 янв 2012, 03:38
Благодарил (а): 35 раз.
Поблагодарили: 8 раз.

Re: Исправить Ping_Control

Сообщение nemec21 » 21 апр 2017, 01:28

Andrey777, потому что ерунду делаешь. вот и не работает
Тебе нужно, что бы игрок зашел, ему через 20 сек сделало одну проверку через 20 вторую. потом его кикнуло? если большой пинг, если нет больше не проверять?
Аватара пользователя
nemec21
 
Сообщения: 799
Зарегистрирован: 07 фев 2016, 17:08
Откуда: Беларусь
Благодарил (а): 212 раз.
Поблагодарили: 44 раз.
Опыт программирования: Около 6 месяцев
Языки программирования: Counter-Strike 1.6

Re: Исправить Ping_Control  [Выполнено]

Сообщение KOTOKU » 21 апр 2017, 03:56

Код: Выделить всё
#include <amxmodx>

#define TIME_CHECK    20.0                        // Через сколько секунд после входа проверять игрока
#define ACCESS_LEVEL_IMMUNITY     (ADMIN_CVAR)     // Уровень доступа позволяющий пропускать проверку на пинг.
#define MAX_ALLOWED_PING     130                 // Максимально допустимый пинг, превышение этого значения выкидывает игрока с сервера.
#define MAX_FLUX        90            // Максимальные скачки пинга, если привышение то выкидывает с сервера
#define MAX_ALLOWED_LOSS     60             // Максимально допустимая потеря пакетов loss, превышение этого значения выкидывает игрока с сервера.
#define MAX_WARNING_CHECK     2            // Количество предупреждений после которых последует наказание.
#define INTERVAL_CHECK         5.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)
    
set_task(TIME_CHECK"join_get"id);
    
public 
join_get(id)
{
    if(
is_immunity(id)) return;
    
set_bit(g_iBitValidid);
    
g_iWarning[id] = g_iCountCheck[id] = 0;
}

public 
client_disconnect(id)
{
    
clr_bit(g_iBitValidid);
    
remove_task(id);
}

public 
PingCheck()
{
    static 
iiPingiLossplayers[32], pcount;
    
get_players(playerspcount"ch")
    
    for(
i=0pcounti++)
    {
        if(!
get_bit(g_iBitValidplayers[i])) continue;
        if(++
g_iCountCheck[players[i]] < MAX_WARNING_CHECK 1)
        {
            
get_user_ping(players[i], iPingiLoss)
            
            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], namecharsmax(name));
                    
ChatColor("^1[^4Пинг|18+|^1] ^3%s ^1был кикнут из-за высокого ^4пинга!"name);
                    
server_cmd("kick #%d ^"Вы были кикнуты из-за высокого пингаМаксимум 130^""get_user_userid(players[i]));
                }
                else 
g_iCountCheck[players[i]]--;
            }
            else if(
g_iWarning[players[i]]) g_iWarning[players[i]]--;
            
g_iLastPing[players[i]] = iPing;    
        }
    }
}

stock ChatColor(const szMessage[], any:...)
{
    static 
pnumplayers[32], szMsg[190], IdMsg
    
vformat(szMsgcharsmax(szMsg), szMessage2);
    
    if(!
IdMsgIdMsg get_user_msgid("SayText");
    
    
get_players(playerspnum"ch");
    
    for(new 
ipnumi++)
    {
        
message_begin(MSG_ONEIdMsg, .player players[i]);
        
write_byte(players[i]);
        
write_string(szMsg);
        
message_end();
    }
Аватара пользователя
KOTOKU
 
Сообщения: 766
Зарегистрирован: 10 фев 2013, 00:53
Благодарил (а): 10 раз.
Поблагодарили: 117 раз.

Re: Исправить Ping_Control

Сообщение Andrey777 » 21 апр 2017, 10:12

KOTOKU, Спасибо за помощь, вы не пишите плагины на заказ, или исправления?
Аватара пользователя
Andrey777
 
Сообщения: 147
Зарегистрирован: 09 янв 2012, 03:38
Благодарил (а): 35 раз.
Поблагодарили: 8 раз.

Пред.

Вернуться в Поиск исполнителей / заказчиков

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5