How to create a dialog NL

From SA-MP Wiki

Jump to: navigation, search

(ik ben nog bezig met vertalen)

Contents

Creating Dialogs

How to create a dialog NL was added in SA-MP 0.3a This function was added in SA-MP 0.3a and will not work in earlier versions!


intro

Dialogen maken (van de nieuwe 0.3a versie)lijkt heel moeilijk, maar eigenlijk is het heel simpel. Deze korte tutorial laat je zien hoe je het kan doen. Deze dialoog is alleen als demonstratie bedoelt.

Deze tutorial helpt je bij ale 3 de stylen van dialogen, DIALOG_STYLE_MSGBOX, DIALOG_STYLE_INPUT en DIALOG_STYLE_LIST.

Uitleg

Als eerste leg ik de functie ShowPlayerDialog uit.

Ik leg nu de parameters even uit:

ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[])
playeridDe id van de speler om de dialog voor te laten zien.
dialogidEen id voor de dialog, die gebruik je bij het verwerken.
styleDe style van de dialog.
caption[]De titel van de dialog.
info[]De tekst om te laten zien, gebruik \n voor een nieuwe regel en \t voor een tabel.
button1[]De tekst in de linker knop.
button2[]De tekst in de rechter knop.


En dit is de callback voor als je een van de knoppen hebt ingedrukt (button1[] of button2[])

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
playeridDe ID van de speler die op een knop heeft geklikt
dialogidDe ID van de dialog waarop op een knop gedrukt is
response1 als de eerste knop is ingedrukt, 0 als de tweede knop is ingedrukt
listitemWordt alleen gebruikt met de style DIALOG_STYLE_LIST, de eerste is 0, en daara telt hij omhoog
inputtext[]Alleen gebruikt met de style DIALOG_STYLE_INPUT, dit is een string met de ingevoerde tekst


Nu dit klaar is kunnen we verder gaan

Lijst dialog

Laten we beginnen met een lijst laten zien als de speler een commando intypt, dit gebeurt in OnPlayerCommandText:

if(!strcmp(cmdtext, "/drinks", true))
{
    ShowPlayerDialog(playerid, 1, DIALOG_STYLE_LIST, "Wat is het wat je wil?", "Sprunk ($1)\nBier ($2)\nWijn ($3)", "Koop", "Annuleer"); // laat de dialoog zien
    return 1;
}

Nu we het commando hebben gemaakt gaan we verder met de OnDialogResponse callback.

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(response)//Ze hebben op ok gedrukt 
    {
        switch(dialogid)//als je maar 1 dialog gebruikt is dit niet nodig, maar je weet maar nooit
        {
	    case 1://onze dialog
    	    {
           	switch(listitem)//welk item is gekozen
        	{
        	    case 0://het eerste item in de lijst, de sprunk
        	    {
        	        if(GetPlayerMoney(playerid) < 1) return SendClientMessage(playerid, 0xFFFFFF, "Je hebt niet genoeg geld.");
        	        GivePlayerMoney(playerid, -1);
        	        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK);
        	    }
        	    case 1://tweede, bier
        	    {
        	        if(GetPlayerMoney(playerid) < 2) return SendClientMessage(playerid, 0xFFFFFF, "Je hebt niet genoeg geld.");
        	        GivePlayerMoney(playerid, -2);
        	        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
        	    }
        	    case 2://derde, wijn
        	    {
        	        if(GetPlayerMoney(playerid) < 3) return SendClientMessage(playerid, 0xFFFFFF, "Je hebt niet genoeg geld.");
        	        GivePlayerMoney(playerid, -3);
        	        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE);
        	    }
        	}
    	    }
	}
    }
    return 1;
}

Laat me uitleggen wat het doet, er zijn 2 switchen. 1 voor de dialog ID, en 1 voor de lijst item. De if is nodig, anders kijkt hij niet naar welke knop is ingedrukt.

msgbox dialog

Dit is een simpele Het is gewoon een dialog die tekst laat zien met 2 knoppen

Zet dit onder OnPlayerCommandText

if(!strcmp(cmdtext, "/relax", true))
{
    ShowPlayerDialog(playerid, 2, DIALOG_STYLE_MSGBOX, "Weet je het zeker?", "Weet je zeker dat je tijd wilt om te relaxen?", "Ja", "Nee");
    return 1;
}

