Coches
#1

Hola, quisiera saber como hago, para que los autos estacionen cada 2 segundos, porque cada vez que respawneo, los autos se van a donde ellos pusieron /estacionar, pero lo que quiero es que cuando un vehiculo se rompa, si vaya a donde /estacionar, pero por ejemplo si sale del juego y entra, el vehiculo este donde el lo dejo aparcado, no estacionado.

їComo podria hacer esto?


Acб dejo el comando estacionar:

pawn Код:
CMD:estacionar(playerid, params[])
{
    if(Info[playerid][pVehicleKeysFrom] != INVALID_PLAYER_ID)
    {
        new ownerid = Info[playerid][pVehicleKeysFrom];
        if(IsPlayerConnected(ownerid))
        {
            new d = Info[playerid][pVehicleKeys];
            if(IsPlayerInVehicle(playerid, PlayerVehicleInfo[ownerid][d][pvId]))
            {
                if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessageEx(playerid, COLOR_GREY, "Tu debes ser el conductor.");
                new Float:x, Float:y, Float:z, Float:angle, Float:health;
                GetVehicleHealth(PlayerVehicleInfo[ownerid][d][pvId], health);
                PlayerVehicleInfo[ownerid][d][pvHealth] = health;
                //if(health < 800) return SendClientMessageEx(playerid, COLOR_GREY, " Tu vehнculo estб demasiado daсado para estacionarlo.");
                if(Info[playerid][pLockCar] == GetPlayerVehicleID(playerid)) Info[playerid][pLockCar] = INVALID_VEHICLE_ID;
                GetVehiclePos(PlayerVehicleInfo[ownerid][d][pvId], x, y, z);
                GetVehicleZAngle(PlayerVehicleInfo[ownerid][d][pvId], angle);
                SurfingCheck(GetPlayerVehicleID(playerid));
                UpdatePlayerVehicleParkPosition(ownerid, d, x, y, z, angle, health);
                PutPlayerInVehicle(playerid, GetPlayerVehicleID(playerid), 0);
                SetPlayerArmedWeapon(playerid, 0);

                new string[29 + (MAX_PLAYER_NAME * 2)];
                format(string, sizeof(string), "* %s ha estacionado el vehiculo de %s.", GetPlayerNameEx(playerid), GetPlayerNameEx(ownerid));
                ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
                fVehSpeed[playerid] = 0.0;
                return 1;
            }
        }
    }
    for(new d = 0 ; d < MAX_PLAYERVEHICLES; d++)
    {
        if(IsPlayerInVehicle(playerid, PlayerVehicleInfo[playerid][d][pvId]))
        {
            if(GetPlayerState(playerid) != PLAYER_STATE_DRIVER) return SendClientMessageEx(playerid, COLOR_GREY, "Tu debes ser el conductor.");
            new Float:x, Float:y, Float:z, Float:angle, Float:health;
            GetVehicleHealth(PlayerVehicleInfo[playerid][d][pvId], health);
            PlayerVehicleInfo[playerid][d][pvHealth] = health;
            //if(health < 800) return SendClientMessageEx(playerid, COLOR_GREY, " Tu vehiculo estб muy daсado para estacionarlo.");
            if(Info[playerid][pLockCar] == GetPlayerVehicleID(playerid)) Info[playerid][pLockCar] = INVALID_VEHICLE_ID;
            GetVehiclePos(PlayerVehicleInfo[playerid][d][pvId], x, y, z);
            GetVehicleZAngle(PlayerVehicleInfo[playerid][d][pvId], angle);
            SurfingCheck(GetPlayerVehicleID(playerid));
            UpdatePlayerVehicleParkPosition(playerid, d, x, y, z, angle, health);
            PutPlayerInVehicle(playerid, PlayerVehicleInfo[playerid][d][pvId], 0);
            SetPlayerArmedWeapon(playerid, 0);

            new string[30 + (MAX_PLAYER_NAME * 2)];
            format(string, sizeof(string), "* %s ha estacionado su vehiculo.", GetPlayerNameEx(playerid));
            ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
            fVehSpeed[playerid] = 0.0;
            return 1;
        }
    }
    SendClientMessageEx(playerid, COLOR_GREY, "Tu necesitas estar dentro de tu vehiculo para hacer esto.");
    return 1;
}
Reply
#2

Eso lo hice hace unos dias en mi proyecto, tienes que tener una funcion que te guarde las corrdenadas actuales del vehiculo aparte de las de estacionado, yo tengo un temporizador que cada x tiempo guarda todos los coches, o al cerrarse el GM se guarda todo.

Luego en el OnVehicleDeath puedes poner que reespawnee en las coordenadas del estacionar.

Yo les llamo coordenadas actuales y coordenadas del parking, aunque si es RolePlay tu servidor, te recomendaria que los vehiculos no vuelvan al aparcar, sino vayan a algun "deposito" o se quede roto en el sitio.

Salu2

Ranslsad
Reply
#3

Serнa poco adecuado que "se estacionen" cada 2 segundos. Lo mejor serнa obtener las coordenadas y guardarlas justo antes de realizar un respawn.
Reply
#4

No le veo tan recomendable actualizar cierta cantidad de coches cada dos segundos. Lo que sн podrнas hacer es que al bajar del coche ya las coordenadas se guarden.
Reply
#5

Quote:
Originally Posted by Juance
Посмотреть сообщение
No le veo tan recomendable actualizar cierta cantidad de coches cada dos segundos. Lo que sн podrнas hacer es que al bajar del coche ya las coordenadas se guarden.
Buena idea, pero si por casualidad el usuario se desconecta dentro del coche, necesitarias otro procedimiento aparte.

Ahora si, lo de cada dos segundos seria una locura, se sobrecargaria el servidor cuando haya muchos vehiculos.

Salu2

Ranslsad
Reply
#6

Quote:
Originally Posted by ranslsad
Посмотреть сообщение
Buena idea, pero si por casualidad el usuario se desconecta dentro del coche, necesitarias otro procedimiento aparte.
Cuando sube guardas la ID, cuando baja la borras. Si al desconectarse tiene la ID de un vehнculo en la variable, pone para guardar.
Reply
#7

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
Cuando sube guardas la ID, cuando baja la borras. Si al desconectarse tiene la ID de un vehнculo en la variable, pone para guardar.
Buena idea, me gustan estas clases de ideas, son las que hacen que uno aprenda y tome diferentes puntos de vista!

Gracias!

Salu2

Ranslsad
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)