Oblivion:Debugging

Aus Skript-Wiki
Version vom 8. März 2009, 17:08 Uhr von Keris (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Falls etwas nicht richtig funktioniert, lässt sich hier eine mögliche Lösung für den Bug finden.

Komma statt Punkt

Dies kann jedem Scripter schwere Kopfschmerzen bescheren: Der Compiler akzeptiert zwar Kommas statt Punkten in der Referenz-Syntax, aber das Script wird im Spiel nicht funktionieren.

<tesscript>player.modAV health 200 <- Gut player,modAV health 200 <- Das Script wird nicht mehr ausgeführt</tesscript>

Leicht zu übersehen, wenn nach logischen Fehlern gesucht wird.


Ziffern

IDs oder Variablen niemals mit einer Ziffer beginnen lassen.

<tesscript>short 5forFighting; FALSCH long benFolds5; RICHTIG! myGuy.moveTo 0marker; FALSCH</tesscript>

Falsch zugeordnetes If/Endif

Der Compiler wird zusätzliche Endifs beim Speichern des Scripts nicht beachten, aber sie können dafür sorgen, dass das Script im Spiel nicht mehr ausgeführt wird. Jedes If sollte also exakt nur ein Endif haben:

<tesscript>if ( something == happened )

 do something

endif ; RICHTIG endif ; FALSCH, zusätzliches Endif kann im Spiel Fehler verursachen</tesscript>

Der beste Weg, dies zu vermeiden, ist die korrekte Einrückung der If-Blöcke.


Quest Topic Scripts

Der Script-Editor im Quest/Topic-Fenster ist für sehr einfache Operationen, wie das Setzen von Globals oder setstage. Allerdings werden einige Dinge, die dort korrekt erscheinen, im Spiel nicht ausgeführt.


Getself != player

Bei der Nutzung von

<tesscript>getself != player</tesscript>

ist Vorsicht angesagt.

Falls es von einem Scripteffekt-Zauber genutzt wird, kann es als wahr gewertet werden. Die einfachste Lösung ist das Hinzufügen einer anderen Bedingung wie:

<tesscript>getdistance player >0</tesscript>

Allerdings ist getDistance unzuverlässig, wenn der Spieler schwimmt. Am besten verwendet man:

<tesscript>ref refVar set refVar to getSelf if ( refVar.getIsReference player == 0 )</tesscript>


Benutzen eines durch PlaceAtMe verwiesenen Objekts im selben Frame

Falls der verwiesene Gegenstand von PlaceAtMe im selben Frame genutzt wird

<tesscript>set pItem to (player.PlaceAtMe IronBow 1, 0, 0) pItem.Activate player ;fügt dem Spieler den Bogen hinzu</tesscript>

wird das Script auf dem Objekt möglicherweise nicht ausgeführt.


Weiterführende Links

  • Debugging (das englische Original des obigen Artikels)