Construction Set Diverse Fragen

Fellan

Freund des Hauses
Da ich momentan meine erste, eigene, größere Mod entwickle, brauche ich ein wenig Hilfe, besonders was Quest-, Gesprächs-, Tagesablauf- und, vor allem, Script-Erstellung angeht.
Im Moment habe ich nur eine Frage, aber mit der Zeit werden es sicher mehr. Und weil ich nicht für jede einzelne Frage, die ich habe(n werde), einen Thread erstellen will, schreibe ich nach und nach meine Fragen. Erstmal:



Ich will eine Quest erstellen, bei der der Spieler von einem NPC gesagt bekommt, eine bestimmte Menge eines bestimmten Gegenstandes zu besorgen. Die "ResultScripts" bei Topics sind bisher auch kein Problem gewesen, da in die Aufgaben nur aus Gesprächen mit anderen NPCs bestanden.
Jetzt soll der Script also dauerhaft prüfen, ob ich bereits 50 der gewollten Gegenstände im Inventar habe. Wie lautet da der Befehl? So ja wohl nicht:

if 50 [Gegenstand]
SetStage [QuestID] 20

oder ist es wirklich so einfach? Sobald ich 50 der gewollten Gegenstände habe, soll eine Quest-Nachricht erscheinen, die mir sagt, dass ich jetzt genug habe und zum Questgeber zurückkehren soll. Danke schonmal im voraus.
 
Zuletzt bearbeitet:
Funktioniert leider nicht, er zeigt folgenden Fehler an:

Script '[Scriptname]', line 1:
Reference function 'GetItemCount' requires explicit reference in quest script.


Ich habe dabei folgenden Script benutzt:


if Player GetItemCount Lettuce == 50
SetStage [QUESTNAME] 20
endif

Was ist daran falsch?
Und gleich noch eine Frage: Wie kann ich einem NPC, den man später ansprechen soll, sagen, dass er dem Spieler die Gegenstände abnehmen und an einem bestimmten Ort auf den Boden werfen soll?
 
Hallo!

Die Itemerkennung muss nicht ins ResultScript sondern in die Conditions des Topics. Dort "GetItemCount ItemID >= 1" auswählen und ein Häkchen bei "Target" machen, damit das auf den Spieler wirkt (sonst wirkt es nämlich nur auf den NPC selber). In das ResultScript gehören nur Dinge, die nach dem Dialog ausgeführt werden sollen. Z.B. Die Übergabe von irgendwelchen Items. Wenn der Spieler also das besagte Item dem NPC geben soll, gehört ins Result Script:
Player.RemoveItem ItemID 1 (Player verliert Item)
AddItem ItemID 1 (NPC bekommt Item)

Dann musst du noch einen Dialog mit der Bedingung "GetItemCount ItemID < 1" machen, wo er dann sowas wie "Tut mir leid, ihr habt ItemXY nicht dabei." sagt.

ich hoffe, das hilft dir weiter.
Gruß, Haldor.


Dies ist von Haldor müsste eigentlich funktionieren

P.S. Bitte achte nicht mehr auf das Zeug was ich oben geschrieben habe denn es hat auch nur in den Scripts funktioniert....Sorry ...Aber Haldor wuste es besser ...Danke an Haldor...:D :D :D
 
Danke, aber das war mir auch klar. Das arbeiten mit Dialogen, Topics, ist absolut kein Problem, finde ich sogar ziemlich einfach. Es geht ja darum, dass der Quest automatisch zur nächsten Stage überspringen soll, wenn ich 50 der gewünschten Items gesammelt habe. Ich will mit niemandem reden müssen, die Quest soll einfach zur nächsten Stage überspringen und mir mitteilen, dass ich jetzt genug gesammelt habe und zum Auftraggeber zurückkehren kann. Das kann ich zwar auch über Topics regeln, so dass der Spieler selbst aufpassen muss, wenn er genug hat, aber das will ich eben nicht. ;)

Aber danke erstmal für die Lösung des Problems mit der Item-Übergabe. Aber der NPC soll nicht mit 50 der besagten Items rumlaufen, weil die viel zu schwer für ihn sind, er soll ja später noch kämpfen. Er soll die Items an Position XYZ wieder auf den Boden werfen. Das ist ja das wichtige für mich, dass er die Items nicht in irgendeinen Container tut, sondern auf den Boden wirft bzw. legt.
 
Wenn du eigene Items erstellst, würde ich auf diese ein Skript legen, das jedesmal OnAdd prüft, wieviele Items der gleichen Sorte schon im Inventar des Spielers vorhanden sind. Im Falle von == 50 würde dann das SetStage erfolgen. Wenn du allerdings Standard-Oblivion-Items wie Lettuce verwendest, würde ich davon absehen, auf diese Skripte zu legen. Eigene Items eignen sich für eigene Quests immer besser. Das könnten ja Salatköpfe aus einem bestimmten Garten sein, sodass du da ruhig eine eigene ID erstellen kannst.

Das mit dem Ablegen der Items durch den NPC ist etwas komplizierter. Du müsstest im Resultscript nach der Übergabe ein AI-Package adden, das dem NPC sagt, wo er hingehen soll. Dort dann ne TriggerZone, die den NPC die Items droppen lässt und ihm ein neues AIP zuweist. Wobei ich gerade gar nicht weiß, ob es einen Skriptbefehl für das Ablegen von Items in die Welt gibt... Notfalls RemoveItem und PlaceAtMe verwenden.

Gruß, Haldor.
 
Muss er denn unbedingt ganze 50 Stück droppen? Ich mein, Havok ist zwar gut, aber hat dennoch Bugs, sodass es bei so einer Menge zu Probleme führen könnte. Du könntest ja disabelte Items an den Ort platzieren und dann per Skript enabeln. Wär einfacher und du hast die Items auch noch schön dort, wo sie hingehören, und nicht wie lieblos weggeworfen.

@Haldor
Wie wärs mit Drop?;)
 
Gut, 50 Stück sollten etwas viel werden. Er kann ja 20 hinwerfen und den Rest in einen Container legen. Aber danke erstmal, jetzt klappts.