[DUDA] Como setear la velocidad de un vehнculo
#1

Hola, estoy intentando crear una funciуn para setear la velocidad de un vehнculo, pero no entiendo nada. Primero, SetVehicleVelocity si uso valores mayores a 1 el auto se va a la mierda, y GetVehicleVelocity igual, retorna valores muy pequeсos. Me pueden ayudar?

Mis dudas especificas son: Que es x, y and z? Hablo de Get(Set)VehicleVelocity, claro.

Lo que pude hacer es esto

pawn Код:
stock AumentarVelocidad( vehid, Float: amount)
{
    new
        Float: VehX, Float:VehY, Float:VehZ;

    GetVehicleVelocity(vehid, VehX, VehY, VehZ );
   
    VehX *= amount;
    VehY *= amount;
    VehZ *= amount;
    return  SetVehicleVelocity(vehid, VehX, VehY, VehZ );
}
Solo pude llegar a eso. Pero la verdad no se de donde partir para SETEAR la velocidad a KMH por ejemplo.
Reply
#2

Para calcular la velocidad;

pawn Код:
stock ObtenerVelocidad(playerid)
{
    new Float:PosX, Float:PosY, Float:PosZ, Float:PlayerSpeedDistance;
    GetVehicleVelocity(GetPlayerVehicleID(playerid), PosX, PosY, PosZ);
    PlayerSpeedDistance = floatmul(floatsqroot(floatadd(floatadd(floatpower(PosX, 2), floatpower(PosY, 2)), floatpower(PosZ, 2))), 170.0);
    new velocidad = floatround(PlayerSpeedDistance * 1);
    return velocidad;
}
Lo que hace SetVehicleVelocity es darle una velocidad instantбnea al vehнculo, por medio de un comando ejecutar la funciуn, para que le fije la velocidad segъn la direcciуn del eje de coordenada.

pawn Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp("/saltar", cmdtext))
    {
        if(IsPlayerInAnyVehicle(playerid)) // Detecta si el jugador estб en un vehнculo.
        SetVehicleVelocity(GetPlayerVehicleID(playerid), 0.0, 0.0, 0.2); // Fija la velocidad de direcciуn Z en 0.2, lo cual ocasiona un salto.
        return 1;
    }
   
    if(!strcmp("/velocidad1", cmdtext))
    {
        new Float:PosX, Float:PosY, Float:PosZ;
        new idauto = GetPlayerVehicleID(playerid);
        GetVehicleVelocity(GetPlayerVehicleID(playerid, PosX, PosY, PosZ);
        if(IsPlayerInAnyVehicle(playerid)) // Detecta si el jugador estб en un vehнculo.
        SetVehicleVelocity(idauto, PosX * 0.5, PosY * 0.5, PosZ * 0.5); // Aumenta la velocidad del vehнculo en 0.5
        return 1;
    }
   
    if(!strcmp("/velocidad2", cmdtext))
    {
        new Float:PosX, Float:PosY, Float:PosZ;
        new idauto = GetPlayerVehicleID(playerid);
        GetVehicleVelocity(GetPlayerVehicleID(playerid, PosX, PosY, PosZ);
        if(IsPlayerInAnyVehicle(playerid)) // Detecta si el jugador estб en un vehнculo.
        SetVehicleVelocity(idauto, PosX * 1.0, PosY * 1.0, PosZ * 1.0); // Aumenta la velocidad del vehнculo en 0.5
        return 1;
    }
    return 1;
}
Lo que puedes es multiplicarla, sumarla, etcйtera, ahora, cuando se trata de cambiar la velocidad, lo que tienes que hacer es cambiar la de las 3 direcciones en un mismo valor en las 3. Podrнas usar un velocimetro y usar mis comandos de velocidad, asн podrбs sacar una aproximaciуn de cuanta velocidad aumenta, y usar operadores para aumentar la velocidad a gusto.

Lo que puse reciйn es lo que te sugiero, pero hay una funciуn llamada SetVehicleSpeed que no es nativa, si no que la creу un usuario de la comunidad en Inglйs;

https://sampforum.blast.hk/showthread.php?tid=307052

Nunca lo usй, pero creo que es lo que buscas, ya que el segundo parбmetro de la funciуn es una velocidad en kilуmetros, lo que no sй si es que fija una velocidad mбxima o una velocidad actual, supongo que eso desincronizarнa todo.
Reply
#3

Y como puedo crear una funcion para setear la velocidad del coche usando solo el parбmetro "velocidad" algo como SetVehicleSpeed(vehicleid, Float:Speed)
Reply
#4

Editй el mensaje, lйelo.
Reply
#5

Muchas gracias, pero yo me referia a esto:
pawn Код:
stock SetVehicleSpeed(vehicleid, Float:speed)//Milanosie
{
    if(speed != -1)
    {
        new
            Float:px,
            Float:py,
            Float:pz,
            Float:pvx,
            Float:pvy,
            Float:pvz,
            Float:fl;

        GetVehiclePos(vehicleid, px,py, pz);
        GetVehicleVelocity(vehicleid, pvx, pvy, pvz);
        fl = floatsqroot((pvx * pvx) + (pvy * pvy) + (pvz * pvz));
        pvx = (pvx / fl) * (speed * 0.00475);
        pvy = (pvy / fl) * (speed * 0.00475);
        pvz = (pvz / fl) * (speed * 0.00475);
        SetVehicleVelocity(vehicleid, pvx, pvy, pvz);
    }
    return 1;
}
Gracias igual, solucionado!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)