PROBLEMA strcmp -
Tugamars - 01.02.2015
Bem , eu estou com um cуdigo que й executado como resposta a uma dialog :
Код:
if(listitem == 0)
{
for(new i = 1; i <= 19; i++){
new arquivo[128], nome[256], donoapt[256];
format(arquivo, sizeof(arquivo), "apartamentos/macarthur/apartamento%i.ini", i);
donoapt = DOF2_GetString(arquivo, "dono");
GetPlayerName(playerid, nome, sizeof(nome));
printf("Apartamento: %s",donoapt);
printf("Nome: %s",nome);
if(!strcmp(donoapt, nome,true, sizeof(nome))){
SendClientMessage(playerid, 0xFF0000FF, "Vocк jб possui um apartamento.");
//ShowPlayerDialog(playerid, 5005, DIALOG_STYLE_LIST, "Menu Apartamentos", "Comprar Apartamento\nVender Apartamento", "Selecionar", "Cancelar");
}
else
{
ShowPlayerDialog(playerid, 5007, DIALOG_STYLE_LIST, "Comprar Casa", "Apartamento 1\nApartamento 2\nApartamento 3\nApartamento 4\nApartamento 5\nApartamento 6\nApartamento 7\nApartamento 8\nApartamento 9\nApartamento 10\nApartamento 11\nApartamento 12\nApartamento 13\nApartamento 14\nApartamento 15\nApartamento 16\nApartamento 17\nApartamento 18\nPenthouse", "Selecionar", "Cancelar");
}
}
}
E o objetivo dele й verificar se o nome do jogador estб em algum dos 19 arquivos , e ao verificar que estб num deles ele enviaria "Vocк jб possui um apartamento" , no entanto ele estб a enviar essa mensagem mas mostra a dialog 5007 na mesma .
Eu julgo que o problema estб nos strcmp , se alguйm me conseguir explicar direito como й que й para usar eu agradecia , porque isso estб a dar problemas em todo o cуdigo , nгo sу aqui.
Re: PROBLEMA strcmp -
PT - 01.02.2015
Coloca um break; a seguir a mensagem
Re: PROBLEMA strcmp -
Tugamars - 01.02.2015
Quote:
Originally Posted by PT
Coloca um break; a seguir a mensagem
|
PT , obrigado desde jб , mas ele continua a dar o erro , coloquei asseguir ao ponto e virgula do SendClientMessage isso e continua.
E tenho problema e vбrios outros cуdigos que usem strcmp , num outro cуdigo do GM
Код:
if(!strcmp(donoapt, nome,true, sizeof(nome))){
DOF2_SetString(arquivo, "dono", "Nenhum");
GivePlayerMoney(playerid, PRECO_APARTAMENTO_VENDA);
DOF2_SaveFile();
}
else{
SendClientMessage(playerid, 0xFF0000FF, "Vocк nгo possui um apartamento.");
}
ele executa o primeiro e depois envia vбrias mensagens (nгo sei se estarб relacionado a estar dentro de uma loop).
Re: PROBLEMA strcmp -
PT - 01.02.2015
pawn Код:
for(new i = 1; i <= 19; i++)
{
new arquivo[128], nome[MAX_PLAYER_NAME];
format(arquivo, sizeof(arquivo), "apartamentos/macarthur/apartamento%i.ini", i);
GetPlayerName(playerid, nome, sizeof(nome));
printf("Apartamento: %s",DOF2_GetString(arquivo, "dono"));
printf("Nome: %s",nome);
if(strcmp(nome, DOF2_GetString(arquivo, "dono")) == 0)
{
SendClientMessage(playerid, 0xFF0000FF, "Vocк jб possui um apartamento.");
//ShowPlayerDialog(playerid, 5005, DIALOG_STYLE_LIST, "Menu Apartamentos", "Comprar Apartamento\nVender Apartamento", "Selecionar", "Cancelar");
break;
}
else
{
ShowPlayerDialog(playerid, 5007, DIALOG_STYLE_LIST, "Comprar Casa", "Apartamento 1\nApartamento 2\nApartamento 3\nApartamento 4\nApartamento 5\nApartamento 6\nApartamento 7\nApartamento 8\nApartamento 9\nApartamento 10\nApartamento 11\nApartamento 12\nApartamento 13\nApartamento 14\nApartamento 15\nApartamento 16\nApartamento 17\nApartamento 18\nPenthouse", "Selecionar", "Cancelar");
}
}
Re: PROBLEMA strcmp -
Tugamars - 01.02.2015
Quote:
Originally Posted by PT
pawn Код:
for(new i = 1; i <= 19; i++) { new arquivo[128], nome[MAX_PLAYER_NAME]; format(arquivo, sizeof(arquivo), "apartamentos/macarthur/apartamento%i.ini", i); GetPlayerName(playerid, nome, sizeof(nome)); printf("Apartamento: %s",DOF2_GetString(arquivo, "dono")); printf("Nome: %s",nome); if(strcmp(nome, DOF2_GetString(arquivo, "dono")) == 0) { SendClientMessage(playerid, 0xFF0000FF, "Vocк jб possui um apartamento."); //ShowPlayerDialog(playerid, 5005, DIALOG_STYLE_LIST, "Menu Apartamentos", "Comprar Apartamento\nVender Apartamento", "Selecionar", "Cancelar"); break; } else { ShowPlayerDialog(playerid, 5007, DIALOG_STYLE_LIST, "Comprar Casa", "Apartamento 1\nApartamento 2\nApartamento 3\nApartamento 4\nApartamento 5\nApartamento 6\nApartamento 7\nApartamento 8\nApartamento 9\nApartamento 10\nApartamento 11\nApartamento 12\nApartamento 13\nApartamento 14\nApartamento 15\nApartamento 16\nApartamento 17\nApartamento 18\nPenthouse", "Selecionar", "Cancelar"); } }
|
O problema continua ;S
Mas achei algo interessante na chatlog .
Eu havia colocado antes de :
Код:
if(strcmp(nome, DOF2_GetString(arquivo, "dono")) == 0)
~
um simples debug :
Код:
printf("Apartamento: %s",DOF2_GetString(arquivo, "dono"));
printf("Nome: %s",nome);
E reparei que no server log ,em vez de imprimir 19 mensagens semelhantes a essa imprime apenas 3 :
Код:
Apartamento: Nenhum
Nome: Tugamars_Warning
Apartamento: Nenhum
Nome: Tugamars_Warning
Apartamento: Tugamars_Warning
Nome: Tugamars_Warning
Sendo que o arquivo em que se encontra o nome й o nъmero 3 "apartamento3.ini" logo eu acho que ele estб a pelo menos ler o strcmp , certo ?
Re: PROBLEMA strcmp -
PT - 01.02.2015
Bem tenta colocar um return 1..
O problema й que mostra a dialog id 5007 mas nao faz o loop completo?
Re: PROBLEMA strcmp -
Tugamars - 01.02.2015
Quote:
Originally Posted by PT
Bem tenta colocar um return 1..
O problema й que mostra a dialog id 5007 mas nao faz o loop completo?
|
Nгo , o problema , neste caso , й que ele deveria de fazer "caso os strcmp dessem iguais --> Enviar a mensagem e parar ali , nгo fazer mais nada ." e ele estб a fazer "caso os strcmp derem iguais --> Envia a mensagem e apresenta a dialog 5007" ou seja , ele parece que estб a ir buscar a funзгo do else tambйm.
Re: PROBLEMA strcmp -
PT - 01.02.2015
Esta porque no caso entre o 1 e o 3 ele nao tem.
podes e fazer algo deste genero:
pawn Код:
new bool:TemApartamento[MAX_PLAYERS];
for(new i = 1; i <= 19; i++)
{
new arquivo[128], nome[MAX_PLAYER_NAME];
format(arquivo, sizeof(arquivo), "apartamentos/macarthur/apartamento%i.ini", i);
GetPlayerName(playerid, nome, sizeof(nome));
printf("Apartamento: %s",DOF2_GetString(arquivo, "dono"));
printf("Nome: %s",nome);
if(strcmp(nome, DOF2_GetString(arquivo, "dono")) == 0)
{
TemApartamento[playerid] = true;
break;
}
else
{
TemApartamento[playerid] = false;
}
}
if(TemApartamento[playerid] == true)
{
SendClientMessage(playerid, 0xFF0000FF, "Vocк jб possui um apartamento.");
//ShowPlayerDialog(playerid, 5005, DIALOG_STYLE_LIST, "Menu Apartamentos", "Comprar Apartamento\nVender Apartamento", "Selecionar", "Cancelar");
}
else ShowPlayerDialog(playerid, 5007, DIALOG_STYLE_LIST, "Comprar Casa", "Apartamento 1\nApartamento 2\nApartamento 3\nApartamento 4\nApartamento 5\nApartamento 6\nApartamento 7\nApartamento 8\nApartamento 9\nApartamento 10\nApartamento 11\nApartamento 12\nApartamento 13\nApartamento 14\nApartamento 15\nApartamento 16\nApartamento 17\nApartamento 18\nPenthouse", "Selecionar", "Cancelar");
tens-me no skype? depois eu vir almocar posso te ajudar.
Re: PROBLEMA strcmp -
Tugamars - 01.02.2015
Quote:
Originally Posted by PT
Esta porque no caso entre o 1 e o 3 ele nao tem.
podes e fazer algo deste genero:
pawn Код:
new bool:TemApartamento[MAX_PLAYERS];
for(new i = 1; i <= 19; i++) { new arquivo[128], nome[MAX_PLAYER_NAME]; format(arquivo, sizeof(arquivo), "apartamentos/macarthur/apartamento%i.ini", i); GetPlayerName(playerid, nome, sizeof(nome)); printf("Apartamento: %s",DOF2_GetString(arquivo, "dono")); printf("Nome: %s",nome); if(strcmp(nome, DOF2_GetString(arquivo, "dono")) == 0) { TemApartamento[playerid] = true; break; } else { TemApartamento[playerid] = false; } } if(TemApartamento[playerid] == true) { SendClientMessage(playerid, 0xFF0000FF, "Vocк jб possui um apartamento."); //ShowPlayerDialog(playerid, 5005, DIALOG_STYLE_LIST, "Menu Apartamentos", "Comprar Apartamento\nVender Apartamento", "Selecionar", "Cancelar"); } else ShowPlayerDialog(playerid, 5007, DIALOG_STYLE_LIST, "Comprar Casa", "Apartamento 1\nApartamento 2\nApartamento 3\nApartamento 4\nApartamento 5\nApartamento 6\nApartamento 7\nApartamento 8\nApartamento 9\nApartamento 10\nApartamento 11\nApartamento 12\nApartamento 13\nApartamento 14\nApartamento 15\nApartamento 16\nApartamento 17\nApartamento 18\nPenthouse", "Selecionar", "Cancelar");
tens-me no skype? depois eu vir almocar posso te ajudar.
|
Hum , eu depois vejo aqui e adapto o cуdigo todo para isso. Porque o que eu queria era se verificasse aquilo pelo menos 1 vez entre as 19 , e achei que estava certo o cуdigo .
Devo te ter no skype sim , nгo sei.