SB-MaterialAdmin / NewServer

New server side for SourceBans Material Admin
GNU General Public License v3.0
42 stars 26 forks source link

Вопрос про блокировку коммуникаций #82

Open MAGNAT2645 opened 4 years ago

MAGNAT2645 commented 4 years ago

Сразу скажу на всякий случай, я не профи в SourcePawn (особенно когда дело доходит до всяких запросов к БД). У меня такой небольшой (возможно глупый) вопрос по поводу того, как работает проверка на наличие мута/гага. Почему работает только что-то одно (если они существуют отдельно у одного и того же игрока)? Нет никакого способа вызывать "двойной" (или 2 запроса) запрос при подключении игрока, а потом уже сверять результаты? (Т.е. если плагин нашёл и мут и гаг, менять значение MuteType на 3, чтобы был сайленс)

Просто бывают такие случаи, когда нужно выдать мут какому-то засранцу, а он потом начинает ещё писать всякую дичь в чат. В таком случае приходится удалять мут и ставить сайленс, чтобы работал мут+гаг.

И ещё, я понимаю, что сделать хорошую связь с RCON довольно трудно, но почему при выдаче бана через веб игрок легко находится и его кикает с серва, а с мутом/гагом такое не прокатывает?

MAGNAT2645 commented 4 years ago

У меня теперь вообще не работают команды sm_gag, sm_silence. Всё ввожу правильно (через консоль серва), а никакого ответа не приходит. В БД гаг/мут не появляется, ошибки не выводит.

megoRU commented 4 years ago

image Все работает.

MAGNAT2645 commented 4 years ago

Вот именно, что ReplyToCommand работает, а когда команду ввёл (указав userid цели, длительность и причину), то никакого ответа не приходит обратно.

megoRU commented 4 years ago

Тогда дело мб в настройках: databases.cfg

image

Вообще советую начисто поставить MA. Но копию .cfg сделать малоли.

MAGNAT2645 commented 4 years ago

Я перекомпилировал новую версию (0.7.9) с MADEBUG 1, в логах теперь пишет все отправляемые запросы в БД. Это говорит о том, что настройки все стоят правильные.

megoRU commented 4 years ago

мб проблема в бд?.

MAGNAT2645 commented 4 years ago

Вряд ли, учитывая, что мои приватные плагины спокойно отправляют запросы и получают результаты. С банами проблем никаких нет. Через Веб прекрасно распознаёт игрока (на серве ли он) и кикает его. С Мутом/Гагом такое не работает, поэтому если выдавать мут/гаг через Веб, то он только в БД добавляет блокировку, а на серве ничего не блокируется.

Ну, и недавно появились проблемы именно с консольными командами. Через админ-меню на серве всё прекрасно работает, через веб, как я уже сказал, работает только бан корректно, команды через RCON ничего не пишут и не добавляют блокировку.

Правда, т.к. я перекомпилил плагин с MADEBUG, надо будет попробовать ещё раз, мб в логи что запишет (в логи плагина именно, в логи ошибок SM ничего не пишет).

megoRU commented 4 years ago

тут SM обновили по поводу MySQL

https://github.com/alliedmodders/sourcemod/commit/9cd4f9c210fc94e07c9025fbbd459ed

на всякий случай скину.

MAGNAT2645 commented 4 years ago

Благодарю. Только мне кажется, что это никаким образом не повлияет на текущие проблемы, описанные выше.

megoRU commented 4 years ago

я скомпилировал под новый SM там довольно много изменилось по размеру файла. Хотя компилил недавно

MAGNAT2645 commented 4 years ago

В общем, могу подтвердить, что даже при выдаче через админ-панель на игровом сервере, гаг/мут не срабатывает и после перезахода игрок продолжает использовать текстовый/голосовой чат.

Запись в БД создалась:

L 12/23/2019 - 18:59:32: [materialadmin.smx] Create bd: client ≠°「AkIHiŖo」°≠, target Новогоднi Джэнос, Type 5, MuteType 0
L 12/23/2019 - 18:59:32: [materialadmin.smx] create bd: INSERT INTO `sb_comms` (`authid`, `name`, `created`, `ends`, `length`, `reason`, `aid`, `adminIp`, `sid`, `type`) VALUES ('STEAM_0:0:22224189', 'Новогоднi Джэнос', UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + 0, 0, '1.0 + 1.1 + Несогласие с правилами', IFNULL((SELECT aid FROM sb_admins a INNER JOIN sb_admins_servers_groups asg ON (a.aid = asg.admin_id AND asg.server_id = 1) WHERE (a.authid REGEXP '^STEAM_[0-9]:0:212252126$') LIMIT 1), 0), 'STEAM_0:0:212252126', 1, 2)

