API: Ereignisse

Es gibt verschiedene Arten von Ereignissen, auf die du reagieren kannst. Im Allgemeinen hat jeder Objekttyp ein entsprechendes Ereignis für Änderungen, Hinzufügungen und Entfernungen. Jedes Ereignis wird einmal pro Objekt ausgelöst, das sich ändert. Wenn sich mehrere Eigenschaften eines Objekts gleichzeitig ändern, wird nur ein "globales" Ereignis (z. B. change:graphic) ausgelöst.


Callback-Parameter

Wenn du ein Ereignis abhörst, erstellst du eine Funktion namens Callback, die jedes Mal ausgeführt wird, wenn das Ereignis eintritt. Die Callback-Funktion erhält mehrere Parameter, die Objekte sind und dir Informationen über das Ereignis geben, damit du entscheiden kannst, was zu tun ist.

Die Callback-Parameter für jedes Ereignis variieren, umfassen jedoch:

obj

Das geänderte Objekt. Alle Änderungen, die du an diesem Objekt vornimmst, werden auch im Spiel gespeichert. Wenn du also ein Grafikobjekt nach links verschieben möchtest, änder die left-Eigenschaft von obj mit set.

  • obj.get("property")gibt den aktuellen Wert für die Eigenschaft zurück.
  • obj.set("property", "newvalue")legt einen neuen Wert für die Eigenschaft fest. Wenn du mehrere Eigenschaften gleichzeitig änderst, kannst du ein Objekt übergeben: obj.set({left: 10, top: 20});


prev

Dies ist ein Objekt der Eigenschaften von obj, wie sie waren, bevor aufgrund dieses Ereignisses Änderungen vorgenommen wurden. Nützlich, um festzustellen, „wie stark“ sich eine Eigenschaft geändert hat.

HINWEIS: Dies ist ein Basisobjekt, daher greifst du auf die Eigenschaften mithilfe der Klammernotation zu: prev["bar1_value"], NICHT mithilfe der Set- oder Get-Funktionen.


Ereignisanordnung

Ereignisse werden synchron ausgelöst (d.h. jede Funktion startet erst, wenn die vorherige beendet ist), und zwar in der Reihenfolge von der ersten Bindung zur letzten und auch von der spezifischen Eigenschaft zum allgemeinen Objekt. Also Folgendes gegeben:

on("change:graphic", function1);
on("change:graphic", function2);
on("change:graphic:left", function3);

Wenn sich die Eigenschaft left des Objekts geändert hätte, wäre die Reihenfolge Funktion3, dann Funktion1, dann Funktion2.

Wenn Sie außerdem mehrere Skripts in Ihrer Kampagne haben, werden die Skripts in derselben Reihenfolge geladen, in der sie auf Ihrer Seite „Kampagnenskripte“ erscheinen, von links nach rechts.

Hinweis: Ereignisse werden nur durch Änderungen ausgelöst, die von Spielern/dem Spielleiter des Spiels vorgenommen wurden. Ereignisse werden nicht durch API-Änderungen ausgelöst. Wenn also ein Spieler eine Spielfigur auf dem Spieltisch bewegt, erhältst du ein „change:graphic“-Ereignis. Wenn du die Eigenschaft desselben Graphic-Objekts in einem Mod-(API)-Skript änderst, wird kein „change:graphic“-Ereignis ausgelöst.


Kampagnenereignisse

bereit

Dieses Ereignis wird ausgelöst, nachdem alle aktuellen Daten für die Kampagne geladen wurden. Wenn du also eine Liste aller Objekte in einer Kampagne oder ein bestimmtes Objekt finden möchtest, das sich bereits in der Kampagne befindet, solltest du erst danach suchen, nachdem das Ready-Ereignis ausgelöst wurde. Wenn du außerdem an add-Ereignisse (z.B. add:graphic) bindest, bevor das ready-Ereignis ausgelöst wird, erhältst du Add-Ereignisse für Objekte, die bereits in der Kampagne vorhanden waren.

