Benutzer-Werkzeuge

Webseiten-Werkzeuge


Dies ist eine alte Version des Dokuments!


………………………………………………………. ……………………………..

oCTriggerScript

1. TimeLoop

Wir beginnen mit einer ganz gewöhnlichen Zeitschleife. Wozu dient eine Zeitschleife?:

  • In der Zeitschleife kann zum Beispiel abgefragt werden, ob der Spieler ein bestimmtes Item besitzt, da die Zeitschleife in wiederkehrenden Abständen, (Intervall einstellbar) durchliest, was in diesem Script alles eingetragen ist oder abgefragt werden soll.
  • Wir starten den Spacer und öffnen die zu bearbeitende *.ZEN
    • Wir nehmen uns das ObjektPagesFenster vor, setzen einen Haken bei „Hold“ und stellen jetzt die Zeit auf etwa 12:00. Jetzt wird es, egal wie lange wir arbeiten, nicht regnen im Spacer und auch nicht dunkel werden. 12:00 habe ich gewählt, weil es da eigentlich am hellsten sein müsste.

1.1 Einsetzen TriggerScript

  • Wir wenden uns dem Objektfenster zu und klicken uns durch den Pfad → zCVob → zCTriggerBase(abstract) → → zCTrigger → ocTriggerScript

pic_01

  • Wir klicken mit der rechten Maustaste in das Spacer Hauptfenster und erhalten das Vob-Fenster mit der Option „Insert(oCTriggerScript)“

  • Wir klicken auf „Insert(oCTriggerScript)“ und erhalten einen „grauen Würfel“ - ein Koordinaten-Kreuz welches „oCTriggerScript“ benannt ist.

  • Wir geben unserem oCTriggerScript einen Namen mit Bezug. In unserem Falle TS_TIMELOOP_05
  • TS = TRIGGERSCRIPT - TIMELOOP = ZEITSCHLEIFE - 05 = 0.5sec (Intervall der Abfrage)
    • vobName:TS_TIMELOOP_05 (IN GROSSBUCHSTABEN)

1.2 Einstellen TriggerScript

Dieser ocTriggerScript benötigt weder ein Visual, noch Kollision. Also belassen wir nachfolgende 4 Einträge unverändert

  • visual:(ohne Eintag)
  • cdStatic:FALSE (Kollision gegen statische Vobs)
  • cdDyn:FALSE (Kollision gegen dynamische Vobs)
  • staticVob:FALSE (ob das Objekt in die Lichtberechnung einbezogen wird)
  • Vorerst wenden wir uns jetzt den Einstellungen des Objektfenster im Ordner „Trigger“ zu
  • Trigger
    • ActivationFilter
      • reactOnTrigger:TRUE (Muss so bleiben, sonst reagiert der oCTriggerList nicht mehr auf Aufrufe, Script oder Direktlink im Spacer)
      • reactOnTouch:TRUE (Hat keine Auswirkungen bei unserer Beispielschleife, egal ob der Eintrag FALSE, oder TRUE heisst)
      • reactOnDamage:TRUE (Funktioniert nur mit Bogen und Armbrust, aber in unserem Falle auch nicht, da wir die Kollision ausgeschaltet haben.
      • respondToObject:TRUE (Ein Trigger reagiert zwar nicht auf die Berührung mit Objekten, habe noch nie diese Situation herbeiführen können, wenn man das aber, auf FALSE stellt, dann läuft zum Bsp. ein Mover, der angesteuert wird, nicht mehr an. Wir belassen das auf TRUE)
      • respondToPC:TRUE (Trigger reagiert zwar auf PC/Hero, aber nicht in unserem Falle, da wir die Kollision ausgeschaltet haben)
      • respondToNPC:TRUE (Trigger reagiert zwar auf NPC, aber nicht in unserem Falle, da wir die Kollision ausgeschaltet haben)
      • startEnabled:TRUE (Wenn das auf „FALSE“ steht reagiert der oCTriggerscript nicht mehr)
      • respondToVobName: (ohne Eintrag)
      • numCanBeActivated:-1 (unendlich oft, 1 wäre 1x, 10 wäre 10x, 0 = aus/gar nicht)
      • retriggerWaitSec:0 (Wartezeit bis zur nächsten Auslösung in sec)
      • damageTreshhold:0 (? habe ich noch nie benutzt)
    • FireBehavior
      • fireDelaySec:0.5 (Hier tragen wir unsere 1/2 Sekunde ein, denn unser TimeLoop soll alle 0.5sec aufgerufen werden. Wichtig = 0.5 → NULL_PUNKT_Fünf, nicht Komma)
      • sendUntrigger:TRUE
  • scriptFunc:MY_TIMELOOP (GROSSBUCHSTABEN)

Hier das komplette Objektfenster mit den Einstellungen für einen funktionierenden TimeLoop

1.3 TimeLoop Test

  • Wir benötigen einen Eintrag in der Startup.d um den TimeLoop bei Gamestart zu aktivieren
 Wld_SendTrigger("TS_TIMELOOP_05");
  • Dazu erstellen wir ein Script. In dieses Script könnt ihr später alle eure Abfragen reinpacken Wir setzen jetzt lediglich einen Print in die Schleife um die Funktion zu prüfen.
func void MY_TIMELOOP() // Scriptfunc des oCTriggerScript
{
  PRINT("TEST SCHLEIFE");
  
  
Wld_SendTrigger("TS_TIMELOOP_05"); // Am Ende des TimeLoop ruft die   
};                                 // Zeitschleife sich selbst wieder auf
  • Wenn wir jetzt das Game starten und die Testprints werden gedruckt, dann haben wir alles richtig gemacht.

2. Trigger Touch

  • Wie schon der Name sagt, ist das der oCTriggerScript, der berührt werden muss,
  • Das kann mit einem Pfeil oder Bolzen ausgelöst werden wenn man den Trigger beschiesst → switch_mit_fkw_beschiessen
  • oder ein NPC/PC muss den oCTriggerScript berühren.
  • Wir haben z.B eine Pendelklingenfalle, die der Hero bei Annäherung an die Pendelklingen auslösen soll. Wer diese nachbauen will, oder nicht kennt, der kann sich hier informieren → Mover Level 2
  • Da gibt es auch mehrere Möglichkeiten das bei Annäherung auszulösen:
  • Wir setzen einen Waypoint und schreiben in das Script unseres TimeLoop´s → timeloop
var int aufruf;
func void MY_TIMELOOP() // Scriptfunc des oCTriggerScript
{
  if (Npc_GetDistToWP (PC_Hero, "WP_FALLE")< 800) // kleiner 8m
  && (aufruf == 0)
  {
     Wld_SendTrigger("NAME");
     aufruf = 1;
  };
  
  Wld_SendTrigger("TS_TIMELOOP_05");// Am Ende des TimeLoop ruft die   
};                                  // Zeitschleife sich selbst wieder auf
  • oder ihr setzt beim oCTriggerScript den Eintrag „numCanBeActivated:1“, dann kann der oCTriggerScript nur 1x ausgelöst werden und ihr benötigt nicht die Variable „aufruf“.
  • oder wir setzen in angemessener Entfernung von der Falle eine Triggerbox, in die der NPC reinlatschen muss um den oCTriggerScript auszulösen.
quickstart/triggerscript.1456064486.txt.gz · Zuletzt geändert: 2016/02/21 15:21 von zollaidal