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]));
}
}
Константы общих сообщений об ошибках, а функции запрещают игроку\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");
}
}
}
Данные записываются на консоли, но не записывается в файл, если это для вас проблема, пожалуйста скажите об этом.
Также обратите внимание, что, поскольку некоторые из этих нововведений хороши сервера и работают так быстро, что даже если perpertrator запрещены после первой, еще будет несколько десятков / сотен больше, прежде чем соединение потеряется.
[HR][/HR]
SetTimer(Ex)
Эти функции не очень точные, и они не правильно поддерживают строки и массивы. Обе эти проблемы в настоящее время зафиксированы в меру своих способностей.
Следует отметить, что точность все еще немного не по причине "сна" вызов на сервер внутренне, но они гораздо лучше.
Я также улучшили свои показатели за счет использования «std:
Примечание При передаче массивов, как с "CallLocalFunction" Вы должны следовать массиву с его длине в качестве дополнительного параметра или система не имеет возможности узнать, насколько она велика:
PHP:
SetTimerEx("func", 1000, 0, "ai", arr, sizeof (arr));
Вам даже не нужно перекомпилировать мод, чтобы использовать новые версии, просто используйте плагин.
Я также добавил две новые функции:
PHP:
SetTimer_("func", 100, 1000, -1);
SetTimerEx_("func", 100, 1000, -1, "i", 42);
Эти версии функции имеют больше контроля над тем, что вы можете сделать.
Есть теперь два временных параметра - начальная задержка и интервал.
Таким образом, вышеуказанные функции будут вызваны после 100 мс, а затем каждые 1000 мс после этого. Это полезно, если у вас есть несколько глобальных таймеров, чтобы они не все бегали в то же время:
PHP:
SetTimer_("global1", 250, 1000, -1);
SetTimer_("global2", 500, 1000, -1);
SetTimer_("global3", 750, 1000, -1);
SetTimer_("global4", 1000, 1000, -1);
Те, таймеры, все работают один раз в 1 секунду, но все будут смещены относительно друг друга на 250 мс. Эта функция была уже представленной y_timers, но теперь более родной. Кроме того, "повтор" параметра ("-1" выше) в настоящее время является COUNT. Так что, если вы используете:
PHP:
SetTimer_("global1", 250, 1000, 4);
Тогда эта функция будет работать ровно четыре раза и не более того. Вы можете установить этот параметр "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;
Download
Скачать исходники .dll и .so:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Обратите внимание что версия Linux не была скомпелированна.
Новая версия:
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
Последнее редактирование модератором:
