Desaparecer el coche
#1

Bueno, me he dado cuenta que los autos de los users quedan esparcidos por todo el mapa, hay algo para hacer que desaparezcan al salir de ellos o algo asн.

Mi server es freeroam, debo reiniciar para que se quiten esos coches de donde estan :P
Reply
#2

Podrнas destruir el vehнculo pasado cierto tiempo desde que el jugador sale de el.
Reply
#3

es con el destroyvehicle їno?

Se pondrнa esto:
Код:
DestroyVehicle(vehicleid);
en el public onplayerexitvehicle

lo malo que no se implementar algunas cosas en pawno, por lo que necesitaria un poquitin de ayuda.
Reply
#4

Claro, eso lo destruirнa al abandonarlo.
Reply
#5

їcomo se harнa el timer para esto?

no se hacer timers
Reply
#6

pawn Код:
new gDestroyVehicle[MAX_VEHICLES];

public OnPlayerExitVehicle(playerid, vehicleid) {
    gDestroyVehicle[vehicleid] = SetTimerEx("EliminarVehiculo", 5000, "i", vehicleid);
    return 1;
}

forward EliminarVehiculo(vehicleid);
public EliminarVehiculo(vehicleid) {
    DestroyVehicle(vehicleid);
    return 1;
}
PD: podrнas poner un KillTimer cuando vuelve a subirse, y asн no lo borra.
Reply
#7

Hola JavAndroid,
No te recomiendo usar OnPlayerExitVehicle por lo siguiente:
Not called if the player falls off a bike or is removed from a vehicle by other means such as using SetPlayerPos.
You must use OnPlayerStateChange and check if their old state is PLAYER_STATE_DRIVER or PLAYER_STATE_PASSENGER.

Ese es el problema con OnPlayerExitVehicle
Yo preferirнa usar un timer que se llame cada 30 minutos y borre los autos que no estбn siendo utilizados, yo lo harнa de la siguiente forma:

pawn Код:
#include <a_samp>
public OnGameModeInit()//Cuando el modo de juego se inicie
    SetTimer("Borrar_Autos", 1800000, true);//Iniciar un temporizador que llamarб a la funciуn Borrar_Autos cada 30 minutos
forward Borrar_Autos();
public Borrar_Autos()//Funciуn borrar autos
{
    new bool:vehicleused[MAX_VEHICLES char];//Vamos a crear un arreglo para ver si el vehнculo estб en uso o no
    for(new i = 0; i<MAX_PLAYERS; i++)//Lo cambias si tienes foreach, loop para todos los jugadores
    {
        if(!IsPlayerConnected(i))//Si no esta conectado el jugador con el ID i
            continue;//Saltar
        if(IsPlayerInAnyVehicle(i))//Si el jugador estб en cualquier auto
            vehicleused{GetPlayerVehicleID(i)} = true;//El vehнculo estб ocupado, asignar a la variable vehicleused true, el valor del нndice es el valor del ID de auto en el que esta el jugador
    }//Fin del loop
    for(new i=0; i<MAX_VEHICLES; i++)//Loop para todos los autos
    {
        if(!IsValidVehicle(i))//Si el vehнculo es invбlido, saltar (Nota: si da error con estб funciуn aсadir 'native IsValidVehicle(vehicleid);' al principio)
            continue;//Saltar
        if(!vehicleused{i})//Si no estб en uso el vehнculo,
            DestroyVehicle(i);//Borrarlo
    }//Fin del loop
}//Fin de la funciуn
Ocupa menos CPU/Memoria ya que solo requiere un temporizador y se llaman esas instrucciones cada 30 minutos para limpiar todo
Saludos
Reply
#8

Quote:
Originally Posted by Su37Erich
Посмотреть сообщение
Hola JavAndroid,
No te recomiendo usar OnPlayerExitVehicle por lo siguiente:
Not called if the player falls off a bike or is removed from a vehicle by other means such as using SetPlayerPos.
You must use OnPlayerStateChange and check if their old state is PLAYER_STATE_DRIVER or PLAYER_STATE_PASSENGER.

Ese es el problema con OnPlayerExitVehicle
Yo preferirнa usar un timer que se llame cada 30 minutos y borre los autos que no estбn siendo utilizados, yo lo harнa de la siguiente forma:

pawn Код:
#include <a_samp>
public OnGameModeInit()//Cuando el modo de juego se inicie
    SetTimer("Borrar_Autos", 1800000, true);//Iniciar un temporizador que llamarб a la funciуn Borrar_Autos cada 30 minutos
forward Borrar_Autos();
public Borrar_Autos()//Funciуn borrar autos
{
    new bool:vehicleused[MAX_VEHICLES char];//Vamos a crear un arreglo para ver si el vehнculo estб en uso o no
    for(new i = 0; i<MAX_PLAYERS; i++)//Lo cambias si tienes foreach, loop para todos los jugadores
    {
        if(!IsPlayerConnected(i))//Si no esta conectado el jugador con el ID i
            continue;//Saltar
        if(IsPlayerInAnyVehicle(i))//Si el jugador estб en cualquier auto
            vehicleused{GetPlayerVehicleID(i)} = true;//El vehнculo estб ocupado, asignar a la variable vehicleused true, el valor del нndice es el valor del ID de auto en el que esta el jugador
    }//Fin del loop
    for(new i=0; i<MAX_VEHICLES; i++)//Loop para todos los autos
    {
        if(!IsValidVehicle(i))//Si el vehнculo es invбlido, saltar (Nota: si da error con estб funciуn aсadir 'native IsValidVehicle(vehicleid);' al principio)
            continue;//Saltar
        if(!vehicleused{i})//Si no estб en uso el vehнculo,
            DestroyVehicle(i);//Borrarlo
    }//Fin del loop
}//Fin de la funciуn
Ocupa menos CPU/Memoria ya que solo requiere un temporizador y se llaman esas instrucciones cada 30 minutos para limpiar todo
Saludos
Gracias Su37Erich por explicar detalladamente cada funcion, una cosa, їen cuanto quedarнa el timer para 15 minutos? en 900000 їno?
Reply
#9

Quote:
Originally Posted by JavAndroid
Посмотреть сообщение
їen cuanto quedarнa el timer para 15 minutos? en 900000 їno?
Exacto. Acб te dejo una pбgina donde hay una tabla de minutos a milisegundos:

http://www.convertidorunidades.com/mins-a-milisegundos
Reply
#10

utiliza AddStaticVehicleEx para crear los vehнculos, tiene un parбmetro llamado respawn_delay, ahн se coloca el tiempo que se respawneara el vehнculo. (empieza a contar desde que el vehнculo esta desocupado).

https://sampwiki.blast.hk/wiki/AddStaticVehicleEx

saludos.

EXTRA: el tiempo de respawn de los vehнculos desocupado es en minisegundos.


pawn Код:
1 * 1000 // 1 segundo
1 * 60000 // 1 minuto
1 * 3600000 // 1 hora

//NOTA: cambia el 1  por el tiempo que prefieras.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)