Portal SAMP
[Include] PreviewModelDialog.inc - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Lançamentos (https://portalsamp.com/forumdisplay.php?fid=26)
+---- Fórum: Includes (https://portalsamp.com/forumdisplay.php?fid=27)
+---- Tópico: [Include] PreviewModelDialog.inc (/showthread.php?tid=52)



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]

  • 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.00.0, -50.01.0)\tLandstalker\n\
401(0.00.0, -50.01.0)\tBravura\n\
402(0.00.0, -50.01.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.00.00.00.7506)\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(ROTXROTYROTZZOOMCOLOR1COLOR2)\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 iMAX_SKINSi++) {
            format(stringsizeof string"%s%i\tID: %i\n"stringii);
        }
    }

    return ShowPlayerDialog(playerid0DIALOG_STYLE_PREVIEW_MODEL"Escolher skin"string"Selecionar""Cancelar");
}

public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[]) {
    if (dialogid == 0) {
        if (response) {
            SetPlayerSkin(playeridlistitem);
            GameTextForPlayer(playerid"~g~Skin alterada!"30003);
        }
    }
    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"01WEAPON_KNIFE},
    {341"Chainsaw"15001WEAPON_CHAINSAW},
    {342"Grenade"15451WEAPON_GRENADE},
    {343"Moltove"17451WEAPON_MOLTOV},
    {347"Silenced 9mm"1500150WEAPON_SILENCED},
    {348"Desert Eagle"3199150WEAPON_DEAGLE},
    {350"Sawed Off Shotgun"4999100WEAPON_SAWEDOFF},
    {351"Spas12 Shotgun"3870100WEAPON_SHOTGSPA},
    {352"Micro-UZI"3500300WEAPON_UZI},
    {353"MP5"2999200WEAPON_MP5},
    {372"Tec-9"3500300WEAPON_TEC9},
    {358"Sniper Rifle"499950WEAPON_SNIPER},
    {355"Ak47"2999200WEAPON_AK47},
    {356"M4"3155200WEAPON_M4},
    {359"RPG"19991WEAPON_ROCKETLAUNCHER},
    {361"Flamethrower"3500350WEAPON_FLAMETHROWER},
    {362"Minigun"10000350WEAPON_MINIGUN},
    {363"Satchel Charge"19992WEAPON_SATCHEL},
    {365"Spray Can"800200WEAPON_SPRAYCAN},
    {366"Fire Extinguisher"855200WEAPON_FIREEXTINGUISHER}
};

CMD:armas(playerid) {
    static string[sizeof(WEAPON_SHOP) * 64];

    if (string[0] == EOS) {
        for (new isizeof(WEAPON_SHOP); i++) {
            format(stringsizeof string"%s%i(0.0, 0.0, -50.0, 1.5)\t%s~n~~g~~h~$%i\n"stringWEAPON_SHOP[i][WEAPON_MODELID], WEAPON_SHOP[i][WEAPON_NAME], WEAPON_SHOP[i][WEAPON_PRICE]);
        }
    }

    return ShowPlayerDialog(playerid1DIALOG_STYLE_PREVIEW_MODEL"Armas"string"Comprar""Cancelar");
}

public 
OnDialogResponse(playeriddialogidresponselistiteminputtext[]) {
    if (dialogid == 1) {
        if (response) {
            if (GetPlayerMoney(playerid) < WEAPON_SHOP[listitem][WEAPON_PRICE]) {
                SendClientMessage(playerid0xAA0000FF"Você não possui dinheiro!");
                return cmd_weapons(playerid);
            }
            
            GivePlayerMoney
(playerid, -WEAPON_SHOP[listitem][WEAPON_PRICE]);
            GivePlayerWeapon(playeridWEAPON_SHOP[listitem][WEAPON_ID], WEAPON_SHOP[listitem][WEAPON_AMMO]);
            
            GameTextForPlayer
(playerid"~g~Arma comprada!"30003);
        }
    }
    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.