ReHLDS/HLDS [3.5] Admin Loader

Inline

Пользователь
Регистрация
8 Июн 2017
Сообщения
220
Симпатии
91
Пол
Мужской
#1
Автор: @neygomon

Всем привет.
Давно просили запилить admin loader для fresh bans от маздана..
В итоге, меня это задолбало, что много жалоб на корявую работу лоадера от Данила, и вот что из этого вышло.. :D
А теперь это еще и официальный admin loader для бансистемы Lite Bans

Требования:
  • MySQL
  • ReAPI/FakeMeta (на выбор)
Особенности:
  • Имеется исходник
  • Грузит админов из MySQL.
  • Исправлена бага маздана с "Голосование начато"
  • Изменен принцип коннекта с БД. Не должен крашиться сервер, если нет коннекта.
  • Не грузит истекшие(на момент обновления) админки.
  • Если недоступна БД, то после 3-х попыток установить соединение грузится файл users.ini, который обновляется при каждом успешном запросе(amx_reloadadmins например)
  • В логи amxmodx пишет ник администратора, который указан у Вас в Админ-листе( актуально для тех админов, которые ники меняют как перчатки, а руками искать лень :D )
  • Совместимость с AdminLoader от Mazdan. Не придется переделывать плагин, если используется форвард amxx_admin_access(id, flags, expired)
Доступные команды:
  • amx_reloadadmins - перезагрузить список админов. Доступ ADMIN_CFG
Настройки:
PHP:
#define CUSTOM_DEF_FLAG    // Добавляет квар amx_default_access

// #define USE_DEFAULT_AMXX_FORWARD    // Если используете fakemeta, не рекомендуется включать    
// Если есть ReAPI , то будет использоваться он, независимо от этой настройки
*Возможна работа без MySQL, используя users.ini с кастомным синтаксисом
"<auth>" "<pass>" "<flags>" "<auth flags>" "<nickname>" "<date end OR lifetime>"

Для кодеров:
  • al_codding_example.sma - пример работы для
C++:
native admin_expired(id);             // return -1, 0 or timestamp expired
native amxbans_get_expired(id);     // support AmxBans RBS by SKAJIbnEJIb
native adminload_get_expired(id);   // support Admin Load by Fant0M

forward client_admin(id, flags);
forward amxx_admin_access(id, flags, expired_timestamp); // support Admin Loader by mazdan
Плагин взят с my-amxx
 

Вложения

Последнее редактирование модератором:

SFGMobile

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
225
Симпатии
80
Пол
Мужской
#2
В плагине строка 79 #define PLUGIN_VERSION "2.6.2" -> #define PLUGIN_VERSION "2.7"

Рекомендую в строке 305 изменить:
for(new i, sFlags[30], Hash[34], password[32], aSize = ArraySize(g_aUsers); i < aSize; i++)
на
for(new i, sFlags[30], Hash[34], password[33], aSize = ArraySize(g_aUsers); i < aSize; i++)

Связано с тем, что некоторые "готовые" скрипты по продаже випок и админок разрешают устанавливать пароль до 32-х знаков. При установке пароля в 32 знака (а такие найдутся), плагин будет отфутболивать на пароле.
 

d3m37r4

Постоялец
Регистрация
8 Июн 2017
Сообщения
504
Симпатии
245
Пол
Мужской
VKcom
id109544387
Telegram
@dmitry_isakow
#4
Можете подсказать как с помощью кастомных флагов админку запилить на два сервера с одной базы, вроде бы neygomon про это говорил в старой теме.
 

neygomon

Его Темнейшество :j
Разработчик
Регистрация
8 Июн 2017
Сообщения
826
Симпатии
380
Пол
Мужской
#5
d3m37r4, просто создаешь еще одну админку с таким же steamid/ip/nick. ну я так думаю :)
 

SFGMobile

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
225
Симпатии
80
Пол
Мужской
#6
Можете подсказать как с помощью кастомных флагов админку запилить на два сервера с одной базы, вроде бы neygomon про это говорил в старой теме.
Если Вам нужны админы, которые берутся из одной базы и могут быть админами на обоих серверах, то такой костыль. Нужно заменить функцию adminSql(id):
Код:
adminSql(id){if(g_iServerId == -1){console_print(id, "[Load Admins] Server id not valid! Please, wait...");}else{g_Data[0] = LoadAdmins;g_Data[1] = id;formatex(g_szQuery, charsmax(g_szQuery),"SELECT `steamid`, `password`, `nickname`, `access`, `flags`, `expired` FROM `%s_amxadmins` WHERE (`days` = '0' OR `expired` > UNIX_TIMESTAMP(NOW()))",g_szSqlData[Prefix]);SQL_ThreadQuery(g_hSqlTuple, "SQL_Handler", g_szQuery, g_Data, sizeof(g_Data));}}
У меня такое было реализовано на версии 2.6.2.
Чтобы разделить админов по серверам, простой откат на оригинальный плагин.

ИЛИ (в версии 2.7):

