thefuture2 schrieb:
hi,
wie mache ich es, dass wenn ich buch A lese, dem Spieler ein Tagebucheintrag hinzugefügt wird und somit eine Quest beginnt?
Wie mache ich es dann wenn Item A bzw. monster A tot ist, dass der Eintrag aktualisiert wird und der Quest als abgeschlossen gilt?
Das Tagebuch als neues Objekt anlegen.
Dazu im CS das "Ursprungsbuch" einfach editieren, vor allem die EDITORID. Beim Schliessen fragt das CS dann "Save as a new form" (oder so), was soviel heisst wie:
"Soll ich daraus ein neues Objekt machen?" - Was Du mit "JA" beantwortest.
Nun Doppelklick Dein neu benanntes, eigenes Objekt.
Ein Button (...) neben SCRIPT anwählen.
Der Script Editor öffnet sich.
Ein Script sieht i.d.R. so aus:
Code:
ScriptName MeinBuchScript
begin OnActivate
if IsActionRef player == 1
SetStage MyQuest 20
Activate
endif
end
Code speichern, alle Fenster des Objektes schliessen, dann Objekt neu aufrufen und JETZT erst das Script im Dropdownmenu zuordnen.
Ist eine "Macke" des CS: Ein neues Script (der Baum zu selbigen) wird erst beim Objektaufruf erzeugt, daher steht ein neues Script erst zur Verfügung, wenn das Objekt neu aufgemacht wird, nachdem gecoded wurde.
Ok, unser Script Zeile für Zeile:
-> if IsActionRef player == 1
Hier stellen wir sicher, daß nur Du (Player) das Buch aktivieren kannst.
Es gibt NPC, die stehlen und picken Sachen - das würde dann ebenfalls dieses (an das Buch gebundene) Script aktivieren, was wir nicht wollen.
Daher die obige Condition (If).
-->SetStage MyQuest 20
Die entscheidene Zeile:
Wir verändern den Fortschritt (Stage) Deines Quests.
Logbucheinträge (Questlog) !!NUR!! mit Quest.
IM CS, bei CHARACTER/QUESTS.. Wählst Du Dein Quest an (linke Spalte) oder erzeugst einen neuen (linke Spalte Rechtsklick ->NEW).
Die TAB QUESTSTAGE nimmt Neueinträge nach dem gleichen Prinzip auf (Rechtsklick, NEW).
Nun noch den Eintrag "20" unter QUESTSTAGE machen und beim Gitter LOGENTRY einen neuen Text anlegen. Dieser Text ist dann der Logbucheintrag.
"Ich habe das Buch von XY gelesen und sollte es zum CIA bringen blablabla".
Die letzte Zeile in unserem Code:
->ACTIVATE
Die ist wichtig. Unser Code ist ein quasi "Interrupthandler".
Stell Dir das so vor:
Wenn immer KEIN Code vorhanden ist, führt Oblivion die Standardaktion durch (z.B: bei sog. ACTIVATOR Objekten).
Sobald wir aber Code erzeugt haben (Script), wird diese Aktion NICHT mehr durchgeführt, Oblivion "denkt" dann:
Gut...wenn wir Code haben, führen wir DEN anstelle der Standardaktion aus.
Würde bei uns also ACTIVATE als letztes fehlen, würde das Buch nicht lesbar sein, das ist nämlich der STandard Activate-Fall auf einem Buch.
Damit das aber nach unserem Code dennoch passiert, rufen wir am Ende "ACTIVATE" manuell auf.
Nun wird Dein Code ausgeführt UND das Buch lesbar.
Bedenke auch, daß es Situationen gibt, wo ACTIVATE !NICHT! in einer Condition sein soll (IF) aber die Stage dennoch erhöht. In diesem Falle kommt das Activate nach dem ENDIF der Condition.
Das ist z.B. entscheident bei Türen und evtl. "Stagetriggern" auf selbigen.
So soll z.B. die Tür immer "activated" werden, die Stage aber nu erhöht, wenn der PLAYER der "Urheber" des Triggers (Betätigung/Auslösung) war.
Es gibt eine (sher unvollständige) Wiki, wo Grundsätze erklärt werden, was manchmal hilft:
http://cs.elderscrolls.com/constwiki/index.php/Main_Page