Construction Set Charaktergenerierungsscripts

Kensen

Abenteurer
Für die Sieben-Burgen-Sache, brauche ich noch ein anständiges Chargenscript und da hab ich mich jetzt drangemacht, mal das Original studiert und jetzt hatte ich folgende Idee:

Zuerst wird man am "Empfang" nach dem Namen gefragt, weil man da einen Termin beim "Grundbuchamt" hat, wo einem dann die Burg überschrieben wird.
Das mit dem Namen klappt problemlos, hier wird übrigens ChargenState auf 200 gesetzt (wichtig für den Rest ^^)

Dann werden dem Spieler einzelne Papiere vorgelegt (Activators), die er ausfüllen soll. Dazu klickt er sie an und ein "OnActivate"-Script startet. Hier beginnen jetzt die Probleme...
Die Scripts sehen so aus:
begin chargen_rasse

If (OnActivate == 1)
If (CharGenState == 200)

set CharGenState to 201
EnableRaceMenu

Endif
Endif

End

begin chargen_klasse

If (OnActivate == 1)
If (CharGenState == 201)

set CharGenState to 202
EnableClassMenu

Endif
Endif

End

begin chargen_stzeichen

If (OnActivate == 1)
If (CharGenState == 202)

set CharGenState to 203
EnableBirthMenu

Endif
Endif

End

begin chargen_fertisch

If (OnActivate == 1)
If (CharGenState == 203)

set CharGenState to -1
EnableStatReviewMenu

Endif
Endif

End

Ich habe alle Scripts zusammen und einzeln getestet, sobald die Zelle geladen wird, in der sich die Activators befinden, kommt der "EXPRESSION"-Hinweis... Früher konnte ich jeweils noch "ja" klicken und dann kam was mit "Right Eval", neuerdings habe ich einfach keinen Mauszeiger mehr, kann rausswitchen und MW per CTRL-ALT-DEL beenden...

Was mache ich falsch mit meinen Scripts...? Es muss mit den "EnableXXXMenu"-Befehlen zusammenhängen, weil ich habe die Scripts schonmal testweise aufs Minimum reduziert (If OnActivate --> EnableXXXMenu-->Endif) jedesmal der EXPRESSION-Fehler... WEnn ich die Menüs ü¨ber die Konsole aufrufe, funktioniert aber alles problemlos. Weiss jemand, was hier schiefläuft? Darf evtl. ein solches Menü nicht über ein lokales Script aufgerugen werden?

Bin dankbar für jede Hilfestellung ^^

Gruss
Kensen
 
Der EXPRESSION-Fehler deuted darauf hin das der Fehler nicht in einem dieser lokalen Scripts sondern in einem global laufenden Script ein "Return"-Befehl verwendet wird. Das ist illegal.

Wahrscheinlich hast Du im Chargen-Script sowas stehen:

...
if ( MenuMode == 1 )
return
endif
.....

Das geht nicht (wenn es mehrmal hintereeinander ausgeführt wird) in rein global laufenden Scripts. Du musst also etwas umstricken, z. B.

begin Scriptname

if ( MenuMode == 1 )

; dann passiert nix

else

;hier jetzt der eigentliche Script-Text

endif

end
 
Nein, das kann's nicht sein.

Erstens wird das jeweilige Script als Ursache des EXPRESSION-Fehlers genannt und zweitens ist das Nemansscript nach demselben Prinzip aufgebaut, aber dieses funktioniert.

Das Main-Script ist unverändert (naja, ein wenig angepasst) übernommen:
begin MAIN

if ( MenuMode == 0 )
Set Random100 to Random, 101
if ( RunMainActions == 1 )
if ( Cellchanged == 0 )
set PCisInterior to Player-> GetInterior
EnableTeleporting
EnableLevitation
set RunMainActions to 0
endif
else
set RunMainActions to Cellchanged
endif
else
set RunMainActions to 1
endif


if ( CharGenState == 1 )
;the game sets CharGenState to 1 when NEW GAME is selected
;StartScript Startup
if ( ScriptRunning, CharGen == 0 )
StartScript CharGen
endif
endif

end

Das Chargen-Script sieht so aus:
begin CharGen

DisablePlayerViewSwitch
DisableVanityMode
DisablePlayerFighting
DisablePlayerMagic
set CharGenState to 200

stopscript CharGen
Player->PositionCell 61,-135, 24, 340, "Grundbuchamt"

Endif

end CharGen

Spoiler, da viel Text ^^

Ich blick nicht mehr durch...

//edit
Äh, Moment, wofür ist eigentlich die Einleitung im Main-Script gut? Da kommt ja ein "MenuMode" vor. Fällt mir erst jetzt auf, da ich eigentlich nur das Startup-Script zu einem Kommentar gemacht habe... Brauch ich den Teil überhaupt? Ich seh hier grade den Sinn nicht^^
 
Das

if ( menumode == 0 )
set Random100 to Random 101
endif

ist nur dazu da das irgendwelche Zufalls-Antworten während der Dialoge gleich bleiben, d.h. die vor dem Gespräch zuletzt "gewürfelte" Zahl bleibt während des Gesprächs erhalten damit der Gesprächspatner während des Gesprächs die Antwort nicht wechselt. Manchmal benutzt man den Zufallswert auch für Scripts

PCIsInterior hab ich eingeführt- so hat man im Dialog auch die Möglichkeit zu checken ob das Gespräch drinnen(1) oder draussen(0) stattfindet

RunMainActions hab ich auch "erfunden", z.B. damit diese Aktionen (Teleport/Levitationsverbote checken) auch von ausserhalb des Main-Scripts ausgelöst werden können (durch set RunMainActions to 1)

Einen Fehler hast Du am Ende des Chargen-Scripts: da steht ohne Sinn und Zweck ein "endif" - könnte das "right eval" begründen.
Für den Expression-Fehler weiss ich nun leider auch nicht weiter- vieleicht fällt mir später noch was ein...
 
Zuletzt bearbeitet: