28/09/2020 21:39
(Esta mensagem foi modificada pela última vez a: 28/09/2020 21:39 por Raayzeck.)
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.
- 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/b...Dialog.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.