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
MUITO OBRIGADO!!
|