16.06.2013, 02:14
Hey, I've been having some problems with getting a vehicle height, storing it and creating an object with the Z value being the height of the vehicle. So far I have used GetVehicleModelInfo, and GetVehicleRelativePos. They both failed to work for me, as I must have gone wrong somewhere.
Here's the GetVehicleRelativePos function
And the wiki page for GetVehicleModelInfo: https://sampwiki.blast.hk/wiki/GetVehicleModelInfo
And the testing command:
What I want this to do is store the value from GetVehicleModelInfo or GetVehicleRelativePos and create the object exactly on the top of the roof, without it being too high or too low, I'm pretty tired so I'm not going to keep trying with this and hopefully fresh eyes will point out my mistakes.
Here's the GetVehicleRelativePos function
pawn Code:
stock GetVehicleRelativePos(vehicleid, &Float:x, &Float:y, &Float:z, Float:xoff=0.0, Float:yoff=0.0, Float:zoff=0.0)
{
new Float:rot;
GetVehicleZAngle(vehicleid, rot);
rot = 360 - rot; // Making the vehicle rotation compatible with pawns sin/cos
GetVehiclePos(vehicleid, x, y, z);
x = floatsin(rot,degrees) * yoff + floatcos(rot,degrees) * xoff + x;
y = floatcos(rot,degrees) * yoff - floatsin(rot,degrees) * xoff + y;
z = zoff + z;
/*
where xoff/yoff/zoff are the offsets relative to the vehicle
x/y/z then are the coordinates of the point with the given offset to the vehicle
xoff = 1.0 would e.g. point to the right side of the vehicle, -1.0 to the left, etc.
*/
return 1;
}
And the testing command:
pawn Code:
CMD:test(playerid,params[])
{
new veh,obj,
Float:x,
Float:y,
Float:z,
Float:ox,
Float:oy,
Float:oz,
string[64];
veh = GetNearestVehicle(playerid,15);
GetVehiclePos(veh,x,y,z);
//GetVehicleRelativePos(veh,ox,oy,oz,0,0,1.0);
GetVehicleModelInfo(GetVehicleModel(veh),VEHICLE_MODEL_INFO_SIZE,ox,oy,oz);
obj = CreateObject(18646,x,y,z,-1,0,0,0);//or ox,oy,oz
AttachObjectToVehicle(obj,veh,x,y,z,0,0,0);//or ox,oy,oz
format(string,sizeof(string),"vehicle is %.1fm wide, %.1fm long and %.1fm high",ox,oy,oz);
SendClientMessage(playerid,-1,string);
return 1;
}