Ich denke dein Problem ist die eigentliche Funktionsweise eines OnActivate Block.
Verstehe ich das richtig, dass Stage 10 und 20 unmittelbar hintereinander ausgeführt werden sollen?
Also erstes Aktivieren: Die Ability wird entfernt.
Zweites Aktivieren: die Kalkulation wird durchgeführt (Stage 10) UND die Ability soll am Ende wieder dazuaddiert (Stage 20) werden.
Dann wäre die Erklärung einfach. Ein onActivate Block läuft nur ein einziges mal durch, in dem Moment wo Du den Activator benutzt. So klappt der erste Schritt, das entfernen der Ability und das setzen auf Stage 10. Beim nächsten Aktivieren merkt das Script, dass Stage 10 gesetzt ist und führt die dort aufgeführten Schritte aus. Und hier kommt nun der Haken, ein onActivate Block registriert nun nicht direkt die Änderung des Stages und nimmt diese mit und führt somit direkt auch den Stage 20 aus. Die Änderungen vom Stage 10 werden gesetzt und da keine weiteren Conditions zutreffen, wird das Script hiermit beendet. Erst beim nächsten Aktivieren (dem 3.Aktivieren), stellt das Script den Stage 20 fest und führt diese Änderungen durch. Wohlgemerkt nur diese Änderungen, die Rechnung bleibt diesmal unbeachtet, denn diese läuft ja unter Stage 10)
Ein OnActivate Block ist sozusagen eine Momentaufnahme. Nur die Conditions, welche beim Aktivieren schon gesetzt waren, werden bemerkt. Alles was innerhalb des Scriptes passiert, wird erst beim erneuten Aktivieren wieder bemerkt. Deswegen ist diese Scriptform auch so Performance schonend, weil sie nur eine Momentaufnahme liefert. Doch es schränkt auch die Möglichkeiten ein, wie Du gerade merkst.
Du musst einen GameMode Block einbauen. Anders geht es leider nicht. Probiere es mal mit diesem Script, auf dem Activator.
Zitat von Schattenläufer
Die verschiedenen Stages sind *eigentlich* ja komplett unnötig, aber ich benutze sie momentan als eine Art Versicherung, dass die Zeilen wirklich nacheinander ablaufen. Was sie allem Anschein nach auch tun.
...
Ich bin mir nicht sicher ob die Rechnung richtig laufen würde, wenn du stage 10 und stage 20 in eine Stage zusammenfügst. Denn dann wäre wieder diese Geschichte mit der Momentaufnahme des onActivateBlock......die Berechnung würde zwar stimmen, doch wenn im selben If-Block die Ability wieder addiert wird, dann könnte es gut sein das diese nicht auf die neue Berechnung addiert wird, sondern auf den Zustand der Ability beim Aktivieren des Activators.
Das ist allerdings nur eine Vermutung und dies liese sich ja austesten, was passiert wenn Du die Stage 20 weglässt und sie einfach in Stage 10 kopierst. ...
Doch ich würde sagen der sichere Weg ist der GameMode Block, der wirklich erst läuft, wenn Stage 10 bereits beendet wurde. Bei der Kürze vom Stage 20 und dem Returnbefehl davor, brauchst Du Dir wegen der Performace keine Sorgen machen.