[Tutorial] Criando dialogs utilizando arrays
#1

Nesse tutorial irei ensinar como otimizar suas Dialogs, muita gente faz apenas o "politicamente correto" nas Dialogs e acaba ficando grande o cуdigo, porйm vou mostrar que й possнvel fazer vбrias coisas com poucas linhas.

Vamos comeзar simples, irei fazer um Dialog que listarб veнculos para criaзгo.

Obs.: Irei usar uma funзгo para pegar o nome do modelo do veнculo nesse tutorial, caso vocк queira: http://pastebin.com/6seNBQtY
Desconheзo a autoria da array VehicleFriendlyNames.


PHP код:
#define DIALOG_VEHICLES    1
new Vehicles[] = {560437411481510};
CMD:veiculos(playerid)
{
    static 
Dialog[512];
    
Dialog[0] = EOS;
    
    for(new 
0sizeof(Vehicles); i++)
        
format(Dialogsizeof(Dialog),"%s%s\n"DialoggetVehicleModelName(Vehicles[i]));
    
    
ShowPlayerDialog(playeridDIALOG_VEHICLESDIALOG_STYLE_LIST"Lista de Veнculos"Dialog"Criar""Cancelar");
}
public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(
dialogid == DIALOG_VEHICLES)
    {
        if(!
response)
            return 
true;
        
        static 
Float:Pos[4], string[128];
        
GetPlayerPos(playeridPos[0], Pos[1], Pos[2]);
        
GetPlayerFacingAngle(playeridPos[3]);
        
        
AddStaticVehicleEx(Vehicles[listitem], Pos[0]+2Pos[1], Pos[2], Pos[3], random(100), random(100), -1false);
        
        
format(stringsizeof(string), "Vocк criou um %s."getVehicleModelName(Vehicles[listitem]));
        
SendClientMessage(playerid, -1string);
        return 
true;
    }
    return 
false;

Simples nгo? Basta vocк aumentar a array para adicionar mais veнculos, se fosse fazer esse tipo de comando sem utilizar uma Array, o cуdigo ficaria no minimo enorme.
Agora vamos dificultar mais as coisas, irei fazer a mesma coisa porйm irei filtrar o primeiro veнculo da array.

PHP код:
#define DIALOG_VEHICLES    1
new Vehicles[] = {560437411481510};
CMD:veiculos(playerid)
{
    static 
Dialog[512];
    
Dialog[0] = EOS;
    
    for(new 
0sizeof(Vehicles); i++)
    {
        if(
Vehicles[i] == 560)
            continue;
        
        
format(Dialogsizeof(Dialog),"%s%s\n"DialoggetVehicleModelName(Vehicles[i]));
    }
    
    
ShowPlayerDialog(playeridDIALOG_VEHICLESDIALOG_STYLE_LIST"Lista de Veнculos"Dialog"Criar""Cancelar");

Agora surgiu um problema, teremos que mudar o jeito que recebemos o listitem porque ele agora й diferente da ordem da array.
Por exemplo, no dialog terб os IDs 437, 411, 481 e 510, se ele clicar na primeira opзгo e usarmos Vehicles[listitem], irб ser Vehicles[0] que no caso
seria o veнculo 560 que filtramos para nгo aparecer, como resolvemos isso? Irei mostrar abaixo.

PHP код:
public OnDialogResponse(playeriddialogidresponselistiteminputtext[])
{
    if(
dialogid == DIALOG_VEHICLES)
    {
        if(!
response)
            return 
true;
        
        static 
Float:Pos[4], string[128], count;
        
count = -1;
        
        for(new 
0sizeof(Vehicles); i++)
        {
            if(
Vehicles[i] == 560)
                continue;
            
            
count += 1;
            if(
count == listitem)
            {
                
GetPlayerPos(playeridPos[0], Pos[1], Pos[2]);
                
GetPlayerFacingAngle(playeridPos[3]);
                
                
AddStaticVehicleEx(Vehicles[i], Pos[0]+2Pos[1], Pos[2], Pos[3], random(100), random(100), -1false);
                
                
format(stringsizeof(string), "Vocк criou um %s."getVehicleModelName(Vehicles[i]));
                
SendClientMessage(playerid, -1string);
                break;
            }
        }
        return 
true;
    }
    return 
false;

Se vocк nгo entendeu irei explicar.
Como a ordem da array ficou diferente do listitem, eu montei um loop igual para recriar a ordem.

O listitem na verdade virou a variбvel count, essa variбvel sу soma quando o veнculo nгo for o 560.
Ou seja, somente quando a variбvel count for igual ao listitem que saberemos em qual opзгo o player clicou, porйm terб que usar б variбvel do loop para pegar a informaзгo da array.

Obs.: A variбvel count comeзa com o valor -1 porque o listitem comeзa como 0, assim que o filtro й realizado somamos +1 na variбvel count que vira 0.

Isso da possibilidades de vocк fazer muita coisa, como listar os itens de um inventбrio por exemplo.

Espero que gostem
Reply


Messages In This Thread
Criando dialogs utilizando arrays - by CaioTJF - 03.11.2016, 20:34
Re: Criando dialogs utilizando arrays - by DanDRT - 05.11.2016, 22:48
Re: Criando dialogs utilizando arrays - by JPedro - 05.11.2016, 23:04
Re: Criando dialogs utilizando arrays - by teteu99 - 06.11.2016, 01:15
Re: Criando dialogs utilizando arrays - by Dominguinhos - 17.01.2017, 22:27

Forum Jump:


Users browsing this thread: 1 Guest(s)