Criando dialogs utilizando arrays -
CaioTJF - 03.11.2016
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[] = {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 код:
#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 код:
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
Re: Criando dialogs utilizando arrays -
DanDRT - 05.11.2016
Parabens pela iniciativa
Re: Criando dialogs utilizando arrays -
JPedro - 05.11.2016
Уtimo tutorial
![Smiley](images/smilies/smile.png)
, +rep
Re: Criando dialogs utilizando arrays -
teteu99 - 06.11.2016
Parabйns pelo tuto , continue assim !!!! +rep
Re: Criando dialogs utilizando arrays -
Dominguinhos - 17.01.2017
Excelente. Muito bom o tutorial. Me orgulho de ver essa moзada nova engajada no mundo da programaзгo. Sucesso sempre.