PDA

Просмотр полной версии : [Вопрос] Камера при входе.



Just_Fenix
22.05.2014, 17:01
Здравствуйте. Уже не первый день меня мучает камера при входе на сервер.
Дело в том, что когда я добавляю две функции RemovePlayerObjects(playerid) и TextDrawShowForPlayer(playerid, URL) камера перестаёт работать. Без них она работает замечательно. Я и вверх добавлял и вниз, но камера все равно не работает. Без этих функций работает хорошо, но без них мне ни куда. Вот код колбэка OnPlayerConnect(playerid);

public OnPlayerConnect(playerid)
{
new userip[16], string[80];
RemovePlayerInfo(playerid);
GetPlayerName(playerid,pInfo[playerid][pName],MAX_PLAYER_NAME);
SendClientMessage(playerid, COLOR_NEWS, "Добро пожаловать на сервер!");
GetPlayerIp(playerid,userip,sizeof(userip));
format(string,sizeof(string), "Игрок %s[%d] заходит на сервер. IP: %s",pNick(playerid),playerid,userip);
SendAdminMessage(COLOR_YELLOW,string);
// TextDraw.
VehicleHealth[playerid] = CreatePlayerTextDraw(playerid, 512.245912, 314.000000, " ");
PlayerTextDrawLetterSize(playerid, VehicleHealth[playerid], 1.261808, 2.151998);
PlayerTextDrawAlignment(playerid, VehicleHealth[playerid], 1);
PlayerTextDrawColor(playerid, VehicleHealth[playerid], -1);
PlayerTextDrawSetShadow(playerid, VehicleHealth[playerid], 0);
PlayerTextDrawSetOutline(playerid, VehicleHealth[playerid], 1);
PlayerTextDrawBackgroundColor(playerid, VehicleHealth[playerid], 51);
PlayerTextDrawFont(playerid, VehicleHealth[playerid], 2);
PlayerTextDrawSetProportional(playerid, VehicleHealth[playerid], 1);
//--------------------------------------------------------------------------
Speed[playerid] = CreatePlayerTextDraw(playerid, 512.3421, 421.12321, " ");
PlayerTextDrawLetterSize(playerid, Speed[playerid], 0.435141, 2.909866);
PlayerTextDrawAlignment(playerid, Speed[playerid], 1);
PlayerTextDrawColor(playerid, Speed[playerid], -1);
PlayerTextDrawSetShadow(playerid, Speed[playerid], 0);
PlayerTextDrawSetOutline(playerid, Speed[playerid], 1);
PlayerTextDrawBackgroundColor(playerid, Speed[playerid], 51);
PlayerTextDrawFont(playerid, Speed[playerid], 2);
PlayerTextDrawSetProportional(playerid, Speed[playerid], 1);
//--------------------------------------------------------------------------
Fuels[playerid] = CreatePlayerTextDraw(playerid, 523.284912, 345.00000, " ");
PlayerTextDrawLetterSize(playerid, Fuels[playerid], 0.261808, 1.151998);
PlayerTextDrawAlignment(playerid, Fuels[playerid], 1);
PlayerTextDrawColor(playerid, Fuels[playerid], -1);
PlayerTextDrawSetShadow(playerid, Fuels[playerid], 0);
PlayerTextDrawSetOutline(playerid, Fuels[playerid], 1);
PlayerTextDrawBackgroundColor(playerid, Fuels[playerid], 51);
PlayerTextDrawFont(playerid, Fuels[playerid], 2);
PlayerTextDrawSetProportional(playerid, Fuels[playerid], 1);
//--------------------------------------------------------------------------
ZamokVeh[playerid] = CreatePlayerTextDraw(playerid, 542.541912, 423.40500, " ");
PlayerTextDrawLetterSize(playerid, ZamokVeh[playerid], 0.261808, 1.151998);
PlayerTextDrawAlignment(playerid, ZamokVeh[playerid], 1);
PlayerTextDrawColor(playerid, ZamokVeh[playerid], -1);
PlayerTextDrawSetShadow(playerid, ZamokVeh[playerid], 0);
PlayerTextDrawSetOutline(playerid, ZamokVeh[playerid], 1);
PlayerTextDrawBackgroundColor(playerid, ZamokVeh[playerid], 51);
PlayerTextDrawFont(playerid, ZamokVeh[playerid], 2);
PlayerTextDrawSetProportional(playerid, ZamokVeh[playerid], 1);
//--------------------------------------------------------------------------
VehicleName[playerid] = CreatePlayerTextDraw(playerid, 522.21121, 316.240000, " ");
PlayerTextDrawLetterSize(playerid, VehicleName[playerid], 0.206952, 1.130664);
PlayerTextDrawAlignment(playerid, VehicleName[playerid], 1);
PlayerTextDrawColor(playerid, VehicleName[playerid], 0x007FFFFF);
PlayerTextDrawSetShadow(playerid, VehicleName[playerid], 0);
PlayerTextDrawSetOutline(playerid, VehicleName[playerid], 1);
PlayerTextDrawBackgroundColor(playerid, VehicleName[playerid], 51);
PlayerTextDrawFont(playerid, VehicleName[playerid], 2);
PlayerTextDrawSetProportional(playerid, VehicleName[playerid], 1);
//--------------------------------------------------------------------------
new account[37];
format(account,sizeof(account),"users/%s.ini",pNick(playerid));
if(!fexist(account)) ShowRegisterDialog(playerid);
else if(fexist(account)) ShowLoginDialog(playerid);
SetPlayerFacingAngle(playerid, 270);
SetPlayerCameraPos(playerid, 1688.4673, -1484.9246, 97.7186);
SetPlayerCameraLookAt(playerid, 1687.9570, -1485.7877, 97.5284);
//RemovePlayerObjects(playerid);
//TextDrawShowForPlayer(playerid, URL);
return true;
}
Если знаете подскажите пожалуйста удобные способы присобачить камеру при входе, чтобы было эффективно и без всяких сбоев.

