[Tutorial] ShowPlayerDialog
#1

Reeks van tutorials: Functies
Moeilijkheidsgraad: Gevorderd
Benodigdheden: de a_samp include (komt standaard bij een SA:MP 0.3 server)
Opmerkingen: Het kan zijn dat ik in deze tutorial de woorden functie en methode door elkaar gebruik. Het betekent in deze context hetzelfde.

ShowPlayerDialog
Op skype kreeg ik het verzoek om een extra tutorial te doen over dialogen. Daarom nu een tutorial over dialogen! Mooi he?

Dialogs zijn de schermpjes die je krijgt waarin je tekst kan invoeren, een keuze kunt maken uit meerdere opties of een simpel berichtje in weergeven. In deze tutorial gaan we bekijken hoe deze werken, waarom ze dit doen en gaan we dieper in op de hoe/wat van de parameters van de functies.

Theorie
Dialogs zijn zoals gezegd de schermpjes waarin je interactief dingen kunt doen met een gebruiker. Deze zal altijd feedback hier op leveren. Van de dialogs kan er maar 1 tegelijk worden getoond. Er is geen 'HidePlayerDialog'. Dit is omdat je als speler altijd interactie hebt met een dialog en de gebruiker altijd op een knop moet drukken. Er is wel een manier om een HidePlayerDialog te simuleren, maar daarover later meer.

ShowPlayerDialog heeft de volgende parameters: playerid, dialogid, style, caption[], info[], button1[], button2[]

playerid | de playerid van de persoon die het te zien krijgt
dialogid | het ID van de dialog (deze verzin je meestal zelf zodat je hem makkelijk kan aanroepen)
style | hierover straks meer
caption | een kleine titel (max 64 tekens)
info | De tekst in de dialog
button1 | De tekst op button 1 (de linker)
button2 | De tekst op button 2 (de rechter) - als je deze leeg laat wordt hij niet getoond

Dan nu even terugkomend op de style. Iedere dialog kan ййn van de vier stijlen hebben. De stijlen kunnen met plaatje gevonden worden op de SA:MP Wiki. In het kort:
  • DIALOG_STYLE_MSGBOX - Een messagebox waar je gewoon tekst in kwijt kan en meer niet
  • DIALOG_STYLE_INPUT - Een invoerveld met standaardtekst
  • DIALOG_STYLE_PASSWORD - Een invoerveld als DIALOG_STYLE_INPUT maar dan met stipjes in plaats van gewone tekst zodat het wachtwoord (of andere 'geheime' invoer) niet getoond wordt.
  • DIALOG_STYLE_LIST - Een lijst waaruit je dingen kan selecteren. De opties komen dan in 'info'. Dit is ййn lange string gescheiden door \n (newline) die aantoont wat een nieuwe optie is.
Nu we deze opties hebben kunnen we wat praktijk voorbeelden doen. Deze voorbeelden komen rechtstreeks van de SA:MP wiki, maar zullen volledig toegelicht worden.

Praktijk
pawn Код:
//example for DIALOG_STYLE_MSGBOX
ShowPlayerDialog(playerid, DIALOG_WELCOME, DIALOG_STYLE_MSGBOX, "Notice", "You connected to the server", "Close", "");
 
//example for DIALOG_STYLE_INPUT
ShowPlayerDialog(playerid,DIALOG_LOGIN, DIALOG_STYLE_INPUT, "Login", "Enter your password below:", "Login", "Cancel");
 
//example for DIALOG_STYLE_LIST
ShowPlayerDialog(playerid, DIALOG_WEAPONS, DIALOG_STYLE_LIST, "Weapons", "AK47\nM4\nSniper Rifle", "Option 1", "Option 2");
 
//example for DIALOG_STYLE_PASSWORD
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", "Enter your password below:", "Login", "Cancel");
Voorbeeld 1: De Messagebox.
Hier staat gewoon wat informatie in ('U bent verbonden met de server'). Dan zit er nog een 'sluiten' knop bij maar de tweede optie is leeg dus die wordt niet getoond.

Voorbeeld 2: INPUT
De input hier is een gewone tekst invoer. Deze is NIET aan te raden als een wachtwoord invoer! Deze heeft 2 opties: Login en Cancel.

Voorbeeld 3: De List
In dit voorbeeld staat een wapenlijst. Je kunt hier uit 3 wapens kiezen: de AK47, M4 of Sniper Rifle. Daarna klik je op Option 1 of Option 2 (deze kun je zelf invoeren).

Voorbeeld 4: Password
Het laatste voorbeeld is de dialog voor de passwords. Deze geeft het wachtwoord wat ingevoerd is mee aan de callback in normale tekst maar wordt niet op de gebruiker zijn scherm getoond. Handig als je meekijkers hebt. Deze dialog style is dan ook aan te raden als je wachtwoorden laat invoeren.

Disclaimer 1: De DIALOG_LOGIN, DIALOG_WEAPONS en DIALOG_WELCOME zijn #defines voor de IDs van deze dialogs. Deze kunnen dan gecontroleerd worden in OnDialogResponse()
Disclaimer 2: Hoe je de resultaten kan afvangen zie je in de tutorial over de callback 'OnDialogResponse()'. Deze komt binnenkort.
Reply
#2

Waarschijnlijk bump, maar ik heb een vraagje. Ik heb dan een login, hoe is het mogelijk om een dialog daarvoor te doen met regels en updates? Want die wil ik ook graag in-game hebben
Reply
#3

Eerst de dialog voor de regels, updates etc laten zien en dan in OnDialogResponse controleren of de dialog DAT dialogid was en dan de inlog laten zien.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)