в строку 13 вставляем:
Код:
#define AdminsOnAnyServers //Если раскоммертировать, то админам будут даваться привелегии на всех серверах.
в строку 280 вставляем:
Код:
#if defined AdminsOnAnyServers
    adminSql(id){if(g_iServerId == -1){console_print(id, "[Load Admins] Server id not valid! Please, wait...");}else{g_Data[0] = LoadAdmins;g_Data[1] = id;formatex(g_szQuery, charsmax(g_szQuery),"SELECT `steamid`, `password`, `nickname`, `access`, `flags`, `expired` FROM `%s_amxadmins` WHERE (`days` = '0' OR `expired` > UNIX_TIMESTAMP(NOW()))",g_szSqlData[Prefix]);SQL_ThreadQuery(g_hSqlTuple, "SQL_Handler", g_szQuery, g_Data, sizeof(g_Data));}}
#else
в строку 310 вставляем:
Код:
#endif
Это нужно проверять, сам не смотрел.
 
Последнее редактирование: SFGMobile

sonyx

Заблокированные
Регистрация
8 Июн 2017
Сообщения
490
Симпатии
229
#7
d3m37r4, я так понимаю вам нужно разные флаги на 1 админа на разных серверах?
Если да, то ничего в коде менять не надо. При заполнении custom_flags, они имеют приоритет над основными, НО они не добавляются, а заменяют, т.е. нужно указать полностью новые флаги доступа.
 

d3m37r4

Постоялец
Регистрация
8 Июн 2017
Сообщения
504
Симпатии
245
Пол
Мужской
VKcom
id109544387
Telegram
@dmitry_isakow
#8
sonyx, нет, флаги одинаковые будут, просто необходимо с одной таблицы брать админов для двух серверов.
SFGMobile, спасибо, попробую позже.
 

sonyx

Заблокированные
Регистрация
8 Июн 2017
Сообщения
490
Симпатии
229
#9
d3m37r4, а если на втором сервере прописать lb_server_ip первого? он подгрузит админов первого по идее
 

neygomon

Его Темнейшество :j
Разработчик
Регистрация
8 Июн 2017
Сообщения
826
Симпатии
380
Пол
Мужской

SFGMobile

Заблокированные
Пользователь
Регистрация
8 Июн 2017
Сообщения
225
Симпатии
80
Пол
Мужской
#12
Упс, ошибся...
 
Последнее редактирование: SFGMobile

KoSt9N

Пользователь
Регистрация
8 Июн 2017
Сообщения
245
Симпатии
4
#13
а админ лодер будет с фрешбансом работать?
 

sonyx

Заблокированные
Регистрация
8 Июн 2017
Сообщения
490
Симпатии
229
#15
neygomon, предлагаю оптимизацию плагина. Позволит исключить 1 лишнее обращение к БД и убрать функцию QueryServerId

Если adminSql сразу обращаться с подзапросом такого вида:
PHP:
        formatex(g_szQuery, charsmax(g_szQuery), "SELECT \
            `amxadmins`.`steamid`, \
            `amxadmins`.`password`, \
            `amxadmins`.`nickname`, \
            `amxadmins`.`access`, \
            `amxadmins`.`flags`, \
            `amxadmins`.`expired`, \
            `admservers`.`custom_flags` \
            FROM `%s_amxadmins` AS `amxadmins`, `%s_admins_servers` AS `admservers` \
            WHERE `admservers`.`admin_id` = `amxadmins`.`id` \
                AND `admservers`.`server_id` = ( \
                    SELECT \
                    `id` \
                    FROM `%s` \
                    WHERE `address` = '%s' \
                    ) \
                AND (`amxadmins`.`days` = '0' OR `amxadmins`.`expired` > UNIX_TIMESTAMP(NOW()))",
            g_szSqlData[Prefix], g_szSqlData[Prefix], g_szSqlData[ServerInfo], g_szServerData[IP]
        );
То отдельный запрос в БД для получения ID сервера отпадает)
 

neygomon

Его Темнейшество :j
Разработчик
Регистрация
8 Июн 2017
Сообщения
826
Симпатии
380
Пол
Мужской

d3m37r4

Постоялец
Регистрация
8 Июн 2017
Сообщения
504
Симпатии
245
Пол
Мужской
VKcom
id109544387
Telegram
@dmitry_isakow
#17
А если вообще не запрашивать ид сервера? Просто брать записи из таблицы. Тогда получается на нескольких серверах могут админки работать?:)
 

neygomon

Его Темнейшество :j
Разработчик
Регистрация
8 Июн 2017
Сообщения
826
Симпатии
380
Пол
Мужской
#18

Вложения

sonyx

Заблокированные
Регистрация
8 Июн 2017
Сообщения
490
Симпатии
229
#19
d3m37r4, да, но тогда теряется смысл заданной структуры таблиц. Изначально подразумевается поддержка нескольких серверов.
16 Июн 2017
neygomon, полевые испытания пройдены)
 

neygomon

Его Темнейшество :j
Разработчик
Регистрация
8 Июн 2017
Сообщения
826
Симпатии
380
Пол
Мужской
#20
sonyx, ты проверил? работает?;)