Portal SAMP
[Ajuda] Organização e dúvida quanto a verificações. - 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] Organização e dúvida quanto a verificações. (/showthread.php?tid=4141)



Organização e dúvida quanto a verificações. - Alfarr Heimrik - 30/10/2023

Olá a todos. Novamente estou aqui precisando de ajuda. Desta vez é a seguinte:


Código:
if(listitem == 0)
            {
                if(Trabalhando[playerid] == true) // Se estiver com cartão batido
                {
                    Trabalhando[playerid] = false; // Vai acontecer isto.
                    SendClientMessage(playerid, -1, "{CFCFCF}||{00FF00}K{CFCFCF}|| Você não está mais trabalhando.");
                }
                else
                {
                    Trabalhando[playerid] = true; // Else = Ou se if(Trabalhando[playerid] == true) na linha 1 for false, o comando abaixo sera executado.
                    SendClientMessage(playerid, -1, "{CFCFCF}||{00FF00}K{CFCFCF}|| Cartão batido. Agora você está trabalhado.");
                }
            }
            if(listitem == 1) // Entregar o caminhão do trabalho transportador.
            {
                if(Player[playerid][pEmprego] != 1) return SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não é um funcionário transportador.");
                  if(Trabalhando[playerid] == false) return SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não bateu ponto (Cartão), portanto não poderá iniciar nenhuma rota, nem solicitar a saída de nenyum veículo.");
                if(CaminhaoTransportador[playerid] == 0) return SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você ainda não solicitou nenhum veículo.");
                DestroyVehicle(CaminhaoTransportador[playerid]);
                CaminhaoTransportador[playerid] = 0;
                SendClientMessage(playerid, -1, "{CFCFCF}||{00FF00}K{CFCFCF}|| O veículo foi recolhido.");
                DisablePlayerCheckpoint(playerid);
            }
            if(listitem == 2) // Solicitar caminhão do trabalho transportador.
            {
                if(Player[playerid][pEmprego] != 1) return SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não é um funcionário transportador.");
                  if(Trabalhando[playerid] == false) return SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não bateu ponto (Cartão), portanto não poderá iniciar nenhuma rota, nem solicitar a saída de nenyum veículo.");
                if(CaminhaoTransportador[playerid] != 0) return SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você já solicitou um veículo. Entregue-o antes de solicitar outro.");
                CaminhaoTransportador[playerid] = CreateVehicle(609, 2160.8147, -2281.0254, 13.4511, 224.9436, 0, 0, -1);
                SetPlayerCheckpoint(playerid, 2160.8147, -2281.0254, 13.4511, 3.0);
                SendClientMessage(playerid, -1, "{CFCFCF}||{00FF00}K{CFCFCF}|| O veículo solicitado foi estacionado.");
            }
            if(listitem == 3)
            {
                ShowPlayerDialog(playerid, Dialog_RotasT, DIALOG_STYLE_LIST, "Escolha sua rota de trabalho",
                    "{00FF00}Medicamentos: {CFCFCF}Hospital central de LS > Hospital central de SF | {00FF00}R$1.250 \n{00FF00}Medicamentos: {CFCFCF}Hospital central de SF > Hospital central de LV | {00FF00}R$1.250 \n{00FF00}Medicamentos: {CFCFCF}Hospital central de LV > Hospital central de LS | {00FF00}R$1.250 \n{00FF00}Medicamentos: {CFCFCF}Hospital central de LS > Hospital central de LV | {00FF00}R$1.250 \n{00FF00}Medicamentos: {CFCFCF}Hospital central de LV > Hospital central de SF | {00FF00}R$1.250",
                        "Selecionar", "Cancelar");
            }
        }




Como vocês podem ver, estou com essa ultima dialog com quase 500 colunas kk gostaria de colocar mais algumas coisas, mas quando passa das 500 colunas, o compilador acusa varios erros...

Quanto a organização: Essas verificações estão sendo feitas da maneira correta? Porque no jogo, não mostra as mensagens que deveriam mostrar.

