Du könntest OBSE verwenden, dass entfernt afaik die Zeilenbegrenzung für Scripts. Dann müsstest du allerdings noch unter der max. Größe von 32 kB bleiben.


Alternativ kannst du noch Nested If-Blocks ausprobieren um die Scriptlänge zu reduzieren.
Hier gibt es allerdings das Problem, dass die Obergrenze vom CS fest bei 10 liegt (würde ich trotzdem machen, wenn möglich).


Oder um auf ein anderes Script zu verlinken hast du folgende Möglichkeiten:
  • SetStage [QuestID] [Stage]
    Dazu musst du eine Quest erstellen, bei dem du ein Häckchen bei Allow repeated stages setzt. Danach erstellst du neue Queststages (ohne Text, der würde in einer MessageBox enden), bei denen der auszuführende Scriptabschnitt in das Fenster Result Script kommt (Achtung: es können keine Lokalen Variablen definiert werden; auf die aus der Quest muss via [QuestID].Variablenname zugegriffen werden, womit die meisten Funktionen nicht klarkommen)
    Wenn das Script dann aufgerufen werden soll schreibst du dann in dein (Haupt)Script SetStage QuestID Stage:short
    Unter Conditions kannst du noch einige Bedingungen stellen, damit das Script ausgeführt wird. So kann bei der gleichen Queststage ein Unterschiedliches Script ausgeführt werden.
  • Activate [ActionRef] 1
    Du erstellst einen Activator, dem du ein Script zuweist und von dem du eine Persistent Reference irgentwo in der Welt plazierst (am besten in einer Dummyzelle, in die der Spieler nie kommt). Der Block der ausgeführt werden soll kommt in einen OnActivate-Block.
    Wenn du den Block aufrufen willst schreibst du in dein (Haupt)Script [Ref-ID des Activators].Activate Player 1 (es kann auch eine andere Ref als ActionRef genommen werden, solange keine Abfrage nach GetActionRef im Script vorkommt spielt das keine Rolle).


Nachteil der beiden Methoden ist, dass beide max. 4-5 mal ineinander ausgeführt werden können. Danach wird der Befehl einfach ignoriert (Queststages weiß ich nicht, allerdings hab ich davon bei Activate 1 schon öfter gelesen).
Der Befehl wirkt so, als ob die Zeilen aus dem Block direkt im Script stehen (mit Ausnahme der Variablen), sie werden nach Aufruf direkt ausgeführt.




Alternativ kannst du auch eine Variable auf 1 setzten, die ein anderes Script abfragt (das andere Script wird am besten erst mit dem 1-setzten der Variable mittels StartQuest gestartet und nach getaner mittels StopQuest beendet) und sobalt die auf 1 Steht den zweiten Teil des Scripts ausführt. Nachteil ist, dass das Script frühestens im nächsten Frame wirkt.




Ich würde dir die Methode mit dem SetStage/Activate 1 empfehlen, da es genauso wirkt, wie wenn alles im gleichen Script steht. Und wenn keine OBSE-Befehle verwendet werden halte ich es für "etwas" sinnfrei das vorrauszusetzten.