

| Variablentyp: dialog | |
|---|---|
| | |
| | |
| |
Dialoge ermöglichen es einem, den Spieler vor eine selbst definierte Auswahl zu stellen. Dialoge können dazu Buttons enthalten, welche vom Spieler, welchem der Dialog angezeigt wird, angeklickt bzw. ausgewählt werden können. Über Ereignisse ist es dann möglich, die jeweilige Auswahl abzufangen und darauf zu reagieren. Das bietet dem Anwender eine recht elegante und einfache Möglichkeit, Spieler etwas wählen zu lassen; es kann aber auch für komplexere Dinge wie z. B. Inventarsysteme genutzt werden. Dialoge müssen nicht für alle Spieler gleichzeitig angezeigt werden.
Hier nun eine kleine Beispielfunktion zur Anzeige eines einfachen Dialogs in Jass:
function showDialog takes nothing returns nothing local player user = Player(0) //Spieler 1 (Rot) soll den Dialog sehen. local dialog shownDialog = DialogCreate() //Dialog wird erzeugt local button okButton = DialogAddButton(shownDialog, "|cffffcc00O|rK", 'O') //OK-Button wird erzeugt local button cancelButton = DialogAddButton(shownDialog, "|cffffcc00A|rbbrechen", 'A') //Abbrech-Button wird erzeugt call DialogSetMessage(shownDialog, "Wähle!") //Dialog erhält einen Titel call DialogDisplay(user, shownDialog, true) //Dialog wird angezeigt //Entfernung der Speicherlecks //Achtung: Dialog geht verloren, da er nicht über eine globale Variable verwendet und nachhaltig mit [[DialogDestroy]] zerstört wird. set user = null set shownDialog = null set okButton = null set cancelButton = null endfunction
Dieses Beispiel sollte Spieler 1 einen einfachen Dialog ohne irgendwelche Effekte anzeigen. Es gilt zu beachten, dass die Dialog-Instanz bei diesem Beispiel verloren geht, da sie nicht mit DialogDestroy zerstört wird.
Erweitern wir das Beispiel nun um eine gewisse Funktionalität, indem wir das Drücken eines Buttons abfangen:
globals //globals-Freiheit durch das JassNewGenPack (auch per GUI definierbar) dialog shownDialog button okButton button cancelButton trigger okTrigger trigger cancelTrigger endglobals function okAction takes nothing returns nothing local player user = Player(0) call DisplayTimedTextToPlayer(user, 0.0, 0.0, 5.0, "Sie sind einverstanden.") //Nachricht senden set user = null endfunction function cancelAction takes nothing returns nothing local player user = Player(0) call DisplayTimedTextToPlayer(user, 0.0, 0.0, 5.0, "Sie sind nicht einverstanden.") set user = null endfunction //Erzeugt den Dialog und die Auslöser. Sollte zu Beginn des Spiels aufgerufen werden. function initDialog takes nothing returns nothing local event triggerEvent local triggeraction triggerAction set shownDialog = DialogCreate() call DialogSetMessage(shownDialog, "Wähle!") set okButton = DialogAddButton(shownDialog, "|cffffcc00O|rK", 'O') set cancelButton = cancelButton = DialogAddButton(shownDialog, "|cffffcc00A|rbbrechen", 'A') //OK-Auslöser set okTrigger = CreateTrigger() //Auslöser erzeugen set triggerEvent = TriggerRegisterDialogButtonEvent(okTrigger, okButton) //Button-Klick-Ereignis (in GUI standardmäßig nicht verfügbar) set triggerAction = TriggerAddAction(okTrigger, function okAction) //Aktion hinzufügen set triggerEvent = null set triggerAction = null //Abbrech-[[Auslöser]] set cancelTrigger = CreateTrigger() set triggerEvent = TriggerRegisterDialogButtonEvent(cancelTrigger, cancelButton) set triggerAction = TriggerAddAction(cancelTrigger, function cancelAction) set triggerEvent = null set triggerAction = null endfunction //Zerstört den Dialog und die Auslöser. function clearDialog takes nothing returns nothing call DialogClear(shownDialog) //Dialog wird geleert; notwendig? call DialogDestroy(shownDialog) //Dialog wird zerstört set shownDialog = null call DestroyTrigger(okTrigger) set okTrigger = null call DestroyTrigger(cancelTrigger) set cancelTrigger = null endfunction //Zeigt den Dialog an. function showDialog takes nothing returns nothing local player user = Player(0) call DialogDisplay(user, shownDialog, true) set user = null endfunction
Es ist ebenfalls möglich das Klicken über das für den Dialog allgemein verwendbare Ereignis TriggerRegisterDialogEvent, welches auch standardmäßig in GUI verwendet wird bzw. die BJ-Version davon, abzufangen und dann über Bedingungen bzw. if-Abfragen herauszufinden, welcher Button angeklickt wurde. Dafür gibt es die Ereignisreaktions-Funktion GetClickedButton.
Ein Vorteil bei der Verwendung von Dialogen ist, dass man die Buttons nicht jedes Mal erneut hinzufügen muss, sondern ein und denselben Dialog immer wieder erscheinen lassen kann.

Kroatien (wir berichteten), spielt
Österreich bei der Clanbase Nations League heute einen vorentscheidenden War gegen die starke Mannschaft aus
Tschechien. Am heutigen mehr...