Hi,
Ich würde gern einen Thread aufmachen, in dem ich immer mal wieder Modding-Fragen stelle. Also so was wie ein Sammelthread. Denn ich bin noch ziemlich unerfahren im Umgang mit dem CS und werde deswegen vorraussichtlich häufiger auf Probleme stoßen.
Meine erste Frage dreht sich ums Scripten. Ich habe bereits ein Tutorial im CS-Wiki dzu gelesen, aber mit dem Englisch hatte ich etwas Probleme. Bei Ei-der-Zeit hab ich auch ei Tutorial dazu gefunden. Trotzdem hab ich ein Problem. Nämlich funktioniert das folgende Script nicht so wie es soll:
Scriptname 'scriptname'
short Doonce
begin GameMode
if ( 'Questname' == 10 ) && ( Doonce == 0 )
player.additem 'EditorID eines Objektes' 1
SetStage 'Questname2' 10
set Doonce to 1
endif
end
Macht euch keine Sorgen, das ich die in ' ' stehenden Begriffe nicht ersetz habe, denn daran habe ich gedacht. Speichern lässt sich das Script auch, es gibt keine Fehlermeldung. Das Script soll eig, sobald das Spiel startet, dem Spieler ein Buch hinzufügen und einen Quest auf Stage 10 setzen (nur wenn der oben genannte Quest auf Stufe 10 ist). Was mache ich falsch???
An dem Script selber kann ich keine Fehler entdecken.
Woran hängt denn das Script und wie ist der genaue Ablauf?
Allgemein lässt sich noch dazu sagen, dass man GameMode-Blöcke nach Möglichkeit meiden sollte. Ein Script im GameMode Block läuft die ganze Zeit, während der Scriptholder geladen ist, immer und immer wieder durch. Dies kostet Performance. Laufen nun viele GameMode Blöcke gleichzeitig, so kann dies auf kosten der Performance gehen und je nachdem wo diese Scripte aktiv sind, musst Du ja nicht nur mit Deinen Scripts rechnen, sondern auch mit denen aus Vanilla und von anderen Mods. Wenn es also "nur" darum geht ein Buch zu adden und einen Queststage weiterzuschalten, so findet sich bestimmt eine einfachere Lösung als ein GameMode Script.
Deswegen beschreibe am besten mal die Situation in der dieses Script greifen soll.
Eine Kleinigkeit ist mir noch aufgefallen...............
Zitat
if ( 'Questname' == 10 ) && ( Doonce == 0 )
...
Du definierst die Quest nur über den Namen. Ich weis nicht ob dies funktioniert. Soweit ich das weis müsste dies so lauten.
if getstage "Questname" == 10
Doch selbst wenn es damit funktioniert, solltest Du Dir überlegen ob es nicht eine Möglichkeit ohne GameMode Block gibt......(resultscript in der ersten Quest beim erreichen des Queststages 10, per Dialog und ResultScript oder per TriggerBox und begin onTrigger Player.......Möglichkeiten gibt es da viele)
Das sich das Script einfach speichern lässt, obwohl er den Questnamen eigentlich nicht erkennen kann, wundert mich
...
Mich nicht. Man kann auch mit IDs vergleiche anstellen. Mit 10 zu vergleichen ist zwar etwas unsinnig (weil immer falsch), aber von der Syntax her möglich.
Ansonsten muss ich Mücke zustimmen: Verwende einfach die wichtigen Zeilen des Scripts als ResultScript für Stage 10 der Quest:
--
Ich kam, sah, und konnte meinen Augen nicht trauen
Mein Problem ist, das abgefragt werden soll, ob der Quest auf Stufe 10 ist (ein Vanilla-Quest), damit dann erst die Schriftrolle hinzugefügt wird und mein gemoddeter Quest startet. Wenn ich das also in das Resultscript von dem Vanilla Quest schreibe, und derjenige, der den Mod hinzufügt, schon soweit ist, dann wurde das Resultscript zu Queststage 10 doch bereits ohne meine Ergänzung abgefragt, oder?
Und wenn ich GetStage benutze, wird es doch auch nur in dem Moment gelesen, in dem Stage 10 erreicht wird, und nicht nachträglich, ob es erreicht wurde? Wäre in dem Fal
Das Script hängt an der Schriftrolle, die geaddet werden soll.
Dialoge sind keine Vorhanden, bevor die Schriftrolle hinzugefügt werden muss, da es ja quasi der Startpunkt sein soll.
Und was 'GameMode' angeht, was wäre denn eine sinnvolle Alternative?
GetStage gibt die höchste erreichte Stage aus. Ganz egal ob die gerade erreicht wurde, oder schon vor Tagen.
Da ich davon ausgehe, dass die Vanilla-Quest noch eine höhere Stage als 10 hat solltest du entweder >= als Vergleichsoperator verwenden, oder die Funktion GetStageDone zu rate ziehen.
Einzige Alternative zu Gamemode währe in deinem Fall MenuMode. So groß ist der Unterschied aber auch nicht.
Außerdem sind Script bei Oblivion performance-technisch das geringste Problem. Und dadurch, dass die Quest nach Erfüllung der Aufgabe beendet/gestoppt wird hat sie keinerlei Auswirkungen mehr.
Ich würde dir eher empfehlen das ganze über Conditions bei der zu startenden Quest zu regeln.
--
Ich kam, sah, und konnte meinen Augen nicht trauen