Building Events: Unterschied zwischen den Versionen

Aus Sternenschweif Wiki
Wechseln zu: Navigation, Suche
Zeile 44: Zeile 44:
  
 
Wird direkt nach OnSleep erstmals aufgerufen (wenn nicht unterbrochen wurde), und danach jeweils am *Beginn* der Wache. delay gibt die Wachedauer in Stunden an (für alle 3 gleich), who enthält die CharacterID (-1, wenn keine Wache eingeteilt wurde). Sofern true zurückgeliefert wird, wird der Wachezyklus normal fortgesetzt, bei false wird er abgebrochen.
 
Wird direkt nach OnSleep erstmals aufgerufen (wenn nicht unterbrochen wurde), und danach jeweils am *Beginn* der Wache. delay gibt die Wachedauer in Stunden an (für alle 3 gleich), who enthält die CharacterID (-1, wenn keine Wache eingeteilt wurde). Sofern true zurückgeliefert wird, wird der Wachezyklus normal fortgesetzt, bei false wird er abgebrochen.
 +
 +
 +
Noch ein paar Ergänzungen:
 +
# Wird die Wache abgebrochen, warum auch immer, gibt es *keinen* Regenerationszyklus
 +
# OnGuard wird auch in der Herberge aufgerufen, selbst wenn es dort keine Wachen gibt, um zB Ereignisse "Mitten in der Nacht" stattfinden lassen zu können
 +
# Ein "unterbrechen und später fortsetzen" des Schlafens, wenn es einmal unterbrochen wurde, ist nicht möglich
 +
  
 
<syntaxhighlight lang="javascript">
 
<syntaxhighlight lang="javascript">

Version vom 10. Juli 2014, 08:20 Uhr

//TODO: Building Events allgemein beschreiben. Werden in der Reihenfolge Dorf, ALL aufgerufen.

Identifiziert via BuildingID (siehe Konsole -> Tooltip)

Unique Trigger werden nur einmalig aufgerufen.

Es wird immer nur der erste Trigger aufgerufen (Reihenfolge im XML / Dorf vor ALL)

Spezial Trigger

enterTown

Wird aufgerufen, wenn ein Dorf betreten wird.

Camp Trigger

Damit ihr die Zeugen umsetzen könnt, habe ich das "Camp Scripting", das bereits für spezielle RouteEvents (zB AbandonedHostel, lawinencamp usw.) verfügbar war, jetzt generell für alle Camps verfügbar gemacht.

Grundsätzlich werden die BuildingEvents verwendet, um das "Gesamtskript" für ein Camp zu setzen, und zwar jeweils das ERSTE gefundene BuildingEvent mit korrektem Namen und dem Typ "skript".

Für Dungeons: campDungeon
Für Lager im Dorf auf der Straße (toll für nächtlichen Diebstahl ;)): campStreet
Für Lager in einer Herberge: campHostel
Für Lager auf der Karte, sofern KEIN spezielles Lager (zB besonderer Rastplatz / RouteEvent) eingestellt ist: campNature

Angesehen werden für die jeweiligen Events, in der hier angegebenen Reihenfolge:
Für Dungeons: ALL
Für Lager im Dorf: aktuelles Dorf + ALL
Für Lager in der Herberge: aktuelles Dorf + ALL
Für Lager in der Natur: Ausgangsdorf der Route, Zieldorf der Route und ALL

Aufgerufen werden die folgenden Funktionen:

function OnSleep() {
    return true;
}

Wird aufgerufen, sobald man die Schlafenszeit eingestellt hat. Liefert diese Funktion true zurück, so wird das Schlafengehen NICHT abgebrochen, sondern fortgesetzt. liefert sie false oder gar nichts, wird abgebrochen, allerdings nur *genau* ein mal. Man kann also das Schlafen gehen nur einmalig unterbrechen.

function OnGuard( guardshift, delay, who, guardshortname ) {
    return true;
}

Wird direkt nach OnSleep erstmals aufgerufen (wenn nicht unterbrochen wurde), und danach jeweils am *Beginn* der Wache. delay gibt die Wachedauer in Stunden an (für alle 3 gleich), who enthält die CharacterID (-1, wenn keine Wache eingeteilt wurde). Sofern true zurückgeliefert wird, wird der Wachezyklus normal fortgesetzt, bei false wird er abgebrochen.


Noch ein paar Ergänzungen:

  1. Wird die Wache abgebrochen, warum auch immer, gibt es *keinen* Regenerationszyklus
  2. OnGuard wird auch in der Herberge aufgerufen, selbst wenn es dort keine Wachen gibt, um zB Ereignisse "Mitten in der Nacht" stattfinden lassen zu können
  3. Ein "unterbrechen und später fortsetzen" des Schlafens, wenn es einmal unterbrochen wurde, ist nicht möglich


function OnLeave() {
    return true;
}

Wird beim Verlassen des Lagers (Abbruch bei Straße und Dungeon, Weiterreisen bei Natur, Zimmer verlassen bei Herberge) aufgerufen. Wiederum kann mit return false; das "normale" Verlassen unterbrochen werden, während mit return true; ganz normal verlassen wird.

Bitte beachtet jeweils, dass der Aufruf eines Dialogs IMMER asynchron verläuft, ihr könnt also Nicht "nach" dem startdlg ein return true; hinpacken, startdlg kehrt nämlich sofort wieder in die Ausführung zurück, selbst wenn der Dialog noch angezeigt wird. Ihr könnt aber zB beim OnLeave mit "leaveLocation()" das Lager verlassen, beachtet aber, dass anders als beim OnSleep diee Funktion OnLeave *beliebig oft* das Verlassen abbrechen kann, also vorsicht vor Endlosschleifen :).