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

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

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

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

Помогите разобраться в коде

Статус пользователя Dale
сообщение 28.8.2011, 21:34
Сообщение #1


Стаж: 14 лет

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

Код
/*===============================================================================
=
    
    ------------------------------------
    -*- Lame Connection Punisher 1.2 -*-
    ------------------------------------
    
    ~~~~~~~~~~~~~~~
    - Description -
    ~~~~~~~~~~~~~~~
    
    This plugin improves your server's gameplay experience by automatically
    rejecting clients with "bad" conections, so that you'll never have to
    deal with players skipping around the map or being hard to hit anymore.
    
    It can also detect clients running any background applications that may
    be affecting their connection, such as P2P programs using up too many
    bandwidth.
    
    ~~~~~~~~~~~~~~~~~~~~
    - How Does It Work -
    ~~~~~~~~~~~~~~~~~~~~
    
    It checks for player's ping fluctuations and packet loss rates, since
    these seem to be the most trustable factors in determining if there are
    any issues, in my experience.
    
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    - What Makes It Different -
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    Other solutions, such as Hing Ping Kickers, usually can't tell apart
    players with good or bad connections accurately. They may not detect
    a bad connection if the player's ping is too low, and likewise, they
    may end up kicking a player who's ping exceeds the limit but has a
    nice connection nonetheless, thus making you loose potential players.
    
    ~~~~~~~~~
    - CVARS -
    ~~~~~~~~~
    
    There are 2 main cvars to control the plugin's behavior (tolerance),
    though the default values are recommended.
    
    Please note that small ping fluctuations and packet loss occur even
    on the best connections, so DO NOT set these too low, unless you are
    in for some nasty results!
    
    * lcp_flux_limit [50] - Ping fluctuation limit (in ms.)
    * lcp_loss_limit [5] - Loss limit (% of packets)
    
    Additionally, you can specify whether the plugin should kick or ban
    these players by changing the following settings.
    
    * lcp_punishment [0/1/2] - 0 = Kick / 1 = Ban by SteamID / 2 = Ban by IP
    * lcp_ban_time [5] - Ban time in minutes (use 0 to permanently ban)
    
    Lastly, players with the immunity flags will not be checked at all.
    
    * lcp_immunity ["a"] - Immunity flags
    
    ~~~~~~~~~~~~~
    - Changelog -
    ~~~~~~~~~~~~~
    
    * v1.0: (Jan 05, 2009)
       - Public release
       - Added ban support
       - Added immunity feature
    
    * v1.1: (Feb 08, 2009)
       - Code optimized
    
    * v1.1a: (Feb 24, 2009)
       - Fixed IP ban code retrieving unneeded port number
    
    * v1.2: (Jun 06, 2011)
       - Fixed plugin so that it works on all HL mods
    
================================================================================
=*/

#include <amxmodx>
#include <colorchat>

const TASK_JOINMSG = 100
const TASK_DOCHECKS = 200
#define ID_JOINMSG (taskid-TASK_JOINMSG)

new cvar_flux, cvar_loss, cvar_punishment, cvar_bantime, cvar_immunity
new g_maxplayers, g_connected[33]
new g_lastping[33], g_fluxcounter[33], g_losscounter[33], g_immune[33]

// I wouldn't recommend lowering these unless
// you wanna pick up a lot of false positives
const Float:CHECK_FREQ = 5.0
const FLUX_TESTS = 12
const LOSS_TESTS = 12

public plugin_init()
{
    register_plugin("Lame Connection Punisher", "1.2", "MeRcyLeZZ")
    register_dictionary("lame_connection_punisher.txt")
    
    cvar_flux = register_cvar("lcp_flux_limit", "50")
    cvar_loss = register_cvar("lcp_loss_limit", "5")
    cvar_punishment = register_cvar("lcp_punishment", "0")
    cvar_bantime = register_cvar("lcp_ban_time", "5")
    cvar_immunity = register_cvar("lcp_immunity", "a")
    g_maxplayers = get_maxplayers()
}

public plugin_cfg()
{
    // Start checking players
    set_task(CHECK_FREQ, "do_checks", TASK_DOCHECKS, _, _, "b")
}

public client_putinserver(id)
{
    set_task(16.0, "join_message", id+TASK_JOINMSG)
    g_connected[id] = true
    check_flags(id)
}

public client_authorized(id)
{
    check_flags(id)
}

public client_infochanged(id)
{
    check_flags(id)
}

public client_disconnect(id)
{
    remove_task(id+TASK_JOINMSG)
    g_fluxcounter[id] = 0
    g_losscounter[id] = 0
    g_lastping[id] = 0
    g_immune[id] = 0
    g_connected[id] = false
}

public do_checks()
{
    static id, ping, loss, name[32], auth[32], userid, minutes
    
    for (id = 1; id <= g_maxplayers; id++)
    {
        if (!g_connected[id] || g_immune[id])
            continue;
        
        get_user_ping(id, ping, loss)
        
        if (loss > get_pcvar_num(cvar_loss))
            g_losscounter[id]++
        else if (g_losscounter[id] > 0)
            g_losscounter[id]--
        
        if (g_losscounter[id] >= LOSS_TESTS)
        {
            get_user_name(id, name , sizeof name - 1)
            userid = get_user_userid(id)
            
            switch (get_pcvar_num(cvar_punishment))
            {
                case 1:
                {
                    get_user_authid(id, auth, sizeof auth - 1)
                    minutes = get_pcvar_num(cvar_bantime)
                    
                    if (minutes > 0)
                    {
                        ColorChat(0, GREEN, "^x01[^x04AMXX^x01] %L", LANG_PLAYER, "MSG_ALL_BAN", name, minutes)
                        log_amx("%L", LANG_SERVER, "MSG_ALL_BAN", name, minutes)
                        server_cmd("kick #%d ^"%L^";wait;banid %d ^"%s^";wait;writeid", userid, id, "MSG_TARGET_LOSS", minutes, auth)
                    }
                    else
                    {
                        ColorChat(0, GREEN, "^x01[^x04AMXX^x01] %L", LANG_PLAYER, "MSG_ALL_PBAN", name)
                        log_amx("%L", LANG_SERVER, "MSG_ALL_PBAN", name)
                        server_cmd("kick #%d ^"%L^";wait;banid 0 ^"%s^";wait;writeid", userid, id, "MSG_TARGET_LOSS", auth)
                    }
                }
                case 2:
                {
                    get_user_ip(id, auth, sizeof auth - 1, 1)
                    minutes = get_pcvar_num(cvar_bantime)
                    
                    if (minutes > 0)
                    {
                        ColorChat(0, GREEN, "^x01[^x04AMXX^x01] %L", LANG_PLAYER, "MSG_ALL_BAN", name, minutes)
                        log_amx("%L", LANG_SERVER, "MSG_ALL_BAN", name, minutes)
                        server_cmd("kick #%d ^"%L^";wait;addip %d ^"%s^";wait;writeip", userid, id, "MSG_TARGET_LOSS", minutes, auth)
                    }
                    else
                    {
                        ColorChat(0, GREEN, "^x01[^x04AMXX^x01] %L", LANG_PLAYER, "MSG_ALL_PBAN", name)
                        log_amx("%L", LANG_SERVER, "MSG_ALL_PBAN", name)
                        server_cmd("kick #%d ^"%L^";wait;addip 0 ^"%s^";wait;writeip", userid, id, "MSG_TARGET_LOSS", auth)
                    }
                }
                default:
                {
                    ColorChat(0, GREEN, "^x01[^x04AMXX^x01] %L", LANG_PLAYER, "MSG_ALL_KICK", name)
                    log_amx("%L", LANG_SERVER, "MSG_ALL_KICK", name)
                    server_cmd("kick #%d ^"%L^"", userid, id, "MSG_TARGET_LOSS")
                }
            }
            continue;
        }
        
        if (abs(ping - g_lastping[id]) > get_pcvar_num(cvar_flux))
            g_fluxcounter[id]++
        else if (g_fluxcounter[id] > 0)
            g_fluxcounter[id]--
        
        if (g_fluxcounter[id] >= FLUX_TESTS)
        {
            get_user_name(id, name , sizeof name - 1)
            userid = get_user_userid(id)
            
            switch (get_pcvar_num(cvar_punishment))
            {
                case 1:
                {
                    get_user_authid(id, auth, sizeof auth - 1)
                    minutes = get_pcvar_num(cvar_bantime)
                    
                    if (minutes > 0)
                    {
                        ColorChat(0, GREEN, "^x01[^x04AMXX^x01] %L", LANG_PLAYER, "MSG_ALL_BAN", name, minutes)
                        log_amx("%L", LANG_SERVER, "MSG_ALL_BAN", name, minutes)
                        server_cmd("kick #%d ^"%L^";wait;banid %d ^"%s^";wait;writeid", userid, id, "MSG_TARGET_FLUX", minutes, auth)
                    }
                    else
                    {
                        ColorChat(0, GREEN, "^x01[^x04AMXX^x01] %L", LANG_PLAYER, "MSG_ALL_PBAN", name)
                        log_amx("%L", LANG_SERVER, "MSG_ALL_PBAN", name)
                        server_cmd("kick #%d ^"%L^";wait;banid 0 ^"%s^";wait;writeid", userid, id, "MSG_TARGET_FLUX", auth)
                    }
                }
                case 2:
                {
                    get_user_ip(id, auth, sizeof auth - 1, 1)
                    minutes = get_pcvar_num(cvar_bantime)
                    
                    if (minutes > 0)
                    {
                        ColorChat(0, GREEN, "^x01[^x04AMXX^x01] %L", LANG_PLAYER, "MSG_ALL_BAN", name, minutes)
                        log_amx("%L", LANG_SERVER, "MSG_ALL_BAN", name, minutes)
                        server_cmd("kick #%d ^"%L^";wait;addip %d ^"%s^";wait;writeip", userid, id, "MSG_TARGET_FLUX", minutes, auth)
                    }
                    else
                    {
                        ColorChat(0, GREEN, "^x01[^x04AMXX^x01] %L", LANG_PLAYER, "MSG_ALL_PBAN", name)
                        log_amx("%L", LANG_SERVER, "MSG_ALL_PBAN", name)
                        server_cmd("kick #%d ^"%L^";wait;addip 0 ^"%s^";wait;writeip", userid, id, "MSG_TARGET_FLUX", auth)
                    }
                }
                default:
                {
                    ColorChat(0, GREEN, "^x01[^x04AMXX^x01] %L", LANG_PLAYER, "MSG_ALL_KICK", name)
                    log_amx("%L", LANG_SERVER, "MSG_ALL_KICK", name)
                    server_cmd("kick #%d ^"%L^"", userid, id, "MSG_TARGET_FLUX")
                }
            }
            continue;
        }
        
        g_lastping[id] = ping
    }
}