Ну и из LogAction тоже L 12/23/2019 - 18:59:32: [materialadmin.smx] add gag: Новогоднi Джэнос type 2, time 0

А вот при подключении/перезаходе игрока (вроде как?):

L 12/24/2019 - 07:54:32: [materialadmin.smx] CheckClientMute: set Новогоднi Джэнос, time 0, end time -46500, type 2
L 12/24/2019 - 08:00:39: [materialadmin.smx] Checking ban for: STEAM_0:1:447533493. QUERY: SELECT a.`bid`, a.`length`, a.`created`, a.`reason`, b.`user` FROM `sb_bans` a LEFT JOIN `sb_admins` b ON a.`aid` = b.`aid` WHERE ((a.`type` = 0 AND a.`authid` REGEXP '^STEAM_[0-9]:1:447533493$') OR (a.`type` = 1 AND a.`ip` = '{АЙПИ}') OR (a.`type` = 0 AND a.`ip` = '{АЙПИ}')) AND (a.`length` = 0 OR a.`ends` > UNIX_TIMESTAMP()) AND a.`RemoveType` IS NULL LIMIT 1 

Скрыл IP в запросе Немного смущает отрицательное значение end time в CheckClientMute (хотя, позже заглянув в код, я вроде частично понял, почему так происходит), причём оно бывает разное (и походу оно увеличивается):

L 12/24/2019 - 12:07:26: [materialadmin.smx] CheckClientMute: set Новогоднi Джэнос, time 0, end time -61674, type 2
L 12/24/2019 - 17:35:36: [materialadmin.smx] CheckClientMute: set Новогоднi Джэнос, time 0, end time -81364, type 2
L 12/24/2019 - 21:55:46: [materialadmin.smx] CheckClientMute: set Новогоднi Джэнос, time 0, end time -96974, type 2

Что здесь может быть не так?

MAGNAT2645 commented 4 years ago

Как я понял, гаг блокирует сообщения в чате с помощью OnClientSayCommand. Так вот, может попробовать заменить return Plugin_Handled на return Plugin_Stop (в basecomm используется именно Plugin_Stop, а тот же SB++, как мы знаем, срабатывает лишь при вызове basecomm'овских команд), чтобы полностью заблокировать какие-либо внутриигровые вызовы? изображение

Я попробую сделать это и перекомпилировать. Если что-то изменится, отпишусь.

MAGNAT2645 commented 4 years ago

Заметил кое-что новое, в SourceBans стоит гаг (его и выдавали) изображение

но серверный плагин ставит игроку мут вместо гага:

L 01/19/2020 - 20:21:29: [materialadmin.smx] CheckClientMute: set AFFLICTIONMANE, time 0, end time -5004182, type 1
L 01/19/2020 - 20:21:29: [materialadmin.smx] add mute: AFFLICTIONMANE type 1, time 0

Это как?

MAGNAT2645 commented 4 years ago

Походу из-за этого не выполняется проверка

    if (g_iTargetMuteType[iClient] > 1)
    {
        char sLength[128];
        FormatVrema(iClient, g_iTargenMuteTime[iClient], sLength, sizeof(sLength));
        PrintToChat2(iClient, "%T", "Target no text chat", iClient, sLength, g_sTargetMuteReason[iClient]);
        return Plugin_Stop;
    }

и игрок с гагом может писать в чат.

Будет фикс для такой фигни?

MAGNAT2645 commented 4 years ago

Повторно выдал гаг через админ-меню в игре, в итоге у игрока теперь сайленс (т.е. в SourceBans стоял гаг, но серверный плагин определил как мут, а мут + гаг дают сайленс в итоге)

В SourceBans, кстати, сайленс не появился (остался гаг). Это только серверный плагин так решил

L 01/19/2020 - 20:36:14: [materialadmin.smx] add silence: AFFLICTIONMANE type 3, time 1814400
L 01/19/2020 - 20:36:21: [materialadmin.smx] format time (AFFLICTIONMANE)  1814400: days 21, hours 0, minutes 0, sec 0
MAGNAT2645 commented 4 years ago

Прошло очень много времени, а я так и не понял как исправить основной баг (и все проблемы выше). В SB у игрока отображает пермаментный Silence, но он почему-то может в игре писать в чат.

Прошу заметить, что я давным-давно отключил такие плагины как MuteCheck (но этот плагин по логике никак не влияет на баг т.к. в нём используется только функция IsClientMuted).

@CrazyHackGUT, прости за беспокойство, но можешь пересмотреть проблемы выше (особенно эту) ?

A1mDev commented 2 years ago

@MAGNAT2645, проблема в том что в базе данных несколько записей, а должны быть установлены несколько флагов и одна запись, я так понимаю, если у тебя мут и гаг должно быть значение в type = 3. Сейчас там 2 записи в одной type = 1, в другой type = 2.