Código:
if(listitem == 1) // Entregar o caminhão do trabalho transportador.
            {
                if(Player[playerid][pEmprego] != 1) return SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não é um funcionário transportador.");
                  if(Trabalhando[playerid] == false) return SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não bateu ponto (Cartão), portanto não poderá iniciar nenhuma rota, nem solicitar a saída de nenyum veículo.");
                if(CaminhaoTransportador[playerid] == 0) return SendClientMessage(playerid, -1, "{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você ainda não solicitou nenhum veículo.");
                DestroyVehicle(CaminhaoTransportador[playerid]);
                CaminhaoTransportador[playerid] = 0;
                SendClientMessage(playerid, -1, "{CFCFCF}||{00FF00}K{CFCFCF}|| O veículo foi recolhido.");
                DisablePlayerCheckpoint(playerid);
            }



Neste código, se o player não for um funcionário, será retornado a mensagem, mas não é isso que acontece, pois para que as verificações abaixo funcionem de maneira correta, o player precisa estar com a variável Trabalhando em true.
Para que tiver tempo, por favor analise o primeiro bloco de código que enviei. Obrigado desde já a quem se dispuser a me ajudar. Heart


RE: Organização e dúvida quanto a verificações. - pushline - 30/10/2023

O que seria os 500 erros do compilador? Você pode adicionar vários items no DIALOG_STYLE_LIST como você quiser.
E sobre os listitems, seria bom debugar com printf(s) os valores das variáveis., tente isso aqui e veja o que retorna nos printf(s) que eu adicionei:

