GTAMulti - GTA Türkiye

San Andreas Multiplayer => PAWN Kodlama => Anlatımlar => Konuyu başlatan: Lawnless - 20 Kasım 2019, 04:59:34

Başlık: [ANLATIM] PreviewModelDialog.inc - SA:MP'ta yeni bir GUI tarzı!
Gönderen: Lawnless - 20 Kasım 2019, 04:59:34
Nedir bu PreviewModelDialog.inc?

Bu include sayesinde, Pawno'nun ve SA:MP'ın bize verdiği sınırlardan kurtulup yepyeni tasarımlarla sunucumuzu hoş bir görünüme kavuşturabiliyoruz.

Örneğin bir Roleplay sunucusu açtınız ve sunucunuzun güzel görünmesini istiyorsunuz, oyuncular skin değiştirmek için kıyafet mağazasına gittiğinde bir bakacaklar yepyeni bir GUI!

Bize sunuculan özelliker:
• Sınır yok! (Ne demek bu?: İstediğiniz kadar modeli bir arada bir dialogta toplayabilirsiniz.)
• Yer kaplıyor sorunu yok! (Büyük bir sunucu sahibi olupta büyük .amx dosyaları oluşturmanıza gerekte yok.)
• Büyük, interaktif modern bir görünüm!
• Döndürme ve Yakınlaştırma tuşları!

(https://i.imgyukle.com/2019/11/20/RrINdM.png)

• Muhteşem bir kaydırma çubuğu!
• GameTextPlayer'in renk kodları menülerimizde kullanabiliyoruz.



Örnekler

Mesela tüm SA:MP skinlerinin bulunduğu bir skin seçme dialogu oluşturalım.

(https://i.imgyukle.com/2019/11/20/RrIjYh.png)

Kod:
PAWN Kodu: Seç
CMD:skinler(playerid) { // zCmd yardımı ile komutumuzu oluşturduk.
    const MAX_SKINS = 312; // Maksimum skin sayısını ayarladık.
    new subString[16];
    static string[MAX_SKINS * sizeof(subString)];

    if (string
[list][li]== EOS) {[/li][/list]
        for (new i; i < MAX_SKINS; i++) { // Maksimum skin sayısından düşük oldukça skin id'yi arttıracak bir döngü.
            format(subString, sizeof(subString), "%i\tID: %i\n", i, i); // Burada yukarda oluşturduğumuz subString'e ekleme yapıyoruz.
            strcat(string, subString); // Ve bunu menü haline getirmek için strcat kullanıyoruz.
        }
    }

    return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_PREVIEW_MODEL, "Skin Secme Dialogu", string, "Sec", "Iptal"); // Ve burada bildiğimiz dialog gösterme callbacki.
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { // Dialog isteği işlendiğinde
    if (dialogid == 0) { // Dialog ID 0 ise
        if (response) { // Sec butonuna basıldıysa
            SetPlayerSkin(playerid, listitem); // Oyuncu skinini değiştir
            GameTextForPlayer(playerid, "~g~Skin Degistirildi!", 3000, 3); // Bir mesaj göster
        }
    }
    return 1;
}


Yada mesela tüm silahların bulunduğu bir dialog oluşturalım.
(https://i.imgyukle.com/2019/11/20/RrIhSj.png)

PAWN Kodu: Seç
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, "Bicak", 0, 1, WEAPON_KNIFE},
    {341, "Testere", 1500, 1, WEAPON_CHAINSAW},
    {342, "Bomba", 1545, 1, WEAPON_GRENADE},
    {343, "Molotof", 1745, 1, WEAPON_MOLTOV},
    {347, "Susturuculu 9mm", 1500, 150, WEAPON_SILENCED},
    {348, "Desert Eagle", 3199, 150, WEAPON_DEAGLE},
    {350, "Sawed Off Pompali", 4999, 100, WEAPON_SAWEDOFF},
    {351, "Spas12 Pompali", 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 Tufegi", 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, "Sprey", 800, 200, WEAPON_SPRAYCAN},
    {366, "Yangin Sondurucu", 855, 200, WEAPON_FIREEXTINGUISHER}
};

CMD:silahlar(playerid) {
    new subString[64];
    static string[sizeof(WEAPON_SHOP) * sizeof(subString)];

    if (string
[list][li]== EOS) {[/li][/list]
        for (new i; i < sizeof(WEAPON_SHOP); i++) {
            format(subString, sizeof(subString), "%i(0.0, 0.0, -50.0, 1.5)\t%s~n~~g~~h~$%i\n", WEAPON_SHOP[i][WEAPON_MODELID], WEAPON_SHOP[i][WEAPON_NAME], WEAPON_SHOP[i][WEAPON_PRICE]);
            strcat(string, subString);
        }
    }

    return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PREVIEW_MODEL, "Silah Dialogu", string, "Satin Al", "Iptal");
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
    if (dialogid == 1) {
        if (response) {
            if (GetPlayerMoney(playerid) < WEAPON_SHOP[listitem][WEAPON_PRICE]) {
                SendClientMessage(playerid, 0xAA0000FF, "Bu silahi alabilmek icin paraniz yok!");
                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~Silah Alindi!", 3000, 3);
        }
    }
    return 1;
}

(https://cdn.pixabay.com/photo/2016/06/15/14/54/download-1459071_960_720.png)
(PreviewModelDialog.zip) İndir! (https://www.mediafire.com/file/7ruz78ko10lcijj/PreviewModelDialog.zip/file)
(PreviewModelDialog.zip) VirusTotal (https://www.virustotal.com/gui/file/4c5603229bb55ea70498c95f60661f0429035ae8bc8da7dccebceda57ea5dc85/detection)
Başlık: Ynt: [ANLATIM] PreviewModelDialog.inc - SA:MP'ta yeni bir GUI tarzı!
Gönderen: Warning - 20 Kasım 2019, 15:10:03
Anlatim icin tesekkurler
Başlık: Ynt: [ANLATIM] PreviewModelDialog.inc - SA:MP'ta yeni bir GUI tarzı!
Gönderen: Myalis - 01 Aralık 2019, 20:25:26
ellerine sağlık, teşekkürler