Allgemein
News
News-Archiv
Partner
Netzwerk
Banner
Header
Media
Downloads
Impressum

The Elder Scrolls
Arena
Daggerfall
Spin-offs
Romane
Jubiläum
Reviews
Welt von TES
Lore-Bibliothek
Namens-
generator

FRPGs

Elder Scrolls Online
Allgemein
Fraktionen
Charakter
Kargstein
Technik
Tamriel-
Manuskript

Media

Skyrim
Allgemein
Lösungen
Tipps & Tricks
Steam-Kniffe
Review
Media
Plugins & Mods

Oblivion
Allgemein
Lösungen
Tipps & Tricks
Technik
Charakter
Media
Plugins & Mods
Kompendium

Morrowind
Allgemein
Lösungen
Tipps & Tricks
Media
Plugins & Mods

Foren
The Elder Scrolls Online
Hilfe & Diskussion

Skyrim
Hilfe & Diskussion
Plugins & Mods

Ältere TES-Spiele
TES-Diskussion
Oblivion-Plugins
Morrowind-Plugins

Community
Taverne zum Shalk
Adventures of Vvardenfell
Tales of Tamriel
Ergebnis 1 bis 7 von 7

Thema: Probleme mit einem seeeeehr einfachen Script

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #4
    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.

    Code:
    scn HFCTEST
    
    short HFCStage
    
    Begin OnActivate
    
    If HFCStage == 0
           If ( Player.HasSpell HFCAbility == 1 )
                  Player.RemoveSpell HFCAbility
              EndIf
       set HFCStage to 10
    endif
    
    if HFCStage == 10
        PrintToConsole "We get to the second stage of the script."
        ; Here is a long calculation which needs to be based on the player's skill WITHOUT   the    Ability added by this script
         set HFCStage to 20
    endif
    
    End
    
    begin GameMode
    
    if HFCStage != 20
         return  ;Performace schonen, damit das Script nur durchläuft, wenn der Stage 20   beträgt)
    endif
    
    if HFCStage == 20
    	PrintToConsole "Adding the ability."
    	Player.AddSpell HFCAbility
    	set HFCStage to 0
    endif 
    
    End
    Zitat Zitat von Schattenläufer Beitrag anzeigen
    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.
    Geändert von Muecke49 (12.04.2010 um 11:35 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •