Portal SAMP
[Ajuda] Quebrar veiculo - 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] Quebrar veiculo (/showthread.php?tid=2424)



Quebrar veiculo - Davi.Xit5370 - 25/05/2022

Como faço para quando o veículo estiver fumaçando aparecer uma gametext falando veículo quebrado?


RE: Quebrar veiculo - Dr Editor - 26/05/2022

Pode usar a função VehicleDamageStatusUpdate e verificar a vida com GetVehicleHealth.
Verifique o status da vida aqui: https://sampwiki.blast.hk/wiki/VehicleHealth


RE: Quebrar veiculo - Davi.Xit5370 - 26/05/2022

(26/05/2022 07:58)Dr Editor Escreveu: Pode usar a função VehicleDamageStatusUpdate e verificar a vida com GetVehicleHealth.
Verifique o status da vida aqui: https://sampwiki.blast.hk/wiki/VehicleHealth

Muito obrigado vou testar agora


RE: Quebrar veiculo - xbruno1000x - 26/05/2022

(26/05/2022 07:58)Dr Editor Escreveu: Pode usar a função VehicleDamageStatusUpdate e verificar a vida com GetVehicleHealth.
Verifique o status da vida aqui: https://sampwiki.blast.hk/wiki/VehicleHealth

Eu até cheguei a responder isso aqui no tópico mas acabei apagando. Havia lido na documentação que "Essa callback é executada quando elementos do veículo como portas, rodas, painéis, ou luzes mudam seu status de dano.".

Logo se o veículo atingir valor de vida menor que 250, e nenhum dos elementos sofrerem danos/atualizarem o status, o veículo irá explodir.

Ou a documentação está incorreta e a public é chamada pra qualquer dano?

Documentação:
https://open.mp/pt-br/docs/scripting/callbacks/OnVehicleDamageStatusUpdate


RE: Quebrar veiculo - Dr Editor - 27/05/2022

(26/05/2022 16:12)xbruno1000x Escreveu:
(26/05/2022 07:58)Dr Editor Escreveu: Pode usar a função VehicleDamageStatusUpdate e verificar a vida com GetVehicleHealth.
Verifique o status da vida aqui: https://sampwiki.blast.hk/wiki/VehicleHealth

Eu até cheguei a responder isso aqui no tópico mas acabei apagando. Havia lido na documentação que "Essa callback é executada quando elementos do veículo como portas, rodas, painéis, ou luzes mudam seu status de dano.".

Logo se o veículo atingir valor de vida menor que 250, e nenhum dos elementos sofrerem danos/atualizarem o status, o veículo irá explodir.

Ou a documentação está incorreta e a public é chamada pra qualquer dano?

Documentação:
https://open.mp/pt-br/docs/scripting/callbacks/OnVehicleDamageStatusUpdate

Agora me pegou. Fiz um anti-cheat para verificar godmode no veículo mas só testei com batidas, não testei com tiros.
E também nem toda a batida da dano no veículo. Varia conforme a velocidade.

Em últimos casos da pra usar a alternativa abaixo. Fiz rápido e não testei, mas pode servir de base.
Código:
static Float:vehicleHealth[MAX_VEHICLES];

forward OnChangeVehicleHealth(vehicleid, Float:old_health, Float:new_health);
public OnChangeVehicleHealth(vehicleid, Float:old_health, Float:new_health)
{
    printf("[DEBUG] Vida do veículo %i mudou de %.1f para %.1f", vehicleid, old_health, new_health);
    return true;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(!ispassenger)
        GetVehicleHealth(vehicleid, vehicleHealth[vehicleid]);
    return 1;
}

public OnPlayerUpdate(playerid)
{
    new vehicleid;
    if((vehicleid = GetPlayerVehicleID(playerid)) != INVALID_VEHICLE_ID)
    {
        new Float:health;
        GetVehicleHealth(vehicleid, health);
        if(vehicleHealth[vehicleid] != health)
        {
            OnChangeVehicleHealth(vehicleid, vehicleHealth[vehicleid], health);
            vehicleHealth[vehicleid] = health;
        }
    }
    return 1;
}



RE: Quebrar veiculo - xbruno1000x - 27/05/2022

(27/05/2022 08:41)Dr Editor Escreveu:
(26/05/2022 16:12)xbruno1000x Escreveu:
(26/05/2022 07:58)Dr Editor Escreveu: Pode usar a função VehicleDamageStatusUpdate e verificar a vida com GetVehicleHealth.
Verifique o status da vida aqui: https://sampwiki.blast.hk/wiki/VehicleHealth

Eu até cheguei a responder isso aqui no tópico mas acabei apagando. Havia lido na documentação que "Essa callback é executada quando elementos do veículo como portas, rodas, painéis, ou luzes mudam seu status de dano.".

Logo se o veículo atingir valor de vida menor que 250, e nenhum dos elementos sofrerem danos/atualizarem o status, o veículo irá explodir.

Ou a documentação está incorreta e a public é chamada pra qualquer dano?

Documentação:
https://open.mp/pt-br/docs/scripting/callbacks/OnVehicleDamageStatusUpdate

Agora me pegou. Fiz um anti-cheat para verificar godmode no veículo mas só testei com batidas, não testei com tiros.
E também nem toda a batida da dano no veículo. Varia conforme a velocidade.

Em últimos casos da pra usar a alternativa abaixo. Fiz rápido e não testei, mas pode servir de base.
Código:
static Float:vehicleHealth[MAX_VEHICLES];

forward OnChangeVehicleHealth(vehicleid, Float:old_health, Float:new_health);
public OnChangeVehicleHealth(vehicleid, Float:old_health, Float:new_health)
{
    printf("[DEBUG] Vida do veículo %i mudou de %.1f para %.1f", vehicleid, old_health, new_health);
    return true;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    if(!ispassenger)
        GetVehicleHealth(vehicleid, vehicleHealth[vehicleid]);
    return 1;
}

public OnPlayerUpdate(playerid)
{
    new vehicleid;
    if((vehicleid = GetPlayerVehicleID(playerid)) != INVALID_VEHICLE_ID)
    {
        new Float:health;
        GetVehicleHealth(vehicleid, health);
        if(vehicleHealth[vehicleid] != health)
        {
            OnChangeVehicleHealth(vehicleid, vehicleHealth[vehicleid], health);
            vehicleHealth[vehicleid] = health;
        }
    }
    return 1;
}

O ideal era utilizar um timer, e não a OnPlayerUpdate. A public OnPlayerUpdate é chamada mais de 200 vezes por segundo, o que torna o gamemode menos otimizado. Se você criar um timer de 1 segundo, a função seria executada por apenas 1 vez no mesmo tempo.