Portal SAMP
[Ajuda] Ajuda em verificação if - 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 em verificação if (/showthread.php?tid=4747)



Ajuda em verificação if - FormigaPWN - 03/05/2024

pessoal boa noite, eu fiz um sistema igual ao do shox do spawnar carro junto com a textdraw la de alguel de carros no spawn civil, eu fiz ele todo so que tive uma encrenca até ai por que eu fiz ele pra quando o player gerar o primeiro carro ele vai de boa, mais quando ele fosse criar outro carro o pirmeiro carro iria ser deletado possibilitando dele gerar só 1 carro no total e a verificação coloquei se ele tiver criado o carro ele será deletado e irá criar outro por cima mais não tá indo alg sabe o pq?
Código:
CMD:criavei(playerid, params[])
{
    new string[1000];
    new CarroNovo;
    if(pegoumoto1[playerid] >= 1 || pegoumoto2[playerid] >= 1)
    {
        DestroyVehicle(CarroNovo);
    }
    for(new i; i < 9; i++)
    {
        if(SlotVeh1[playerid] == 1)
        {
            CarroNovo = CreateVehicle(510, 1316.8069,-1386.9684,13.5958,176.4769,1,1,360, -1, -1, 1);
            PutPlayerInVehicle(playerid,CarroNovo, 0);
            SlotVeh1[playerid] = 0;
            SlotVeh2[playerid] = 0;
            pegoumoto1[playerid] = 1;
            FecharMenuSpawn(playerid);
            break;
        }
        if(SlotVeh2[playerid] == 1)
        {
            CarroNovo = CreateVehicle(462,1316.8069,-1386.9684,13.5958,176.4769 ,1,1,360, -1, -1, 1);
            PutPlayerInVehicle(playerid,CarroNovo, 0);
            SlotVeh1[playerid] = 0;
            SlotVeh2[playerid] = 0;
            pegoumoto2[playerid] = 1;
            FecharMenuSpawn(playerid);
            break;
        }
    }

    // Se o veículo não estiver quebrado, continuar com a lógica normal de criação de veículo

    // Mensagem para mostrar ao jogador
    strcat(string, "{ffffff}Voce pegou um veiculo do spawn civil\n\n");
    strcat(string, "{df5454}Lembre-se: ficar fora dela por mais de 6 minutos, ela\n");
    strcat(string, "{df5454}sera automaticamente destruida.\n\n");
    strcat(string, "{FFFFFF}ALGUMAS DICA PARA INICIANTES:\n");
    strcat(string, "{FFFFFF}1.{999999} Consiga um emprego: Va ate a prefeitura.\n");
    strcat(string, "{999999}Use o comando ''{ffcc99}/gps{999999}''para localizar.\n\n");

    strcat(string, "{FFFFFF}2. Precisa de ajuda?Acesse o menu de ajuda com o comando ''{ffcc99}/ajuda{ffffff}'' ou ''{ffcc99}/faq{ffffff}''\n");
    strcat(string, "{ffffff}para ver as perguntas frequentes.");
    strcat(string, "{999999}Se ainda tiver duvidas,solicite atendimento com o comando ''{ffcc99}/atendimento{999999}''.");

    ShowPlayerDialog(playerid, 999, DIALOG_STYLE_MSGBOX, "Veiculo Spawn Civil", string, "Fechar", "");

    // Configurar o novo veículo
    new vid;
        luz[playerid] = 1;

        EngineCarro[vid] = 1;


    // Retornar para evitar que o restante do código seja executado
    return 1;
}



RE: Ajuda em verificação if - BitSain - 03/05/2024

