[Ajuda] PROBLEMA strcmp
#1

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.
Reply
#2

Coloca um break; a seguir a mensagem
Reply
#3

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).
Reply
#4

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");
    }
}
Reply
#5

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 ?
Reply
#6

Bem tenta colocar um return 1..

O problema й que mostra a dialog id 5007 mas nao faz o loop completo?
Reply
#7

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.
Reply
#8

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.
Reply
#9

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.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)