
Стаж: 14 лет
Сообщений: 97
Благодарностей: 35
Полезность: 276
|
Цитата(Developer @ 19.5.2014, 6:15)  Vasabla, не вижу смысла в твоей затее, но тебе решать, на что тратить время  Прост люди смотрят слишком узко. Это ведь не просто банс. Это связка модулей (сейчас их 8) которые предоставляют API для других плагинов. Чтобы стало понятноее что это, опишу модули: MySQL: Управляет подключением в MySQL, ничего особенного. Код:
/* * Вызывается при изменении стотояния MySQL * * Параметр Handle tuple Данные для подключения к MySQL * Параметр Handle connection Подключение к MySQL * Параметр bool is_available Доступна ли сейчас база данных * * Возвращаемые значение игнорирует */ forward uip_mysql_status_changed(Handle:tuple, Handle:connect, bool:is_available);
/* * Проверяет возможность подключения к MySQL и записывает ошибку Thread-запроса в лог * * Параметр Handle:query Указатель на запрос * Параметр string error_text Текст ошибки * Параметр int error_code Код ошибки * Параметр int fail_sate Причина ошибки (см. sqlx.inc) * Параметр string module Названия модуля * * Ничего не возвращает */ native uip_mysql_thread_error(Handle:query, const error_text[], error_code, fail_state = TQUERY_QUERY_FAILED, const module[]);
/* * Проверяет возможность подключения к MySQL и записывает ошибку Execute-запроса в лог * * Параметр Handle:query Указатель на запрос * Параметр string module Названия модуля * * Ничего не возвращает */ native uip_mysql_execute_error(Handle:query, const module[]);
/* * Добавляет данные в статистику запросов * * Параметр int count Количество запросов * Параметр Float seconds Затраченное время * * Ничего не возвращает */ native uip_mysql_push_stats(count, Float:seconds);
/* * Callback-функция для Thread-запросов, которые не требуют обработки результата */ public uip_mysql_callback(fail_state, Handle:query, const error_text[], error_code, const data[], size, Float:seconds) { if(fail_state) { uip_mysql_thread_error(query, error_text, error_code, fail_state, __UIP_MODULE_NAME__); } else { uip_mysql_push_stats(1, seconds); } } Lang: управляет языками и переводами. Все переводы лежат в MySQL, можно редактировать через веб-сайт. Менюшка выбора языка для игроков (т.е. замена multilingual) Код:
/* * Запрашивает загрузку перевода * Перевод должен лежать в файле %data%/lang/uip/%module%.lng или в базе данных * * Параметр string module Название модуля * * Ничего не возвращает */ native uip_lang_load(const module[]); Config: управляет настройками модулей. Все настройки, опять же, лежат в MySQL, можно редактировать через веб-сайт. Делает бекап в файл, позвоялет изменять на лету. Код:
/* * Вызывается, когда конфиг загружен * Советую использовать этот форвард для конфигурации модулей * Поскольку функции set/get медленные * * Параметр string module Модуль, для которого предназначена конфигурация * Параметр string key Ключ * Параметр string value Значение * * Позвращаемые значения игнорирует */ forward uip_config_loaded(const module[], const key[], const value[]);
/* * Запрашивает загрузку конфигурации модуля * Конфиг должен иметь путь %configs%/uip/%module%.cfg либо храниться в базе данных * * Параметр string module Название модуля * * Ничего не возвращает */ native uip_config_load(const module[]);
/* * Проверяет существует ли конфигурация * * Параметр string module Название модуля * Параметр string key Ключ, можно не указывать, чтобы проверить загружена ли вообще конфигурация для модуля * * Возвращает bool true или false */ native bool:uip_config_exists(const module[], const key[] = "");
/***** !!! ВАЖНО !!! ***** uip_config_(get/set)_*() сделаны "на всякий случай" и работают сравнительно медленно! get еще терпимо, но к set нужно относиться очень осторожно, особенно к параметру save Предпочтительно кэшировать настройки у себя в модуле из uip_coinfig_loaded() ***** !!! ВАЖНО !!! *****/
/* * Получает числовое значение настройки * * Параметр string module Название модуля * Параметр string key Ключ * * Возвращает int Значение настройки */ native uip_config_get_int(const module[], const key[]);
/* * Получает значение настройки с плавающей запятой * * Параметр string module Название модуля * Параметр string key Ключ * * Возвращает Float Значение настройки */ native Float:uip_config_get_float(const module[], const key[]);
/* * Получает значение настройки в виде строки * * Параметр string module Название модуля * Параметр string key Ключ * Параметр string value Переменная, куда сохранить строку * Параметр int len Максимальная длинна строки * * Возвращает int Длинна настройки */ native uip_config_get_string(const module[], const key[], value[], len);
/* * Задает числовое значение настройки * * Параметр string module Название модуля * Параметр string key Ключ * Параметр int value Значение * Параметр int save Как сохранить изменение? (см. Начало файла) * Параметр int global Как глобально сохранить изменение? (см. Начало файла) * Параметр bool pending Отложить сохранение настройки до вызова uip_config_save() * * Ничего не возвращает */ native uip_config_set_int(const module[], const key[], value, save = UIP_CONFIG_SAVE_NONE, global = UIP_CONFIG_GLOBAL_SAME, bool:pending = true);
/* * Задает значение настройки с плавающей запятой * * Параметр string module Название модуля * Параметр string key Ключ * Параметр Float value Значение * Параметр int save Как сохранить изменение? (см. Начало файла) * Параметр int global Как глобально сохранить изменение? (см. Начало файла) * Параметр bool pending Отложить сохранение настройки до вызова uip_config_save() * * Ничего не возвращает */ native uip_config_set_float(const module[], const key[], Float:value, save = UIP_CONFIG_SAVE_NONE, global = UIP_CONFIG_GLOBAL_SAME, bool:pending = true);
/* * Задает значение настройки строкой * * Параметр string module Название модуля * Параметр string key Ключ * Параметр string value Значение * Параметр int save Как сохранить изменение? (см. Начало файла) * Параметр int global Как глобально сохранить изменение? (см. Начало файла) * Параметр bool pending Отложить сохранение настройки до вызова uip_config_save() * * Ничего не возвращает */ native uip_config_set_string(const module[], const key[], const value[], save = UIP_CONFIG_SAVE_NONE, global = UIP_CONFIG_GLOBAL_SAME, bool:pending = true);
/* * Сохраняет отложенные изменения настроек * * Не принимает параметров * * Ничего не возвращает */ native uip_config_save(); Server: авторизирует сервер, выдаёт через API уникальный идентификатор, по которому можно хранить различные данные в MySQL (напр. мониторинг) Код:
/* * Сервер авторизировался * * Параметр int id Индекс сервера в базе данных * Параметр string salt Уникальная соль сервера для хэш-функций * * Возвращаемое значение игнорирует */ forward uip_server_authorized(id, const salt[]);
/* * Вызывается, когда сервер де-авторизировался * В нормальных условиях вызов идет из plugin_end() * * Не передает параметров * * Возвращаемое значение игнорирует */ forward uip_server_unauthorized(); Players: авторизирует игроков, выдаёт уникальный идентификатор, по которому можно хранить различные данные в MySQL. Код:
/* * Игрок прислал пакет подключения * * Параметр string name Имя игрока * Параметр string cdkey CD-Key * * Позвращаемые значения игнорирует */ forward uip_player_connection(const name[], const cdkey[]);
/* * CD-Key присвоен игроку * * Параметр int id Индекс игрока * Параметр string cdkey CD-Key * * Позвращаемые значения игнорирует */ forward uip_player_cdkey(id, const cdkey[]); /* * Игрок прошёл авторизацию * * Параметр int id Индекс игрока * Параметр int account Номер аккаунт * * Позвращаемые значения игнорирует */ forward uip_player_authorized(id, account);
/* * Игрок вышел с аккаунта * В нормальных условиях вызывается из client_disconnect() * * Параметр int id Индекс игрока * * Позвращаемые значения игнорирует */ forward uip_player_unauthorized(id);
/* * Игрока не удалось авторизировать * * Параметр int id Индекс игрока * * Позвращаемые значения игнорирует */ forward uip_player_failed(id);
/* * Возврашает номер аккаунта игрока * * Параметр int id Индекс игрока * * Возвращает int Номер аккаунта или 0 */ native uip_get_player_id(id); Privileges: Привилегии пользователей. Замена понятия "админка" на "привилегия". Выдаёт флаги доступа пакетами (т.е. пресетами) на определённое время (снимает прям на сервере). Можно выдавать несколько привилений на 1 аккаунт с разным временем действия (будут скомбинированные флаги). Можно активировать/продлевать привилегии ключами. Можно выдавать глюбально/локально. Есть бекап в файл. Код:
/* * Игрок получил привилегии * * Параметр int id Индекс игрока * Параметр bool cache Авторизирован из кэша? * * Возвращаемое значение игнорирует */ forward uip_privilege_authorized(id, bool:cache);
/* * У одной из привилегий закончился срок действия * * Параметр int id Индекс игрока * * Возвращаемое значение игнорирует */ forward uip_privilege_expired(id);
/* * Игрок активировал привилегию * * Параметр int id Индекс игрока * * Возвращаемое значение игнорирует */ forward uip_privilege_activated(id);
/* * Получает остаток времени флагов * * Параметр int id Индекс игрока * Параметр int flags Флаги (можно несколько, учитываються все сразу!) * * Возвращает int Секунды или UIP_PT_INFINITE */ native uip_get_flags_timeleft(id, flags);
/* * Получает остаток времени флагов в виде остатка времени * * Параметр int id Индекс игрока * Параметр int flags Флаги (можно несколько, учитываються все сразу!) * Параметр int lang Индекс игрока, для которого форматировать остаток (LANG_* или id) * Параметр string output Переменная, куда сохранить вывод * Параметр int len Максимальная длинна результата * * Возвращает int Длинна результата */ native uip_get_flags_timeleft_length(id, flags, lang, output[], len);
/* * Пере-авторизирует игрока * * Параметр int id Индекс игрока * * Ничего не возвращает */ native uip_privileges_force_reauth(id); Servers: мониторинг серверов, менюшка редиректа. Умеет редиректить с полного сервера. Есть возможность ожидания слота/включения сервера. Есть возможность задать приоритет выбора сервера для редиректа. Код:
// Статус сервера #define UIP_SI_SERVER_FULL -1 // Переполнен #define UIP_SI_SERVER_OFFLINE -2 // Выключен #define UIP_SI_SERVER_THIS -3 // Этот #define UIP_SI_SERVER_INVALID -4 // Ошибка #define UIP_SI_SERVER_PASSWORDED -5 // Под паролем
// Ячейки информации о сервере enum uip_serverinfo_cell { UIP_SI_QNUIQUE_ID, // Уникальный индекс UIP_SI_PLAYERS, // Количество игроков UIP_SI_SLOTS, // Количество слотов UIP_SI_ONLINE // Включен ли он? };
enum uip_serverinfo_string { UIP_SI_NAME, // Имя UIP_SI_IP, // IP UIP_SI_MAP, // Карта UIP_SI_PASSWORD // Пароль }
/* * Игрок будет перенаправлен на другой сервера * * Параметр int id Индекс игрока * Параметр int server Локальный индекс сервера * Параметр bool manual Игрок сам перенаправил себя? * Параметр int uid Уникальный индекс сервера * * Прерывается на UIP_STOP */ forward uip_servers_redirecting(id, server, bool:manual, uid);
/* * Список серверов обновлён * * Параметр int count Количество серверов * * Возвращаемое значение игнорирует */ forward uip_servers_updated(count);
/* * Игрок был перенаправлен сюда с другого сервера * * Параметр int id Индекс ирока * Параметр int server Локальный индекс сервера * Параметр int uid Уникальный индекс сервера * * При возврате UIP_STOP меню возврата не будет отображено */ forward uip_servers_redirected_from(id, server, uid);
/* * Получает cell-значение информации о сервере * * Параметр int id Индекс сервера * Параметр uip_serverinfo_cell column Ячейка информации * Параметр bool uid Передан уникальный индекс сервера? * * Возвращает cell Значение или 0 */ native any:uip_get_server_info_cell(id, uip_serverinfo_cell:column, bool:uid = false);
/* * Получает строковое значение информации о сервере * * Параметр int id Индекс сервера * Параметр uip_serverinfo_string column Ячейка информации * Параметр string output Переменная, куда сохранить значения * Параметр int len Максимальная длинна значения * Параметр bool uid Передан уникальный индекс сервера? * * Возвращает int Размер значения */ native uip_get_server_info_string(id, uip_serverinfo_string:column, output[], len, bool:uid = false);
/* * Устанавливает cell-значение информации о сервере * * Параметр int id Индекс сервера * Параметр uip_serverinfo_cell column Ячейка информации * Параметр any value Значение * Параметр bool uid Передан уникальный индекс сервера? * * Возвращает bool true или false */ native bool:uip_set_server_info_cell(id, uip_serverinfo_cell:column, any:value, bool:uid = false);
/* * Устанавливает строковое значение информации о сервере * * Параметр int id Индекс сервера * Параметр uip_serverinfo_string column Ячейка информации * Параметр string value Значение * Параметр bool uid Передан уникальный индекс сервера? * * Возвращает bool true или false */ native bool:uip_set_server_info_string(id, uip_serverinfo_string:column, const value[], bool:uid = false);
/* * Получает статус сервера * * Параметр int id Индекс сервера * Параметр bool uid Передан уникальный индекс сервера? * * Возвращает int Статус сервера или локальный индекс (>= 0) */ native uip_get_server_status(id, bool:uid = false);
/* * Получает локальный индекс сервера * * Параметр int uid Уникальный индекс сервера * * Возвращает int Локальный индекс сервера или UIP_SI_SERVER_INVALID */ native uip_get_server_id(uid);
/* * Обновляет список серверов * * Не принимает параметров * * Ничего не возвращает */ native uip_force_servers_update();
/* * Перенаправляет игрока на другой сервер * Может быть прервано в uip_servers_redirecting() * * Параметр int id Индекс игрока * Параметр int server Индекс сервера * Параметр bool manual Игрок сам перенаправил себя? * Параметр bool uid Передан уникальный индекс сервера? * * Возвращает bool true или false */ native uip_force_client_redirect(id, server, bool:maunal = false, bool:uid = false); Bans: Система банов. Ввод/выбор времени и причины. Можно ограничить время бана и причины по флагам. Можно банить как на одном так и на всех серверах. Меню откоючённых игроков. Скриншот. Компактное и расширенное (пошаговое) меню. .inc файл еще не слепил. Всё это уже написано, сейчас делаем веб-морду. P.S. А для любителей солёных стимидов - всё это задумывалось, когда солей в дпрото еще и впланах не было.
Отредактировал: Vasabla, - 19.5.2014, 12:28
|