(03/05/2024 20:56)FormigaPWN Escreveu: pessoal boa noite, eu fiz um sistema igual ao do shox do spawnar carro junto com a textdraw la de alguel de carros no spawn civil, eu fiz ele todo so que tive uma encrenca até ai por que eu fiz ele pra quando o player gerar o primeiro carro ele vai de boa, mais quando ele fosse criar outro carro o pirmeiro carro iria ser deletado possibilitando dele gerar só 1 carro no total e a verificação coloquei se ele tiver criado o carro ele será deletado e irá criar outro por cima mais não tá indo alg sabe o pq?
Código:
CMD:criavei(playerid, params[])
{
    new string[1000];
    new CarroNovo;
    if(pegoumoto1[playerid] >= 1 || pegoumoto2[playerid] >= 1)
    {
        DestroyVehicle(CarroNovo);
    }
    for(new i; i < 9; i++)
    {
        if(SlotVeh1[playerid] == 1)
        {
            CarroNovo = CreateVehicle(510, 1316.8069,-1386.9684,13.5958,176.4769,1,1,360, -1, -1, 1);
            PutPlayerInVehicle(playerid,CarroNovo, 0);
            SlotVeh1[playerid] = 0;
            SlotVeh2[playerid] = 0;
            pegoumoto1[playerid] = 1;
            FecharMenuSpawn(playerid);
            break;
        }
        if(SlotVeh2[playerid] == 1)
        {
            CarroNovo = CreateVehicle(462,1316.8069,-1386.9684,13.5958,176.4769 ,1,1,360, -1, -1, 1);
            PutPlayerInVehicle(playerid,CarroNovo, 0);
            SlotVeh1[playerid] = 0;
            SlotVeh2[playerid] = 0;
            pegoumoto2[playerid] = 1;
            FecharMenuSpawn(playerid);
            break;
        }
    }

    // Se o veículo não estiver quebrado, continuar com a lógica normal de criação de veículo

    // Mensagem para mostrar ao jogador
    strcat(string, "{ffffff}Voce pegou um veiculo do spawn civil\n\n");
    strcat(string, "{df5454}Lembre-se: ficar fora dela por mais de 6 minutos, ela\n");
    strcat(string, "{df5454}sera automaticamente destruida.\n\n");
    strcat(string, "{FFFFFF}ALGUMAS DICA PARA INICIANTES:\n");
    strcat(string, "{FFFFFF}1.{999999} Consiga um emprego: Va ate a prefeitura.\n");
    strcat(string, "{999999}Use o comando ''{ffcc99}/gps{999999}''para localizar.\n\n");

    strcat(string, "{FFFFFF}2. Precisa de ajuda?Acesse o menu de ajuda com o comando ''{ffcc99}/ajuda{ffffff}'' ou ''{ffcc99}/faq{ffffff}''\n");
    strcat(string, "{ffffff}para ver as perguntas frequentes.");
    strcat(string, "{999999}Se ainda tiver duvidas,solicite atendimento com o comando ''{ffcc99}/atendimento{999999}''.");

    ShowPlayerDialog(playerid, 999, DIALOG_STYLE_MSGBOX, "Veiculo Spawn Civil", string, "Fechar", "");

    // Configurar o novo veículo
    new vid;
        luz[playerid] = 1;

        EngineCarro[vid] = 1;


    // Retornar para evitar que o restante do código seja executado
    return 1;
}
Voce está deletando "o carro que você vai criar".
Problema na variável: CarroNovo


RE: Ajuda em verificação if - samuelmatheus0502 - 03/05/2024

Cara seu código está com problema de lógica, por exemplo: esse "for(new i; i < 9; i++)" não está servindo de nada no meu ver e esses break também não está legal, é legal você criar uma lógica que não necessite desse break, e não entendi o motivo dessas variaveis slots, o player deve ter somente um carro ou uma moto? ou ele pode ter um carro e uma moto? porque você está usando a mesma variavel para criar o carro e a moto, então se o player cria um carro primeiro e depois uma moto você perde a rastreabilidade do carro, pois a varivel do carro agora aponta para a moto


RE: Ajuda em verificação if - FormigaPWN - 04/05/2024

Nem deletando ele tá, se ele pelo menos deletasse algum, nem isso ele tá fazendo toda vez que pego lá o carro ele pega normal mais quando vou pegar outro invez de deletar o primeiro ele cria outro por cima, tendeu?


RE: Ajuda em verificação if - samuelmatheus0502 - 04/05/2024

Cara tem muita falta de lógica no seu código. Seria legal você refazer o código, nesse novo código de nomes melhores para as variáveis e a variável carroNovo deve ser CarroNovo[MAX_PLAYERS] porque você está utilizando ela de maneira global e isso não é legal porque se trata do carro de 1 player e não de todos

OBS: seu veículo não é deletado por causa disso

Código:
// nessa linha você cria um carro ID 510 na variavel CarroNovo
CarroNovo = CreateVehicle(510, 1316.8069,-1386.9684,13.5958,176.4769,1,1,360, -1, -1, 1);
// aí se o player digitar novamente o comando ele executa essa linha, criando outro veículo na variavel CarroNovo, com isso ele perde a memória daquele carro ali em cima, porque você pediu para o motor do código apontar para esse carro da linha de baixo
CarroNovo = CreateVehicle(462,1316.8069,-1386.9684,13.5958,176.4769 ,1,1,360, -1, -1, 1);



