[Ajuda] Arrays, Strings e Dialogs
#1

Opa raphese e girls tambйm

Bom, estou desenvolvendo um sistema de concessionaria para meu servidor e estou com um problema:

O que eu quero fazer й:

Pegar uma array com o nome de alguns carros fazer um loop fazendo com que todos sejam imprimidos em um dialog, eu fiz um codigo simples e que atй funcionou... porйm isso foi no console do servidor(teste)

@Log do servidor
Код:
[01:05:20] 
[01:05:20] Filterscripts
[01:05:20] ---------------
[01:05:20]   Loading filterscript 'Conce.amx'...
[01:05:20] Bravura
[01:05:20] Sentinel
[01:05:20] Manana
[01:05:20] Premier
[01:05:20] Tamba
[01:05:20]   Loaded 1 filterscripts.
porйm quando eu entro na dialog aparece somente o ultimo carro no caso o Tamba 50.000$

@array
Код:
new CarrosNomesSedan[][] =
{
	"Bravura", "Sentinel", "Manana", "Premier", "Tamba"
};
@funзгo
Код:
stock GetCarroModelSedan()
{
	static Modelo[60];
	for(new i = 0; i < sizeof(CarrosNomesSedan); i++)
	{
		format(Modelo, 60, "%s", CarrosNomesSedan[i]);
		printf("%s", Modelo);
	}
	return Modelo;
}
@dialog
Код:
stock ShowDialogCategorias(playerid, DialogID)
{
	new StringMSG[500];
	switch(DialogID)
	{
	    case DIALOG_CARROS_SEDAN:
	    {
	        format(StringMSG, sizeof(StringMSG), "%s\t 50.000$", GetCarroModelSedan());
	        ShowPlayerDialog(playerid, DIALOG_CARROS_SEDAN, DIALOG_STYLE_TABLIST, "Sedans", StringMSG, "Comprar", "Sair");
	    }
	}
}
Reply
#2

Vocк precisa usar STRCAT.

https://sampwiki.blast.hk/wiki/Strcat

E entгo a cada iteraзгo do loop, usar strcat. Nгo se esqueзa de usar \n no final do nome de cada veнculo para criar um novo listitem na dialog.

PHP код:
stock Juntar()
{
    static 
giant[800];
    
    
strcat(giant,"Lansdstalker\n",800);
    
strcat(giant,"Infernus\n",800);
    
strcat(giant,"Bravura\n",800);
    
    print(
giant);

Espero ter ajudado
Reply
#3

Entendi @arakuta

porйm surge um novo problema...

@serverlog
Код:
[10:56:56] Bravura	50.000$

[10:56:56] Bravura	50.000$
Sentinel	50.000$

[10:56:56] Bravura	50.000$
Sentinel	50.000$
Manana	50.000$

[10:56:56] Bravura	50.000$
Sentinel	50.000$
Manana	50.000$
Premier	50.000$
repetiзгo! na dialog ele faz o loop repetir... ficando:
Код:
Bravura	50.000$
Sentinel	50.000$
Manana	50.000$
Premier	50.000$
Bravura	50.000$
Sentinel	50.000$
Manana	50.000$
Premier	50.000$
Penso que o motivo disso й porque o loop faz:
array[0]

array[0]
array[1]
...
atй a array[4]

Код:
stock GetCarroModelSedan()
{
	static Giant[800];
	for(new i = 0; i < sizeof(CarrosNomesSedan); i++)
	{
		strcat(Giant, CarrosNomesSedan[i], 800);
		printf("%s", Giant);
	}
	return Giant;
}
Como resolvo isso?
Reply
#4

Por que static nгo й destruнdo no final da execuзгo do bloco de cуdigo, mantendo seu valor na memуria para a proxima execuзгo.

Vocк precisa limpar a string antes.

PHP код:
Giant "";
// e entгo faзa o loop etc 
Outra dica que dou й que caso essa string nгo seja dinвmica, seja sempre a mesma, vocк pode economizar um pouquinho do processador utilizando memуria, deixando a string global e formatando ela ao iniciar o servidor

PHP код:
new Giant[800]; // global

// em ongamemodeinit faзa o mesmo que aquele loop

// e entгo sempre que precisar da lista, ela jб estб pronta.

print(Giant); 
Espero ter ajudado

Leia: https://sampforum.blast.hk/showthread.php?tid=235924
Reply
#5

@arakuta resolvido!
Reply
#6

Eu tinha comentado porйm sai de casa e sу voltei hoje, dai reparei que nгo tinha enviado pois eu havia comentado um post bem recente mas oque vale й a intenзгo tmj kkkk.
PHP код:
stock GetCarroModelSedan()
{
    new 
Giant[800];
    for(new 
0sizeof(CarrosNomesSedan); i++) strcat(GiantCarrosNomesSedan[i]);
    return 
Giant;

Reply
#7

Todo aprendizado й importante XD
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)