[Tutorial] Dialogs
#1

Dialogs algemeen
mensen hebben nog wel eens moeite met dialogs, begrijpelijk want het kan best lastig zijn voor de eerste paar keren.
je voegt ergens de onderstaande lijn toe en je moet op een heel andere plek allemaal ingewikkelde switch statements neerzetten.
pawn Код:
ShowPlayerDialog(playerid, 5, DIALOG_STYLE_LIST, "Voorbeeld", "Optie1\nOptie2", "Accepteer", "Weiger");
ik kan best begrijpen dat dat moeilijk is, daarom heb ik deze tutorial ook gemaakt
ik zal eerst eens wat uitleggen over dialogs, voordat ik helemaal in het geavanceerde script gedeelte duik.
er zijn heel veel leuke dingen die je kunt doen met dialogs "be creative "

Theorie
Functie Parameters
pawn Код:
ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]);
oke ййn voor ййn:
playerid
de speler aan wie je het dialog id wilt laten zien. in de meeste callbacks is playerid al aangemaakt dus kun je hem al gebruiken. anders is er vast een manier om achter een id te komen

dialogid
het id van de dialog, dit moet uniek zijn voor dialogs die niet hetzelfde doel hebben. als je 2 dialogs hebt met alleen een andere info[] dan hoeft dit eigenlijks niet. zolang ze dus maar het zelfde doen.
HINT:
plaats onderstaande code bovenaan je script. dan kunnen gebruikers van je script gemakkelijk het id aanpassen.
pawn Код:
#define DIALOG_VOORBEELD (1337)
als je deze methode gebruikt, zorg dan dat je overal waar je het dialog id gebruikt, inplaats van 1337 DIALOG_VOORBEELD neerzet. als je niet begrijpt wat er hier gebeurt raad ik je aan om Deze (wiki.sa-mp.com) en ****** zijn post over de preprocessor (advanced!!) te lezen. dan begrijp je beter waarom je #define beter kunt gebruiken als overal gewoon 1337 (of natuurlijk een ander getal) te typen.

style
er zijn drie styles
Код:
DIALOG_STYLE_LIST
DIALOG_STYLE_MSGBOX
DIALOG_STYLE_INPUT
DIALOG_STYLE_PASSWORD
ik zal ze alle vier kort uitleggen.
DIALOG_STYLE_LIST
Deze dialogstyle zal een lijst maken zoals je in veel server ziet als een dialog om een auto te selecteren o.i.d.
deze dialog heeft ййn opmerkelijk opmaak dingetje. \n is normaal newline maar zal hier een nieuwe optie beginnen.
elke \n staat dus voor een nieuwe optie. verder is er niet veel speciaals aan deze dialog style. deze style heeft ook een eigen parameter in de callback: listitem. deze dialog heeft ook een optie dat hij maar een button heeft.

DIALOG_STYLE_MSGBOX
Dit is de meest standaard dialog. je kunt er eigenlijks heel weinig mee. het is vooral bedoeld voor dingen te laten zien aan spelers (regels, commands o.i.d) er zijn geen speciale opties voor deze op de single button optie na dan (wordt nog uitgelegd verder naar onderen.)

DIALOG_STYLE_INPUT
Misschien wel de meest interresante van allemaal. deze dialog laat je iets intypen in het hokje dat onder de info[] zal staan. deze style wordt meestal gebruikt door account systemen (register, login enz.) deze style krijgt in de callback ook een eigen parameter: inputtext[]. verder heeft ook deze style de single button optie.

DIALOG_STYLE_PASSWORD
deze heeft de zelfde eigenschappen als DIALOG_STYLE_INPUT, maar is pas te gebruiken in 0.3d en verder. dit is simpelweg stipjes in plaats van letters, precies zoals de password velden op websites.
caption[]
zoals te zien aan [] is dit een array, deze array is bedoeld om een string te zijn maar dat is allemaal een heel ander verhaal.
de caption is zoiets als de titel. in de titel kun je geen opmaak gebruiken in de zin van \t \n o.i.d
kies wel een titel die niet te lang is. bij een inlog systeem zet je dus niet bovenaan
Код:
Vul hier je wachtwoord in om in te loggen zodat je stats worden gesaved
wel goed is:
Код:
vul je wachtwoord in
of
Код:
login
info[]
Ook dit is een string, deze bevat de inhoud van je dialog. wat in een /cmds dialog dus zou zijn:
Код:
/cmds - laat deze dialog zien
/help - laat het help dialog zien
/car - verschijn een auto
in het DIALOG_STYLE_LIST dialog is er met de info wat speciaals aan de hand, als je in de info een \n plaats maak je een nieuwe optie zoals ook al is gezegd.
helaas kun je dus niet gewone info neerzetten in een list dialog.
opmaak
in de info van een dialog kun je allerlei leuke dingen doen, ik leg ze een voor een uit.

escape characters
er zijn maar een paar echt handig. een volledige lijst vind je hier
de handigen zijn:
\t deze plaatst een tab in je dialog. net zoals je code indenteert met je tabtoets kun je dialogs netjes maken met \t
\n newline, deze begint een nieuwe regel, veel moeilijker is het niet
\\ doordat \ het escape teken is. zal je \\ moeten doen om een \ in je dialog te krijgen.
\% pawn heeft placeholders in strings aangegeven met een % daarom moet je % escapen
\' en \" de quotes worden gebruikt in pawn dus moet je ze escapen tsjah, moet dan maar hй?

kleuren
nieuw in 0.3c is kleur invoegen.
als je een kleur (hexadecimaal meestal) tussen de { en de } doet, dus bijvoorbeeld {FF0000} zal de tekst rood maken deze setting word gehanteerd totdat je opnieuw een andere kleur invoegt
pawn Код:
{FF0000}Deze tekst is rood{0000FF}En deze is blauw
word:
Код:
Deze tekst is roodEn deze is blauw
niet heel erg moeilijk toch?
wil je meer over hexadecimale kleuren weten dan adviseer ik je om ****** zijn post over kleuren te lezen
button1[] en button2[]
beide zijn strings en beide hebben hetzelfde doel. een knopje zijn. eigenlijks best wel zielig. er wordt alleen maar op je gedrukt, verder niks.
maar wat ze teweeg brengen kan juist groots zijn, of heel simpel.
in de knopjes kun je net als in de caption geen opmaak gebruiken. wat de knopjes doen kom ik later op. wat ook bij de caption geld geld hier ook, hou het klein hierin. als je hierin lange teksten plaatst rekt het knopje op en dat wordt heel lelijk. niet doen dus
nou die hele lap tekst heb je tenminste al gehad. jij blij
maar we zijn er nog niet. dit was alleen de functie om de dialogs te laten zien. nou moeten we het script er nog dingen mee laten doen . we zijn halverwege! "the glas is either half full or half empty, you may choose wich option"
dan nu de callback
Callback Parameters
pawn Код:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
deze staat als het goed is ook in je new.pwn, oftewel als je op het knopje new drukt in pawno
ik zal de parameters net zo kort beschrijven als de functie parameters
playerid
De speler die op een knop heeft gedrukt in een dialog of op esc heeft gedrukt om te annuleren (geld als de 2de knop, die is meestal annuleer.)

dialogid
het id van de dialog. verder naar beneden staat de truuk van #define verder uitgelegd.
deze word gebruikt om je dialog te identificeren. als je in een ander filterscript (bijvoorbeeld) een zelfde dialogid hebt kan het zijn dat hij die uitvoert inplaats van degene die jij bedoeld had om hem uit te laten voeren.

response
pawn Код:
if(response)
zal checken of het eerste knopje is ingedrukt. als je onderstaand stukje code gebruikt zal hij kijken of je op esc op op het 2e knopje hebt gedrukt
pawn Код:
if(!response)
deze stukjes code zijn synoniem aan:
pawn Код:
if(response==1)//het eerste stukje
if(response!=1)//oftewel is response niet 1 dit is het tweede stukje
listitem
een gecompliceerde parameter. deze bevat het id van de optie die je gekozen hebt als de dialog style LIST was.
de listitems beginnen op 0 en gaan voor zover ik weet zo goed als oneindig door.

inputtext[]
dit is een string ([]) deze bevat de tekst die de speler heeft ingevoerd als het een input dialog was.
hier kun je alles mee doen wat je wilt (opeten daargelaten)
nou dat was al een stuk beter toch? veel minder tekst. toch nog wel duidelijk. het zijn gewoon minder, ik denk dat het daarom is. maar wat je met deze callback kunt is werkelijkwaar bijna ongelimiteerd "the sky is the limit"
Reply
#2

***gereserveerd***
Reply
#3

Je kon geen prefix kiezen omdat hij in het verkeerde sectie staat.. moved.
Reply
#4

thx mamo. ik wist niet dat tut's ook hier moesten
Reply
#5

Thanks, ben druk bezig met dialogs voor een nieuwe GM, alleen zit beetje vast :P

Kan dit goed gebruiken!

-J
Reply
#6

graag gedaan
vanavond voeg ik misschien wel het praaktijk gedeelte toe.
als ik tijd heb tenminste :S
Reply
#7

dude dit is erg handig!
Reply
#8

thx ik ben blij dat het op prijs gesteld word
ik ga nu verder met het praktijk gedeelte
Reply
#9

erg handig maar voor beginners lijkt het best moeilijk !
Reply
#10

Hardstikke bedankt
Zocht al lang naar zoiets, kan ik eindelijk verder met m'n GM :P
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)