02.11.2010, 22:45
pawn Код:
// Tire IDs: -1 (Not near a tire), 0 (Front-left), 1 (Back-left), 2 (Back-right), 3 (Front-right)
GetClosestTire(playerid)
{
if(IsPlayerInAnyVehicle(playerid))
return -1;
new
car;
if((car = GetClosestVehicle(playerid)) == INVALID_VEHICLE_ID)
return -1;
new
Float:p[3],
Float:c[3],
Float:ang,
Float:dist[2],
tire;
GetPlayerPos(playerid, p[0], p[1], p[2]);
GetVehiclePos(car, c[0], c[1], c[2]);
GetVehicleZAngle(car, ang);
tire = 0;
dist[0] = Float:0xFFFFFFFF;
ang += 45.0;
for(new t = 0; t < 4; t++, ang += 90.0)
{
dist[1] = floatsqroot(
((p[0] - (c[0] + floatsin(-ang, degrees))) * (p[0] - (c[0] + floatsin(-ang, degrees)))) +
((p[1] - (c[1] + floatcos(-ang, degrees))) * (p[1] - (c[1] + floatcos(-ang, degrees)))));
if(dist[1] < dist[0])
{
dist[0] = dist[1];
tire = t;
}
}
return tire;
}
GetClosestVehicle(playerid)
{
if(IsPlayerInAnyVehicle(playerid))
return INVALID_VEHICLE_ID;
new
Float:p[3],
Float:c[3],
Float:dist[2],
car;
GetPlayerPos(playerid, p[0], p[1], p[2]);
car = INVALID_VEHICLE_ID;
dist[0] = Float:0xFFFFFFFF;
for(new vehicleid = 0; vehicleid < MAX_VEHICLES; vehicleid++)
{
GetVehiclePos(vehicleid, c[0], c[1], c[2]);
dist[1] = floatsqroot(((p[0] - c[0]) * (p[0] - c[0])) + ((p[1] - c[1]) * (p[1] - c[1])) + ((p[2] - c[2]) * (p[2] - c[2])));
if(dist[1] < dist[0] && dist[1] <= 4.0)
{
dist[0] = dist[1];
car = vehicleid;
}
}
return car;
}
I'd expect you'd know what to do with it to rid of those potential bugs, but enjoy anyways!