on("ready", function() {
  var tokenThatAlreadyExisted = getObj("graphic", "-ABc123");
});

change:campaign:playerpageid

Wird immer dann ausgelöst, wenn sich die Seite ändert, auf der sich die Spieler gerade befinden.

change:campaign:turnorder

Wird immer dann ausgelöst, wenn sich die Zugreihenfolgeliste für die Kampagne ändert.

change:campaign:initiativepage

Wird immer dann ausgelöst, wenn die Zugreihenfolge für eine Seite ausgeblendet oder angezeigt wird. Dies ist möglicherweise nicht mit der ID der aktuell aktiven Seite identisch. Wenn dies auf false gesetzt ist (einschließlich wenn ein Mod (API) Skript es auf false setzt), wird die Zugreihenfolge für alle SL/Spieler geschlossen. Wenn du eine gültige Seiten-ID festlegst, wird sie für alle SLs/Spieler geöffnet.


Objektereignisse

change:graphic

Wird immer dann ausgelöst, wenn sich ein Grafikobjekt (fast jede Art von Objekt auf dem Spieltisch, einschließlich Spielmarkern, Karten und Karten) ändert.

Hinweis: API-erstellte Graphic-Objekte lösen dieses Ereignis bei der Erstellung aus.

Rückrufparameter: obj, prev

on("change:graphic", function(obj, prev) {    
  //Hier etwas mit „obj“ machen. „prev“ ist eine Liste vorheriger Werte.
  // Beachten Sie, dass „obj“ und „prev“ unterschiedliche Objekttypen sind. 
  // Um mit obj zu arbeiten, müssen Sie obj.get("name"); verwenden.
  // um mit prev zu arbeiten, können Sie prev["name"] verwenden;
});

change:graphic:(property)

Sie können auch für jede spezifische Eigenschaft des Objekts eine Bindung an ein Ereignis herstellen. Wenn Sie also ein Skript haben, das Sie nur ausführen möchten, wenn sich dieRotationändert, würden Sie Folgendes tun:

on("change:graphic:rotation", function(obj, prev) {    
  //Rotation immer auf 0 zurücksetzen, damit niemand Objekte drehen kann.    
  obj.set("Rotation", 0);
});

add:graphic

Wird immer dann ausgelöst, wenn ein Grafikobjekt zum ersten Mal zur Tischplatte hinzugefügt wird. Wird auch für vorhandene Objekte aufgerufen, wenn der Spieltisch gestartet wird, wenn du an dieses Ereignis außerhalb von dem ready-Ereignis bindest.

Rückrufparameter: obj

on("add:graphic", function(obj) {
  //Wird für alle neuen Grafiken aufgerufen, auch für die, die schon zu Beginn der Spielsitzung da waren.
});

var gestartet = false;

on("ready", function() {
  on("add:graphic", function(obj) {
    //Wird nur für neue Objekte aufgerufen, die hinzugefügt werden, da vorhandene Objekte bereits vor dem ready-Ereignis geladen wurden.
  });
  //Sie können auch eine Variable festlegen und Add-Ereignisse ignorieren, bis sie wahr ist.
  gestartet = wahr;
});

destroy:graphic

Wird immer dann ausgelöst, wenn ein Grafikobjekt vom Spieltisch entfernt wurde.

Rückrufparameter: obj

Andere Objekttypen

Es gibt auch Ereignisse für alle anderen Objekttypen und Untertypen, wie zum Beispiel:

ändern:Pfad, hinzufügen:Pfad, zerstören:Pfad, ändern:Text, hinzufügen:Text, zerstören:Text, ändern:Token, hinzufügen:Token, zerstören:Token, ändern:Karte, hinzufügen:Karte, zerstören:Karte

Eine vollständige Liste aller Objekttypen und Untertypen finden Sie unterder Objektreferenz.

War dieser Beitrag hilfreich?
12 von 16 fanden dies hilfreich