PDA

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



#Mark
20.07.2014, 11:39
Всем здарова. Вот мне интересно узнать а как сделать так чтобы после того как player авторизировался, ему показывали 6 машин и можно было камерой передвигать и выбирать тачки??

Зарание спасибо, а то я в скриптинге недавно. Хотелось бы узнать.

MR_BEN
20.07.2014, 11:56
Начни с чего-нибудь попроще...

#Mark
20.07.2014, 12:13
Я с попроще уже пробывал...
Уже нужно что то посложнее...

MR_BEN
20.07.2014, 12:25
Скачай FS InGame Cam Editor. Установи машины, выбери позицию камеры. После этого создай переменную. По нажатию, допустим, на стрелку вправо меняй значение переменной и позицию камеры. Ну а дальше продумай сам.

wAx
20.07.2014, 12:40
Привет!

Для "плавного" перемещения камеры от точки к точке, используется функция InterpolateCameraPos. Подробнее тут (http://wiki.sa-mp.com/wiki/InterpolateCameraPos).

Расставляй автомобили и находи позицию камеры при помощи команды /save, где позиция самой камеры - твоя позиция, а координаты направления камеры - координаты автомобиля.

Дальше - проще, в OnPlayerKeyStateChange(ну или на текстдравах). Создаешь переменную, которая хранит "этап" просмотра игрока твоих автомобилей.
К примеру:


if(!step[playerid])
{
step[playerid]++;
InterpolateCameraPos(playerid, fromx,fromy,fromz,tox,toy,toz, time, move);
InterpolateCameraLookAt(playerid, fromx,fromy,fromz,tox,toy,toz, time, move);
}


Ну и далее в таком же духе.

L0ndl3m
20.07.2014, 13:48
Также подкину команду для точного сохранения координат камеры:


CMD:savecam(playerid, params[]) // if(strcmp(cmdtext, "/savecam", true, 8) == 0)
{
static const
fmt_str0[] = "SetPlayerCameraPos(playerid, %f, %f, %f);\n",
fmt_str1[] = "SetPlayerCameraLookAt(playerid, %f, %f, %f);\n";

const
fmt_size0 = sizeof(fmt_str0) + (-2 + 11) * 3,
fmt_size1 = sizeof(fmt_str1) + (-2 + 11) * 3;

#if fmt_size0 > fmt_size1
#define final_size fmt_size0
#else
#define final_size fmt_size1
#endif

new
str[final_size],
File: cam_file = fopen("CamCoords.ini", io_append),
Float: cam_pos_axis_x,
Float: cam_pos_axis_y,
Float: cam_pos_axis_z,
Float: cam_pos_vec_axis_x,
Float: cam_pos_vec_axis_y,
Float: cam_pos_vec_axis_z;

#undef final_size

GetPlayerCameraPos(playerid, cam_pos_axis_x, cam_pos_axis_y, cam_pos_axis_z);
GetPlayerCameraFrontVector(playerid, cam_pos_vec_axis_x, cam_pos_vec_axis_y, cam_pos_vec_axis_z);

format(str, sizeof(str), fmt_str0, cam_pos_axis_x, cam_pos_axis_y, cam_pos_axis_z);
fwrite(cam_file, str);

format(str, sizeof(str), fmt_str1, cam_pos_axis_x + 5.0 * cam_pos_vec_axis_x, cam_pos_axis_y + 5.0 * cam_pos_vec_axis_y, cam_pos_axis_z + 5.0 * cam_pos_vec_axis_z);
fwrite(cam_file, str);

return fclose(cam_file);
}


Как сделать из этих координат передвижение камеры?
Допустим мы сохранили 2 координаты в файл: Первая координата - откуда, вторая - куда, код:


SetPlayerCameraPos(playerid, 1647.343750, 1718.683959, 11.734600); // Откуда ( первая функция )
SetPlayerCameraLookAt(playerid, 1647.367431, 1723.648193, 11.138239); // Откуда // ( первая функция )
SetPlayerCameraPos(playerid, 1644.874145, 1863.826782, 11.175399); // Куда ( вторая функция )
SetPlayerCameraLookAt(playerid, 1641.950439, 1859.776733, 11.397855); // Куда // вторая функция )


Теперь используем функции InterpolateCameraPos и InterpolateCameraLookAt.

Берём координаты из первой функции SetPlayerCameraPos и совмещаем со второй функцией. И заключаем её в функцию InterpolateCameraPos. Должно получиться как-то так ( остальные параметры не относятся к положению камеры ):

InterpolateCameraPos(playerid, 1647.343750, 1718.683959, 11.734600, 1644.874145, 1863.826782, 11.175399, 10000);

Положение перемещения камеры готово, но при перемещении камеры, она будет смотреть не туда, куда мы хотели. Для это есть функция InterpolateCameraLookAt. Совмещать координаты мы будем так же как и с первой функцией.

Берём координаты из второй функции. Смещаем координаты из функции SetPlayerCameraPos с SetPlayerCameraLookAt.

В итоге должно получиться это:

InterpolateCameraLookAt(playerid, 1647.367431, 1723.648193, 11.138239, 1641.950439, 1859.776733, 11.397855, 10000);

Для примера я записал видео, этих координат:

http://www.youtube.com/watch?v=yXGk7dWymbg

#Mark
21.07.2014, 04:45
Всем спасбо, будем разбиратся сейчас :)