Kako napraviti dialog

Uvod
Kreiranje dialoga može izgledati prilično teško, iako se oni mogu lako napraviti. Ovaj kratak tutorial će vam objasniti kako da ih napravite.

Postoje 3 stila dialoga, DIALOG_STYLE_MSGBOX, DIALOG_STYLE_INPUT, DIALOG_STYLE_LIST i DIALOG_STYLE_PASSWORD.

Primer
Prvo ćemo objasniti funkciju ShowPlayerDialog.

Parametri:
ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])


 * playerid  -   ID Igrača kojem će se prikazati dialog.


 * dialodi  -   ID Dialoga.


 * caption[]  -   Tekst koji se ispisuje na vrhu dialoga (naslov).


 * info[]  -   Teks koji se ispisuje u dialogu. Koristite \n za novi red i \t za urediti tablicu.


 * button1[]  -   Tekst koji se ispisuje na levom dugmetu.


 * button2[]  -   Tekst koji se ispisuje na desnom dugmetu.

I callback koji je pokrenut svaki put kada izaberete opciju.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])


 * playerid  -   ID Igrača koji pritiska dugme.


 * dialodi  -   ID Dialoga na kojem je igrač pritisnuo dugme.


 * response  -   Ako je pritisnuo prvo dugne true, ako je pritisnuo drugo dugme false.


 * listiteam  -   Samo se koristi u stilu DIALOG_STYLE_LIST.


 * inputtext[]  -   Samo se koristi u stilu DIALOG_STYLE_INPUT, i to je string koji je unešen u dialog.

Sada možemo nastaviti.

Dialog lista
Prvo, pokazaćemo dialog preko komande. I ovo ide ispod OnPlayerCommandText. if(!strcmp(cmdtext, "/pice", true)) {   ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Koje piće želite?", "Sprite ($1)\nPepsi ($2)\nKoka kola ($3)", "Kupi", "Odustani"); return 1; }

Sada kada smo napravili komandu u kojoj se prikazuje dialog, moramo aktivirati callback OnPlayerDialogResponse.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(response)// Kada igrač pritisne levo dugme {   switch(dialogid)// Ako imate samo jedan dialog, onda to nije potrebno, ali to je bolje kada imate više. {	   case 1:// Naš prvi dialog! {          	switch(listitem)// Proverava stavku koja je izabrana u listi. {       	    case 0:// Prva stavka (Sprite) {       	        if(GetPlayerMoney(playerid) < 1) return SendClientMessage(playerid, 0xFFFFFF, "Nemate dovoljno novca."); GivePlayerMoney(playerid, -1); SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK); }       	    case 1: // Druga stavka (Pepsi) {       	        if(GetPlayerMoney(playerid) < 2) return SendClientMessage(playerid, 0xFFFFFF, "Nemate dovoljno novca."); GivePlayerMoney(playerid, -2); SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER); }       	    case 2: // Treća stavka (Koka kola) {       	        if(GetPlayerMoney(playerid) < 3) return SendClientMessage(playerid, 0xFFFFFF, "Nemate dovoljno novca."); GivePlayerMoney(playerid, -3); SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE); }       	}    	    }	}    }    return 1; }

Objasniću šta ovo radi, postoje dva switcha. Jedan je ID Dialoga, a drugi Lista dialoga.

MSGBOX Stil Dialoga
Ovo je jednostavno. To je box za text sa dva dugmeta. Nema različite izbore samo dva dugmeta za proces.

Dodajte ovo pod OnPlayerCommandText.

if(!strcmp(cmdtext, "/odmor", true)) {   ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Da li ste sigurni?", "Da li ste sigurni da želite da se odmorite?", "Da", "Ne"); return 1; }

Ovo bi prikazlo dialog sa ID-em 2 (Jer smo već iskoristili 1). Stil dialoga je DIALOG_STYLE_MSGBOX.

Sada moramo ponovo da podesimo response(odgovor).

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(response)// Kada igrač pritisne levo dugme. {   switch(dialogid)// Proverava šta dialog procesuira. {	   case 1:// Naš prvi dialog! {          	switch(listitem)// Proverava stavku koja je izabrana u listi. {       	    case 0:// Prva stavka (Sprite) {       	        if(GetPlayerMoney(playerid) < 1) return SendClientMessage(playerid, 0xFFFFFF, "Nemate dovoljno novca."); GivePlayerMoney(playerid, -1); SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK); }       	    case 1: // Druga stavka (Pepsi) {       	        if(GetPlayerMoney(playerid) < 2) return SendClientMessage(playerid, 0xFFFFFF, "Nemate dovoljno novca."); GivePlayerMoney(playerid, -2); SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER); }       	    case 2: // Treća stavka (Koka kola) {       	        if(GetPlayerMoney(playerid) < 3) return SendClientMessage(playerid, 0xFFFFFF, "Nemate dovoljno novca."); GivePlayerMoney(playerid, -3); SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE); }       	}    	    }            //Ovde smo dodali stvari case 2:// Naš drugi dialog {                ApplyAnimation(playerid,"BEACH","Lay_Bac_Loop",4.1,1,1,1,1,10);//To će vam omogućiti da se odmorite na 10 sekundi }	}   }    return 1; }

Objašnjenje:

Ovo samo proverava ID Dialoga, jer je već proverio da li ste pritisnuli daster 'Da', a zatim primenjuje animaciju na deset sekundi.

Input Stil Dialoga
Ovaj dialog će imati liniju za unos teksta.

Napravićemo čet dialog (Šta ukucamo pojaviće se u ćaskanju).

Opet pravimo komandu.

if(!strcmp(cmdtext, "/chat", true)) {   ShowPlayerDialog(playerid, 3, DIALOG_STYLE_INPUT, "Chat", "Upišite vaš tekst ovde.", "Potvrdi", "Odustani"); return 1; }

Hajde opet da podesimo response(odgovor).

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(response)// Kada igrač pritisne levo dugme. {   switch(dialogid)// Proverava šta dialog procesuira. {	   case 1:// Naš prvi dialog! {          	switch(listitem)// Proverava stavku koja je izabrana u listi. {       	    case 0:// Prva stavka (Sprite) {       	        if(GetPlayerMoney(playerid) < 1) return SendClientMessage(playerid, 0xFFFFFF, "Nemate dovoljno novca."); GivePlayerMoney(playerid, -1); SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK); }       	    case 1: // Druga stavka (Pepsi) {       	        if(GetPlayerMoney(playerid) < 2) return SendClientMessage(playerid, 0xFFFFFF, "Nemate dovoljno novca."); GivePlayerMoney(playerid, -2); SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER); }       	    case 2: // Treća stavka (Koka kola) {       	        if(GetPlayerMoney(playerid) < 3) return SendClientMessage(playerid, 0xFFFFFF, "Nemate dovoljno novca."); GivePlayerMoney(playerid, -3); SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE); }       	}    	    }            //Ovde smo dodali stvari case 2:// Naš drugi dialog {                ApplyAnimation(playerid,"BEACH","Lay_Bac_Loop",4.1,1,1,1,1,10);//To će vam omogućiti da se odmorite na 10 sekundi }           case 3: {                if(strlen(inputtext) > 0)// Ako ukuca više od 0 znakova {                    SendPlayerMessageToAll(playerid, inputtext); }                else {                    SendClientMessage(playerid,0xFFFFFFAA,"Vaš tekst je previše kratak."); }           }	}    }    return 1; }

Kao što vidite ovo će odštampati tekst koji ste ukucali.