Archiv verlassen und diese Seite im Standarddesign anzeigen : Allgemeine CS-Fragen
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???:\
Muecke49
25.09.2009, 08:04
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...............
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)
Ja es heißt GetStage QuestID. Und er könnte nach dem adden des Buches die Quest auch einfach stoppen.
Das sich das Script einfach speichern lässt, obwohl er den Questnamen eigentlich nicht erkennen kann, wundert mich :confused:
Low Post
25.09.2009, 17:37
Das sich das Script einfach speichern lässt, obwohl er den Questnamen eigentlich nicht erkennen kann, wundert mich :confused:
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:
player.additem 'EditorID eines Objektes' 1
SetStage 'Questname2' 10
Danke für die Tipps http://www.multimediaxis.de/images/smilies/old/sm_12.gif
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:confused:
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?
Low Post
26.09.2009, 15:04
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 (http://cs.elderscrolls.com/constwiki/index.php/GetStageDone) zu rate ziehen.
Einzige Alternative zu Gamemode währe in deinem Fall MenuMode. So groß ist der Unterschied aber auch nicht.
scn 'scriptname'
Begin GameMode
if ( GetStageDone 'Questname', 10 )
player.additem 'EditorID eines Objektes' 1
SetStage 'Questname2' 10
StopQuest 'Questname dieser Quest'
endif
End
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.
MODIFIED
26.09.2009, 15:06
Zunächst würde ich nicht in Originalquest rumwerkeln, wenn ich die Absicht hätte diese Plugin zu veröffentlichen.
eine neue Quest mit deinem Questscript sollte auch funktionieren.
if getstage ( 'Questname' >= 10 ) && ( Doonce == 0 )
Sobald der Queststage größer/gleich 10 ist wird das Item hinzugefügt.
Da ich davon ausgehe, dass die Vanilla-Quest noch eine höhere Stage als 10 hat ...
Nein, hat sie nicht, deswegen ist >= nicht notwendig. 10 ist übrigens auch die einzige Stage
scn 'scriptname'
Begin GameMode
if ( GetStageDone 'Questname', 10 )
player.additem 'EditorID eines Objektes' 1
SetStage 'Questname2' 10
StopQuest 'Questname dieser Quest'
endif
End
Scriptname 'Scriptname'
short Doonce
begin GameMode
if ( GetStageDone 'Questname', 10 ) && ( Doonce == 0 )
player.additem 'EditorID eines Objektes' 1
SetStage 'Questname2' 10
set Doonce to 1
endif
end
Ich habe es jetzt so abgeändert und es funktioniert. http://www.multimediaxis.de/images/smilies/old/1/party.gif
Vielen Dank für die Hilfe, endlich geht es wieder vorwärts. http://www.multimediaxis.de/images/smilies/old/s_060.gif
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.