NewRaven.net - Forum

MenuMode verzögert/falsch angezeigt?

- wird das Dialog-Menu geöffnet dauert das Einblenden der Dialoge etwa 3 bis 4 Frames - das Menu erscheint zwar offen aber doch ist MenuMode solange noch != 1 bis alle möglichen Dialoge durchgearbeitet sind. Die zum Dialog gehörenden Results werden erst im nächsten Frame ausgegeben
- Messageboxen ohne Buttons haben manchmal die \"Unart\" Menumode auf einen (mir unbekannten) Wert != 0 zu setzen was nicht heisst das damit MenuMode == 1 ist! (_1 hab ich probiert- isses nich) Leider hab ich kein System dahinter entdecken können. Es tritt vermehrt auf wenn sich mehrere Messageboxen am unteren Bildrand befinden wie beispielsweise bei der schnellen mehrmaligen Verbesserung von Fertigkeiten bei einem Ausbilder, dem öfteren Versagen beim Knacken einer Falle/eines Schlosses oder wenn Untertitel an sind mehrere Angreifer gleichzeitig \"Stirb!\" oder ähnliches rufen.

------------------------------------------------------------------------------------------------------

Cellchange nicht registrierbar:

-falls Türen ein Script tragen das auf OnActivate mit Activate reagiert wird damit das Cellchanged-Ereignis abgefangen und kann nicht mehr registriert werden. Also Vorsicht- dies möglichst nicht einsetzen oder mit \"Schleusen\" arbeiten - derartig bescriptete Türen so verwenden das sie in keine anderen Zellen führen.
- falls für NPC\'s oder Kreaturen eine lokale short StayOutside == 1 gesetzt ist \"erleben\" deren Scripts das Zellwechsel-Ereignis nicht wenn dieser Zellwechsel zu einer Trennung von Player und dem Follower führt.

------------------------------------------------------------------------------------------------------

Position/PositionCell -Anweisungen

am Player

- bei einer Player-> position(Cell) x y z angle \"cellname\" -Anweisung in Scripts beachten:
Die Ausführung des Scriptes wird dabei unterbrochen, eventuell offene If-Sätze/While-Schleifen werden verlassen und die nächste if/else/while-Anweisung wird egal ob sie ihre Bedingung erfüllt oder nicht ausgeführt!
Player-> Position-Anweisungen daher so im Script platzieren das danach nichts mehr ausgeführt wird. Stopscript-Anweisungen bereits vor der Position(Cell) -Anweisung geben.

an NPC\'s/Kreaturen

- bei einer Position-Anweisung gibt es verschiedene Wege.

Start: Exterior - Ziel: Exterior
\"ID\"-> Position x y z angle [\"Exterior-Cellname\"]

Start: Interior - Ziel: Exterior
funktioniert nur mit Namensangabe!
geht also nur wenn das Ziel einen eigenen Ortsnamen hat (z.B. Ahemmusa-Lager, Balmora, Bal Isra )
\"ID\"-> Position x y z angle \"Exterior-Cellname\"

Start: egal - Ziel: Interior
\"ID\"-> PositionCell x y z angle \"Interior-Cellname\"

------------------------------------------------------------------------------------------------------

HitOnMe \"weaponID\"

sollte anzeigen ob der Scriptträger mit \"WeaponID\" getroffen wurde
funktioniert nicht an NPC\'s - nur an Kreaturen

------------------------------------------------------------------------------------------------------

Editor-gesetzte Objekte in Containern

nimmt der Spieler ein Objekt aus einem Container dann wird das Objekt nicht wirklich aus dem Inventar des Containers entfernt sondern der Container bekommt einen Vermerk welche Objekte entnommen wurden. Wenn ein Objekt in einem Container allerdings ein Script trägt wird das Script IMMER gestartet, egal ob das Objekt aus dem Container genommen wurde -daher eigentlich nicht vorhanden sein sollte- oder nicht.

Ob sich das auch mit vom Spieler in ein Behältnis gepacktes und wieder entferntes Objekt so verhält kann ich nicht sagen. Definitiv ist es aber mt allen Objekten so die per Editor eingesetzt wurden.

Ich hab dazu einige Testspielereien gemacht, mehr dazu könnt Ihr
hier nachlesen


------------------------------------------------------------------------------------------------------
short OnPCEquip

Reagiert nur auf On-PC-Equip, d.h. der Spieler muss das Objekt zum Anlegen im Inventar auf seine Figur ziehen bzw. dessen Verzauberung im Magiemenu auswählen, das Ablegen wird per Hand und beim Verkauf registiert. Wird ein Gegenstand auf andere Weise an/abgelegt zeigt OnPCEquip nichts brauchbares an.