Código PHP:
if(listitem == 0)
{
    if(
Trabalhando[playerid] == true// Se estiver com cartão batido
    
{
        
Trabalhando[playerid] = false// Vai acontecer isto.
        
SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| Você não está mais trabalhando.");
    }
    else
    {
        
Trabalhando[playerid] = true// Else = Ou se if(Trabalhando[playerid] == true) na linha 1 for false, o comando abaixo sera executado.
        
SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| Cartão batido. Agora você está trabalhado.");
    }
}

if(
listitem == 1// Entregar o caminhão do trabalho transportador.
{
    if(
Player[playerid][pEmprego] != 1
        return 
SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não é um funcionário transportador.");

    if(
Trabalhando[playerid] == false)
        return 
SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não bateu ponto (Cartão), portanto não poderá iniciar nenhuma rota, nem solicitar a saída de nenyum veículo.");
    
    if(
CaminhaoTransportador[playerid] == 0
        return 
SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você ainda não solicitou nenhum veículo.");

    
printf("[DEBUG] listitem 1 - emprego %d, trabalhando %d"Player[playerid][pEmprego], _:Trabalhando[playerid]);

    
DestroyVehicle(CaminhaoTransportador[playerid]);
    
CaminhaoTransportador[playerid] = 0;
    
SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| O veículo foi recolhido.");
    
DisablePlayerCheckpoint(playerid);
}

if(
listitem == 2// Solicitar caminhão do trabalho transportador.
{
    if(
Player[playerid][pEmprego] != 1
        return 
SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não é um funcionário transportador.");
    
    if(
Trabalhando[playerid] == false
        return 
SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não bateu ponto (Cartão), portanto não poderá iniciar nenhuma rota, nem solicitar a saída de nenyum veículo.");
    
    if(
CaminhaoTransportador[playerid] != 0
        return 
SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você já solicitou um veículo. Entregue-o antes de solicitar outro.");
    
    
printf("[DEBUG] listitem 2 - emprego %d, trabalhando %d"Player[playerid][pEmprego], _:Trabalhando[playerid]);

    
CaminhaoTransportador[playerid] = CreateVehicle(6092160.8147, -2281.025413.4511224.943600, -1);
    
SetPlayerCheckpoint(playerid2160.8147, -2281.025413.45113.0);
    
SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| O veículo solicitado foi estacionado.");
}
if(
listitem == 3)
{
    new 
MEGASTRING[2500];

    
strcat(MEGASTRING"{00FF00}Medicamentos: {CFCFCF}Hospital central de LS > Hospital central de SF | {00FF00}R$1.250 \n");
    
strcat(MEGASTRING"{00FF00}Medicamentos: {CFCFCF}Hospital central de SF > Hospital central de LV | {00FF00}R$1.250 \n");
    
strcat(MEGASTRING"{00FF00}Medicamentos: {CFCFCF}Hospital central de LV > Hospital central de LS | {00FF00}R$1.250 \n");
    
strcat(MEGASTRING"{00FF00}Medicamentos: {CFCFCF}Hospital central de LS > Hospital central de LV | {00FF00}R$1.250 \n");
    
strcat(MEGASTRING"{00FF00}Medicamentos: {CFCFCF}Hospital central de LV > Hospital central de SF | {00FF00}R$1.250");
    
ShowPlayerDialog(playeridDialog_RotasTDIALOG_STYLE_LIST"Escolha sua rota de trabalho"MEGASTRING"Selecionar""Cancelar");




RE: Organização e dúvida quanto a verificações. - Alfarr Heimrik - 30/10/2023

(30/10/2023 08:45)pushline Escreveu: O que seria os 500 erros do compilador? Você pode adicionar vários items no DIALOG_STYLE_LIST como você quiser.
E sobre os listitems, seria bom debugar com printf(s) os valores das variáveis., tente isso aqui e veja o que retorna nos printf(s) que eu adicionei:

Código PHP:
if(listitem == 0)
{
    if(Trabalhando[playerid] == true// Se estiver com cartão batido
    {
        Trabalhando[playerid] = false// Vai acontecer isto.
        SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| Você não está mais trabalhando.");
    }
    else
    {
        Trabalhando[playerid] = true// Else = Ou se if(Trabalhando[playerid] == true) na linha 1 for false, o comando abaixo sera executado.
        SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| Cartão batido. Agora você está trabalhado.");
    }
}

if(
listitem == 1// Entregar o caminhão do trabalho transportador.
{
    if(Player[playerid][pEmprego] != 1
        return SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não é um funcionário transportador.");

    if(Trabalhando[playerid] == false)
        return SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não bateu ponto (Cartão), portanto não poderá iniciar nenhuma rota, nem solicitar a saída de nenyum veículo.");
    
    
if(CaminhaoTransportador[playerid] == 0
        return SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você ainda não solicitou nenhum veículo.");

    printf("[DEBUG] listitem 1 - emprego %d, trabalhando %d"Player[playerid][pEmprego], _:Trabalhando[playerid]);

    DestroyVehicle(CaminhaoTransportador[playerid]);
    CaminhaoTransportador[playerid] = 0;
    SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| O veículo foi recolhido.");
    DisablePlayerCheckpoint(playerid);
}

if(
listitem == 2// Solicitar caminhão do trabalho transportador.
{
    if(Player[playerid][pEmprego] != 1
        return SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não é um funcionário transportador.");
    
    
if(Trabalhando[playerid] == false
        return SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não bateu ponto (Cartão), portanto não poderá iniciar nenhuma rota, nem solicitar a saída de nenyum veículo.");
    
    
if(CaminhaoTransportador[playerid] != 0
        return SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você já solicitou um veículo. Entregue-o antes de solicitar outro.");
    
    printf
("[DEBUG] listitem 2 - emprego %d, trabalhando %d"Player[playerid][pEmprego], _:Trabalhando[playerid]);

    CaminhaoTransportador[playerid] = CreateVehicle(6092160.8147, -2281.025413.4511224.943600, -1);
    SetPlayerCheckpoint(playerid2160.8147, -2281.025413.45113.0);
    SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| O veículo solicitado foi estacionado.");
}
if(
listitem == 3)
{
    new MEGASTRING[2500];

    strcat(MEGASTRING"{00FF00}Medicamentos: {CFCFCF}Hospital central de LS > Hospital central de SF | {00FF00}R$1.250 \n");
    strcat(MEGASTRING"{00FF00}Medicamentos: {CFCFCF}Hospital central de SF > Hospital central de LV | {00FF00}R$1.250 \n");
    strcat(MEGASTRING"{00FF00}Medicamentos: {CFCFCF}Hospital central de LV > Hospital central de LS | {00FF00}R$1.250 \n");
    strcat(MEGASTRING"{00FF00}Medicamentos: {CFCFCF}Hospital central de LS > Hospital central de LV | {00FF00}R$1.250 \n");
    strcat(MEGASTRING"{00FF00}Medicamentos: {CFCFCF}Hospital central de LV > Hospital central de SF | {00FF00}R$1.250");
    ShowPlayerDialog(playeridDialog_RotasTDIALOG_STYLE_LIST"Escolha sua rota de trabalho"MEGASTRING"Selecionar""Cancelar");





Sobre as 500 colunas, eu estava falando disso aqui:
https://ibb.co/XsBGDZ9
https://ibb.co/jRKx2B4

Mas a sua dica com MEGASTRING facilitou muito minha vida !!

Sobre as verificações. Eu não consegui entender.
Código PHP:
if(listitem == 1// Entregar o caminhão do trabalho transportador.
        
    {
        
        if(Player[playerid][pEmprego] != 1) return SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não é um funcionário transportador.");
                  if(Trabalhando[playerid] == false) return SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você não bateu ponto (Cartão), portanto não poderá iniciar nenhuma rota, nem solicitar a saída de nenyum veículo.");
                if(
CaminhaoTransportador[playerid] == 0) return SendClientMessage(playerid, -1"{CFCFCF}||{FF0000}ERRO{CFCFCF}|| Você ainda não solicitou nenhum veículo.");
                DestroyVehicle(CaminhaoTransportador[playerid]);
                
CaminhaoTransportador[playerid] = 0;
                
SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| O veículo foi recolhido.");
                
DisablePlayerCheckpoint(playerid);
            } 

A função deste código é destruir determinado veículo, mas para isso é preciso passar porverificações. Só que as mensagens que deveriam retornar não são entregues, pois é preciso que if(Trabalhando[playerid] == false) sejá if(Trabalhando[playerid] == true)

Eu não entendo isso, pois ela é a segunda verificação e não a primeira.
Estou pensando no seguinte: Talvez isso esteja acontecendo porque a listitem 0 é exatamente sobre if(Trabalhando[playerid] == X)

Código PHP:
if(listitem == 0)
        
    {
        
        if(Trabalhando[playerid] == true// Se estiver com cartão batido
        
        {
        
            Trabalhando[playerid] = false// Vai acontecer isto.
        
            SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| Você não está mais trabalhando.");
        
        }
        
        else
        
        {
                    Trabalhando[playerid] = true// Else = Ou se if(Trabalhando[playerid] == true) na linha 1 for false, o comando abaixo sera executado.
        
            SendClientMessage(playerid, -1"{CFCFCF}||{00FF00}K{CFCFCF}|| Cartão batido. Agora você está trabalhado.");
        
        }
        
    



RE: Organização e dúvida quanto a verificações. - leonardos08bt - 30/10/2023

Se você trabalha com true | false em uma variável, declare ela como booleana "new bool:variável;"
(Alfarr Heimrik)


RE: Organização e dúvida quanto a verificações. - pushline - 30/10/2023

Cara a verificação eu não mudei absolutamente nada, ainda continua sendo teu código igual, única coisa que eu adicionei foi o printf pra saber que valor retorna das variáveis, mas eu coloquei depois dos if's, e era pra ser antes deles.
E sobre o listitem 0, tá correto aquilo, não se preocupa, acho q talvez seja outra coisa q esteja mudando o valor do boolean.


RE: Organização e dúvida quanto a verificações. - Alfarr Heimrik - 30/10/2023

(30/10/2023 09:28)leonardos08bt Escreveu: Se você trabalha com true | false em uma variável, declare ela como booleana "new bool:variável;"
Já está.


(30/10/2023 09:30)pushline Escreveu: Cara a verificação eu não mudei absolutamente nada, ainda continua sendo teu código igual, única coisa que eu adicionei foi o printf pra saber que valor retorna das variáveis, mas eu coloquei depois dos if's, e era pra ser antes deles.
E sobre o listitem 0, tá correto aquilo, não se preocupa, acho q talvez seja outra coisa q esteja mudando o valor do boolean.

Beleza amigo, vou fazer a correção e dar mais uma bizuiada no codigo, acho que deixei algo passar mesmo. Angel