RE: Ajuda em verificação if - xbruno1000x - 05/05/2024

Seria melhor refatorar esse código, tem muitos erros de lógica de programação nele.

Código:
for(new i; i < 9; i++)
    {
        if(SlotVeh1[playerid] == 1)
        {
            CarroNovo = CreateVehicle(510, 1316.8069,-1386.9684,13.5958,176.4769,1,1,360, -1, -1, 1);
            PutPlayerInVehicle(playerid,CarroNovo, 0);
            SlotVeh1[playerid] = 0;
            SlotVeh2[playerid] = 0;
            pegoumoto1[playerid] = 1;
            FecharMenuSpawn(playerid);
            break;
        }
        if(SlotVeh2[playerid] == 1)
        {
            CarroNovo = CreateVehicle(462,1316.8069,-1386.9684,13.5958,176.4769 ,1,1,360, -1, -1, 1);
            PutPlayerInVehicle(playerid,CarroNovo, 0);
            SlotVeh1[playerid] = 0;
            SlotVeh2[playerid] = 0;
            pegoumoto2[playerid] = 1;
            FecharMenuSpawn(playerid);
            break;
        }
    }

Esse trecho por exemplo tem um looping roda 9 vezes atoa. O i nem é usado pra nada.

Código:
if(pegoumoto1[playerid] >= 1 || pegoumoto2[playerid] >= 1)
    {
        DestroyVehicle(CarroNovo);
    }
Esse trecho tem um problema em função da variável ser local. Esse variável só permanece alocada em memória enquanto o código estiver sendo executado. Depois que você executar o comando, esse variável CarroNovo já não vai existir quando for executar novamente, então não vai deletar nenhum veículo. Ela teria que ser global pra deletar algo.

A dialog está ok, nada de errado nela.


RE: Ajuda em verificação if - FormigaPWN - 05/05/2024

(05/05/2024 02:09)xbruno1000x Escreveu: Seria melhor refatorar esse código, tem muitos erros de lógica de programação nele.

Código:
    for(new i; i < 9; i++)
    {
        if(SlotVeh1[playerid] == 1)
        {
            CarroNovo = CreateVehicle(510, 1316.8069,-1386.9684,13.5958,176.4769,1,1,360, -1, -1, 1);
            PutPlayerInVehicle(playerid,CarroNovo, 0);
            SlotVeh1[playerid] = 0;
            SlotVeh2[playerid] = 0;
            pegoumoto1[playerid] = 1;
            FecharMenuSpawn(playerid);
            break;
        }
        if(SlotVeh2[playerid] == 1)
        {
            CarroNovo = CreateVehicle(462,1316.8069,-1386.9684,13.5958,176.4769 ,1,1,360, -1, -1, 1);
            PutPlayerInVehicle(playerid,CarroNovo, 0);
            SlotVeh1[playerid] = 0;
            SlotVeh2[playerid] = 0;
            pegoumoto2[playerid] = 1;
            FecharMenuSpawn(playerid);
            break;
        }
    }

Esse trecho por exemplo tem um looping roda 9 vezes atoa. O i nem é usado pra nada.

Código:
    if(pegoumoto1[playerid] >= 1 || pegoumoto2[playerid] >= 1)
    {
        DestroyVehicle(CarroNovo);
    }
Esse trecho tem um problema em função da variável ser local. Esse variável só permanece alocada em memória enquanto o código estiver sendo executado. Depois que você executar o comando, esse variável CarroNovo já não vai existir quando for executar novamente, então não vai deletar nenhum veículo. Ela teria que ser global pra deletar algo.

A dialog está ok, nada de errado nela.

