PtokaX 0.5.2.1 mod 2:

Добавлено: Функция Core.SendAsUser, позволяющая отправить данные от имени юзера. Функция не была дописана до конца и ее нельзя вызывать из функций-событий, поскольку это может привести к зависанию хаба.
Исправлено: Переписан код таймеров под *NIX, способный при некоторых условиях приводить к зависанию хаба.
Удалено: Конвертер текста, преобразующий строки в UTF-8 перед сохранением их в базу данных.
Исправлено: Ошибки в версии, хранящей инфоромацию о юзерах в MySQL.
Изменено: Версии для Windows по умолчанию используют MySQL вместо SQLite.
Добавлено: Запоминание активной вкладки в окне настроек.
Добавлено: Настройки баз данных в GUI.
Исправлено: В сборке x64 отключено использование больших адресов. Как результат - в сборке нельзя использовать библиотеки, предназначенные для оригинальной PtokaX 0.5.2.1.
Изменено: Список стран IP-To-Country: Добавлены коды стран, названия стран переведены на русский.


PtokaX 0.5.2.1 mod:

GUI:

Добавлено: Опция, позволяющая менять интервал между служебными циклами. Уменьшение интервала снижает скорость отклика хаба на действия юзеров, однако это также приводит к некоторому повышению нагрузки на процессор. В GUI данная опция находится на вкладке "Больше настроек". ID для SetMan.(G/S)etNumber - 115.
Добавлено: Ограничение продолжительности временных банов. В GUI данная опция находится на вкладке "Настройки банов". ID для SetMan.(G/S)etNumber - 114.
Исправлено: Окончательное решение вопроса локалей. Теперь локаль устанавливается изнутри Ptokax. В связи с этим былы добавлены 2 параметра настроек. ID для SetMan.(G/S)etString - 37 (Windows) и 38 (NIX). В GUI доступна только локаль Windows. Поскольку в Windows локаль устанавливается только для текущего модуля (т.е. выполняем setlocale() в PtokaX.exe - локаль меняется только для PtokaX.exe, выполняем setlocale() в lua.dll - локаль меняется только для lua.dll), необходимость в скрипте locale.lua никуда не делась.
Удалено: Бессмысленная опция "Отключать клиенты, отправляющие $Supports с ошибками". При ближайшем рассмотрении выяснилось, что "ошибками" считается лишний пробел в конце команды. Код, отвечающий за определение этой "ошибки" сохранен, поскольку он влияет на обработку магического байта, и в этом, возможно, есть некий смысл.
Добавлено: Опция, позволяющая отключить обработку магического байта. При включении данной опции заработает отображение пола в GreylinkDC, но могут появиться ошибки коммуникации между разными клиентами, поскольку при использовании старшей половины байта каждый разработчик DC-клиента извращался как мог.
Исправлено: Установка размеров окон при различных размерах системных шрифтов.
Добавлено: Блокировка неизвестных команд. Отключается на вкладке "Дополнительно".
Добавлено: Возможность отключения сжатия zlib. Отключается на вкладке "Больше настроек".
Изменено: Профиль по умолчанию для юзеров, регистрируемых с помощью GUI.
Добавлено: Возможность отключения приветствия (Этот хаб работает под управлением...). Включается на вкладке "Дополнительно" Имя параметра в настройках - ShowWelcome, ID для SetMan.(S/G)etBool - 57.
Изменено: Положение и размеры кнопок на вкладке "Статистика".
Добавлено: Возможность отключения отображения трассировки стека Lua в ошибках скриптов.
Изменено: Отключение проверки ключа вынесено в настройки.
Добавлено: Возможность включения/отключения задержки перед отправкой $Lock.


API:

Добавлено: События BadPassArrival и ValidateDenideArrival.
Добавлено: Параметр bZPipe, отображающий поддержку юзером сжатия. Код для Core.GetUserData - 64
Добавлено: Функция print. В GUI-версии функция выводит текст в окно ошибок скриптов, в консольной - в главный чат юзерам с профилем Master.
Добавлено: Функции Core.GetDCStats, Core.GetNetStats.
Добавлено: Альтернативный синтаксис для функции регистрации бота: Core.RegBot(sNick, sMyINFOString, bHaveKey). Полная проверка синтаксиса $MyINFO не производится.
Добавлено: Функция Core.BotMyINFO(sBotNick, sBotMyINFO), позволяющая изменить $MyINFO бота, зарегистрированного из скрипта. Полная проверка синтаксиса $MyINFO не производится.
Добавлено: Функция RegMan.UpdateTimes(), обновляющая значения iLastEnter и iOnlineTime в профилях зарегистрированных юзеров, находящихся на хабе. iOnlineTime вычисляется с учетом текущего времени и значения iLastEnter, а iLastEnter устанавливается равным текущему времени.
Добавлено: Функция RegMan.SetTimes(sNick, iRegDate, iLastEnter, iOnlineTime), позволяющая вручную установить время регистрации, время последнего входа и время онлайн для указанного зарегистрированного юзера.
Добавлено: Функция Core.HideUserKey(tUser, bHide), позволяющая скрыть ключ юзера.
Добавлено: Функция Core.IsolateUser(tUser, bState), позволяющая изолировать юзера от главного чата. Изолированный юзер не видит сообщений других юзеров, а они, соответственно, не видят сообщения изолированного юзера.
Добавлено: Функция Core.SendToNonisolated(sData), отправляющая данные всем неизолированным юзерам (см. предыдущий пункт). Используется аналогично Core.SendToAll(sData).
Добавлено: Функция Core.HideUser(tUser, bHide), позволяющая скрыть юзера из списка.
Добавлено: Функция Core.UserNoQuit(tUser, bState), позволяющая подавить команду $Quit при выходе юзера. Кому-то функция может показаться бессмысленной, однако я знаю наверняка, для чего я ее добавил. Возможно, и вы когда-нибудь узнаете :).
Добавлено: В профиль зарегистрированного юзера добавлены дата регистрации, дата последнего входа и один текстовый параметр для хранения произвольных данных. В связи с этим в таблицу зарегистрированного юзера были добавлены поля iRegDate, iLastEnter и sCustom. Для установки поля sCustom используется функция RegMan.SetCustom(sNick, sString). Поле sCustom может отсутствовать.
Добавлено: Переменная iOnlineTime, отображающая время, проведенное зарегистрированным юзером на хабе (в секундах). Переменная обновляется при выходе юзера, а также при вызове RegMan.UpdateTimes() (см. ниже).
Добавлено: Возможность получения названия страны по коду с помощью функции IP2Country.GetCountryName.


Исправления:

Изменено: Отныне юзеры с одинаковыми профилями не смогут банить друг друга. Данное изменение не относится к юзерам с профилем 0 (Master): эти засранцы по-прежнему могут банить кого угодно.
Изменено: Время последнего входа зарегистрированного юзера обновляется не только при его входе на хаб, но и при выходе.
Исправлено: При нажатии кнопки "Принять" настройки не сохранялись в файл (подозреваю, что кое-кто считает это фичей, а не багом :)).
Исправлено: Самодеятельность TinyXML, касающаяся обработки пустых символов. Несколько пустых символов подряд заменялись одним пробелом. По непонятной причине неразрывный пробел также считался пустым символом.
Изменено: При сохранении настроек в файл записываются все параметры, а не только те, значения которых отличаются от значений по умолчанию.
Исправлено: Отключение клиентов, использующих NAT Traversal (перенесено из репозитория PPA).


Хаки и костыли:

Устранено мелькание окна консоли при вызове функций os.execute и io.popen.
Добавлено: Костыль, исправляющий регистрочувствительность кириллических ников в некоторых версиях Linux. По умолчанию отключен, включается в stdinc.h
Исправлено: Функция os.clock под Linux. Теперь она работает так же, как под Windows - возвращает время с момента запуска хаба с точностью до миллисекунды. По умолчанию данный костыль включен, отключается в stdinc.h.


Компиляция:

Изменено: Для версии x86 под Windows метод вызова функций изменен на cdecl, что позволило испльзовать библиотеки, предназначенные для Lua-AIO и RusHub.
Изменено: В сборках x86 под Windows отключено использование инструкций SSE для совместимости с некоторыми не очень свежими процессорами от AMD.


Прочее:

Добавлено: Автозапуск скрипта locale.lua.
Добавлено: Команда !reloadcountry, позволяющая перезагрузить базы IP-To-Country. Команда доступна юзерам с профилем 0.
Изменено: При корректной остановке хаба всем юзерам рассылается сообщение о перезапуске. Раньше это сообщение отправлялось лишь при выполнении команды !restart.
Исправлено: Кодировка, указанная в заголовках XML-файлов.
Изменено: К черту бинарный бред. Список зарегистрированных юзеров, профили и баны снова хранятся в файлах XML.
Добавлено: Проверка прав доступа для команды !stats.
Добавлено: Версия PtokaX, хранящая пароли в зашифрованном (SHA-256) виде.
Изменено: Настройки по умолчанию. Строковые параметры переведены на русский.
Добавлено: Сообщения об ошибках скриптов отправляются операторам.
Исправлено: При загрузке настроек из файла строковые настройки заменялись настройками по умолчанию в тех случаях, когда длина сохраненной строки равна нулю, а длина строки по умолчанию больше нуля. По этой причине в предыдущих версиях мода было невозможно переключить язык на английский, а в оригинальной версии - удалить адрес перенаравления.


TODO:

Исправлено: Если хаб не смог запуститься (например, по причине занятости всех указанных портов), настройки будут сохранены, что даст возможность исправить их.


...or not TODO:

Добавлено: Настройка прав доступа для незарегистрированных юзеров.
