06.01.2015, 15:20
GetVehicleWheelPos(vehicleid, wheel, &Float
, &Float:y, &Float:z)
This function does include an optional macro for wheel types, but you can put it the integer values if you prefer it...
pawn Код:
#define WHEELSFRONT_LEFT 0
#define WHEELSFRONT_RIGHT 1
#define WHEELSMID_LEFT 2
#define WHEELSMID_RIGHT 3
#define WHEELSREAR_LEFT 4
#define WHEELSREAR_RIGHT 5
pawn Код:
GetVehicleWheelPos(vehicleid, wheel, &Float:x, &Float:y, &Float:z)
{
new Float:rot, Float:x2, Float:y2, Float:z2, Float:div;
GetVehicleZAngle(vehicleid, rot);
rot = 360 - rot;
GetVehiclePos(vehicleid, x2, y2, z2);
switch(wheel)
{
case WHEELSFRONT_LEFT .. WHEELSFRONT_RIGHT: //Front Tyres
GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_WHEELSFRONT, x, y, z);
case WHEELSMID_LEFT .. WHEELSMID_RIGHT: //Middle Tyres
GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_WHEELSMID, x, y, z);
case WHEELSREAR_LEFT .. WHEELSREAR_RIGHT: //Rear Tyres
GetVehicleModelInfo(GetVehicleModel(vehicleid), VEHICLE_MODEL_INFO_WHEELSREAR, x, y, z);
default: return 0;
}
div = (wheel % 2) ? (x) : (-x);
x = floatsin(rot, degrees) * y + floatcos(rot, degrees) * div + x2;
y = floatcos(rot, degrees) * y - floatsin(rot, degrees) * div + y2;
z += z2;
return 1;
}
Example of it's usage:
pawn Код:
CMD:fixtyre(playerid, params[])
{
new vehicleid = GetPlayerVehicleID(playerid);
if(!vehicleid) return 0;
new Float:x, Float:y, Float:z;
if(!GetVehicleWheelPos(vehicleid, WHEELSREAR_LEFT, x, y, z)) return print("Invalid wheel type");
//Get the tyre position of the rear left tyre.
SetPlayerCheckpoint(playerid, x, y, z, 1.0);
//Sets a checkpoint on the player's rear left tyre.
SendClientMessage(playerid, -1, "A checkpoint has been placed on your back tyre.");
return 1;
}