Trigger

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Quellcode

      1. <Asset>
      2. <Template>Trigger</Template>
      3. <Values>
      4. <Standard />
      5. <Trigger>
      6. <TriggerCondition>
      7. //hier wird eine condition erwartet
      8. </TriggerCondition>
      9. <TriggerActions>
      10. <Item>
      11. //hier wird eine Action erwartet
      12. </Item>
      13. </TriggerAction>
      14. </Trigger>
      15. <TriggerSetup />
      16. </Values>
      17. </Asset>
      Alles anzeigen
      Ein sehr simples, aber mächtiges Konzept, was seit Anno 2205 existiert, sind die Trigger.


      Wie hier beschrieben: maug-projekt.de/forum/index.ph…A4nden-kompatibel-machen/ sind diese bspw für die Freischaltungen von Gebäuden zuständig. Allerdings können sie noch weitaus mehr.

      Ein Trigger implementiert folgendes Konzept: Wenn Vorraussetzung (Condition) erfüllt - ein oder mehrere Aktionen (Action) ausführen.

      Dabei gibt es in der templates.xml eine Reihe vordefinierter Conditions und Actions. Auf diese ist man zwar beschränkt (gibt auch noch Codemüll aus Anno 2205) - Aber sie können extrem viel und sind vielseitig einsetzbar. Diese Conditions und Actions können beliebig miteinander kombiniert werden. So kann man bspw die Freischaltung der schweren KI in der KI-Schiffswerft an den Bau eines Gebäudes (z.B. einer Botschaft) anstatt einer erreichten Bevölkerungszahl knüpfen. Die Actions eines Triggers werden in ihrer Reihenfolge ausgelöst.

      Registrierung von Triggern

      Folgendes Problem: Ich habe einen Trigger zum freischalten der Bank bei einem Ingeneur geschrieben und ihn ausgelöst, Bank freigeschaltet und Bewohner happy. Im Nachhinein fällt mir dann aber auf, dass ich doch auch gerne das Clubhaus auch ab einem Ingeneur haben will, also füge ich es in meinen Trigger ein. Lade ich meinen Spielstand erneut, fällt mir aber auf, dass es gar nicht freigeschaltet ist, obwohl ich doch einen Ingeneur habe?

      Warum ist das so?

      Anno verwaltet die Trigger in einer internen Eventliste, in die ein Trigger erst registriert werden muss. Beim Registrieren des Triggers wird das Asset geparst und auf dessen Basis für Anno ein Event erstellt. In unserem Fall: 1 Ingeneur erreicht -> Bank freischalten. Dieses Event erhält die GUID des Triggers als ID. Befindet sich Event 42 bereits in der Eventliste, werden keine Änderungen an diesem Event mehr vorgenommen, egal, ob wir den Trigger ändern. Wird Event 42 in der Eventliste ausgelöst, merkt sich das Spiel das. Egal, was wir jetzt am Asset mit GUID = 42 ändern, das Spiel wird es nicht von selbst neu registrieren.

      Im Normalfall werden Assets mit der Template Trigger beim ersten Mal automatisch registriert, außer, wir stellen das ab. (siehe unten)

      Danach müssen wir manuell neu registrieren. Zum Testen ist es meistens ganz hilfreich, einfach die GUID des Assets zu ändern, weil Anno den Trigger dann als neues Event sieht und entsprechend neu einliest. Zur manuellen Registrierung kommen jetzt ein paar Handgriffe:


      Ein paar Handgriffe für die Trigger:

      Einen Trigger nicht automatisch registrieren: unter TriggerSetup kann man das Automatische Registrieren des Triggers abschalten

      Quellcode

      1. <TriggerSetup>
      2. <AutoRegisterTrigger>0</AutoRegisterTrigger>
      3. </TriggerSetup>

      Einen Trigger durch einen anderen Trigger registrieren lassen: Über die ActionRegisterTrigger - Das geht auch, wenn der Trigger bereits ausgelöst wurde! Nach der Neuregistrierung kann der dann wieder ausgelöst werden.

      Quellcode

      1. <Template>ActionRegisterTrigger</Template>
      2. <Values>
      3. <Action />
      4. <ActionRegisterTrigger>
      5. <TriggerAsset>1443041</TriggerAsset>
      6. </ActionRegisterTrigger>
      7. </Values>

      Einen Trigger sich selbst zurücksetzen lassen: Über die ActionResetTrigger

      Quellcode

      1. <Template>ActionResetTrigger</Template>
      2. <Values>
      3. <Action/>
      4. <ActionResetTrigger/>
      5. </Values>

      Einen Trigger erst bei Erfüllung einer bestimmten Bedingung registrieren lassen: Das ganze geht über einen SubTrigger im SubTriggers Container. Dieser muss unter Values/Trigger.

      Quellcode

      1. <SubTriggers>
      2. <Item>
      3. <SubTrigger>
      4. <Template>AutoCreateTrigger</Template>
      5. <Values>
      6. <Trigger>
      7. <TriggerCondition>
      8. //Hier wird eine Condition erwartet
      9. </TriggerCondition>
      10. </Trigger>
      11. </Values>
      12. </SubTrigger>
      13. </Item>
      14. </SubTriggers>
      Alles anzeigen
      einem SubTrigger können auch weitere SubTrigger hinzugefügt werden, wer Lust hat, kann sich mal die uPlay-Club Herausforderung "Silocon Valley" anschauen, da ist es aufs Extremste getrieben worden.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Nale aka Taubenangriff ()