[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
#2

Parabens pela iniciativa
Reply
#3

Уtimo tutorial , +rep
Reply
#4

Parabйns pelo tuto , continue assim !!!! +rep
Reply
#5

Excelente. Muito bom o tutorial. Me orgulho de ver essa moзada nova engajada no mundo da programaзгo. Sucesso sempre.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)