public join_message(taskid)
{
    ColorChat(ID_JOINMSG, GREEN, "^x01[^x04AMXX^x01] %L", ID_JOINMSG, "JOIN_MSG", get_pcvar_num(cvar_flux), get_pcvar_num(cvar_loss))
}

check_flags(id)
{
    new flags[6]
    get_pcvar_string(cvar_immunity, flags, charsmax(flags))
    g_immune[id] = get_user_flags(id) & read_flags(flags)
}

[en]
JOIN_MSG = Players with a lame connection will be punished (ping flux limit: !g%d!n, loss limit: !g%d).
MSG_ALL_KICK = !t%s!y was kicked for his lame connection.
MSG_ALL_BAN = !t%s!y was banned %d minutes for his lame connection.
MSG_ALL_PBAN = !t%s!y was permanently banned for his lame connection.
MSG_TARGET_LOSS = Your connection is loosing too many packets.
MSG_TARGET_FLUX = Your ping is too unstable.

текст не отображается в чате как надо, help :)
в логах

L 08/28/2011 - 22:30:06: Invalid multi-lingual line (file "cstrike\addons\amxmodx\data\lang\lame_connection_punisher.txt" line 1)

Отредактировал: Dale, - 28.8.2011, 21:40
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
FixX
сообщение 28.8.2011, 21:50
Сообщение #2
Стаж: 15 лет

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

сохрани ланг-файл в utf-8 без BOM
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Factor
сообщение 28.8.2011, 22:15
Сообщение #3


Стаж: 14 лет

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

Цитата(FixX @ 28.8.2011, 21:50) *
сохрани ланг-файл в utf-8 без BOM


Зачем? Там язык английский, смысла нет.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
FixX
сообщение 28.8.2011, 22:32
Сообщение #4
Стаж: 15 лет

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

тогда ищи где-то была тема недавно про колорчат + ланг
автор ZZZombie
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Factor
сообщение 28.8.2011, 23:10
Сообщение #5


Стаж: 14 лет

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

Color chat

#include Прикрепленный файл  chatcolor.inc.rar ( 258 байт ) Кол-во скачиваний: 4


Применение:
Код
ColorChat(id, GREY, "текст")
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя pike
сообщение 29.8.2011, 5:23
Сообщение #6


Стаж: 18 лет

Сообщений: 956
Благодарности: выкл.

Цитата(Dale @ 28.8.2011, 22:34) *
текст не отображается в чате как надо, help :)
в логах

L 08/28/2011 - 22:30:06: Invalid multi-lingual line (file "cstrike\addons\amxmodx\data\lang\lame_connection_punisher.txt" line 1)

