Cao,dosadno mi je pa sam odlucio napraviti neki tutorijal.Pokazacu vam kako se pravi dialog.
Sve sto vam je potrebno jeste
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_HEADERSDok 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 😄