Ловит STEAM_ID_PENDING

Nekro

Терра инкогнита
Сообщения
4,025
Реакции
2,260
Плагин периодически не может определить верный стим, такое ощущение что он иногда просто не успевает это сделать при коннекте игрока.

C-подобный:
public Action Connect(Handle event, const char[] name, bool dontBroadcast)
{
    GetEventString(event, "networkid", sSteam, sizeof(sSteam));
}

В итоге он пишет что стим игрока STEAM_ID_PENDING и опять же не всегда, но хотелось бы от этого избавиться.
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
вместо хука ивента "player_connect" используй OnClientPostAdminCheck Forward. Только в этом форварде гарантировано получить стим. Конечно исключение если серваки стима упали или форвард и вовсе не вызвал если какой то плагин блокирует на этапе Pre.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #3
Только в этом форварде гарантировано получить стим
Уже в OnClientAuthorized() можно получить гарантированно, но документация SM явно на эту тему сообщает, что этот форвард будет вызван неизвестно когда, но однозначно раньше OnClientPreAdminCheck().
 

dr lex

Участник
Сообщения
22
Реакции
5
Уже в OnClientAuthorized() можно получить гарантированно, но документация SM явно на эту тему сообщает, что этот форвард будет вызван неизвестно когда, но однозначно раньше OnClientPreAdminCheck().
События OnClientPreAdminCheck достаточно, так как после него ещё 10-15 сек есть до того как игрок полностью зайдет в игру.
 

Madness aka null138

Участник
Сообщения
713
Реакции
734
Уже в OnClientAuthorized() можно получить гарантированно, но документация SM явно на эту тему сообщает, что этот форвард будет вызван неизвестно когда, но однозначно раньше OnClientPreAdminCheck().
если так говорить, то можно даже раньше этого форварда получить, гарантированно и точно. я например так делаю через расширение, чтобы исправлять некоторые баги которые на момент OnClientAuthorized уже поздно предотвратить.
это просто дело вкуса, но OnClientPostAdminCheck однозначно лучше для получение стимов(игрок может выходить, не дождавшись полного подключение. лишний раз получить стим не желательно). Это самый последний форвард который вызывается после подключение, исключение только редкие случаи с OnClientCookiesCached Forward.
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • #6
События OnClientPreAdminCheck достаточно, так как после него ещё 10-15 сек есть до того как игрок полностью зайдет в игру.
OnClientPreAdminCheck() будет вызван лишь тогда, когда игрок будет и авторизован (OnClientAuthorized()), и закончит стадию загрузки материалов и уже будет показываться MOTD (OnClientPutInServer()).
С чего вы сделали вывод, что до полного захода есть ещё 10-15 секунд - я не имею понятия.
Поделитесь источниками?

Я вот например опираюсь на документацию по "событиям, связанным с игроками" и на исходный код SM (раз (см. конкретно последние строчки (751-754)); два; три (2502-2505)).
 
Сверху Снизу