Просмотр полной версии : [Вопрос] GetVehicleZAngle возвращает старые координаты после вызова SetVehicleZAngle
verteich
02.08.2019, 14:17
Привет, нашел проблему у себя на сервере с системой автобазара, не так давно в теме как узнать координаты перед автомобилем , DeiMos скинул мне такую функцию:
stock GetCoordBonnetVehicle(vehicleid, &Float:x, &Float:y, &Float:z, Float:distance)
{
new
Float:angle,
Float:dis;
dis = dis/2 + distance;
GetVehiclePos(vehicleid, x, y, z);
GetVehicleZAngle(vehicleid, angle);
x -= (dis * floatsin(-angle+180, degrees));
y -= (dis * floatcos(-angle+180, degrees));
return 1;
}
и вот тут у меня возникла проблема
SetVehicleZAngle(GetPlayerVehicleID(playerid), autoBazarInfo[i][autoBazarZAngle]);
GetCoordBonnetVehicle(GetPlayerVehicleID(playerid), x, y, z, 2.5);
В переменной autoBazarZAngle значение 270.0, но функция записывает, старый угол автомобиля, а не новый, и 3dtext:
autoBazarInfo[i][autoBazarLabel2] = CreateDynamic3DTextLabel(string, -1, x, y, z-0.5, 5.0, INVALID_PLAYER_ID, INVALID_VEHICLE_ID);
Создается с другой стороны, из за чего такое?
Попробуй вставить код после SetVehicleZAngle в таймер. Возможно, сервер просто не успевает обновить информацию.
Хотя вообще если бы ты обратил внимание на код функции GetCoordBonnetVehicle, то заметил бы, что Z-координата там никак не изменяется и, следовательно, можно в CreateDynamic3DTextLabel вместо "z" указать "autoBazarInfo[i][autoBazarZAngle]".
verteich
02.08.2019, 17:06
Попробуй вставить код после SetVehicleZAngle в таймер. Возможно, сервер просто не успевает обновить информацию.
Хотя вообще если бы ты обратил внимание на код функции GetCoordBonnetVehicle, то заметил бы, что Z-координата там никак не изменяется и, следовательно, можно в CreateDynamic3DTextLabel вместо "z" указать "autoBazarInfo[i][autoBazarZAngle]".
Я указал вместо z угол автомобиля и у меня пропал 3д text
Я указал вместо z угол автомобиля и у меня пропал 3д text
А, сорри. Что-то не вчитался в название переменной и не понял, что это угол поворота машины. Касаемо переменной чушь написал.
Ну попробуй таймер
verteich
02.08.2019, 18:45
А, сорри. Что-то не вчитался в название переменной и не понял, что это угол поворота машины. Касаемо переменной чушь написал.
Ну попробуй таймер
Поставил таймер на 200 мс, все заработало.
Кстати а почему сервер не успевает обновлять информацию?
Ну это уже к серверу вопросы, а не ко мне :)
Можно сделать вот так
stock GetCoordBonnetVehicle(vehicleid, &Float:x, &Float:y, &Float:z, Float:distance, Float:angle = 65535.0)
{
new Float:dis;
dis = dis/2 + distance;
GetVehiclePos(vehicleid, x, y, z);
if(angle == 65535.0)
GetVehicleZAngle(vehicleid, angle);
x -= (dis * floatsin(-angle+180, degrees));
y -= (dis * floatcos(-angle+180, degrees));
return 1;
}
И просто передавать изменённые координаты напрямую в функцию. Тогда можно обойтись без таймера
verteich
02.08.2019, 20:09
Ну это уже к серверу вопросы, а не ко мне :)
Можно сделать вот так
stock GetCoordBonnetVehicle(vehicleid, &Float:x, &Float:y, &Float:z, Float:distance, Float:angle = 65535.0)
{
new
Float:angle,
Float:dis;
dis = dis/2 + distance;
GetVehiclePos(vehicleid, x, y, z);
if(angle == 65535.0)
GetVehicleZAngle(vehicleid, angle);
x -= (dis * floatsin(-angle+180, degrees));
y -= (dis * floatcos(-angle+180, degrees));
return 1;
}
И просто передавать изменённые координаты напрямую в функцию. Тогда можно обойтись без таймера
О, я не мог до этого догадаться) Спасибо, можно закрыть. (у тебя в функции лишняя переменная angle если шо, варнинги + ерроры:blush2:)
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot