Portal SAMP
[Ajuda] Ajuda com veículos - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Ajuda com veículos (/showthread.php?tid=2146)



Ajuda com veículos - GUI_DA_Z5 - 27/02/2022

Ola queria saber como fazer um sistema de destruir veículos ex: o cara foi no emprego pego uma moto ele saio da moto ela é destruida depois de serto tempo, teria como me ajudar?


RE: Ajuda com veículos - xbruno1000x - 27/02/2022

É bem simples na verdade.

Na public OnPlayerExitVehicle:
Código:
SetTimerEx("DestruirVeiculo", 5*1000, false, "i", vehicleid); //O número 5 é correspondente aos segundos para destruir o veículo. Basta alterá-lo para aumentar ou diminuir.

Depois crie uma public chamada DestruirVeiculo
Código:
forward DestruirVeiculo(vehicleid);
public DestruirVeiculo(vehicleid)
{
    DestroyVehicle(vehicleid);
    return 1;
}



RE: Ajuda com veículos - DeviceBlack - 27/02/2022

O mais comum é usar um timer, mas existe esse jeitinho aqui tambem:
Código PHP:
#include    <a_samp>
#include    <foreach>
#include    <zcmd>

#define MODEL_VEHICLE    (510) // 510 Modelo de uma bicicleta
#define TEMPO_RESPAWN    (10) // 10 Segundos apos descer do veiculo

new Iterator:Test<MAX_VEHICLES>; // Um novo grupo chamado  'Test'

public OnVehicleSpawn(vehicleid)
{
    
// Verifica se o veiculo esta no grupo Test
    
if(Iter_Contains(Testvehicleid))
    {
        
// Deleta se a verificacao indicar sim
        
DestroyVehicle(vehicleid);
        
        
// Remove o id do grupo Test
        
Iter_Remove(vehicleid);
    }
    return 
1;
}

// Comando para spawnar a bike
CMD:test(playerid)
{
    
// Pegando a posicao do jogador
    
new Float:xFloat:yFloat:z;
    
GetPlayerPos(playeridxyz);
    
    
// Pegando o id do veiculo com as informacoes de modelo, tempo e posicao
    
new vid CreateVehicle(MODEL_BIKExyz0.000TEMPO_RESPAWN);
    
    
// Colocando o jogador no banco do motorista 
    
PutPlayerInVehicle(playeridvid0);
    
    
// Adicionando o id do veiculo ao grupo Test
    
Iter_Add(Testvid);
    return 
1;

Ah, mesmo que OnVehicleSpawn seja chamado na primeira vez, ela ocorrera antes do id ser adicinado ao Test, e como ela não estará no grupo Test ela não sera deletada de primeira!


RE: Ajuda com veículos - GUI_DA_Z5 - 27/02/2022

(27/02/2022 21:48)xbruno1000x Escreveu: É bem simples na verdade.

Na public OnPlayerExitVehicle:
Código:
SetTimerEx("DestruirVeiculo", 5*1000, false, "i", vehicleid); //O número 5 é correspondente aos segundos para destruir o veículo. Basta alterá-lo para aumentar ou diminuir.

Depois crie uma public chamada DestruirVeiculo
Código:
forward DestruirVeiculo(vehicleid);
public DestruirVeiculo(vehicleid)
{
    DestroyVehicle(vehicleid);
    return 1;
}

Mais eu nao teria que setar uma variavel no carro e destruir o carro com a variavel porque alí é so um timer ?


RE: Ajuda com veículos - xbruno1000x - 28/02/2022

(27/02/2022 22:56)GUI_DA_Z5 Escreveu:
(27/02/2022 21:48)xbruno1000x Escreveu: É bem simples na verdade.

Na public OnPlayerExitVehicle:
Código:
SetTimerEx("DestruirVeiculo", 5*1000, false, "i", vehicleid); //O número 5 é correspondente aos segundos para destruir o veículo. Basta alterá-lo para aumentar ou diminuir.

Depois crie uma public chamada DestruirVeiculo
Código:
forward DestruirVeiculo(vehicleid);
public DestruirVeiculo(vehicleid)
{
    DestroyVehicle(vehicleid);
    return 1;
}

Mais eu nao teria que setar uma variavel no carro e destruir o carro com a variavel porque alí é so um timer ?

Não teria que setar uma variável pois a variável vehicleid já pertence a public OnPlayerExitVehicle. O id do veículo seria passado para a public através do SetTimerEx.

Outra coisa:
Na public DestruirVeiculo precisa adicionar uma if para verificar se tem alguém no veículo, eu me esqueci disso.

Ficaria assim:
Código:
public OnPlayerExitVehicle(playerid, vehicleid)
{
    SetTimerEx("DestruirVeiculo", 5*1000, false, "ii", playerid, vehicleid); //O número 5 é correspondente aos segundos para destruir o veículo. Basta alterá-lo para aumentar ou diminuir.
    
    return 1;
}

forward DestruirVeiculo(playerid, vehicleid);
public DestruirVeiculo(playerid, vehicleid)
{
    if(!IsPlayerInVehicle(playerid, vehicleid)
    {
        DestroyVehicle(vehicleid);
    }
    return 1;
}



RE: Ajuda com veículos - GUI_DA_Z5 - 28/02/2022

(28/02/2022 01:14)xbruno1000x Escreveu:
(27/02/2022 22:56)GUI_DA_Z5 Escreveu:
(27/02/2022 21:48)xbruno1000x Escreveu: É bem simples na verdade.

Na public OnPlayerExitVehicle:
Código:
SetTimerEx("DestruirVeiculo", 5*1000, false, "i", vehicleid); //O número 5 é correspondente aos segundos para destruir o veículo. Basta alterá-lo para aumentar ou diminuir.

Depois crie uma public chamada DestruirVeiculo
Código:
forward DestruirVeiculo(vehicleid);
public DestruirVeiculo(vehicleid)
{
    DestroyVehicle(vehicleid);
    return 1;
}

Mais eu nao teria que setar uma variavel no carro e destruir o carro com a variavel porque alí é so um timer ?

Não teria que setar uma variável pois a variável vehicleid já pertence a public OnPlayerExitVehicle. O id do veículo seria passado para a public através do SetTimerEx.

Outra coisa:
Na public DestruirVeiculo precisa adicionar uma if para verificar se tem alguém no veículo, eu me esqueci disso.

Ficaria assim:
Código:
public OnPlayerExitVehicle(playerid, vehicleid)
{
    SetTimerEx("DestruirVeiculo", 5*1000, false, "ii", playerid, vehicleid); //O número 5 é correspondente aos segundos para destruir o veículo. Basta alterá-lo para aumentar ou diminuir.
    
    return 1;
}

forward DestruirVeiculo(playerid, vehicleid);
public DestruirVeiculo(playerid, vehicleid)
{
    if(!IsPlayerInVehicle(playerid, vehicleid)
    {
        DestroyVehicle(vehicleid);
    }
    return 1;
}

Um mais essa função sera aplicada para todos os veículos do servidor eu queria que se aplica-se nos carros que o player pego la no emprego ex: pego no pick up


RE: Ajuda com veículos - k2bi_YT - 28/02/2022

Tente assim:

Assim, se o player sair do veiculo e ficar sem utiliza-lo, será destruido em 5 minutos, mas
se ele entrar novamente no veiculo, o timer será interrompido.
Código PHP:
new VehEmprego[MAX_PLAYERS];
new 
Timer[MAX_PLAYERS];

public 
OnPlayerPickUpPickup(playeridpickupid)
{
    
//Seu code
    
VehEmprego[playerid] = AddStaticVehicle(...);
    return 
1;
}

public 
OnPlayerExitVehicle(playeridvehicleid)
{
    if(
vehicleid == VehEmprego[playerid])
    {
        
Timer[playerid] = SetTimerEx("DestruirCarro"300000false"i"vehicleid);//O carro será destruido em 5 minutos caso não seja utilizado
    
}
    return 
1;
}

public 
OnPlayerEnterVehicle(playeridvehicleid)
{
    if(
vehicleid == VehEmprego[playerid]) KillTimer(Timer[playerid]);
}

forward DestruirCarro(playeridvehicleid);
public 
DestruirCarro(playeridvehicleid)
{
    if(!
IsPlayerInVehicle(playeridvehicleid))
    {
        
DestroyVehicle(vehicleid);
        
SendClientMessage(playerid, -1"O veiculo da sua profissão foi destruido por ficar 5 minutos sem utilizar.");
    }
    return 
1;




RE: Ajuda com veículos - GUI_DA_Z5 - 28/02/2022

(28/02/2022 16:48)k2bi_YT Escreveu: Tente assim:

Assim, se o player sair do veiculo e ficar sem utiliza-lo, será destruido em 5 minutos, mas
se ele entrar novamente no veiculo, o timer será interrompido.
Código PHP:
new VehEmprego[MAX_PLAYERS];
new 
Timer[MAX_PLAYERS];

public 
OnPlayerPickUpPickup(playeridpickupid)
{
    //Seu code
    VehEmprego[playerid] = AddStaticVehicle(...);
    return 1;
}

public 
OnPlayerExitVehicle(playeridvehicleid)
{
    if(vehicleid == VehEmprego[playerid])
    {
        Timer[playerid] = SetTimerEx("DestruirCarro"300000false"i"vehicleid);//O carro será destruido em 5 minutos caso não seja utilizado
    }
    return 1;
}

public 
OnPlayerEnterVehicle(playeridvehicleid)
{
    if(vehicleid == VehEmprego[playerid]) KillTimer(Timer[playerid]);
}

forward DestruirCarro(playeridvehicleid);
public 
DestruirCarro(playeridvehicleid)
{
    if(!IsPlayerInVehicle(playeridvehicleid))
    {
        DestroyVehicle(vehicleid);
        SendClientMessage(playerid, -1"O veiculo da sua profissão foi destruido por ficar 5 minutos sem utilizar.");
    }
    return 1;

Tmj ai vcs!