KakbeYura
22.05.2014, 18:47
Почему так - незнаю.
У меня смена камеры в

public OnPlayerRequestSkin(playerid)
Можешь попробовать удалить с коннекта и поставить в него.

Но можно сделать так:

new ConnectCameraTimer;


public OnPlayerConnect(playerid)
{
...
SetTimerEx("ConnectCamera",1000,false,"d",playerid);
return 1;
}


forward ConnectCamera(playerid);
public ConnectCamera(playerid)
{
SetPlayerFacingAngle(playerid, 270);
SetPlayerCameraPos(playerid, 1688.4673, -1484.9246, 97.7186);
SetPlayerCameraLookAt(playerid, 1687.9570, -1485.7877, 97.5284);
return 1;
}


И зачем два раза проверять файл?

if(!fexist(account)) ShowRegisterDialog(playerid);
else ShowLoginDialog(playerid);

Just_Fenix
22.05.2014, 19:08
Почему так - незнаю.
У меня смена камеры в

public OnPlayerRequestSkin(playerid)
Можешь попробовать удалить с коннекта и поставить в него.

Но можно сделать так:

new ConnectCameraTimer;


public OnPlayerConnect(playerid)
{
...
SetTimerEx("ConnectCamera",1000,false,"d",playerid);
return 1;
}


forward ConnectCamera(playerid);
public ConnectCamera(playerid)
{
SetPlayerFacingAngle(playerid, 270);
SetPlayerCameraPos(playerid, 1688.4673, -1484.9246, 97.7186);
SetPlayerCameraLookAt(playerid, 1687.9570, -1485.7877, 97.5284);
return 1;
}


И зачем два раза проверять файл?

if(!fexist(account)) ShowRegisterDialog(playerid);
else ShowLoginDialog(playerid);
Ну как бы :) Интересно, и где же я его два раза проверяю?
Проверка стоит на существование файла игрока, если файла нет - регистрируем. Если есть - посылаем на авторизацию.
На счёт OnPlayerRequestClass (что за OnPlayerRequestSkin я так и не понял). Он не вызывается при коннекте игрока, только при выборе класса. Смысла мне его использовать нет. Хотелось также бы обойтись без таймера.

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

Я вот тут подумал. В колбэке OnPlayerConnect стоит функция RemovePlayerInfo. С ней всё хорошо работает, может RemoveObjects и TextDrawShowForPlayer засунуть в неё? При входе/выходе правда будет обновляться. Или лучше не надо?

Just_Fenix
23.05.2014, 15:44
Поднимаю тему вверх.

DeimoS
23.05.2014, 17:39
Я вот тут подумал. В колбэке OnPlayerConnect стоит функция RemovePlayerInfo. С ней всё хорошо работает, может RemoveObjects и TextDrawShowForPlayer засунуть в неё? При входе/выходе правда будет обновляться. Или лучше не надо?

Легче тогда сделать отдельный stock, в который и поместить нужный код. Но вряд ли это даст какой-то результат

Just_Fenix
24.05.2014, 16:44
Сделал как все делают. В колбэк OnPlayerConnect поставил проверку на существование аккаунта.
Если аккаунта нет - присваиваем значение false переменной gPlayerAccount. Если аккаунт есть - присваиваем значение true переменной gPlayerAccount. Далее в колбэке OnPlayerRequestClass ставим проверку с этой переменной.

if(gPlayerAccount[playerid] == false) ShowRegisterDialog(playerid);
else if(gPlayerAccount[playerid] == true) ShowLoginDialog(playerid);
Если значение переменной gPlayerAccount равно false, то отправляем игрока на регистрацию.
Если значение переменной gPlayerAccount равно true, то отправляем игрока на авторизацию.
Выше этой проверки я поставил координаты камеры, и всё прекрасно работает. Только внизу появились << >> и кнопка spawn.
Придётся не обращать на них внимания :) Спасибо всем, кто попытался помочь. Тему можно закрывать.