Dit laat de dialog met ID 2 zien(we hebben 1 al gebruikt) aan de speler. De style hier is DIALOG_STYLE_MSGBOX.

Nu moeten we de reactie van de server weer maken

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(response)//ze hebben op de eerste knop gedrukt   
    {
    switch(dialogid)//als je maar 1 dialog gebruikt is dit niet nodig, maar je weet maar nooit
        {
	    case 1://our dialog
    	    {
           	switch(listitem)//welk item is gekozen
        	{
        	    case 0://het eerste item in de lijst, de sprunk
        	    {
        	        if(GetPlayerMoney(playerid) < 1) return SendClientMessage(playerid, 0xFFFFFF, "Je hebt niet genoeg geld.");
        	        GivePlayerMoney(playerid, -1);
        	        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK);
        	    }
        	    case 1://tweede, bier
        	    {
        	        if(GetPlayerMoney(playerid) < 2) return SendClientMessage(playerid, 0xFFFFFF, "Je hebt niet genoeg geld.");
        	        GivePlayerMoney(playerid, -2);
        	        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
        	    }
        	    case 2://derde, wijn
        	    {
        	        if(GetPlayerMoney(playerid) < 3) return SendClientMessage(playerid, 0xFFFFFF, "Je hebt niet genoeg geld.");
        	        GivePlayerMoney(playerid, -3);
        	        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE);
        	    }
        	}
    	    }
            //vanaf hier hebben we er dingen bij gedaan
            case 2://de nieuwe dialog
            {
                 ApplyAnimation(playerid,"BEACH","Lay_Bac_Loop",4.1,1,1,1,1,10);//Dit laat je 10 seconden relaxen
            }
            //tot hier
	}
    }
    return 1;
}

Uitleg: Dit kijkt alleen maar naar de ID van de dialog, want hij heeft al gekeken of je op de "Ja"-knop hebt gedrukt en laat dan de animatie zien voor 10 seconden

input dialog

Hier maken we een input dialog, een dialog waar je tekst kan invullen Nu doen we dit onder OnPlayerCommandText

if(!strcmp(cmdtext, "/naam", true))
{
    ShowPlayerDialog(playerid, 3, DIALOG_STYLE_INPUT, "Naam", "Mag ik je naam weten?", "Ok", "Annuleer");
    return 1;
}

Nu laat de server een input dialog zien waar je je naam moet invullen Nu moeten we de reactie van de server weer maken

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(response)//ze hebben op de eerste knop gedrukt   
    {
    switch(dialogid)//als je maar 1 dialog gebruikt is dit niet nodig, maar je weet maar nooit
        {
	    case 1://our dialog
    	    {
           	switch(listitem)//welk item is gekozen
        	{
        	    case 0://het eerste item in de lijst, de sprunk
        	    {
        	        if(GetPlayerMoney(playerid) < 1) return SendClientMessage(playerid, 0xFFFFFF, "Je hebt niet genoeg geld.");
        	        GivePlayerMoney(playerid, -1);
        	        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_SPRUNK);
        	    }
        	    case 1://tweede, bier
        	    {
        	        if(GetPlayerMoney(playerid) < 2) return SendClientMessage(playerid, 0xFFFFFF, "Je hebt niet genoeg geld.");
        	        GivePlayerMoney(playerid, -2);
        	        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
        	    }
        	    case 2://derde, wijn
        	    {
        	        if(GetPlayerMoney(playerid) < 3) return SendClientMessage(playerid, 0xFFFFFF, "Je hebt niet genoeg geld.");
        	        GivePlayerMoney(playerid, -3);
        	        SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_WINE);
        	    }
        	}
    	    }
            case 2://de relax dialog
            {
                 ApplyAnimation(playerid,"BEACH","Lay_Bac_Loop",4.1,1,1,1,1,10);//Dit laat je 10 seconden relaxen
            }
            //vanaf hier is het anders
            case 3://de input dialog
            {
                 new string[256];
    		 format(string, sizeof(string), "Hallo %s!", inputtext);
                 SendClientMessage(playerid, 0xFFFF00AA, string); 
            }
            //tot hier
	}
    }
    return 1;
}

Dit laat nu het bericht "hallo" plus je naam zien

Afsluiting

Dit was het al weer. Ik hoop dat je nu weet hoe je dialogen moet maken. Suc6 met je server! Vertaalt door: HellFly

Personal tools
Navigation
Toolbox