eu tentei refazer o comando e no momento está assim...
Código:
CMD:criavei(playerid, params[])
{
    new string[1000];
    new VehPlayer[MAX_PLAYERS][2];
    if(pegoumoto1[playerid] >= 1)
    {
         DestroyVehicle(VehPlayer[playerid][0]);
    }
    if(pegoumoto1[playerid] >= 1)
    {
        DestroyVehicle(VehPlayer[playerid][1]);
       }
    if(SlotVeh1[playerid] == 1)
    {
        VehPlayer[playerid][0] = CreateVehicle(510, 1316.8069,-1386.9684,13.5958,176.4769,1,1,360, -1, -1, 1);
        PutPlayerInVehicle(playerid, VehPlayer[playerid][0], 0);
        SlotVeh1[playerid] = 0;
        SlotVeh2[playerid] = 0;
        pegoumoto1[playerid] = 1;
        FecharMenuSpawn(playerid);
        return 1;
     }
     if(SlotVeh2[playerid] == 1)
     {
        VehPlayer[playerid][1] = CreateVehicle(462,1316.8069,-1386.9684,13.5958,176.4769 ,1,1,360, -1, -1, 1);
        PutPlayerInVehicle(playerid, VehPlayer[playerid][1], 0);
        SlotVeh1[playerid] = 0;
        SlotVeh2[playerid] = 0;
        pegoumoto2[playerid] = 1;
        FecharMenuSpawn(playerid);
        return 1;

    }

    strcat(string, "{ffffff}Voce pegou um veiculo do spawn civil\n\n");
    strcat(string, "{df5454}Lembre-se: ficar fora dela por mais de 6 minutos, ela\n");
    strcat(string, "{df5454}sera automaticamente destruida.\n\n");
    strcat(string, "{FFFFFF}ALGUMAS DICA PARA INICIANTES:\n");
    strcat(string, "{FFFFFF}1.{999999} Consiga um emprego: Va ate a prefeitura.\n");
    strcat(string, "{999999}Use o comando ''{ffcc99}/gps{999999}''para localizar.\n\n");

    strcat(string, "{FFFFFF}2. Precisa de ajuda?Acesse o menu de ajuda com o comando ''{ffcc99}/ajuda{ffffff}'' ou ''{ffcc99}/faq{ffffff}''\n");
    strcat(string, "{ffffff}para ver as perguntas frequentes.");
    strcat(string, "{999999}Se ainda tiver duvidas,solicite atendimento com o comando ''{ffcc99}/atendimento{999999}''.");

    ShowPlayerDialog(playerid, 999, DIALOG_STYLE_MSGBOX, "Veiculo Spawn Civil", string, "Fechar", "");

    // Configurar o novo veículo
    new vid;
        luz[playerid] = 1;

        EngineCarro[vid] = 1;


    // Retornar para evitar que o restante do código seja executado
    return 1;
}
ele continua sem deletar o veiculo, ele spawna normal mais quandoe ele cria outro veiculo é pro primeiro veiculo criado ele tem que ser deletado mais ele não está sendo deletado, possibilitando a criação de veiculos infinitos, pode ser burricie minha mais eu não tô conseguindo fazer ele ser deletado.


RE: Ajuda em verificação if - samuelmatheus0502 - 05/05/2024

Acredito que o erro está nessa parte do código
Código:
if(pegoumoto1[playerid] >= 1)
    {
         DestroyVehicle(VehPlayer[playerid][0]);
    }
    if(pegoumoto2[playerid] >= 1) // aqui estava  pegoumoto1[playerid] e não pegoumoto2 que seria o correto
    {
        DestroyVehicle(VehPlayer[playerid][1]);
    }



RE: Ajuda em verificação if - BitSain - 05/05/2024

(05/05/2024 10:54)samuelmatheus0502 Escreveu: Acredito que o erro está nessa parte do código
Código:
    if(pegoumoto1[playerid] >= 1)
    {
         DestroyVehicle(VehPlayer[playerid][0]);
    }
    if(pegoumoto2[playerid] >= 1) // aqui estava  pegoumoto1[playerid] e não pegoumoto2 que seria o correto
    {
        DestroyVehicle(VehPlayer[playerid][1]);
    }
Para solucionar o problema, você deve criar a variável VehPlayer 'FORA' do comando. Não dentro do comando, pois a variável sempre que o player usar o comando vai ser recriada por ser variável LOCAL, não GLOBAL


RE: Ajuda em verificação if - FormigaPWN - 05/05/2024

(05/05/2024 10:56)BitSain Escreveu:
(05/05/2024 10:54)samuelmatheus0502 Escreveu: Acredito que o erro está nessa parte do código
Código:
    if(pegoumoto1[playerid] >= 1)
    {
         DestroyVehicle(VehPlayer[playerid][0]);
    }
    if(pegoumoto2[playerid] >= 1) // aqui estava  pegoumoto1[playerid] e não pegoumoto2 que seria o correto
    {
        DestroyVehicle(VehPlayer[playerid][1]);
    }
Para solucionar o problema, você deve criar a variável VehPlayer 'FORA' do comando. Não dentro do comando, pois a variável sempre que o player usar o comando vai ser recriada por ser variável LOCAL, não GLOBAL

Pegou mesmo, ele agora está do jeito que eu esperava Smile 
MUITO OBRIGADO!!