Cerca del maletero del vehнculo
#1

Hola, me preguntaba si alguien sabe como hacer para que detecte si un jugador esta cerca del maletero del vehнculo.

Tengo esto para saber si un jugador estб cerca de un vehнculo, pero no sй que deberнa cambiar para que detecte si esta cerca del maletero.
pawn Код:
CMD:maletero(playerid, params[])
{
        new counter, result, engine, lights, alarm, doors, bonnet, boot, objective;
    for(new xx=1, xxx=GetVehiclePoolSize(); xx<=xxx; xx++)
    {
        new dist = CheckPlayerDistanceToVehicle(3.0, playerid, xx);
        if(dist)
        {
            result = xx;
            counter++;
        }
    }
    if(counter == 0) return SendClientMessage(playerid, -1, "No estas cerca de un vehнculo!");
    if(counter > 1) return SendClientMessage(playerid, -1, "Se detecto mбs de un vehнculo cerca.");
        GetVehicleParamsEx(result, engine, lights, alarm, doors, bonnet, boot, objective);
        SetVehicleParamsEx(result, engine, lights, alarm, doors, bonnet, true, objective);

return 1;
}
pawn Код:
stock CheckPlayerDistanceToVehicle(Float:radi, playerid, vehicleid)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:PX, Float:PY, Float:PZ, Float:X, Float:Y, Float:Z;
        GetPlayerPos(playerid, PX, PY, PZ);
        GetVehiclePos(vehicleid, X, Y, Z);
        new Float:Distance = (X-PX)*(X-PX)+(Y-PY)*(Y-PY)+(Z-PZ)*(Z-PZ);
        if(Distance <= radi*radi)
        {
            return 1;
        }
    }
    return 0;
}
Reply
#2

nearestVehicle serнa igual a result (se lee mas claro)

pawn Код:
new Float:vehicleAngle;
GetVehicleZAngle(nearestVehicle, vehicleAngle);
El angulo actual del coche apunta donde estб mirando. Si queremos sacar la posiciуn del maletero, lo que hacemos es sumarle 180 para que apunte hacia atrбs.
pawn Код:
vehicleAngle += 180;
Necesitamos saber la distancia entre el centro del coche (el GetVehiclePos) y la posiciуn del maletero. Esto va a ser igual al largo del coche (es decir, sizeY) sobre 2.
pawn Код:
new Float:sizeX, Float:sizeY, Float:sizeZ;
GetVehicleModelInfo(GetVehicleModel(nearestVehicle), VEHICLE_MODEL_INFO_SIZE, sizeX, sizeY, sizeZ);
sizeY /= 2;
new Float:x, Float:y, Float:z;
GetVehiclePos(nearestVehicle, x, y, z);
Ahora le sumamos a las cordenadas la distancia al maletero en razуn del angulo del coche, ya que las cordenadas x, y, z estan en el mismo eje.
pawn Код:
x += (sizeY * floatsin(-vehicleAngle, degrees));
y += (sizeY * floatcos(-vehicleAngle, degrees));
Ya estб. Ahora x, y, z valen la posiciуn del maletero.

Funciуn en limpio:
pawn Код:
stock GetVehicleTrunkPosition(vehicle, &Float:x, &Float:y, &Float:z) {
    new Float:angle, Float:sizeX, Float:sizeY, Float:sizeZ;
    GetVehicleZAngle(vehicle, angle);
    angle += 180;
    GetVehicleModelInfo(GetVehicleModel(vehicle), VEHICLE_MODEL_INFO_SIZE, sizeX, sizeY, sizeZ);
    sizeY /= 2;
    GetVehiclePos(vehicle, x, y, z);
    x += (sizeY * floatsin(-angle, degrees));
    y += (sizeY * floatcos(-angle, degrees));
}
Reply
#3

Gracias!!!
La explicaciуn me sirviу un montуn, no sabia que existe el GetVehicleModelInfo xd
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)