How to create a dialog NL
From SA-MP Wiki
(ik ben nog bezig met vertalen)
Contents |
Creating Dialogs
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[])
playerid | De id van de speler om de dialog voor te laten zien. |
dialogid | Een id voor de dialog, die gebruik je bij het verwerken. |
style | De 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[])
playerid | De ID van de speler die op een knop heeft geklikt |
dialogid | De ID van de dialog waarop op een knop gedrukt is |
response | 1 als de eerste knop is ingedrukt, 0 als de tweede knop is ingedrukt |
listitem | Wordt 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