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.
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(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) { 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(playerid, Dialog_RotasT, DIALOG_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(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) { 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(playerid, Dialog_RotasT, DIALOG_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.
|