PreviewModelDialog.inc - Raayzeck - 28/09/2020
PreviewModelDialog.inc
Versão: 4.6 || Ultima atualização: 29 de Março, 2018
Esta include apresenta a você um novo estilo de diálogo: "DIALOG_STYLE_PREVIEW_MODEL". Um dialog parecido com o normal, mas com modelos de visualização em forma de lista!
Funcionalidades:
- Sem limites de tamanho
Por causa do Pawn-Memory, todos os itens de lista são alocados dinamicamente, o que significa que você pode ter quantos itens de lista quiser!
- Sem pré-alocação de memória
A memória para armazenar os dados dos itens do diálogo do jogador é feita durante o tempo de execução, sem memória pré-alocada de todo! Portanto, não há grandes tamanhos do arquvio .amx!
- Visualização grande o suficiente
Um modelo de visualização razoavelmente grande e intratável, listitem textdraw / botão, permitindo que você visualize os modelos com clareza!
- Botões de rotação e zoom
Você pode girar o ângulo Z de cada item da lista enquanto visualiza a caixa de diálogo, este é um recurso do jogo acessado pelo jogador que visualiza a caixa de diálogo.Da mesma forma, você tem outros botões para aumentar / diminuir o zoom do modelo.
![[Imagem: qYakehh.png]](https://i.imgur.com/qYakehh.png)
- Uma barra de rolagem perfeita
A barra de rolagem é feita de Sprite (LD_SPAC: WHITE) permitindo uma medição perfeita do comprimento de acordo com o tamanho da página!
- Códigos GameText em itens de lista
Como a caixa de diálogo é feita com desenhos de texto puros, você pode usar códigos de etiqueta (por exemplo, ~ n ~ - linha de mudança ou ~ r ~ - cor vermelha) no texto de etiqueta do modelo de visualização.
- Hooked ShowPlayerDialog
Suporte a função de diálogo samp "ShowPlayerDialog" e você pode lidar com a resposta em "OnDialogResponse". Verifique os exemplos de como usar.Adicionando rotação / cor personalizadaVocê pode definir a rotação de cada modelo usando um padrão de string simples enquanto faz a lista da caixa de diálogo.
Exemplo:
Iremos fazer a lista de três carros e setar a rotação (0.0, 0.0, -50.0, 1.0).
Aviso: A string destacada entre colchetes, é como você define a rotação.
Código PHP: 400(0.0, 0.0, -50.0, 1.0)\tLandstalker\n\ 401(0.0, 0.0, -50.0, 1.0)\tBravura\n\ 402(0.0, 0.0, -50.0, 1.0)\tBuffalo
Exemplo 2:
Aqui iremos modificar, primeiramente, a rotação do carro (0.0, 0.0, 0.0, 0.75) e também as cores (0, 6).
Aviso: Os demais modelos terão valores padrão para rotação (0,0, 0,0, -45,0, 1,0) e cores (-1, -1).
Código PHP: 522(0.0, 0.0, 0.0, 0.75, 0, 6)\tNRG-500\n\ 523\tHPV1000\n\ 521\tFCR-900
Conclusão:
Então, basicamente, este é o padrão para criar itens de lista:
Código PHP: modelid(ROTX, ROTY, ROTZ, ZOOM, COLOR1, COLOR2)\tTEXT
Exemplo: ShowPlayerDialog Básico
Um dialog simples de seleção de skins com todas as skins samp como itens de lista.
Código PHP: CMD:skins(playerid) { const MAX_SKINS = 312; static string[MAX_SKINS * 16];
if (string[0] == EOS) { for (new i; i < MAX_SKINS; i++) { format(string, sizeof string, "%s%i\tID: %i\n", string, i, i); } }
return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PREVIEW_MODEL, "Escolher skin", string, "Selecionar", "Cancelar"); }
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if (dialogid == 0) { if (response) { SetPlayerSkin(playerid, listitem); GameTextForPlayer(playerid, "~g~Skin alterada!", 3000, 3); } } return 1; }
Exemplo: ShowPlayerDialog com Rotações Alteradas
Código PHP: enum E_WEAPON_SHOP_DATA { WEAPON_MODELID, WEAPON_NAME[35], WEAPON_PRICE, WEAPON_AMMO, WEAPON_ID };
new const WEAPON_SHOP[][E_WEAPON_SHOP_DATA] = { {335, "Knife", 0, 1, WEAPON_KNIFE}, {341, "Chainsaw", 1500, 1, WEAPON_CHAINSAW}, {342, "Grenade", 1545, 1, WEAPON_GRENADE}, {343, "Moltove", 1745, 1, WEAPON_MOLTOV}, {347, "Silenced 9mm", 1500, 150, WEAPON_SILENCED}, {348, "Desert Eagle", 3199, 150, WEAPON_DEAGLE}, {350, "Sawed Off Shotgun", 4999, 100, WEAPON_SAWEDOFF}, {351, "Spas12 Shotgun", 3870, 100, WEAPON_SHOTGSPA}, {352, "Micro-UZI", 3500, 300, WEAPON_UZI}, {353, "MP5", 2999, 200, WEAPON_MP5}, {372, "Tec-9", 3500, 300, WEAPON_TEC9}, {358, "Sniper Rifle", 4999, 50, WEAPON_SNIPER}, {355, "Ak47", 2999, 200, WEAPON_AK47}, {356, "M4", 3155, 200, WEAPON_M4}, {359, "RPG", 1999, 1, WEAPON_ROCKETLAUNCHER}, {361, "Flamethrower", 3500, 350, WEAPON_FLAMETHROWER}, {362, "Minigun", 10000, 350, WEAPON_MINIGUN}, {363, "Satchel Charge", 1999, 2, WEAPON_SATCHEL}, {365, "Spray Can", 800, 200, WEAPON_SPRAYCAN}, {366, "Fire Extinguisher", 855, 200, WEAPON_FIREEXTINGUISHER} };
CMD:armas(playerid) { static string[sizeof(WEAPON_SHOP) * 64];
if (string[0] == EOS) { for (new i; i < sizeof(WEAPON_SHOP); i++) { format(string, sizeof string, "%s%i(0.0, 0.0, -50.0, 1.5)\t%s~n~~g~~h~$%i\n", string, WEAPON_SHOP[i][WEAPON_MODELID], WEAPON_SHOP[i][WEAPON_NAME], WEAPON_SHOP[i][WEAPON_PRICE]); } }
return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PREVIEW_MODEL, "Armas", string, "Comprar", "Cancelar"); }
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if (dialogid == 1) { if (response) { if (GetPlayerMoney(playerid) < WEAPON_SHOP[listitem][WEAPON_PRICE]) { SendClientMessage(playerid, 0xAA0000FF, "Você não possui dinheiro!"); return cmd_weapons(playerid); } GivePlayerMoney(playerid, -WEAPON_SHOP[listitem][WEAPON_PRICE]); GivePlayerWeapon(playerid, WEAPON_SHOP[listitem][WEAPON_ID], WEAPON_SHOP[listitem][WEAPON_AMMO]); GameTextForPlayer(playerid, "~g~Arma comprada!", 3000, 3); } } return 1; }
Download:
PreviewModelDialog.inc (v4.6): https://github.com/Agneese-Saini/SA-MP/blob/f775a86d03461cd1580854d1bbd871fd14fc0a4e/pawno/include/PreviewModelDialog.inc
Para utilizar essa include, será necessário instalar o Pawn-Memory plugin.
Link: https://github.com/BigETI/pawn-memory
Créditos:
Gammix pela criação da include PreviewModelDialog.
BigETI pela criação do plugin Pawn-Memory.
|