Falloutnow! - We drop the bomb!
Modding => New Vegas Modding => Thema gestartet von: judge am 19. März 2012, 12:50:28 Uhr
-
hi leute, ich habe mich nach einigen tutorials als totaler noob mal an mein eigenes script gewagt.. leider hab ich wohl was falsch gemacht weis aber nicht genau was. vielleicht kann mir ja hier jemand mit scripting erfahrung einen tip geben. zuerst mal ne erklärung was ich überhaupt machen will:
ein gegenstand soll repariert werden und der spieler muss dafür einen repair-skill von mind. 25 haben (und die quest muss aktiv sein). wenn man den gegenstand nun anklickt soll folgendes passieren: abfrage ob die queststage 20 oder höher ist (dann wurde der gegenstand bereits repariert) und ausgabe einer entsprechenden nachricht. sonst prüfen ob die queststage auf 10 ist (quest ist aktiv) und eine variable setzen. sonst eine nachricht a la "der gegenstand sieht beschädigt aus" (quest ist noch nicht aktiv und spieler kann erstmal nix machen).
wenn die queststage auf 10 ist soll weiterhin der reparieren-skill abgefragt werden und dann entweder a) der gegenstand repariert werden oder b) eine nachricht ausgegeben werden, dass der skill zu niedrig ist.
folgendes script funktioniert leider nicht und ich habe keine ahnung warum...
SCN 01RepairQuest
short 1VarRepairQuest
begin OnActivate player
if getStage 1RepairQuest >= 20 ; abfrage ob die queststage den wert 20 oder höher hat (quest ist abgeschlossen)
showmessage 01AMMessage4 ; zeigt nachricht, dass der gegenstand bereits repariert wurde
elseif
getStage 1RepairQuest == 10 ; abfrage ob die queststage den wert 10 hat (quest ist aktiv)
set 1VarRepairQuest to 1 ; variable 1varRepairQuest auf den wert 1 setzen
elseif
showmessage 01AMMessage1 ; zeigt die nachricht, dass der gegenstand beschädigt aussieht (quest ist nicht aktiv)
endif
end
begin GameMode
if 1VarRepairQuest == 1 ; abfrage ob die variable 1varRepairQuest den wert 1 hat
if player.getAV repair >= 25 ; abfrage ob der repair-skill mind. den wert 25 hat
showmessage 01AMMessage2 ; nachricht, dass der gegenstand erfolgreich repariert wurde
setStage 1RepairQuest to 20 ; queststage auf den wert 20 setzen
else
if player.getAv repair < 25 ; wenn repaier-skill unter 25 ist
showmessage 01AMMessage3 ; nachricht, dass der repair-skill zu niedrig ist
endif
endif
endif
end
-
edit: mist, die formatierung sieht jetzt ein bißchen wirr aus aber ich hoffe es ist so noch lesbar.
edit 2: nochmal mist, beim ersten mal statt auf editieren auf antworten geklickt...
-
Du kannst [.code]-Tags benutzen, um das Zeug zu formatieren.
-
elseif
getStage 1RepairQuest == 10 ; abfrage ob die queststage den wert 10 hat (quest ist aktiv)
Ich denke da fehlt ein if
if getStage ...
Außerdem verwendest du "elseif" falsch. Entweder "else" oder "elseif" + "Ausdruck auf selber Zeile"
Also:
elseif getStage 1RepairQuest == 10 ; abfrage ob die queststage den wert 10 hat (quest ist aktiv)
Quasi
if getStage 1RepairQuest >= 20 ; abfrage ob die queststage den wert 20 oder höher hat (quest ist abgeschlossen)
showmessage 01AMMessage4 ; zeigt nachricht, dass der gegenstand bereits repariert wurde
elseif getStage 1RepairQuest == 10 ; abfrage ob die queststage den wert 10 hat (quest ist aktiv)
set 1VarRepairQuest to 1 ; variable 1varRepairQuest auf den wert 1 setzen
else
showmessage 01AMMessage1 ; zeigt die nachricht, dass der gegenstand beschädigt aussieht (quest ist nicht aktiv)
endif
end
Am Besten hier nochmal nachlesen:
http://cs.elderscrolls.com/index.php/Elseif
-
danke für den link. jetzt weiß ich wenigstens, dass ich mit && auch mehrere bedingungen abfragen kann. hab das script jetzt überarbeitet, leider passiert absolut nichts wenn ich den gegenstand anklicke.
durch ein gespräch mit dem questgeber hab ich die quest aktiviert und auf stage 10 gesetzt. auch einen entsprechenden eintrag im questlog habe ich erhalten. aber wie gesagt, wenn ich den gegenstand nun anklicke passiert überhaupt nix.
so sieht mein script momentan aus:
ScriptName MeineQuestScript
begin OnActivate player
if getStage 1MeineQuest > 10
showmessage Message1 ; wenn die queststage höher als 10 ist wurde der gegenstand bereits repariert -> entsprechende nachricht anzeigen
elseif (getStage 1MeineQuest 10) && (player.getAV repair >= 25) && (player.GetItemCount SensorModule > 0) ; wenn die queststage auf 10 ist, der repair-skill mind 25 ist und 1 sensormodul im inventar ist
setStage 1MeineQuest 20 ; queststage auf den wert 20 setzen
player.removeItem SensorModule 1 ; 1 sensormodul entfernen
showmessage Message2 ; nachricht anzeigen, dass der gegenstand erfolgreich repariert wurde
elseif getStage 1MeineQuest 10 ; wenn quest auf stage 10 aber spieler hat zu niedrigen repair-skill oder kein sensormodul
showmessage Message3 ; nachricht, dass entweder der repair-skill zu niedrig ist oder der spieler kein sensormodul hat
elseif showmessage Message4 ; zeigt die nachricht, dass der gegenstand beschädigt aussieht , quest ist noch nicht aktiv
endif
end
-
Wie garnix?
Noch nicht mal im Falle von
if getStage 1MeineQuest > 10 ?
Jep, den GameMode Block kannst du komplett knicken. Würde alles in den OmActivate Block schreiben.
Das letzte If-Statement ist Unsinn
elseif showmessage Message4
Es heißt hier ELse, da SchowMessage keine Bedingung ist, sondern eine Funktion die ausgeführt werden soll.
-
so, dass mit dem elseif habe ich korrigiert, leider tut sich immer noch nichts wenn ich das objekt anklicke. liegt dass vielleicht an falschen einstellungen beim objekt? der gegenstand den man aktivieren soll ist ein projektor. ich habe mir daher einen kopiert und eine andere id eingegeben. unter "script" habe ich dann mein script ausgewählt. wenn ich den projektor nun im spiel sehe steht dort auch "aktiviere projektor" aber wenn ich dann E drücke passiert nichts.
hier mal ein bild der einstellungen:
http://s1.directupload.net/file/d/2836/vhbn7hhk_jpg.htm
-
Getstage ist sicher die falsche Funktion für deine Zwecke.
Schau mal hier
http://cs.elderscrolls.com/index.php/GetStage
und hier
http://cs.elderscrolls.com/index.php/GetStageDone
Oder du machst's einfach mit einer Variable. Du willst den Activator reparieren? Poste am besten nochmal dein gesamtes Script.
-
ich habe den fehler mittlerweile gefunden! statt "getStage MeineQuest 10" musste es "getStage MeineQuest == 10" heißen. jetzt funktionierts auch.
ganz nützlich ist auch diese seite hier: http://www.cipscis.com/fallout/utilities/validator.aspx (http://www.cipscis.com/fallout/utilities/validator.aspx)
-
Oh, gut, naklar :D
Solche Syntaxfehler überliest man schnell mal. Allerdings erscheint mir die Funktion auch nicht gerade gut beschrieben.