Чем открываешь lame_connection_punisher.txt ? Посмотри другим текст. редактором, на первой строке влез какой то символ.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dale
сообщение 29.8.2011, 7:49
Сообщение #7


Стаж: 14 лет

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

Сам исходник правильный? Да?
У меня есть сомнения в этой строке ColorChat(ID_JOINMSG, GREEN, "^x01[^x04AMXX^x01] %L", ID_JOINMSG, "JOIN_MSG", get_pcvar_num(cvar_flux), get_pcvar_num(cvar_loss))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
FixX
сообщение 29.8.2011, 9:01
Сообщение #8
Стаж: 15 лет

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

Цитата(Dale @ 29.8.2011, 8:49) *
Сам исходник правильный? Да?
У меня есть сомнения в этой строке ColorChat(ID_JOINMSG, GREEN, "^x01[^x04AMXX^x01] %L", ID_JOINMSG, "JOIN_MSG", get_pcvar_num(cvar_flux), get_pcvar_num(cvar_loss))

убери колорчат, поставь худ внизу экрана по центру или обычные сообщения, и будет счастье
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dale
сообщение 29.8.2011, 9:58
Сообщение #9


Стаж: 14 лет

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

Не понял
LaFA, Rejiser помогайте :D
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Racoon
сообщение 29.8.2011, 10:01
Сообщение #10


Стаж: 18 лет

Сообщений: 1757
Благодарностей: 1523
Полезность: 1116

Cкачай нормальный инклуд colorchat.inc и наведи порядок тут:
==>
Цитата
[en]
JOIN_MSG = Players with a lame connection will be punished (ping flux limit: %d, loss limit: %d).
MSG_ALL_KICK = %s was kicked for his lame connection.
MSG_ALL_BAN = %s was banned %d minutes for his lame connection.
MSG_ALL_PBAN = %s was permanently banned for his lame connection.
MSG_TARGET_LOSS = Your connection is loosing too many packets.
MSG_TARGET_FLUX = Your ping is too unstable.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dale
сообщение 29.8.2011, 10:08
Сообщение #11


Стаж: 14 лет

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

Цитата(Racoon @ 29.8.2011, 11:01) *
Cкачай нормальный инклуд colorchat.inc и наведи порядок тут:
==>

Можешь показать пример порядка, у меня этот инклуд..
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Racoon
сообщение 29.8.2011, 10:16
Сообщение #12


Стаж: 18 лет

Сообщений: 1757
Благодарностей: 1523
Полезность: 1116

Цитата(Dale @ 29.8.2011, 11:08) *
Можешь показать пример порядка, у меня этот инклуд..
Выше указал.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dale
сообщение 29.8.2011, 10:31
Сообщение #13


Стаж: 14 лет

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

Цитата(Racoon @ 29.8.2011, 11:16) *
Выше указал.

Какими символами в ланговом файле цветной чат?=/
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Racoon
сообщение 29.8.2011, 10:34
Сообщение #14


Стаж: 18 лет

Сообщений: 1757
Благодарностей: 1523
Полезность: 1116

Цитата(Dale @ 29.8.2011, 11:31) *
Какими символами в ланговом файле цветной чат?=/
Да зачем? Просто скопируй что я написал и вставь в ланг.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Dale
сообщение 29.8.2011, 10:44
Сообщение #15


Стаж: 14 лет

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

Цитата(Racoon @ 29.8.2011, 11:34) *
Да зачем? Просто скопируй что я написал и вставь в ланг.

Мне надо что бы ник был цветным в ланг файле, а максимальный пинг и потери тоже цветным ^_^
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя H@ROS
сообщение 29.8.2011, 12:06
Сообщение #16


Стаж: 14 лет

Сообщений: 102
Благодарностей: 17
Полезность: 134

Не используй инклад колорчата, а пользуйся сток−функцией.

Отредактировал: H@ROS, - 29.8.2011, 12:10
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Yes I Do Not
сообщение 29.8.2011, 17:47
Сообщение #17


Стаж: 15 лет

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

Dale,
Цитата(Dale @ 29.8.2011, 11:44) *
Мне надо что бы ник был цветным в ланг файле, а максимальный пинг и потери тоже цветным ^_^


!g - ^4 - green (зелёный)
!n - ^1 - normal (стандартный)
!t - ^3 - team color GREY, TEAM_COLOR, RED, BLUE

Отредактировал: MicroSD, - 29.8.2011, 17:49
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Тема закрытаНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: