Portal SAMP
[Pedido] comando de nitro - 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: [Pedido] comando de nitro (/showthread.php?tid=4682)



comando de nitro - LOS_SANTOS - 08/04/2024

gostaria de saber como crio um comando de adicionar nitro em veiculos , mas que nao funcione em motos, barcos ,helicopteros ,bicicleta 
em zcmd 
Código:
CMD:nitro(playerid)
{
    new vehicleid = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, ">!< voce nao esta em um veiculo");
    if(GetPlayerMoney(playerid) < 300) return SendClientMessage(playerid, RED, ">!< voce nao tem dinheiro suficiente para comprar nitro.");
    AddVehicleComponent(vehicleid, 1010); // Nitro
    SendClientMessage(playerid, -1, "<!> voce adicionou o nitro no veiculo");
    SendClientMessage(playerid, -1, ">!< Você comprou nitro por $300.");
    GivePlayerMoney(playerid, -300);
    return 1;
nao sei como posso fazer para que se um player estiver em moto ou aviao ou heli ou barco receba uma mensagem dizendo que esse veiculo nao pode usar nitro , so isso nada a mais


RE: comando de nitro - xbruno1000x - 08/04/2024

Código:
CMD:nitro(playerid)
{
    new vehicleid = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, ">!< voce nao esta em um veiculo");
    if(GetPlayerMoney(playerid) < 300) return SendClientMessage(playerid, RED, ">!< voce nao tem dinheiro suficiente para comprar nitro.");
    if(GetVehicleModel(vehicleid) != 417 && GetVehicleModel(vehicleid) != 425 && GetVehicleModel(vehicleid) != 430 && GetVehicleModel(vehicleid) != 435 && GetVehicleModel(vehicleid) != 441 && GetVehicleModel(vehicleid) != 446 && GetVehicleModel(vehicleid) != 447 && GetVehicleModel(vehicleid) != 448 && GetVehicleModel(vehicleid) != 449 && GetVehicleModel(vehicleid) != 450 &&
        GetVehicleModel(vehicleid) != 452 && GetVehicleModel(vehicleid) != 453 && GetVehicleModel(vehicleid) != 454 && GetVehicleModel(vehicleid) != 460 && GetVehicleModel(vehicleid) != 461 && GetVehicleModel(vehicleid) != 462 && GetVehicleModel(vehicleid) != 463 && GetVehicleModel(vehicleid) != 464 && GetVehicleModel(vehicleid) != 465 && GetVehicleModel(vehicleid) != 468 &&
        GetVehicleModel(vehicleid) != 469 && GetVehicleModel(vehicleid) != 472 && GetVehicleModel(vehicleid) != 473 && GetVehicleModel(vehicleid) != 476 && GetVehicleModel(vehicleid) != 481 && GetVehicleModel(vehicleid) != 484 && GetVehicleModel(vehicleid) != 487 && GetVehicleModel(vehicleid) != 488 && GetVehicleModel(vehicleid) != 493 && GetVehicleModel(vehicleid) != 497 &&
        GetVehicleModel(vehicleid) != 501 && GetVehicleModel(vehicleid) != 509 && GetVehicleModel(vehicleid) != 510 && GetVehicleModel(vehicleid) != 511 && GetVehicleModel(vehicleid) != 512 && GetVehicleModel(vehicleid) != 513 && GetVehicleModel(vehicleid) != 519 && GetVehicleModel(vehicleid) != 520 && GetVehicleModel(vehicleid) != 521 && GetVehicleModel(vehicleid) != 522 &&
        GetVehicleModel(vehicleid) != 523 && GetVehicleModel(vehicleid) != 537 && GetVehicleModel(vehicleid) != 538 && GetVehicleModel(vehicleid) != 539 && GetVehicleModel(vehicleid) != 548 && GetVehicleModel(vehicleid) != 553 && GetVehicleModel(vehicleid) != 563 && GetVehicleModel(vehicleid) != 564 && GetVehicleModel(vehicleid) != 569 && GetVehicleModel(vehicleid) != 570 &&
        GetVehicleModel(vehicleid) != 577 && GetVehicleModel(vehicleid) != 581 && GetVehicleModel(vehicleid) != 584 && GetVehicleModel(vehicleid) != 586 && GetVehicleModel(vehicleid) != 590 && GetVehicleModel(vehicleid) != 591 && GetVehicleModel(vehicleid) != 592 && GetVehicleModel(vehicleid) != 593 && GetVehicleModel(vehicleid) != 594 && GetVehicleModel(vehicleid) != 595 &&
        GetVehicleModel(vehicleid) != 606 && GetVehicleModel(vehicleid) != 607 && GetVehicleModel(vehicleid) != 608 && GetVehicleModel(vehicleid) != 610 && GetVehicleModel(vehicleid) != 611)
    {
        AddVehicleComponent(vehicleid, 1010); // Nitro
        SendClientMessage(playerid, -1, "<!> voce adicionou o nitro no veiculo");
        SendClientMessage(playerid, -1, ">!< Você comprou nitro por $300.");
        GivePlayerMoney(playerid, -300);
    }else{
        return SendClientMessage(playerid, -1, "<!> ERRO: Seu veículo não suporta Nitro.");
    }
    return 1;
}

Tenta assim


RE: comando de nitro - Alfarr Heimrik - 17/06/2024

Tem como definir o tempo do nitro? tipo, algo como nitro infinito.
Estava pensando em selecionar uma tecla para executar o comando acima e tirar as verificações,
escolhendo apenas 1: verificar se o player é ADMIN.

Da pra fazer isso ou é preciso esperar aquele tempo de recarga do nitro?

(08/04/2024 23:25)xbruno1000x Escreveu:
Código:
CMD:nitro(playerid)
{
    new vehicleid = GetPlayerVehicleID(playerid);
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, ">!< voce nao esta em um veiculo");
    if(GetPlayerMoney(playerid) < 300) return SendClientMessage(playerid, RED, ">!< voce nao tem dinheiro suficiente para comprar nitro.");
    if(GetVehicleModel(vehicleid) != 417 && GetVehicleModel(vehicleid) != 425 && GetVehicleModel(vehicleid) != 430 && GetVehicleModel(vehicleid) != 435 && GetVehicleModel(vehicleid) != 441 && GetVehicleModel(vehicleid) != 446 && GetVehicleModel(vehicleid) != 447 && GetVehicleModel(vehicleid) != 448 && GetVehicleModel(vehicleid) != 449 && GetVehicleModel(vehicleid) != 450 &&
        GetVehicleModel(vehicleid) != 452 && GetVehicleModel(vehicleid) != 453 && GetVehicleModel(vehicleid) != 454 && GetVehicleModel(vehicleid) != 460 && GetVehicleModel(vehicleid) != 461 && GetVehicleModel(vehicleid) != 462 && GetVehicleModel(vehicleid) != 463 && GetVehicleModel(vehicleid) != 464 && GetVehicleModel(vehicleid) != 465 && GetVehicleModel(vehicleid) != 468 &&
        GetVehicleModel(vehicleid) != 469 && GetVehicleModel(vehicleid) != 472 && GetVehicleModel(vehicleid) != 473 && GetVehicleModel(vehicleid) != 476 && GetVehicleModel(vehicleid) != 481 && GetVehicleModel(vehicleid) != 484 && GetVehicleModel(vehicleid) != 487 && GetVehicleModel(vehicleid) != 488 && GetVehicleModel(vehicleid) != 493 && GetVehicleModel(vehicleid) != 497 &&
        GetVehicleModel(vehicleid) != 501 && GetVehicleModel(vehicleid) != 509 && GetVehicleModel(vehicleid) != 510 && GetVehicleModel(vehicleid) != 511 && GetVehicleModel(vehicleid) != 512 && GetVehicleModel(vehicleid) != 513 && GetVehicleModel(vehicleid) != 519 && GetVehicleModel(vehicleid) != 520 && GetVehicleModel(vehicleid) != 521 && GetVehicleModel(vehicleid) != 522 &&
        GetVehicleModel(vehicleid) != 523 && GetVehicleModel(vehicleid) != 537 && GetVehicleModel(vehicleid) != 538 && GetVehicleModel(vehicleid) != 539 && GetVehicleModel(vehicleid) != 548 && GetVehicleModel(vehicleid) != 553 && GetVehicleModel(vehicleid) != 563 && GetVehicleModel(vehicleid) != 564 && GetVehicleModel(vehicleid) != 569 && GetVehicleModel(vehicleid) != 570 &&
        GetVehicleModel(vehicleid) != 577 && GetVehicleModel(vehicleid) != 581 && GetVehicleModel(vehicleid) != 584 && GetVehicleModel(vehicleid) != 586 && GetVehicleModel(vehicleid) != 590 && GetVehicleModel(vehicleid) != 591 && GetVehicleModel(vehicleid) != 592 && GetVehicleModel(vehicleid) != 593 && GetVehicleModel(vehicleid) != 594 && GetVehicleModel(vehicleid) != 595 &&
        GetVehicleModel(vehicleid) != 606 && GetVehicleModel(vehicleid) != 607 && GetVehicleModel(vehicleid) != 608 && GetVehicleModel(vehicleid) != 610 && GetVehicleModel(vehicleid) != 611)
    {
        AddVehicleComponent(vehicleid, 1010); // Nitro
        SendClientMessage(playerid, -1, "<!> voce adicionou o nitro no veiculo");
        SendClientMessage(playerid, -1, ">!< Você comprou nitro por $300.");
        GivePlayerMoney(playerid, -300);
    }else{
        return SendClientMessage(playerid, -1, "<!> ERRO: Seu veículo não suporta Nitro.");
    }
    return 1;
}

Tenta assim


Tem como definir o tempo do nitro? tipo, algo como nitro infinito.
Estava pensando em selecionar uma tecla para executar o comando acima e tirar as verificações,
escolhendo apenas 1: verificar se o player é ADMIN.

Da pra fazer isso ou é preciso esperar aquele tempo de recarga do nitro?

Eu fiz dessa forma, mas não está funcionando corretamente.
Código PHP:
if(newkeys == KEY_FIRE)
    {
    
    if(IsPlayerInAnyVehicle(playerid))
    
    {
            new 
VehID GetPlayerVehicleID(playerid);
    
        AddVehicleComponent(VehID1010);
    
    }
    } 



RE: comando de nitro - xbruno1000x - 17/06/2024

(17/06/2024 11:31)Alfarr Heimrik Escreveu: Tem como definir o tempo do nitro? tipo, algo como nitro infinito.
Estava pensando em selecionar uma tecla para executar o comando acima e tirar as verificações,
escolhendo apenas 1: verificar se o player é ADMIN.

Da pra fazer isso ou é preciso esperar aquele tempo de recarga do nitro?

Eu fiz dessa forma, mas não está funcionando corretamente.
Código PHP:
if(newkeys == KEY_FIRE)
    {
    
    if(IsPlayerInAnyVehicle(playerid))
    
    {
            new 
VehID GetPlayerVehicleID(playerid);
    
        AddVehicleComponent(VehID1010);
    
    }
    } 

Dessa maneira está correto.

Eu uso algo assim:
Código:
if((newkeys & KEY_FIRE) && IsPlayerInAnyVehicle(playerid))
{
new vehicleid = GetPlayerVehicleID(playerid);
if(PlayerInfo[playerid][pVIP] >= 1) AddVehicleComponent(vehicleid, 1010);
return 1;
}



RE: comando de nitro - Alfarr Heimrik - 17/06/2024

Se eu precisar da KEY FIRE para outras funções, eu posso simplesmente ter 2 funções chamando a KEY, ou eu preciso bolar uma estratégia em uma só chamada?

if(newkeys == KEY_FIRE)
{
sistema de nitro
}
if(newkeys == KEY_FIRE)
{
Algum outro sistema
}


RE: comando de nitro - White_Blue - 17/06/2024

Nunca utilize o operador de igualdade para verificar teclas. Isso é incorreto e pode causar diversos conflitos.

Sempre utilize o operador & (Bitwise AND).

Mais informações na documentação: https://www.open.mp/docs/scripting/callbacks/OnPlayerKeyStateChange


RE: comando de nitro - xbruno1000x - 17/06/2024

(17/06/2024 14:04)Alfarr Heimrik Escreveu: Se eu precisar da KEY FIRE para outras funções, eu posso simplesmente ter 2 funções chamando a KEY, ou eu preciso bolar uma estratégia em uma só chamada?

if(newkeys == KEY_FIRE)
{
    sistema de nitro
}
if(newkeys == KEY_FIRE)
{
    Algum outro sistema
}

Não há nenhum problema em utilizar duas vezes a mesma tecla, desde que tenha feito as condições de maneira correta.

Por exemplo:
Irei usar a KEY_FIRE dentro do veículo para o nitro e fora do carro para acessar portas.

Código:
if((newkeys & KEY_FIRE) && IsPlayerInAnyVehicle(playerid)){
    sistema de nitro;
}

if((newkeys & KEY_FIRE) && !IsPlayerInAnyVehicle(playerid)){
    setPlayerPos();
}



RE: comando de nitro - Calasans - 18/06/2024

Invés de criar um comando com várias verificações para executar coisas simples, basta usar a biblioteca VeiculoFuncoes e criar um simples comando. Veja um exemplo:

Código PHP:
CMD:nitro(playerid)
{
    new vehicleid GetPlayerVehicleID(playerid);
    //
    if(!IsPlayerInAnyVehicle(playerid))
        return SendClientMessage(playeridRED">!< voce nao esta em um veiculo");
    if(GetPlayerMoney(playerid) < 300)
        return SendClientMessage(playeridRED">!< voce nao tem dinheiro suficiente para comprar nitro.");
    //
    Veiculo_Tunar(trueNITRO_0NON_GLOBAL_VEHICLES0xFFFFFFFF"<!> voce adicionou o nitro no veiculo."vehicleidplayerid);
    // true adiciona, false remove.
    // A definição de nitro começa de NITRO_0 e vai até NITRO_2.
    //
    SendClientMessage(playerid, -1">!< Você comprou nitro por $300.");
    //
    GivePlayerMoney(playerid, -300);
    //
    return true;


A versão 1.0.4 está em desenvolvimento, e terá suporte a adicionar setas aos veículos, utilizar MapIcons e entre outras coisas que poderá utilizar.


RE: comando de nitro - Alfarr Heimrik - 23/06/2024

(17/06/2024 18:07)White_Blue Escreveu: Nunca utilize o operador de igualdade para verificar teclas. Isso é incorreto e pode causar diversos conflitos.

Sempre utilize o operador & (Bitwise AND).

Mais informações na documentação: https://www.open.mp/docs/scripting/callbacks/OnPlayerKeyStateChange

Eu li o artigo e entendi. Muito obrigado.

(17/06/2024 18:34)xbruno1000x Escreveu:
(17/06/2024 14:04)Alfarr Heimrik Escreveu: Se eu precisar da KEY FIRE para outras funções, eu posso simplesmente ter 2 funções chamando a KEY, ou eu preciso bolar uma estratégia em uma só chamada?

if(newkeys == KEY_FIRE)
{
    sistema de nitro
}
if(newkeys == KEY_FIRE)
{
    Algum outro sistema
}

Não há nenhum problema em utilizar duas vezes a mesma tecla, desde que tenha feito as condições de maneira correta.

Por exemplo:
Irei usar a KEY_FIRE dentro do veículo para o nitro e fora do carro para acessar portas.

Código:
if((newkeys & KEY_FIRE) && IsPlayerInAnyVehicle(playerid)){
    sistema de nitro;
}

if((newkeys & KEY_FIRE) && !IsPlayerInAnyVehicle(playerid)){
    setPlayerPos();
}

Hm entendi. Eu estava com essa dúvida.
Você acha que tem problema usar apenas uma verificação e colocar diversos códigos (funcionalidades)
nele, ou seria bom fazer múltiplas verificações como você demonstrou?


RE: comando de nitro - xbruno1000x - 25/06/2024

(23/06/2024 18:39)Alfarr Heimrik Escreveu:
(17/06/2024 18:34)xbruno1000x Escreveu: Não há nenhum problema em utilizar duas vezes a mesma tecla, desde que tenha feito as condições de maneira correta.

Por exemplo:
Irei usar a KEY_FIRE dentro do veículo para o nitro e fora do carro para acessar portas.

Código:
if((newkeys & KEY_FIRE) && IsPlayerInAnyVehicle(playerid)){
    sistema de nitro;
}

if((newkeys & KEY_FIRE) && !IsPlayerInAnyVehicle(playerid)){
    setPlayerPos();
}

Hm entendi. Eu estava com essa dúvida.
Você acha que tem problema usar apenas uma verificação e colocar diversos códigos (funcionalidades)
nele, ou seria bom fazer múltiplas verificações como você demonstrou?

Se você estiver usando a mesma tecla para coisas muito diferentes, acho boa pratica colocar mais condições. Se fosse apenas newkeys & KEY_FIRE ali, daria o problema de você entrar num local e o servidor também tentar executar o código de nitro. O ideal é isolar o máximo possível as coisas.