SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

Participe do fórum, é rápido e fácil

SSGamers - 12 Anos online por você.

#SSGamers - A Comunidade que mais crescer no brasil!

SSGamers - 12 Anos online por você.

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Chegou o novo tema 6.5.5 - SSGamers - Servidores online de qualidade - Aproveite e entre para nossa comunidade, inscreva-se já! - Ouça nossa web radio - Veja nossas novidades - Participe dos nossos setores de jogos online - Parcerias aberta fale já com um administrador.

    [Tutorial] Criando dialogs utilizando arrays

    Weslley_Script
    Weslley_Script
    SS - Fundador
    SS - Fundador


    Steam Steam : WeslleySSGames
    Zello : WeslleySSGames
    Mensagens : 11379
    Moedas : 1031981
    Data de inscrição : 06/10/2011
    Idade : 28
    Localização : Brasil

    [Tutorial] Criando dialogs utilizando arrays Empty [Tutorial] Criando dialogs utilizando arrays

    Mensagem por Weslley_Script Qua 29 Mar 2023 - 18:18

    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 код:

    Código:
    #define DIALOG_VEHICLES    1
    new Vehicles[] = {560, 437, 411, 481, 510};
    CMD:veiculos(playerid)
    {
        static Dialog[512];
        Dialog[0] = EOS;
        
        for(new i = 0; i < sizeof(Vehicles); i++)
            format(Dialog, sizeof(Dialog),"%s%s\n", Dialog, getVehicleModelName(Vehicles[i]));
        
        ShowPlayerDialog(playerid, DIALOG_VEHICLES, DIALOG_STYLE_LIST, "Lista de Veнculos", Dialog, "Criar", "Cancelar");
    }
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
        if(dialogid == DIALOG_VEHICLES)
        {
            if(!response)
                return true;
            
            static Float:Pos[4], string[128];
            GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
            GetPlayerFacingAngle(playerid, Pos[3]);
            
            AddStaticVehicleEx(Vehicles[listitem], Pos[0]+2, Pos[1], Pos[2], Pos[3], random(100), random(100), -1, false);
            
            format(string, sizeof(string), "Vocк criou um %s.", getVehicleModelName(Vehicles[listitem]));
            SendClientMessage(playerid, -1, string);
            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 код:

    Código:
    #define DIALOG_VEHICLES    1
    new Vehicles[] = {560, 437, 411, 481, 510};
    CMD:veiculos(playerid)
    {
        static Dialog[512];
        Dialog[0] = EOS;
        
        for(new i = 0; i < sizeof(Vehicles); i++)
        {
            if(Vehicles[i] == 560)
                continue;
            
            format(Dialog, sizeof(Dialog),"%s%s\n", Dialog, getVehicleModelName(Vehicles[i]));
        }
        
        ShowPlayerDialog(playerid, DIALOG_VEHICLES, DIALOG_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 код:

    Código:
    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
        if(dialogid == DIALOG_VEHICLES)
        {
            if(!response)
                return true;
            
            static Float:Pos[4], string[128], count;
            count = -1;
            
            for(new i = 0; i < sizeof(Vehicles); i++)
            {
                if(Vehicles[i] == 560)
                    continue;
                
                count += 1;
                if(count == listitem)
                {
                    GetPlayerPos(playerid, Pos[0], Pos[1], Pos[2]);
                    GetPlayerFacingAngle(playerid, Pos[3]);
                    
                    AddStaticVehicleEx(Vehicles[i], Pos[0]+2, Pos[1], Pos[2], Pos[3], random(100), random(100), -1, false);
                    
                    format(string, sizeof(string), "Vocк criou um %s.", getVehicleModelName(Vehicles[i]));
                    SendClientMessage(playerid, -1, string);
                    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 


    Creditos: Caio TJF



    [Tutorial] Criando dialogs utilizando arrays D07Xwqb
    [Tutorial] Criando dialogs utilizando arrays Yjab9HN

      Data/hora atual: Qui 9 maio 2024 - 20:06