Kako napraviti dialog (opsirno)

pre 6 godina
6,185
pregleda
36
postova
Exnas.pwn
Godfather
pre 6 godina
Cao,dosadno mi je pa sam odlucio napraviti neki tutorijal.Pokazacu vam kako se pravi dialog.
Sve sto vam je potrebno jeste

#include
#include

Moramo definisati dialog mozete odraditi pomocu enuma(kao ja)

enum {
dialog_msgbox,
dialog_list,
dialog_input
}

Ili pomocu #define

#define dialog_msgbox 1
#define dialog_list 2
#define dialog_input 3


Dakle sada mozemo koristiti neke skracenice koje ce nam pomoci

#define SPD                ShowPlayerDialog
#define SCM SendClientMessage

#define CRVENA                          0xFF4949FF

Uredu sada prelazimo na same dialog.
Dialoge mozemo podijeliti u 3 osnovne grupe

DIALOG_STYLE_MSGBOX
DIALOG_STYLE_LIST
DIALOG_STYLE_INPUT

Od ovih ovde navedenih postoje jos 2 vrste koji su 'podijele' dialog DIALOG_STYLE_LIST, i DIALOG_STYLE_INPUT
Sto se tice DIALOG_STYLE_LIST
mozemo ga podijeliti u 2 vrste a to su
DIALOG_STYLE_TABLIST 
DIALOG_STYLE_TABLIST_HEADERS

Dok DIALOG_STYLE_INPUT dijelimo na obican input i DIALOG_STYLE_PASSWORD.
Uredu sada da objasnimo sta su koji

DIALOG_STYLE_MSBOX
Jedan od najobicnijh dialoga

Mozemo reci da je to jedna poruka koja se posalje igracu kroz dialog

DIALOG_STYLE_LIST
Je dialog u kome mozemo da biramo razne opcije

U ovom tutorijalu ja sam ga koristio kako bih igracu dao mogucnost da bira da li ce uzeti novac ili pare

DIALOG_STYLE_INPUT
Dialog u kome upisujemo nesto slovima ili brojevima

Najcesce se koristi za komande tipa /report ukoliko zelimo u dialogu da odradimo, koristicemo njega jer u njega mozemo da unesemo simbole
i brojeve,

Uredu sada mozemo one 2 podele


DIALOG_STYLE_PASSWORD
Najcesce se koristi kao sto i samo ime kaze da unesemo neku sifru
Funkcionise na istom principu kao i DIALOG_STYLE_INPUT samo sto su kod DIALOG_STYLE_PASSWORD nevidljivi simboli(u obliku tackica)


DIALOG_STYLE_TABLIST

Ovaj tip dialoga se i ne koristi toliko
Medjtim moze biti od koristi ako primer pravite Neki deathmach mod pa mozete da stavite koliko ima Igraca, koja je mapa i slicno


DIALOG_STYLE_TABLIST_HEADERS

Identican DIALOG_STYLE_TABLIST sa Headerima na vrhu. Mislim da nema potrebe da ga dodatno opisujem


Uredu to su svi Dialozi koji se nalaze u sampu.Ja cu danas raditi sa osnovna 3.


Koristicemo funkciju 'Kada se dialog otvori'
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    return(true);
}


Ovde cu dodati proveru da igrac ne moze upisati odredjene simbole u dialog
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(strfind(inputtext, "%", true) != -1 || strfind(inputtext, "#", true) != -1)
        {
              SCM( playerid, CRVENA, "Uneli ste format koji server ne podrzava!");
              return 1;
        }
        return(true);
}


Okej to smo uradili sada cemo mu reci sta ce se dogoditi kada se dialog otvori

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(strfind(inputtext, "%", true) != -1 || strfind(inputtext, "#", true) != -1)
        {
                SCM( playerid, CRVENA, "Uneli ste format koji server ne podrzava!");
                return 1;
        }
        // -- //
        if(dialogid == dialog_msgbox) // ako je dialog koji se otvorio dialog_msgbox
        {
                if(!response) return SCM(playerid, CRVENA, "Odbili ste dialog_msgbox"); // sta se desi ako ga zatvori
                if(response) // ako ga je prihvatio
                {
                        SCM(playerid,CRVENA,"Prihvatili ste dialog_test");
                        print("Igrac je prihvatio dialog");
                }
        }
        return(true);
}


Uredu nastavljamo dalje sa DIALOG_STYLE_LIST

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(strfind(inputtext, "%", true) != -1 || strfind(inputtext, "#", true) != -1)
        {
                SCM( playerid, CRVENA, "Uneli ste format koji server ne podrzava!");
                return 1;
        }
        // -- //
        if(dialogid == dialog_msgbox) // ako je dialog koji se otvorio dialog_msgbox
        {
                if(!response) return SCM(playerid, CRVENA, "Odbili ste dialog_msgbox"); // sta se desi ako ga zatvori
                if(response) // ako ga je prihvatio
                {
                        SCM(playerid,CRVENA,"Prihvatili ste dialog_test");
                        print("Igrac je prihvatio dialog");
                }
        }
        else if(dialogid == dialog_list)
        {
                if(!response) return SCM(playerid, CRVENA, "Odbili ste dialog_list"); // ako ga zatvori da mu posalje poruku
                if(response) // ako je otvore
                {
                        switch(listitem) // bira unutar dialoga
                        {
                                case 0: // ako je odabrao 1 liniju
                                {
                                        GivePlayerMoney(playerid, 1000);
                                        print("Igrac je dobio 1000$");
                                }
                                case 1: // ako je odabrao 2 liniju
                                {
                                        SetPlayerScore(playerid, 2);
                                        print("Igracu je postavljen score na 2");
                                }
                        }
                }
        }
        return(true);
}


Uredu jos nam je ostalo DIALOG_STYLE_INPUT

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        if(strfind(inputtext, "%", true) != -1 || strfind(inputtext, "#", true) != -1)
        {
                SCM( playerid, CRVENA, "Uneli ste format koji server ne podrzava!");
                return 1;
        }
        // -- //
        if(dialogid == dialog_msgbox) // ako je dialog koji se otvorio dialog_msgbox
        {
                if(!response) return SCM(playerid, CRVENA, "Odbili ste dialog_msgbox"); // sta se desi ako ga zatvori
                if(response) // ako ga je prihvatio
                {
                        SCM(playerid,CRVENA,"Prihvatili ste dialog_test");
                        print("Igrac je prihvatio dialog");
                }
        }
        else if(dialogid == dialog_list)
        {
                if(!response) return SCM(playerid, CRVENA, "Odbili ste dialog_list"); // ako ga zatvori da mu posalje poruku
                if(response) // ako je otvore
                {
                        switch(listitem) // bira unutar dialoga
                        {
                                case 0: // ako je odabrao 1 liniju
                                {
                                        GivePlayerMoney(playerid, 1000);
                                        print("Igrac je dobio 1000$");
                                }
                                case 1: // ako je odabrao 2 liniju
                                {
                                        SetPlayerScore(playerid, 2);
                                        print("Igracu je postavljen score na 2");
                                }
                        }
                }
        }
        else if(dialogid == dialog_input)
        {
                if(!response) return SCM(playerid, CRVENA, "Odbili ste dialog_input"); // ako ga zatvori mozete staviti primer Kick
                if(response) // ako je otvoren
                {
                            new string; // napravi novi string
                            format(string,sizeof(string),"U dialogu_input ste upisali %s",inputtext); // formatiraj string
                            SCM(playerid,CRVENA,string);// posalji poruku playerid-u(igracu koji vrsi komandu), Boja, text(u nasem slucaju string)
                }
        }
        return(true);
}


Sada cemo napraviti komande kada se prikaziju ti Dialozi

