[Ajuda] Segundo botгo da Dialog faz a mesma coisa que o primeiro
#1

Quando digita comando aparece o menu com as armas disponнveis certinho. em baixo o comando.

Quote:

if(strcmp("/menu",cmdtext, true, 10)==0)
{

IsPlayerInRangeOfPoint(playerid, 1.0,295.7499,-80.3011,1001.5156);
{
SendClientMessage(playerid, -1, "[SERVE] - Outros tipos de armas sу й possivel de adquirir com um traficante de armas!");
ShowPlayerDialog(playerid,ammulvv,DIALOG_STYLE_LIS T,"Menu","\nM9 com silenciador - R$250\nDesert Eagle - R$ 600\nEscopeta - R$500\nEscopeta de Combate - R$800\nMP5 - R$450\nM4 - R$1800\nSniper - R$2000","Confirmar", "Sair");
}
return 1;
}

Ae quando vou responder a dialog na public public OnDialogResponse, fiz o seguinte.
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Quote:

{
if(dialogid == 2)
{
if(listitem == 0)
{
GivePlayerWeapon(playerid, 23, 50);
GivePlayerMoney(playerid, -250);
SendClientMessage(playerid, verdemarinho,"|INFO| Vocк comprou uma M9 com silenciador 50 ballas por: R$250");
return 1;
}}
else{
SendClientMessage(playerid, -1, "Vocк nгo comprou nada");
}
return 1;
}

Ae na dialog tem o botгo confirmar e sair, quando clico em confirmar compra certinho, mas quando nгo quero comprar( e clico em sair) invйs de aparecer aquele string que coloquei no else faz й comprar a arma.

PRINT: http://imgur.com/a/tmYqG

Se alguйm pode me ajudar por favor, isso jб estar me deixando de cabelos em pйs.
Reply
#2

Faz assim:
Код:
  if(!response) return -1; //Se a resposta for apertar Esc ou o segundo botгo, ele vai fechar a dialog
Reply
#3

Код:
if (response) {
	// FUNЗГO DO PRIMEIRO BOTГO
} else {
	// FUNЗГO DO SEGUNDO BOTГO
}
so coloca depois do dialog:

Код:
if (dialogid == 2)
	if (response) {
		// FUNЗГO DO PRIMEIRO BOTГO
	} else {
		// FUNЗГO DO SEGUNDO BOTГO
	}
Se vc deseja que o 2є botaгo nao faзa nada , e simples feche... use o codigo que o Ermanhaut deu... й mais simples

Sу coloca logo depois da condiзгo de escolha do dialogid

Код:
if (dialogid == 2) {
	if (!response) return 1;
	// SEU CODIGO AQUI
}
ps: porfavor nгo faзa "return -1", tente sempre fazer return de boolean (1 = true / positivo) (0 = false / negativo) , vamos seguir um standart blz?
(pelo menos em situaзхes como essa)

ps2: neste caso o correcto seria return 1, pois o dialog foi tratado correctamente... return 0 a MEU ver, deveria ficar no fundo do OnDialogResponse , pois sу iria chegar lб caso nгo encontrasse a funзгo para o dialogid correspondente.

espero ter conseguido ajudar
Reply
#4

Quote:
Originally Posted by klap
Посмотреть сообщение
so coloca depois do dialog:

Код:
if(dialogid == 2)
	if(response) {
		// FUNЗГO DO PRIMEIRO BOTГO
	} else {
		// FUNЗГO DO SEGUNDO BOTГO
	}
faltou so essas chaves aqui:

Код:
if(dialogid == 2) 	
{ // <=
    if(response) { 		// FUNЗГO DO PRIMEIRO BOTГO 	
    } else { 		// FUNЗГO DO SEGUNDO BOTГO 	}
}// <=
Reply
#5

Quote:
Originally Posted by moura98
Посмотреть сообщение
faltou so os parenteses aqui:

Код:
if(dialogid == 2) 	
{ // <=
    if(response) { 		// FUNЗГO DO PRIMEIRO BOTГO 	
    } else { 		// FUNЗГO DO SEGUNDO BOTГO 	}
}// <=
na verdade nao faltou ... eles nao sгo necessarios... todo o if com apenas 1 instruзгo nao necessita parenteses....

exemplo : if(!valid) return 1;

isso й um if sem parenteses , visto que sу tem uma instruзгo...

igual o if que mandei....
sу tem 1 instruзгo (o 2є if) , dai nao necessita parenteses...
as restantes instruзхes , jб sгo instruзхes dependentes do 2є if, dai necessitam o {}

essa estrutura ainda por cima nгo tem else's nem nada do tipo... dai precisa ficar sujando o codigo com parenteses

a meu ver, a unica utilidade de colocar parentes nesse bloco de codigo... seria apenas para colocar um return 1;

Код:
if (dialogid == 2) {
    if (response) { 
		// FUNЗГO DO PRIMEIRO BOTГO 	
    } else { 
		// FUNЗГO DO SEGUNDO BOTГO 	
    }
    return 1;
}
e referente ao edit que fez:

Код:
if(response) { 		// FUNЗГO DO PRIMEIRO BOTГO 	
    } else { 		// FUNЗГO DO SEGUNDO BOTГO 	}
em colocar tudo inline...
num standart de programaзгo... condiзхes apenas sгo inline a funзхes quando apenas existe 1 , e apenas 1 delas.
quando existe mais do que um comando / operaзгo... nao faзa in line porfavor '-'
Reply
#6

eu quis dizer chaves, digitei errado, qnt ao q vc falou sobre nao precisar chaves com uma instruзгo acho q eh verdade, qnd estudava pascal era assim tbm, vou testar dps qnd tiver tempo
Reply
#7

Quote:
Originally Posted by moura98
Посмотреть сообщение
eu quis dizer chaves, digitei errado, qnt ao q vc falou sobre nao precisar chaves com uma instruзгo acho q eh verdade, qnd estudava pascal era assim tbm, vou testar dps qnd tiver tempo
isso, chaves, eu falei parenteses pq vc falou hue... tb fiquei com brain freeze xD

fico feliz em ter ajudado
Reply
#8

Quote:
Originally Posted by klap
Посмотреть сообщение
Код:
if (response) {
	// FUNЗГO DO PRIMEIRO BOTГO
} else {
	// FUNЗГO DO SEGUNDO BOTГO
}
so coloca depois do dialog:

Код:
if (dialogid == 2)
	if (response) {
		// FUNЗГO DO PRIMEIRO BOTГO
	} else {
		// FUNЗГO DO SEGUNDO BOTГO
	}
Se vc deseja que o 2є botaгo nao faзa nada , e simples feche... use o codigo que o Ermanhaut deu... й mais simples

Sу coloca logo depois da condiзгo de escolha do dialogid

Код:
if (dialogid == 2) {
	if (!response) return 1;
	// SEU CODIGO AQUI
}
ps: porfavor nгo faзa "return -1", tente sempre fazer return de boolean (1 = true / positivo) (0 = false / negativo) , vamos seguir um standart blz?
(pelo menos em situaзхes como essa)

ps2: neste caso o correcto seria return 1, pois o dialog foi tratado correctamente... return 0 a MEU ver, deveria ficar no fundo do OnDialogResponse , pois sу iria chegar lб caso nгo encontrasse a funзгo para o dialogid correspondente.

espero ter conseguido ajudar
Mano vocк й lezado? vocк nгo viu o codigo que eu usei? e exatamente oque vc disse -_-
Reply
#9

Vocк conseguiu resolver seu problema Overkiller?
Reply
#10

Quote:
Originally Posted by Ermanhaut
Посмотреть сообщение
Faz assim:
Код:
  if(!response) return -1; //Se a resposta for apertar Esc ou o segundo botгo, ele vai fechar a dialog
return -1;

A Funзгo return nada mais й do que um simples retorno para a callback. Ele geralmente й usada para enviar instruзхes de comportamento do cуdigo. No caso do tуpico, seria muito errado utilizar esse seu mйtodo de retorno pois a Callback contйm uma simples bool (true/false)(referencia). E que pode influenciar no andamento de todo o script, Pois se alguma requisiзгo na callback OnDialogResponse precisar de retorno, encontrarб erro.




Quote:
Originally Posted by klap
Посмотреть сообщение
Код:
if (response) {
	// FUNЗГO DO PRIMEIRO BOTГO
} else {
	// FUNЗГO DO SEGUNDO BOTГO
}
so coloca depois do dialog:

Код:
if (dialogid == 2)
	if (response) {
		// FUNЗГO DO PRIMEIRO BOTГO
	} else {
		// FUNЗГO DO SEGUNDO BOTГO
	}
Se vc deseja que o 2є botaгo nao faзa nada , e simples feche... use o codigo que o Ermanhaut deu... й mais simples

Sу coloca logo depois da condiзгo de escolha do dialogid

Код:
if (dialogid == 2) {
	if (!response) return 1;
	// SEU CODIGO AQUI
}
ps: porfavor nгo faзa "return -1", tente sempre fazer return de boolean (1 = true / positivo) (0 = false / negativo) , vamos seguir um standart blz?
(pelo menos em situaзхes como essa)

ps2: neste caso o correcto seria return 1, pois o dialog foi tratado correctamente... return 0 a MEU ver, deveria ficar no fundo do OnDialogResponse , pois sу iria chegar lб caso nгo encontrasse a funзгo para o dialogid correspondente.

espero ter conseguido ajudar
Код:
if (dialogid == 2)
	if (response) {
		// FUNЗГO DO PRIMEIRO BOTГO
	} else {
		// FUNЗГO DO SEGUNDO BOTГO
	}
Seu mйtodo de organizaзгo й pouco estranho, e isso deixarб mais difнcil na leitura caso houver algum erro de { } no cуdigo (mas nгo deixa de estar correto).
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)