Всем привет!
При регистрации. Когда игрок уже заспавнился, он почему-то тпшится на центр Грув Стрит и в руках либо бутылка, либо сигарета.
Если игрок умрет, то спавнится нормально, там где надо. Почему такое может быть?
Вид для печати
Всем привет!
При регистрации. Когда игрок уже заспавнился, он почему-то тпшится на центр Грув Стрит и в руках либо бутылка, либо сигарета.
Если игрок умрет, то спавнится нормально, там где надо. Почему такое может быть?
AddPlayerClass в моде присутствует?
Нет, но использую SetPlayerInfo
Может быть вы имели ввиду SetSpawnInfo?
Если нет AddPlayerClass или SetSpawnInfo то добавьте их и всё будет хо-ро-шо :smile:
Да, именно SetSpawnInfo (ошибся немного :) )
Попробовал добавить
AddPlayerClass(0, 1989.8239,-1779.3820,17.3549, 270, 0, 0, 0, 0, 0, 0);
Скин имеет значение? Все равно я скин меняю при помощи SetPlayerSkin сразу же при спавне.
А как же SpawnPlayer?
- - - Добавлено - - -
Добавил AddPlayerClass, но толку 0.
Теперь игрока не ТПшит на Грув стрит, его ТПшит на координаты спавна (я их прописал в AddPlayerClass), но в руках так же сигарета или бутылка.
В OnPlayerRequestClass что находится?
Ничего. Я не делаю выбор скинов.
В общем, серверу не хватает каких-то данных о игроке и дабы не случилось краша, он указывает на ошибку таким необычным способом. Честно - не помню причину того, почему при входе может выдавать бутылку. Возможно, в OnPlayerSpawn стоит что-то лишнее. В любом случае надо копать паблики OnGameModeInIt, OnPlayerConnect, OnPlayerRequestClass и OnPlayerSpawn.
Лишнего ничего нету.
Код:public OnGameModeInit()
{
EnableStuntBonusForAll(0);
SetGameModeText("Mode");
MySQLConnect ( ) ;
AddPlayerClass(289, 1989.8239,-1779.3820,17.3549, 270, 0, 0, 0, 0, 0, 0); // CJ
ConnectNPC("Jim", "bot_exit");
ConnectNPC("Vano", "bot_spawn");
return 1;
}
public OnPlayerConnect(playerid)
{
GetPlayerName ( playerid, PlayerName [ playerid ] , MAX_PLAYER_NAME ) ;//Получаем имя
SetTimerEx ( "connection", 500, false, "i", playerid ) ;//таймер
ClearPlayerData ( playerid );//очищаем данные игрока
new query [ 60 + MAX_PLAYER_NAME ];
format ( query, sizeof query, "SELECT `id` FROM `users` WHERE `login` = '%s' LIMIT 1", PlayerName [ playerid ] ) ;//Наш SQL запрос.SELECT-Выбираем ID из таблицы `users` где наш логин равен нашему имени
mysql_function_query ( dbHandle, query, true, "CheckPlayerRegistered", "ii", playerid, 0 ) ;//вызываем коллбэк, проверку зарегистрирован игрок или нет
SetPlayerPos ( playerid,-1396.0210,980.2402,179.3737 ) ;//Координаты для камеры(интро)
SetPlayerCameraPos ( playerid,-1399.0210,976.2402,179.3737 ) ;//Координаты для камеры(интро)
SetPlayerCameraLookAt ( playerid, -1754.3281, 669.2344, 62.8203 ) ;//Координаты для камеры(интро)
//CheckPlayerRegistered ( playerid );
return 1;
}
public OnPlayerSpawn(playerid)
{
if ( GetPVarInt ( playerid, "Logged" ) == 0)return true;
SetPlayerPos(playerid, PlayerInfo[playerid][pPosX],PlayerInfo[playerid][pPosY],PlayerInfo[playerid][pPosZ]);
SetPlayerHealth(playerid, PlayerInfo[playerid][pHp]);
SetPlayerArmour(playerid, PlayerInfo[playerid][pArmour]);
if(PlayerInfo[playerid][pZaraza] >= 80)
{
SetPlayerSkin(playerid, PlayerInfo[playerid][pZSkin]);
}
if(PlayerInfo[playerid][pZaraza] <= 79)
{
SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
}
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun0], PlayerInfo[playerid][ammo0]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun1], PlayerInfo[playerid][ammo1]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun2], PlayerInfo[playerid][ammo2]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun3], PlayerInfo[playerid][ammo3]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun4], PlayerInfo[playerid][ammo4]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun5], PlayerInfo[playerid][ammo5]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun6], PlayerInfo[playerid][ammo6]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun7], PlayerInfo[playerid][ammo7]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun8], PlayerInfo[playerid][ammo8]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun9], PlayerInfo[playerid][ammo9]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun10], PlayerInfo[playerid][ammo10]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun11], PlayerInfo[playerid][ammo11]);
GivePlayerWeapon(playerid, PlayerInfo[playerid][gun12], PlayerInfo[playerid][ammo12]);
return 1;
}
SetPlayerPos из OnPlayerConnect стоит убрать. Игрока в виде скина ещё не существует для всех (он есть, но в нулевых координатах)
В OnPlayerSpawn
замените наPHP код:
if ( GetPVarInt ( playerid, "Logged" ) == 0)return true;
Никогда не ленитесь ко всем подобным ключевым условиям писать какие-то сообщения. Ибо потом, когда случается баг, вы тупо не поймёте, что глючит именно из-за того, что не проходит условие, ведь об этом нигде не сообщается.PHP код:
if ( GetPVarInt ( playerid, "Logged" ) == 0) return printf("\nError: Игрок с ID %d пытался заспавниться до авторизации\n",playerid);
И вот это условие
я переделал бы под такой видPHP код:
if(PlayerInfo[playerid][pZaraza] >= 80)
{
SetPlayerSkin(playerid, PlayerInfo[playerid][pZSkin]);
}
if(PlayerInfo[playerid][pZaraza] <= 79)
{
SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
}
Ибо зачем заставлять мод выполнять проверку второго условия, если уже сработало первое?PHP код:
if(PlayerInfo[playerid][pZaraza] >= 80)
{
SetPlayerSkin(playerid, PlayerInfo[playerid][pZSkin]);
}
else if(PlayerInfo[playerid][pZaraza] <= 79)
{
SetPlayerSkin(playerid, PlayerInfo[playerid][pSkin]);
}
Вывело такое на ботов:
Error: Игрок с ID 0 пытался заспавниться до авторизации
Error: Игрок с ID 1 пытался заспавниться до авторизации
На игрока такого не вывело.
Ну а проблема то не решилась?PHP код:
if (!GetPVarInt ( playerid, "Logged" ) && !IsPlayerNPC(playerid)) return printf("\nError: Игрок с ID %d пытался заспавниться до авторизации\n",playerid);
Неа
Поднимаю.
Тоже столкнулся с такой проблемой. Как решить можно?
Залогируйте каждый колбэк и смотрите какой из них срабатывает перед тем, как спавнит на грув. Дальше его и копайте