CMD:msgbox(playerid,params[])
{
        //SPD(playerid,Kakav dialog hocemo,ime naseg dialoga,naslov dialoga,text dialoga,Dugme 1, dugme 2, Ukolko zelite jedno dugme drugo ostavite samo ""
        SPD(playerid,DIALOG_STYLE_MSGBOX,dialog_msgbox,"Naslov","Prihvatas li pravila naseg servera ?","Da","Ne");
        return(true);
}
CMD:list(playerid,params[])
{
        //SPD(playerid,kakav dialog hocemo,ime dialoga, naslov,simbol '\n' oznacava novi red samim time i novi case u OnDialogResponse,Dugme 1, Dugme 2
        SPD(playerid,DIALOG_STYLE_LIST,dialog_list,"Naslov","Pare\nLevel","Uredu","Cancel");
        return(true);
}
CMD:input(playerid,params[])
{
        //SPD(playerid,kakav dialog hocemo,ime dialoga, naslov, text, dugme 1, dugme 2, isto kao i kod msgboxa mozemo ostaviti samo 1 dugme tako sto cemo drugo staviti ""
        SPD(playerid,DIALOG_STYLE_INPUT,dialog_input,"Naslov","Molimo unesite vas text","Uredu","Cancel");
        return(true);
}


Nadam se da sam nekome pomogao  😄
Nucleon
Kingpin
pre 6 godina
Odlicno, i detaljno, svaka cast  002 <3
Exnas.pwn
Godfather
pre 6 godina
É´á´¡É´ wrote on April 23, 2019, 11:31 pm:
Odlicno, i detaljno, svaka cast  002 <3

Thankss sefe ♥
Mister Naithan
Kingpin
pre 6 godina
Veoma korisno ! Ovo bih cak premestio u Pawno Skriptanje i Pinovao. Bravo , 10 x 10 !  😎
Exnas.pwn
Godfather
pre 6 godina
Mister Naithan wrote on April 23, 2019, 11:46 pm:
Veoma korisno ! Ovo bih cak premestio u Pawno Skriptanje i Pinovao. Bravo , 10 x 10 !  😎

Thankss ♥
marko077
Underboss
pre 6 godina
Moj ucenik! - al nikad neces naucit lepo da postavis, mogo si malo u photoshop editovat naslov itd. bilo bi fens ali ovo je dobar tut. 😉
Exnas.pwn
Godfather
pre 6 godina
LANMY.pwN wrote on April 23, 2019, 11:50 pm:
Moj ucenik! - al nikad neces naucit lepo da postavis, mogo si malo u photoshop editovat naslov itd. bilo bi fens ali ovo je dobar tut. 😉
print("Rokisa nije proso");

Btw thanks
Nucleon
Kingpin
pre 6 godina
ゼロツーScripTT.sql wrote on April 23, 2019, 11:51 pm:
print("Rokisa nije proso");

Btw thanks


Khm mislis li da je ovaj lanmi previse opasan skripter?

LANMY.pwN wrote on April 23, 2019, 11:50 pm:
Moj ucenik! - al nikad neces naucit lepo da postavis, mogo si malo u photoshop editovat naslov itd. bilo bi fens ali ovo je dobar tut. 😉


Oh koji si ti doktor sampa lanmi!
Exnas.pwn
Godfather
pre 6 godina
É´á´¡É´ wrote on April 24, 2019, 12:20 am:
Khm mislis li da je ovaj lanmi previse opasan skripter?

Oh koji si ti doktor sampa lanmi!

Ne zna BB Koda koristiti psss
Nucleon
Kingpin
pre 6 godina
ゼロツーScripTT.sql wrote on April 24, 2019, 12:21 am:
Ne zna BB Koda koristiti psss


Necemo o tome sada prijatelju 😄
Exnas.pwn
Godfather
pre 6 godina
É´á´¡É´ wrote on April 24, 2019, 12:22 am:
Necemo o tome sada prijatelju 😄

Tako je samo cuti  😄
Excepted
Enforcer
pre 6 godina
gjgj
Exnas.pwn
Godfather
pre 6 godina
єx¢.вяαт wrote on April 24, 2019, 12:27 am:
gjgj

Hvala hvala
-smooker37
Made Man
pre 6 godina
Pomoci ce nekom. gj
AmarYouTuber
Shot Caller
pre 6 godina
Lepo odradjeno i objasnjeno +
admini pinujte

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava