Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info
  • Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

Include fixes2 by Y_Less

Kazon

Компетентный
fixes 2​
Updated 13/01/13​

Y_Less: Я решил написать защиту\исправления для серверов в "Fixes.inc" он хорош для некоторых вещей, но другие было легче сделать в plugin'e

Exploits

Некоторые виды защиты показаны в консоли сервера, но на самом деле они не были заблокированы. До сих пор не было ничего, что вы могли бы делать с этим, однако, теперь вы можете:

PHP:
public OnServerMessage(const msg[])
{
    if (!strcmp(msg, ERROR_INVALID_CLIENT, false, 31))
    {
        FIXES_SilentBanIP(FIXES_ReadIp(msg[31]));
    }
    else if (!strcmp(msg, ERROR_RCON_EXPLOIT, false, 37))
    {
        FIXES_SilentBanIP(FIXES_ReadIp(msg[37]));
    }
    else if (!strcmp(msg, ERROR_PLAYER_DIALOG, false, 40))
    {
        FIXES_SilentBanPlayer(strval(msg[40]));
    }
    else if (!strcmp(msg, ERROR_DIALOG_CRASH, false, 59))
    {
        FIXES_SilentBanPlayer(strval(msg[59]));
    }
    else if (!strcmp(msg, ERROR_PACKET_MODIFIED, false, 33))
    {
        FIXES_SilentBanPlayer(strval(msg[33]));
    }
    else if (!strcmp(msg, ERROR_PORT_REFUSED, false, 32))
    {
        FIXES_SilentBanPlayer(strval(msg[32]));
    }
    else if (!strcmp(msg, ERROR_BLOCKING, false, 9) && strfind(msg, ERROR_SERVER_FULL) != -1)
    {
        FIXES_SilentBanIP(FIXES_ReadIp(msg[9]));
    }
}
Этот plugin добавляет новую функцию обратного вызова "OnServerMessage", который вызывается каждый "print", за исключением случаев и вызывает изнутри этот обратный вызов.
Константы общих сообщений об ошибках, а функции запрещают игроку\IP без их уведомления о том, что они запрещены.
Обратите внимание, что эта функция также требует Sscanf, но ввести некоторые другие интересные варианты:

PHP:
public OnServerMessage(const msg[])
{
    if (!strcmp(msg, "sscanf warning: ", false, 16))
    {
        if (!strcmp(msg[16], "String buffer overflow."))
        {
            SendClientMessage(gLastPlayer, X11_RED, "Please type something shorter");
        }
    }
}
Существует еще одна небольшая проблема с этим - В настоящее время код ПОЛНОСТЬЮ отключает "server_log.txt".
Данные записываются на консоли, но не записывается в файл, если это для вас проблема, пожалуйста скажите об этом.
Также обратите внимание, что, поскольку некоторые из этих нововведений хороши сервера и работают так быстро, что даже если perpertrator запрещены после первой, еще будет несколько десятков / сотен больше, прежде чем соединение потеряется.
[HR][/HR]
SetTimer(Ex)

Эти функции не очень точные, и они не правильно поддерживают строки и массивы. Обе эти проблемы в настоящее время зафиксированы в меру своих способностей.
Следует отметить, что точность все еще немного не по причине "сна" вызов на сервер внутренне, но они гораздо лучше.
Я также улучшили свои показатели за счет использования «std::priority_queue", так что следующие таймеры для запуска всегда находятся в верхней части списка.
Примечание При передаче массивов, как с "CallLocalFunction" Вы должны следовать массиву с его длине в качестве дополнительного параметра или система не имеет возможности узнать, насколько она велика:
PHP:
SetTimerEx("func", 1000, 0, "ai", arr, sizeof (arr));
Эти функции не изменились в любом случае, "0" до сих пор означает "запустить один раз", все остальное по-прежнему означает "работать вечно".
Вам даже не нужно перекомпилировать мод, чтобы использовать новые версии, просто используйте плагин.

Я также добавил две новые функции:
PHP:
SetTimer_("func", 100, 1000, -1);
SetTimerEx_("func", 100, 1000, -1, "i", 42);
[HR][/HR]
Эти версии функции имеют больше контроля над тем, что вы можете сделать.
Есть теперь два временных параметра - начальная задержка и интервал.
Таким образом, вышеуказанные функции будут вызваны после 100 мс, а затем каждые 1000 мс после этого. Это полезно, если у вас есть несколько глобальных таймеров, чтобы они не все бегали в то же время:
PHP:
SetTimer_("global1", 250, 1000, -1);
SetTimer_("global2", 500, 1000, -1);
SetTimer_("global3", 750, 1000, -1);
SetTimer_("global4", 1000, 1000, -1);
[HR][/HR]
Те, таймеры, все работают один раз в 1 секунду, но все будут смещены относительно друг друга на 250 мс. Эта функция была уже представленной y_timers, но теперь более родной. Кроме того, "повтор" параметра ("-1" выше) в настоящее время является COUNT. Так что, если вы используете:
PHP:
SetTimer_("global1", 250, 1000, 4);
[HR][/HR]
Тогда эта функция будет работать ровно четыре раза и не более того. Вы можете установить этот параметр "0", но в отличие от обычной версии, это означает «Никогда не беги" и, таким образом, бессмысленно! "-1" Означает "работать вечно". native для этих функций являются:
PHP:
native SetTimer_(const func[], const delay, const interval, const count);
native SetTimerEx_(const func[], const delay, const interval, const count, const format[], {Float, _}:...);
native KillTimer_(timer) = KillTimer;
[HR][/HR]
Download

Скачать исходники .dll и .so:


Обратите внимание что версия Linux не была скомпелированна.

Новая версия:
 
Последнее редактирование модератором:
Сверху Снизу