Итак, некогда делал регистрацию с использованием MySQL и столкнулся с такой проблемой, как "выбор класса игрока". В простонародье это "стрелки и кнопка Spawn". Разберемся же откуда эта кнопка берется:
некогда "всемиуважаемый" мистер Kalcor создал, незвестно из каких побуждений, функцию, с помощью которой игрок сможет выбирать себе class и после этого по нажатию кнопки Spawn без труда спавнится. В чем собственно суть этой проблемы: сейчас, исходя из форума, люди делают или пытаются делать сервера-проекты с режимом RP в 90% случаев, где эта функция и не нужна вовсе. Самое интересное, что данная вещь вызывается всего в 3 случаях:
1. При Connect'е игрока к серверу.
2. При "смерти" игрового персонажа в игре.
3. При принудительной смене class'а нажатием клавиши F3 в игре ( не столь важный случай ).
Итак, чем же нам мешает данная "полезная" функция: все дело в том, что когда игрок заходит на сервер, то практически у всех вызывается в public OnPlayerConnect проверка на регистрацию и вне зависимости от результата проверки, снизу будут эти самые весьма не полезные клавиши.
Кому-то они мешают просто интуитивно, а кому-то и тем, что даже если игрок не прошел успешно PlayerLogin, он сможет "бегать по серверу" ( если были не вызваны проверки на Logged игрока ).
В интернете множество уроков и решений по этому поводу, но ни один из них не идеален и ни один из них не описывает такую ситуацию в полной мере.
В связи с этим я попытался разобраться и пришел к своему решению.
Лично в своем коде я использую такую последовательность: connect player -> check name player on register ( register/login ) -> выбор скина игрока -> spawn. Естественно, что эти кнопки я видеть не хочу, поэтому решил поступить вот так:
В public OnPlayerRequestClass вставляем такое значение:
После многих споров, я решил протестировать и подтвердить свои слова, что использование true в OnPlayerRequestClass вызывает Spawn игрока - да, действительно, так оно и есть. Безусловно, это интересный случай, но об этом я подумаю позже.PHP код:
SetSpawnInfo(playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); // Задаем информацию о спавне
TogglePlayerSpectating(playerid, true); // Как ни странно, но эта функция сразу же спавнит игрока, но об этом чуть позже
После public OnPlayerConnect вызывается public OnPlayerRequesClass, вероятно, практически у всех там вызывается проверка на регистрацию пользователя, зашедшего на сервер, поэтому в CheckPlayerRegister ( лично у меня такое название public'а ) вставляем:
И после всех проверок, когда необходимо произвести Spawn игрока: поскольку у нас игрок уже заспавнен при вызове класса, то нам только осталось установить виртуальный мир ( если это необходимо ), координаты для спавна и, если это нужно, угол поворота камеры.PHP код:
TogglePlayerSpectating(playerid, 0);
SetPlayerCameraPos(playerid, -2625.480712, 2251.552246, 12.997936); // Устанавливаем нужное нам положение камеры
SetPlayerCameraLookAt(playerid, -2620.974853, 2249.394042, 12.796076); // Устанавливаем нужное нам положение камеры
Все, урок окончен и проблема полностью решена. Жду ваших замечаний и предложений.
UPD: здесь OnPlayerSpawn вызывается всего лишь один раз и нет никаких проверок на логин, как это советовали ниже.