03.11.2016, 20:34
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.
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.
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.
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
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;
}
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");
}
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;
}
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