An Büchern wird OnPCEquip nur gesetzt wenn dieses Buch als Schriftrolle deklariert wäre und eine Verzauberung hätte und zwar dann wenn der Spieler sich den Zauber \"zurechtlegt\" - nicht wenn er das Buch liest!


short PCSkipEquip

Verhindert nur das der Spieler das Objekt anlegt. Hat er es einmal angelegt wird es dadurch nicht wieder abgelegt. Mit einer Equip-Anweisung kann das Objekt trotz PCSkipEquip == 1 angelegt werden.


Fortsetzung folgt
Etwas unklar ist die Sache mit den
Krankheiten

Wie die Erfahrung gezeigt hat (meine Ansteckungsprobleme im SklavenUndPacktierPlugIn) und es auch im Scripting for Dummies beschrieben ist werden Krankheiten nach der Heilung nicht aus dem Zaubersprüche-Verzeichnis des Spielers gelöscht sondern als geheilt markiert. Man trägt also nach einem Heilzauber sozusagen das Virus noch in sich - während
Player-> GetSpell "ash woe blight" == 1 noch anzeigt gibt Player-> GetBlightDisease == 0 zurück

Ich vermute aber dies gilt nur für Krankheiten die negative Auswirkungen haben denn wie sonst kann das VampireCheck-Script nur mit GetSpell-Abfragen feststellen kann ob der Spieler wirklich krank ist und welches Vampirblut er tatsächlich hat? (Poryphyrische Hämophilie = Ausdauer festigen 1 Punkt)
PlaceAtPC/PlaceItem[Cell]/PlaceAtMe

Wird eine dieser Anweisungen vom Script an einem Objekt aus dem Inventar des Spielers gegeben, d.h. wenn versucht wird mithilfe eines dieser Befehle aus dem Inventar des Spielers heraus ein beliebiges neues Objekt in der Welt zu erschaffen stürzt Morrowind ab!
Abhilfe z.B. mit einem aus dem Script gestarteten Extra-Script in dem der Place...-Befehl problemlos eingesetzt werden kann.
Add-/RemoveSpell

arbeiten in der DV etwas anders als in der EV. Fiel irgendwann einmal (hier die Entdeckungsgeschichte) den Moddern auf und produziert den seltsamen Fehler die Symbole für magische Fertigkeiten/Fähigkeiten aus dem Menü verschwinden zu lassen. Evtl. für Übersetzungen wichtig.
Screenshot
Folgende Scriptsequenz würde den Fehler (in der DV) erzeugen:

PHP-Code:
if ( onPCEquip == )
    
Player->addspell cloaking_device
    
Return
endif

Lässt sich durch eine doOnce-Variable umgehen oder durch Folgendes (fkt. so in DV Cloak of Tree)

PHP-Code:
if ( onPCEquip == )
    
Player->addspell cloaking_device
    set onPCEquip to 2
    
Return
endif

GetDistance

An Objekten des Typs Light scheint nicht korrekt zu funktionieren. Evtl. liegts am Licht-Radius, ungeklärt

die Abfrage gibt während Cellchanged == 1 nicht immer vernünftige Werte zurück- also vermeiden in dem Moment zu messen.
Hallo,

in Ordnung, ich weiß nicht genau, ob das hier hineinpasst. Außerdem werde ich mich sicher total ungewandt ausdrücken. Also nur weiterlesen, wenn man keine Angst hat, einen Drehwurm zu erleiden...

Mir ist Folgendes aufgefallen:
-Wenn man ein Plugin erstellt, das Gebrauch von globalen Variablen macht, die einen Anfangswert von 0 haben und im Laufe des Spiels per Dialog oder Script ihren Wert ändern, so wird dieser Anfangswert verändert, sobald man es durch TESAME jagt und speichert.
-anschließend bringt das natürlich den ganzen Spielverlauf durcheinander. Das kann auch bei Übersetzungen passieren.
-das Verändern der Globalen-Anfangswerte ist mir ein Rätsel und ich bin mir auch nicht sicher, wann genau es passiert. Vielleicht liegt es gar nicht an TESAME. Vielleicht liegt es ja doch am CS.
-seitdem mir das aber einmal untergekommen ist, überprüfe ich bei jedem CS-Start die Globalen des jeweiligen Plugins. ;)

@Rene
Oh,
das ist interessant. Danke, Rene. Also ist TESAME unschuldig.
es passiert wenn du im dialog-fenster des editors auf den button Error-Check Results drückst. Dann werden alle Results einmal ausgeführt um zu checken ob es korrekt funktioniert.
Referenz-URLs