FANDOM


Kreiranje dialoga Edit

Ova funkcija je dodata na SA-MP 0.3a verziji i nece raditi na predhodnim.


Uvod Edit

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 Edit

Prvo ćemo objasniti funkciju ShowPlayerDialog.

Parametri: Edit
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 Edit

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 Edit

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 Edit

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.

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.