PDA

Просмотр полной версии : [Вопрос] Коннект игрока



Kamigakuro
23.12.2016, 23:15
Сегодня у меня появилось еще 2 вопроса:
1. Захожу на сервер, далее "gmx", серв релогается, конекчусь, но TogglePlayerSpectating не срабатывает (использую для скрытия стрелок). В чем может быть проблема?
2. Почему после релога через собейт не вызываются OnPlayerRequestClass и OnPlayerSpawn? Меня тупа спавнит на нулевых координатах в сидодже.
Код не скинул потому что пока без понятия какая именно часть нужна)

Mike_World
23.12.2016, 23:18
Скинь саму команду gmx

Kamigakuro
23.12.2016, 23:25
В консоли прописываю

Mike_World
23.12.2016, 23:26
В консоли прописываю
Скинь логи

Kamigakuro
23.12.2016, 23:29
Там ничего нету кроме моего incomming connection и join

vovandolg
23.12.2016, 23:32
Создатели собейтов специально так криво писали их чтобы ты задал эти вопросы тут.

Kamigakuro
23.12.2016, 23:36
Ну хорошо, тогда как мне это дело отследить и сделать что-нибудь с персонажем?
И да, первый вопрос до сих пор актуален, как и второй.

vovandolg
23.12.2016, 23:55
Я вот не помню что первее срабатывает OnPlayerDisconnect или OnGameModeExit
Если OnGameModeExit, то впаять перебор игроков туда и оффать режимы слежек перед рестартом.

- - - Добавлено - - -


Ну хорошо, тогда как мне это дело отследить и сделать что-нибудь с персонажем?

Сервер для читов делаешь? Тогда не чем не помогу в этом плане))

Kamigakuro
24.12.2016, 00:07
Так зачем перебор, если слежка и так выключена?


Сервер для читов делаешь? Тогда не чем не помогу в этом плане))
Вот сейчас не понял) Меня просто не устраивает то, что игрока спавнит в центре карты с сиджеем.

DeimoS
24.12.2016, 00:46
Я вот не помню что первее срабатывает OnPlayerDisconnect или OnGameModeExit
Если OnGameModeExit, то впаять перебор игроков туда и оффать режимы слежек перед рестартом.

Естественно OnPlayerDisconnect. Иначе ты бы, как минимум, не получал бы в консоль сообщение о том, что все игроки отсоединились, когда ты делаешь рестарт. Ну и сохранение аккаунтов не срабатывало бы.



Автор, с собейтом могут быть конкретно индивидуальные проблемы (то бишь, эта проблема связана с кривой реализацией релога именно в той версии собейта, что ты используешь).
Залогируй не только эти коллбэки, а вообще все, которые помогут отловить состояние игрока (OnPlayerConnect, OnPlayerRequestClass, OnPlayerRequestSpawn, OnPlayerSpawn, OnPlayerStateChange, OnPlayerDisconnect).
Но я практически уверен, что это кривая реализация релога в самом собейте (возможно там просто отсылаются не все нужные пакеты, поэтому SA-MP и неправильно обрабатывает всё)

Kamigakuro
24.12.2016, 00:57
Попробую пологировать, но в данный момент первый вопрос для меня более важен. Есть идеи?

Nexius_Tailer
24.12.2016, 02:26
А почему сервер вообще важно рестартить именно через gmx?
Выключай и включай его заново, если такой проблемы в этом случае не наблюдается

Kamigakuro
24.12.2016, 12:48
А почему сервер вообще важно рестартить именно через gmx?
Выключай и включай его заново, если такой проблемы в этом случае не наблюдается

Таким способом не вариант ибо игрока просто кикает с сервера, что мне как раз и не нужно.

Upd.
Решил почекать PlayerState и вот что вышло:
Реконнект собейтом:


[11:49:47] [connection] 127.0.0.1:60493 requests connection cookie.
[11:49:48] [connection] incoming connection: 127.0.0.1:60493 id: 0
[11:49:48] [join] Test_One has joined the server (0:127.0.0.1)
[11:49:48] [debufinfo] OnPlayerConnect(0)
[11:49:48] [debufinfo] GetPlayerState(0)
[11:49:48] [debufinfo] GetPlayerState CheckRegister(0)
[11:49:49] [debufinfo] GetPlayerState Camera(9)
[11:49:50] [debufinfo] GetPlayerState dLogin(9)
[11:49:50] [debufinfo] GetPlayerState LoadPlayer(9)
[11:50:18] [part] Test_One has left the server (0:1)


Обычный коннект здорового человека:


[11:50:38] [connection] 127.0.0.1:53516 requests connection cookie.
[11:50:39] [connection] incoming connection: 127.0.0.1:53516 id: 0
[11:50:39] [join] Test_One has joined the server (0:127.0.0.1)
[11:50:39] [debufinfo] OnPlayerConnect(0)
[11:50:39] [debufinfo] GetPlayerState(0)
[11:50:39] [debufinfo] GetPlayerState CheckRegister(0)
[11:50:39] [debufinfo] GetPlayerState Camera(9)
[11:50:42] [debufinfo] GetPlayerState dLogin(9)
[11:50:42] [debufinfo] GetPlayerState LoadPlayer(9)
[11:50:42] [debufinfo]OnplayerRequestClass(0, 0)
[11:50:42] [debufinfo] GetPlayerState RequestClass(9)
[11:50:42] [DebugInfo] OnPlayerSpawn was called.


Еще заметил такую вещь при рестарте, во-первых, игроков не дисконнектит в консоли (мб так и должно быть), а после рестарта, если игра свернута происходит такая вещь:


[11:56:04] Number of vehicle models: 0
[11:56:04] [debufinfo] OnPlayerConnect(0)
[11:56:04] [debufinfo] GetPlayerState(0)
[11:56:04] [debufinfo] GetPlayerState CheckRegister(0)
[11:56:05] [debufinfo] GetPlayerState Camera(0)
[11:56:12] [part] Test_One has left the server (0:2)

То есть нету сообщения коннекта игрока.

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

DeimoS
24.12.2016, 14:56
Ну, как видиш, не вызывается OnPlayerRequestClass. Дело, вероятнее всего, в коде.
Можно попробовать насильно вызывать OnPlayerRequestClass подобным образом

//Это при авторизации
TogglePlayerSpectating(playerid, false);
ForceClassSelection(playerid);
TogglePlayerSpectating(playerid, true);
TogglePlayerSpectating(playerid, false);
Но не факт, что всё будет работать так, как надо. Вероятно тут просто кривой обход выбора скина.

Kamigakuro
24.12.2016, 23:07
В общем, полностью избавился от TogglePlayerSpectating при входе, геморойное дело, и избавился от RequestClass, спавня игрока на прямую.
Насчет собейта, в OnPlayerStateChange поставил проверку на изменение состояния с проверкой на логин (playerlogged) игрока, и теперь тупа кикаю кривожопых собейтеров)
В принципе можно закрывать.