Kako napraviti dialog (opsirno)

Započeo __vedran.xyz77, April 24, 2019, 01:24:15 PRE PODNE

prethodna tema - sledeća tema

0 članova i 3 gostiju pregledaju ovu temu.

Cao,dosadno mi je pa sam odlucio napraviti neki tutorijal.Pokazacu vam kako se pravi dialog.
Sve sto vam je potrebno jeste
[pawn]
#include <a_samp>
#include <zcmd>
[/pawn]

Moramo definisati dialog mozete odraditi pomocu enuma(kao ja)
[pawn]
enum {
   dialog_msgbox,
   dialog_list,
   dialog_input
}[/pawn]

Ili pomocu #define
[pawn]
#define dialog_msgbox 1
#define dialog_list 2
#define dialog_input 3
[/pawn]


Dakle sada mozemo koristiti neke skracenice koje ce nam pomoci
[pawn]
#define SPD                    ShowPlayerDialog
#define SCM          SendClientMessage

#define CRVENA                          0xFF4949FF
[/pawn]

Uredu sada prelazimo na same dialog.
Dialoge mozemo podijeliti u 3 osnovne grupe
[pawn]
DIALOG_STYLE_MSGBOX
DIALOG_STYLE_LIST
DIALOG_STYLE_INPUT
[/pawn]

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 [pawn]DIALOG_STYLE_TABLIST
DIALOG_STYLE_TABLIST_HEADERS[/pawn]
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'


[pawn]public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
     return(true);
}[/pawn]

Ovde cu dodati proveru da igrac ne moze upisati odredjene simbole u dialog

[pawn]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);
}
[/pawn]

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

[pawn]
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);
}
[/pawn]

Uredu nastavljamo dalje sa DIALOG_STYLE_LIST

[pawn]
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);
}
[/pawn]

Uredu jos nam je ostalo DIALOG_STYLE_INPUT

[pawn]
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[20]; // 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);
}
[/pawn]

Sada cemo napraviti komande kada se prikaziju ti Dialozi

[pawn]
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);
}
[/pawn]

Nadam se da sam nekome pomogao  :D

Odlicno, i detaljno, svaka cast  002 <3
Pasting code from the Internet into production code is like chewing gum found in the street.

Also known as:Marshall Bleach Newton





Veoma korisno ! Ovo bih cak premestio u Pawno Skriptanje i Pinovao. Bravo , 10 x 10 !  8)




Give Honor To The One Who Deserve It





Citat: Mister Naithan poslato April 24, 2019, 01:46:18 PRE PODNE
Veoma korisno ! Ovo bih cak premestio u Pawno Skriptanje i Pinovao. Bravo , 10 x 10 !  8)
Thankss ♥

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. ;)
[/font][/size][/color]

One And Only
Old Member
Since AVGUST 2013. :)
GAME OVER - SCRIPTING
SINCE 2009 - 2020

Citat: LANMY.pwN poslato April 24, 2019, 01:50:27 PRE PODNE
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. ;)
[/font][/size][/color]
[pawn]print("Rokisa nije proso");[/pawn]
Btw thanks

Citat: ã,¼ãƒ­ãƒ,,ーScripTT.sql poslato April 24, 2019, 01:51:58 PRE PODNE
[pawn]print("Rokisa nije proso");[/pawn]
Btw thanks

Khm mislis li da je ovaj lanmi previse opasan skripter?

Citat: LANMY.pwN poslato April 24, 2019, 01:50:27 PRE PODNE
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. ;)
[/font][/size][/color]

Oh koji si ti doktor sampa lanmi!
Pasting code from the Internet into production code is like chewing gum found in the street.

Also known as:Marshall Bleach Newton




Citat: É´á´¡É´ poslato April 24, 2019, 02:20:15 PRE PODNE
Khm mislis li da je ovaj lanmi previse opasan skripter?

Oh koji si ti doktor sampa lanmi!
Ne zna BB Koda koristiti psss

Citat: ã,¼ãƒ­ãƒ,,ーScripTT.sql poslato April 24, 2019, 02:21:45 PRE PODNE
Ne zna BB Koda koristiti psss

Necemo o tome sada prijatelju :D
Pasting code from the Internet into production code is like chewing gum found in the street.

Also known as:Marshall Bleach Newton





gjgj
GameModovi: ne mere sve stat xd
Nova Kuca: 87.98.130.157:7777 - Developer
Pawn, YSI, SQL, REGEX - Developer
BIG Respect to: Xunder, .mumitza



Lepo odradjeno i objasnjeno +
[pawn]admini pinujte[/pawn]

•  Destination Roleplay
•
•  Forum:destination-rp.com•