Фикс от STEAM_ID_STOP_IGNORING_RETVALS

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Вот начал писать фикс от данной проблемы, которая в последнее время терроризирует сервера CS:Source v91.

Но есть 1 ошибочка которую я не знаю как исправить.
L 03/07/2020 - 20:40:35: [SM] Exception reported: Invalid timer handle 3500209 (error 3)
L 03/07/2020 - 20:40:35: [SM] Blaming: Auth Exploit Fix.smx
L 03/07/2020 - 20:40:35: [SM] Call stack trace:
L 03/07/2020 - 20:40:35: [SM] [0] KillTimer
L 03/07/2020 - 20:40:35: [SM] [1] Line 53, F:\SourcePawn 1.10\addons\sourcemod\scripting\Auth Exploit Fix.sp::OnClientDisconnect
public void OnClientDisconnect(int client)
{
if (authClientTimer[client] != null)
{
KillTimer(authClientTimer[client]);
authClientTimer[client] = null;
}
}

Уже пробовал переписать, но ничего не помогает.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #2
Внутри самого таймера хендл должен занулливаться в конце работы. Этого, судя по всему, не происходит.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #4
Внутри таймера просто делать authClientTimer[client] = null перед завершением
Я не могу показать на явном примере, не видя сам таймер.
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
Внутри таймера просто делать authClientTimer[client] = null перед завершением
Я не могу показать на явном примере, не видя сам таймер.
C-подобный:
public void OnClientConnected(int client)

{

    if (cvarDisableNonAuthedSpam.BoolValue && !IsFakeClient(client))

    authClientTimer[client] = CreateTimer(2.0, AuthCheckTimer, GetClientUserId(client), TIMER_REPEAT);

}

public Action AuthCheckTimer(Handle timer, int userid)

{

    int client = GetClientOfUserId(userid);

    char auth[24];

    if (!GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)) || StrContains("STEAM_ID_STOP_IGNORING_RETVALS", auth, false) != -1)

    {

        if (IsPlayerAlive(client))

        {

            ChangeClientTeam(client, 1);

            PrintToChat(client, "Ваш клиент не идентифицирован! Пожалуйста, переподключитесь!");

        }

        BaseComm_SetClientGag(client, true);

        BaseComm_SetClientMute(client, true);

        ServerCommand("namelockid %d 1", userid);

    }

    else

    return Plugin_Stop;

    return Plugin_Continue;

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

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #6
C-подобный:
public Action AuthCheckTimer(Handle timer, int userid)
{
    int client = GetClientOfUserId(userid);
    if (client == 0) return;
    char auth[24];

    if (!GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)) || StrContains("STEAM_ID_STOP_IGNORING_RETVALS", auth, false) != -1)
    {
        if (IsPlayerAlive(client))
        {
            ChangeClientTeam(client, 1);
            PrintToChat(client, "Ваш клиент не идентифицирован! Пожалуйста, переподключитесь!");
        }

        BaseComm_SetClientGag(client, true);
        BaseComm_SetClientMute(client, true);
        ServerCommand("namelockid %d 1", userid);
    }

    authClientTimer[client] = null;
}
В следующий раз, пожалуйста, в код оборачивай:
1583607655731.png
 

xyligan

Паркетный пол трещит под моей крышкой черепной
Сообщения
900
Реакции
432
C-подобный:
public Action AuthCheckTimer(Handle timer, int userid)
{
    int client = GetClientOfUserId(userid);
    if (client == 0) return;
    char auth[24];

    if (!GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth)) || StrContains("STEAM_ID_STOP_IGNORING_RETVALS", auth, false) != -1)
    {
        if (IsPlayerAlive(client))
        {
            ChangeClientTeam(client, 1);
            PrintToChat(client, "Ваш клиент не идентифицирован! Пожалуйста, переподключитесь!");
        }

        BaseComm_SetClientGag(client, true);
        BaseComm_SetClientMute(client, true);
        ServerCommand("namelockid %d 1", userid);
    }

    authClientTimer[client] = null;
}
В следующий раз, пожалуйста, в код оборачивай:
Посмотреть вложение 53534
Хорошо, спасибо.
 

Tavian

Участник
Сообщения
1,184
Реакции
119
Ребят есть рабочий вариант ловить таких ? STEAM_ID_STOP_IGNORING_RETVALS
 

Tavian

Участник
Сообщения
1,184
Реакции
119
Такие игроки появляются еще?

Подробнее про эту проблему опишите, что это за игроки? Через читы они это делают?
Сегодня зашёл такой кадр , админы увидели и скопировали его
Игрок Phonkmane [STEAM_ID_STOP_IGNORING_RETVALS] [188.232.8.235] покинул игру.
.
Проблема в том , у меня баны идут по стим айди , если будет таких кадров больше , то с ними как бороться ?
 

Dragokas

Добрая душа
Сообщения
229
Реакции
213
Такое вроде бывает, когда стим сервис отваливается.
Как вариант, ловить в OnClientAuthorized() и записывать в локальный кеш (не проверял).
Потом когда нужно банить, брать стим игрока из кеша.
 

Dragokas

Добрая душа
Сообщения
229
Реакции
213
Это да. А как только им станет хорошо, она в автоматическом режиме не вызывается?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #15
Вызовется. Только к тому моменту игрока может уже не быть на сервере. Всё, что от него реально можно сохранить, пока он на сервере - ник и айпишник.
 

Dragokas

Добрая душа
Сообщения
229
Реакции
213
Тогда есть хоть какой-то шанс.
Получается, что если в OnClientAuthorized() хоть раз попадёт валидный SteamId, мы его сохраним,
и если GetClientAuthId() в момент бана вернёт STEAM_ID_STOP_IGNORING_RETVALS, то мы подставим правильный.

Еще как вариант, записывать "на карандаш" IP, и искать соответствие со SteamId при следующих заходах игрока с этого же IP.
(можно конечно легко нарваться на фолсы).
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #17
если в OnClientAuthorized() хоть раз попадёт валидный SteamId
Он там только валидный и попадёт. Невалидный туда никогда не зайдёт. Ну, если у админа не стоит эмулятор, конечно. С эмулятором может быть всё что угодно.
 
Сверху Снизу