Просмотр полной версии : [Вопрос] Вопрос по поводу SetVehicleVelocity
Доброго времени суток, товарищи, у меня сложилась некая проблема.
Делаю ограничитель скорости для своего мода...
И вот не задача, не получается сделать нормальный ограничитель.
В данный момент проблема такова:
Включаю ограничитель, сбрасываю скорость а он меня толкает вперёд...
Код:
stock SetOgranSpeed(vehicleid, speed_MH)
{
if (speed_MH < 1) speed_MH = 1;
new Float: v[3], car_speed_veh;
GetVehicleVelocity(vehicleid, v[0], v[1], v[2]);
car_speed_veh = floatround(VectorSize(v[0], v[1], v[2]) * 100.3);
if (car_speed_veh <= 0)
{
new Float: zAngle;
GetVehicleZAngle(vehicleid, zAngle);
new Float:newVelX = floatcos((zAngle -= 270.0), degrees) *speed_MH / 100.3;
SetVehicleVelocity(vehicleid, newVelX, floattan(zAngle,degrees) *newVelX, 0.0);
return 1;
}
new Float: vSpeeds = float(speed_MH) / float(car_speed_veh);
SetVehicleVelocity(vehicleid, v[0] *vSpeeds, v[1] *vSpeeds, v[2] *vSpeeds);
return 1;
}
Доброго времени суток, товарищи, у меня сложилась некая проблема.
Делаю ограничитель скорости для своего мода...
И вот не задача, не получается сделать нормальный ограничитель.
В данный момент проблема такова:
Включаю ограничитель, сбрасываю скорость а он меня толкает вперёд...
Наверно потому что это код не ограничителя скорости?) Это паблик код для установки скорости или вообще насколько я помню для разгона.
Что бы сделать ограничитель - этот код нужно переделать. Получаешь текущую скорость машины, сверяешь с ограничителем и если скорость больше ограниченной (допустим 50) - устанавливаешь машине скорость ограничителя - 50.
Наверно потому что это код не ограничителя скорости?) Это паблик код для установки скорости или вообще насколько я помню для разгона.
Что бы сделать ограничитель - этот код нужно переделать. Получаешь текущую скорость машины, сверяешь с ограничителем и если скорость больше ограниченной (допустим 50) - устанавливаешь машине скорость ограничителя - 50.
А пример твоих слов есть?
Поможет кто-то, хоть примером?)
stock LimitingVehicleSpeed(const vehicleid)
{
if(vehicleid == 0)
return 1;
new Float: velocity_x,
Float: velocity_y,
Float: velocity_z;
const MAX_VEHICLE_SPEED = 50;//Максимальная скорость
GetVehicleVelocity(vehicleid, velocity_x, velocity_y, velocity_z);
if(floatround(VectorSize(velocity_x, velocity_y, velocity_z) * 100.0) >= MAX_VEHICLE_SPEED)
SetVehicleVelocity(vehicleid, velocity_x*0.99, velocity_y*0.99, velocity_z);
return 1;
}
Пример использования:
LimitingVehicleSpeed(GetPlayerVehicleID(playerid));
stock LimitingVehicleSpeed(const vehicleid)
{
if(vehicleid == 0)
return 1;
new Float: velocity_x,
Float: velocity_y,
Float: velocity_z;
const MAX_VEHICLE_SPEED = 50;//Максимальная скорость
GetVehicleVelocity(vehicleid, velocity_x, velocity_y, velocity_z);
if(floatround(VectorSize(velocity_x, velocity_y, velocity_z) * 100.0) >= MAX_VEHICLE_SPEED)
SetVehicleVelocity(vehicleid, velocity_x*0.99, velocity_y*0.99, velocity_z);
return 1;
}
Пример использования:
LimitingVehicleSpeed(GetPlayerVehicleID(playerid));
Такой вопрос, по поводу
velocity_x*0.99, velocity_y*0.99
Теперь мне нужно подобрать оптимальные числа для той скорости до которой мне нужно ограничить, да?
Теперь мне нужно подобрать оптимальные числа для той скорости до которой мне нужно ограничить, да?
Нет, тут тебе ничего не нужно подбирать.
Тебе только осталось указать максимальную скорость.
const MAX_VEHICLE_SPEED = 50;//Максимальная скорость
Нет, тут тебе ничего не нужно подбирать.
Тебе только осталось указать максимальную скорость.
const MAX_VEHICLE_SPEED = 50;//Максимальная скорость
Хорошо, вот я сейчас по константе передаю скорость вот так:
new vehicle = GetPlayerVehicleID(playerid);
LimitingVehicleSpeed(playerid,vehicle,45);
Код использования:
stock LimitingVehicleSpeed(playerid,const vehicleid, const MAX_SPEEDS)
{
new Float: velocity_x,
Float: velocity_y,
Float: velocity_z;
new MAX_VEHICLE_SPEED = MAX_SPEEDS;//Максимальная скорость
GetVehicleVelocity(vehicleid, velocity_x, velocity_y, velocity_z);
if(floatround(VectorSize(velocity_x, velocity_y, velocity_z) * 100.3) > MAX_VEHICLE_SPEED)
SetVehicleVelocity(vehicleid, velocity_x*0.99, velocity_y*0.99, velocity_z);
return 1;
}
Тогда так:
stock LimitingVehicleSpeed(const vehicleid, const max_speed)
{
if(vehicleid == 0)
return 1;
new Float: velocity_x,
Float: velocity_y,
Float: velocity_z;
GetVehicleVelocity(vehicleid, velocity_x, velocity_y, velocity_z);
if(floatround(VectorSize(velocity_x, velocity_y, velocity_z) * 100.0) >= max_speed)
SetVehicleVelocity(vehicleid, velocity_x*0.99, velocity_y*0.99, velocity_z);
return 1;
}
LimitingVehicleSpeed(GetPlayerVehicleID(playerid), 45);
Тогда так:
stock LimitingVehicleSpeed(const vehicleid, const max_speed)
{
if(vehicleid == 0)
return 1;
new Float: velocity_x,
Float: velocity_y,
Float: velocity_z;
GetVehicleVelocity(vehicleid, velocity_x, velocity_y, velocity_z);
if(floatround(VectorSize(velocity_x, velocity_y, velocity_z) * 100.0) >= max_speed)
SetVehicleVelocity(vehicleid, velocity_x*0.99, velocity_y*0.99, velocity_z);
return 1;
}
LimitingVehicleSpeed(GetPlayerVehicleID(playerid), 45);
Даже при таком использовании, машина набирает 77км
Все оно работает, только что проверил.
Может у тебя просто таймер не успевает обновляться? т.е. скорость у тебя показывает в одном таймере, а эта функция в другом таймере, который обновляется не так часто, как тот, что показывает скорость.
Это я сделал, что бы ты сам убедился, что оно работает
stock LimitingVehicleSpeed(const playerid, const vehicleid, const max_speed)
{
if(vehicleid == 0)
return 1;
new Float: velocity_x,
Float: velocity_y,
Float: velocity_z;
GetVehicleVelocity(vehicleid, velocity_x, velocity_y, velocity_z);
new vehicle_speed = floatround(VectorSize(velocity_x, velocity_y, velocity_z) * 100.0);
if(vehicle_speed >= max_speed)
SetVehicleVelocity(vehicleid, velocity_x*0.99, velocity_y*0.99, velocity_z);
new string[8 + 3];
format(string, sizeof(string), "SPEED: %d", vehicle_speed);
GameTextForPlayer(playerid, string, 50, 6);
return 1;
}
В public OnPlayerUpdate(playerid)
LimitingVehicleSpeed(playerid, GetPlayerVehicleID(playerid), 45);
Это только для примера.
Все оно работает, только что проверил.
Может у тебя просто таймер не успевает обновляться? т.е. скорость у тебя показывает в одном таймере, а эта функция в другом таймере, который обновляется не так часто, как тот, что показывает скорость.
Это я сделал, что бы ты сам убедился, что оно работает
stock LimitingVehicleSpeed(const playerid, const vehicleid, const max_speed)
{
if(vehicleid == 0)
return 1;
new Float: velocity_x,
Float: velocity_y,
Float: velocity_z;
GetVehicleVelocity(vehicleid, velocity_x, velocity_y, velocity_z);
new vehicle_speed = floatround(VectorSize(velocity_x, velocity_y, velocity_z) * 100.0);
if(vehicle_speed >= max_speed)
SetVehicleVelocity(vehicleid, velocity_x*0.99, velocity_y*0.99, velocity_z);
new string[8 + 3];
format(string, sizeof(string), "SPEED: %d", vehicle_speed);
GameTextForPlayer(playerid, string, 50, 6);
return 1;
}
В public OnPlayerUpdate(playerid)
LimitingVehicleSpeed(playerid, GetPlayerVehicleID(playerid), 45);
Это только для примера.
Я просто чтобы убрать лишнюю нагрузку, использую данный код в секундном таймере, может всё только по этому?
Набросал себе новый пример, так вот оно как-то более менее работает скорость автомобиля в приделах 42-43 км
stock LimitingVehicleSpeed(playerid,const vehicleid, MAX_SPEEDS)
{
new Float:pos[3];
GetVehicleVelocity(vehicleid,pos[0],pos[1],pos[2]);
new Float:speed = SpeedVehicle(playerid);
if(speed > MAX_SPEEDS)
{
new str[8 + 3];
format(str,sizeof(str),"Speed: %d",SpeedVehicle(playerid));
SCM(playerid,-1,str);
new Float:dif = MAX_SPEEDS / speed;
SetVehicleVelocity(vehicleid,pos[0]*dif,pos[1]*dif,pos[2]);
speed = MAX_SPEEDS;
}
return 1;
}
Делай как тебе удобно, я тебе пример показал.
Делай как тебе удобно, я тебе пример показал.
Благодарю.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot