29.12.2011, 09:37
Вылетает с игры при выборе Job Spawn, как исправить ? (проблема появилась только в новом sa-mp 0.3d).
Код HTML:
public OnPlayerRequestClass(playerid, classid)//Выполняется при коннекте а также при выборе игроком класса (скина). //Функция выполняется каждый раз, когда игрок нажимает "влево" и "вправо", чтобы выбрать другой класс. //или запускается ф-ией ForceClassSelection(playerid); SetPlayerHealthEx(playerid,0); //или может заменена TogglePlayerSpectating //playerid ID игрока, запросивщего класс. //classid ID запрошенного игроком класса. { //после рестарта запускается раньше чем ф-ия OnPlayerConnect(playerid) if(IsPlayerNPC(playerid)) return 1; PlayerInfo[playerid][pHealth] = floatadd(50.0, PlayerInfo[playerid][pSHealth]); SetPlayerHealthEx(playerid, PlayerInfo[playerid][pHealth]);//Кол-во жизней у игрока //-------------------------------------------------------------------------- gPlayerSpawned[playerid] = false; if(gPlayerLogged[playerid] && GetPlayerState(playerid) != PLAYER_STATE_SPECTATING )//если игрок залогинелся { //если игрок подключился и уже нажал LOGIN и не находится в режиме спектатора, чтобы появились кнопки выбора спауна //ИНФОРМИРОВАНИЕ //new string[MAX_STRING]; //format(string, sizeof(string), "OnPlayerRequestClass(playerid:%d, classid:%d)", playerid, classid); //ABroadCast(COLOR_MAROON, string, 10); //SendClientMessageToAll(COLOR_YELLOW, string); switch(classid) { case 0: { SetPlayerInterior(playerid,0); SetPlayerCameraPos(playerid,1630.6136,-2286.0298,110.0); SetPlayerCameraLookAt(playerid,1887.6034,-1682.1442,47.6167); if(gPlayerSpawnSelection[playerid] == 0) { //если игрок только что зашёл в игру GameTextForPlayer(playerid,"~y~> ~h~Place Output ~y~<",5000,4);//3500 SendClientMessage(playerid, COLOR_GREY, " Вы появитесь в точке выхода из игры!"); gSpawnChange[playerid] = 0; gSpawn[playerid] = 0; SetPlayerSpawn(playerid);//запускаем ф-ию установки спауна игрока } else if(gPlayerSpawnSelection[playerid] == 1) { GameTextForPlayer(playerid,"~y~> ~g~Job Spawn ~y~<",5000,4); SendClientMessage(playerid, COLOR_GREY, " Вы теперь будете появляться по основному месту службы если она у вас есть!"); gSpawnChange[playerid] = 1; gSpawn[playerid] = 1; SetPlayerSpawn(playerid);//запускаем ф-ию установки спауна игрока } return 1; } case 1: { SetPlayerInterior(playerid,0); SetPlayerCameraPos(playerid,-1300.8754,68.0546,129.4823); SetPlayerCameraLookAt(playerid,-1817.9412,769.3878,132.6589); if(gPlayerSpawnSelection[playerid] != 1) { GameTextForPlayer(playerid,"~y~> ~g~Job Spawn ~y~<",5000,4); SendClientMessage(playerid, COLOR_GREY, " Вы теперь будете появляться по месту службы если она у вас есть!"); gSpawnChange[playerid] = 1; gSpawn[playerid] = 1; } else if(gPlayerSpawnSelection[playerid] == 1) { GameTextForPlayer(playerid,"~y~> ~p~Motel Spawn ~y~<",5000,4); SendClientMessage(playerid, COLOR_GREY, " Вы теперь будете появляться в Мотеле!"); gSpawnChange[playerid] = 1; gSpawn[playerid] = 0; } SetPlayerSpawn(playerid);//запускаем ф-ию установки спауна игрока return 1; } case 2: { SetPlayerInterior(playerid,0); SetPlayerCameraPos(playerid,1310.6155,1675.9182,110.7390); SetPlayerCameraLookAt(playerid,2285.2944,1919.3756,68.2275); if(gPlayerSpawnSelection[playerid] != 1) { GameTextForPlayer(playerid,"~y~> ~p~Home/Motel Spawn ~y~<",5000,4); SendClientMessage(playerid, COLOR_GREY, " Вы будете теперь возраждаться в вашем Собственном / Арендованном Доме или в Мотеле!"); } else if(gPlayerSpawnSelection[playerid] == 1) { GameTextForPlayer(playerid,"~y~> ~h~Home Spawn ~y~<",5000,4); SendClientMessage(playerid, COLOR_GREY, " Вы будете теперь возраждаться в вашем Собственном / Арендованном Доме или в Мотеле!"); } gSpawnChange[playerid] = 2; gSpawn[playerid] = 0; SetPlayerSpawn(playerid);//запускаем ф-ию установки спауна игрока return 1; } } } else if(!gPlayerLogged[playerid] && GetPlayerState(playerid) != PLAYER_STATE_SPECTATING)//если ф-ия запустилась до момента логирования { //если игрок подключился и ещё не нажал LOGIN и не находится в режиме спектатора //если игрок просто не спектатор, а эта ф-ии ранее ему не запускалась TogglePlayerSpectating(playerid, 1);//Переключает игрока в режим зрителя } //return 1; return 0;//все виснут после реста }//end OnPlayerRequestClass(playerid, classid) //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: //SpawnSTEP5 //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: public OnPlayerRequestSpawn(playerid)//Выполняется, когда игрок нажимает "rshift", чтобы спавниться после выбора класса { //F4 //равносильна SpawnPlayer(playerid), которая переразмещает игрока в стартовой позиции, и запускает OnPlayerSpawn if(IsPlayerNPC(playerid)) return 1; if(gPlayerLogged[playerid])//PlayerInfo[playerid][pReg]//если игрок зарегистрирован { //если игрок зашёл в игру PlayerInfo[playerid][pHealth] = floatadd(50.0, PlayerInfo[playerid][pSHealth]); SetPlayerHealthEx(playerid, PlayerInfo[playerid][pHealth]);//Кол-во жизней у игрока gPlayerSpawnSelection[playerid] = 1;//поднимаем флаг - выбор спауна произошёл //TogglePlayerSpectating(playerid, 0);//откл. режим спектатора //SpawnPlayer(playerid); //ИНФОРМИРОВАНИЕ //new string[MAX_STRING]; //format(string, sizeof(string), "OnPlayerRequestSpawn(playerid:%d)", playerid); //ABroadCast(COLOR_MAROON, string, 10); //SendClientMessageToAll(COLOR_YELLOW, string); return 1;//- 1, игрок спавница. } return 0;//- 0, при нажатии на Shift ничего не происходит. }