MorrowindOblivion
Allgemein
News
News-Archiv
Partner
Netzwerk
Banner
Header
Media
Downloads
Impressum
The Elder Scrolls ESO


Skyrim


Oblivion


Morrowind


Foren
The Elder Scrolls
Online

Hilfe & Diskussion

Skyrim
Hilfe & Diskussion
Plugins

ltere TES-Spiele
TES Diskussion
Oblivion Plugins
Morrowind Plugins

Community
Taverne zum Shalk
Adventures of
Vvardenfell

Tales of Tamriel

Hosted by


11.04.2006 Tutorial: Scripten
Hiermit möchte ich euch ein Tutorial präsentieren, dass euch ein wenig in die Welt des Skriptens einführt.

Zunächst einmal stellt sich die Frage nach dem Sinn und Zweck des Skriptens. Wozu braucht man das? Zunächst einmal sind fast alle Quests in Oblivion durch Skripts gesteuert. Dann eröffnen sich durch das Skripten unzählige Möglichkeiten seine Ideen wahr werden zu lassen. Ihr wollt eine Armee von Ratten um euch scharen? Lernt skripten. Ihr wollt das Wetter beeinflussen? Lernt skripten. Ihr wollt ein unendliches Inferno an Special-Effects in einem einzigen Zauber abfeuern? Lernt skripten.

Da nun jeder von der Wichtigkeit des Skriptens überzeugt sein sollte, wenden wir uns der Materie zu.
Je mehr man schon mit Programmiersprachen ,wie VB, PHP oder C++, zu tun gehabt hatte, desto leichter fällt einem auch der Einstieg.

Für die, die bisher noch nicht in "Kontakt" mit einer der oben genannten Programmiersprachen gekommen ist, hier ein Crashkurs. (Erfahrenere Modder springen zum nächsten Abschnitt)


Crashkurs


In der Welt des einfachen Skriptens (in der ich mich zur Zeit auch noch bewege) gibt es ein paar elementare Dinge, die man wissen sollte. Zum Beispiel was Variablen und if-Funkionen sind.

Mit Variablen sollten die meisten schon einmal in Mathematik zu tun gehabt haben. Wer es nicht mehr weiß: In Variablen kann man Daten speichern. Man muss sich eine Variable wie einen Container vorstellen, in den man aber nur eine Sache auf einmal legen kann. Mit Variablen lassen sich sehr einfach bestimmte Daten speichern und wieder aufrufen.

If-Funktionen dienen zum Vergleich. Eine If-Funktion vergleicht zwei Werte miteinander. Da sich das nur schwer erklären lässt, gebe ich hier ein Beispiel.

If x == 1
Message "Die Variable X ist 1"
elseif x != 1
Message "Die Variable X ist nicht 1"

Hier seht ihr, dass durch das If geprüft wird, ob x (eine Variable) gleich 1 ist. Es gibt dabei mehrere Vergleichsmethoden.
  • == steht für den direkten Vergleich zweier Werte. Also wird die Funktion, die unter der If-Bedingung steht, nur ausgeführt, wenn – wie in unserem Beispiel – x gleich 1 ist.
  • != steht für ungleich. Die Funktionen nach dem If werden nur ausgeführt, wenn x ungleich 1 ist.
  • < Die Funktion wird nur ausgeführt, wenn x kleiner als 1 ist.
  • > Die Funktion wird nur ausgeführt wenn x größer als 1 ist.
  • <= Die Funktion wird nur ausgeführt, wenn x kleiner oder gleich 1 ist.
  • >= Die Funktion wird nur ausgeführt, wenn x größer oder gleich 1 ist.
Mit && könnt ihr eine zweite Bedingung an die If-Schleife hängen, mit || eine alternative Bedingung.

Am Anfang war der Name
So, nun starten wir durch: Öffnet das CS, ladet die Oblivion.esm rein und ruft das Skriptfenster auf (Das Icon ganz rechts). Geht nun auf Script, New. Die Fläche in der Mitte wird weiß, und ihr habt auch neue Schaltflächen zur Verfügung. Uns interessieren jetzt erstmal nur die zwei Icons links.

Zunächst solltet ihr auswählen, als was euer Skript verwendet werden soll. Gehört es zu einem Objekt (zum Beispiel einer Statue oder einem NPC), zu einem Quest oder soll das Skript als Magieeffekt dienen?

Wir entscheiden uns für den Magieeffekt (Magic Effect). Wir wollen nämlich ein Wetteramulett bauen.

Zuerst einmal müssen wir dem Skript einen Namen geben. Deshalb schreiben wir in die erste Zeile:

scn wetteramulett

scn steht für Scriptname und gibt eurem Skript einen Namen. Dann stellt sich die Frage, was das Amulett können soll. Da es Wetteramulett heißt, liegt es nahe, ihm die Kraft über das Wetter zu geben. Und wie soll der User auswählen können, welches Wetter er haben will? Hm. Vielleicht durch eine Textbox? Ja, das ist eine gute Idee.
Wie wir oben schon gelernt haben, kann man in Variablen bestimmte Werte speichern. Wenn wir also eine Variable erschaffen, die speichert welches Wetter der Spieler haben will und es dann ans Spiel weiterleitet, wären wir schon einen Schritt weiter. Also gebt dies als nächstes ein:

short wetter

Es gibt beim CS vier Arten von Variablen: short, long, float, ref

Short: Können Zahlen von -32768 bis 32767 erfassen Long: Können Zahlen von -2147483648 bis 2147483647 erfassen Float: Können verdammt viele Zahlen erfassen (von 1.18 x 10-38 bis 3.40 x 1038)

Mit Ref-Variablen könnt ihr um einiges mehr speichern, als mit den "normalen" Variablen. Da die Erklärung dafür zu ausschweifend wäre, hier mal ein Link zum (englischen) CS-Wiki.
Reference Variables

Nun haben wir also unsere Variable gesetzt. Fehlt noch die Textbox.
Um eine Textbox, oder MessageBox wie sie im CS genannt wird, zu erstellen, müsst ihr den Befehl zur Ausgabe einer Textbox (MessageBox) schreiben und ausführen lassen.

Zunächst aber müssen wir festlegen, wann unser Skript mit was "beginnen" soll. Wenn es im normalen Spiel ist, oder im Menü, oder erst, wenn ein bestimmter Gegenstand aufgenommen bzw. abgelegt wurde?
Das kann man alles mit Begin einstellen. Im Folgenden sind die wichtigsten Einstellungen für Begin.
  • GameMode: Das Skript führt die Funktion in jedem Frame im laufenden Spiel aus
  • MenuMode: Das Skript führt die Funktion in jedem Frame im Menü aus
  • OnActivate: Sobald der Gegenstand, auf dem das Skript liegt, aktiviert wurde, wird das Skript ausgeführt
  • OnAdd: Sobald ein bestimmer Gegenstand in einen bestimmten "Container", z.B. in das Inventar des Spielers, aufgenommen wird, wird das Skript ausgeführt (Beispiel: Begin OnAdd wetteramulett player)
  • OnDrop: Dasselbe wie bei OnAdd, nur wird das Skript ausgeführt, wenn ein bestimmter Gegenstand fallen gelassen wird.
  • ScriptEffectStart, ScriptEffectUpdate und ScriptEffectFinish: Können nur von "Magic Effect"-Skripts benutzt werden.
  • OnEquip: Das Skript wird beim Ausrüsten des "beskripteten" Gegenstandes aktiviert.
  • OnUnequip: Das Skript wird beim Ausziehen des "beskripteten" Gegenstandes aktiviert.
Da die Skripts im CS in sogenannten Blocks geschrieben und jeder Anfang ein Ende hat, muss man nach dem letzten Befehl eines Blocks ein End setzen. So weiß das Spiel, dass dieser Block zu Ende ist.

Wir schreiben also dann einige Zeilen unter der Deklarierung der Variablen. Da wir einen neuen "Magic Effect" erstellen, benutzen wir dafür ScriptEffectStart; für die meisten Scripts wird GameMode genommen. Wir schreiben also:

Begin ScriptEffectStart

Dann brauchen wir die Textbox. Der Befehl für die Textbox ist folgendermaßen aufgebaut:

MessageBox "Hier stehen immer Anführungsstrichen", Variable,"Auswahlmöglichkeiten"

In unserem Fall würde da so aussehen:

MessageBox "Welches Wetter wollt Ihr haben?", "Klar", "Wolkig", "Nebel", "Regen", "Schnee" , "Normaler Wetterverlauf"

Im Spiel sieht das dann so aus:



Das reicht nun für diesen Block, also schreiben wir eine Zeile darunter ein End hin und beginnen einen neuen Block. Euer Script sollte nun so aussehen:



Nun soll ausgelesen werden, was der Spieler gewählt hat. Dafür benutzen wir unsere Variable, in die wir den Wert des gedrückten Buttons speichern und dann später wieder auslesen lassen. Da der Rest des Skriptes im normalen Spielmodus ausgeführt werden soll, schreiben wir:

Begin GameMode

Nun müssen wir den Wert der Variable auf den Wert des gedrückten Buttons setzen. Das geht Setzen übernimmt der Befehl Set. Und der Wert des gedrückten Buttons wird durch GetButtonPressed ermittelt. Das Ganze sieht dann so aus:

Set wetter to GetButtonPressed

Nun hat die Variable wetter den Wert des gedrückten Buttons. Jetzt lassen wir sie von einer If-Funktion auslesen. Das sieht dann so aus:

If wetter == 0

Wie wir oben schon gelernt haben wird jetzt verglichen, ob der gedrückte Button der erste in der Auswahl war (in der MessageBox ist die erste Auswahl die 0, die zweite die 1, die dritte die 2, usw.). Wenn dem so ist, wird folgendes ausgeführt:

SetWeather Clear 1

Mit dem SetWeather-Befehl wird das aktuelle Wetter verändert, bzw. der Verlauf des Wetters. Der erste Befehl nach SetWeather, Clear, gibt an, in welches Wetter sich das Wetter umformen soll, mit der 1 nach dem Clear wird festgelegt, dass sich das Wetter dann auch nicht mehr ändert. Das erweitern wir nun auf alle Auswahlmöglichkeiten, so dass es am Ende so aussieht:

if wetter == 0
;Auswahl 1 Klar
SetWeather Clear 1
elseif wetter == 1
;Auswahl 2 Wolkig
SetWeather Cloudy 1
elseif wetter == 2
;Auswahl 3 Nebel
SetWeather Fog 1
elseif wetter == 3
;Auswahl 4 Regen
SetWeather Rain 1
elseif wetter == 4
;Auswahl 5 Schnee
SetWeather Snow 1
elseif wetter == 5
;Auswahl 6 Normal
ReleaseWeatherOverride
endif

Mit ReleaseWeatherOverride legen wir fest, dass sich das Wetter wieder von alleine ändern "darf".
Mit EndIf beenden wir unsere If-Funktion, die ebenfalls immer in Blöcken geschrieben werden.

Jetzt noch ein End dranfügen, und nun sollte euer Fenster so aussehen:



Speichert jetzt das Skript ab. Herzlichen Glückwunsch! Ihr habt nun euer erstes Skript geschrieben. Da wir es als "Magic Effect"-Skript erstellt haben, liegt es nahe, einen neuen Zauber zu erschaffen, der genau dieses Skript benutzt.

Wir klicken dazu im Object Window unter Magic > Spell > Zauber rechts auf die Liste mit den bisher vorhandenen Zaubern und wählen New. Ein neues Fenster öffnet sich, in dem ihr die verschiedenen Parameter des neuen Zaubers eingeben müsst. Unter ID gebt ihr die individuelle Zauber-ID ein, mit der ihr z.B. den Zauber in Skripts aufrufen könnt. Im Names-Feld gebt ihr dem Zauber einen Namen. Unter Type könnt ihr zwischen den einzelnen Typen von Effekten auswählen, also ob es ein Zauber, eine Krankheit, eine Fähigkeit, eine Eigentschaft oder einfach nur ein An/Aus-Schalter ist. Da wir einen Zauber erstellen wollen, wählen wir in dem Drop-Down-Menü "Zauber" aus.

Nachfolgend noch die Erklärungen für die Checkboxen:

Disallow Spell Absorb/Reflect: Der Zauber kann nicht absorbiert/reflektiert werden.
Script Effect Always Applies: (noch unbekannt)
Area Effect Ignores LOS: Der Zauber durchdringt auch massive Gegenstände wie Wände.
Immune to Silence: Dieser Zauber kann auch gesprochen werden, wenn der Spieler "schweigt".
PC Start Spell: Der Spieler hat diesen Zauber von Anfang an.

Für unseren Zauber ist keiner dieser Einstellung von großer Bedeutung, weswegen wir nichts ankreuzen. Im Effects-Feld klickt ihr wieder mit einem Rechtsklick und wählt New, wodurch sich wieder ein neues Fenster öffnet, in dem ihr einen Zaubereffekt bestimmt.

Unter Effect wählt ihr "Skript-Effekt", wodurch eine neue Schaltfläche freigegeben wird, in der ihr das Skript, den Effektnamen, die Zauberschule und die visuellen Effekte des Zaubereffekts auswählen könnt.

Bei der Zauberschule müsst ihr allerdings aufpassen, da die Übersetzer Mist gebaut haben. Es stehen zwar die deutschen Namen da, allerdings wird nach wie vor im englischen ausgewählt, weshalb ihr folgende Liste zu Hilfe nehmen solltet.

Zauberschulen
Im Editor = Tatsächliche Schule
Beschwörung = Veränderung (Alteration)
Illusion = Beschwörung (Conjuration)
Mystik = Zerstörung (Destruction)
Veränderung = Illusion (Illusion)
Wiederherstellung = Mystik (Mysticism)
Zerstörung = Wiederherstellung (Restoration)

An sich ist es unwichtig, welche Schule der Zauber benutzt, aber wir wollen es ja authentisch machen. Da der Zauber das Wetter verändert, liegt es nahe die Schule der Veränderung als Zauberschule auszuwählen.

In der "Effect Is Hostile"-Box könnt ihr auswählen, ob der Skript-Effekt primär gegen Feinde gerichtet ist, oder eher ein verstärkender Zauber sein soll.

Bei der "Range" solltet ihr "Selbst" auswählen, da wir den Effekt auf uns selber ausführen. Bei Duration ist es anzuraten, eine Zeitspanne von 10 Minuten auszuwählen (in Sekunden; sprich: 600).

Wer will kann auch den Haken bei Auto-Calculate im Effects-Fenster entfernen und den Zauberlevel sowie seine Magickakosten einstellen. Nach dem Klick auf OK haben wir also unseren ersten Zauber erschaffen. Dieser Zauber soll jetzt noch auf ein neues Amulett gelegt werden, so dass der Spieler, sobald er das Amulett trägt, den Zauber auch ausführen kann.

Erstellt also unter Items > Clothing ein neues Item. Zunächst müssen wir wieder die ID und den Namen des Amuletts auswählen. Unter Weight und Value könnt ihr das Gewicht bzw. den Wert des Amuletts bestimmen, bei Enchantment dem Amulett eine Verzauberung verpassen. Die Checkboxen bestimmen, ob das Amulett ein Questitem ist, ob es die Ringe und Amulette am Körper des Spielers verschwinden lässt, und ob es vom Spieler angelegt werden kann.

Unter Biped Object wählen wir Amulet aus. Mit Biped Object können wir festlegen, welches Körperteil durch dieses Kleidungsstück belegt wird. Um die NIF-Files hinzufügen zu können, müsst ihr leider die kompletten Oblivion – Meshes.bsa und Oblivion - Textures – Compressed.bsa mit dem TES4BSA-Entpacker entpacken.

Um mit dem TES4BSA-Entpacker arbeiten zu können, ladet ihn herunter und entpackt die exe-Datei in das Data-Verzeichnis des Oblivion-Ordners.

Betätigt die Windows-Taste + R und gebt ihm "Ausführen"-Feld cmd ein und steuert euch im DOS-Fenster zum Oblivion/Data-Order.
Hier die wichtigsten DOS-Befehle:

cd Change Directory, Wechselt in einen anderen Ordner (auch Vorwärts). Um in einen übergeordneten Ordner zu wechseln, müsst ihr z.B. "cd .." eingeben.
dir Listet den Inhalt des aktuellen Verzeichnisses aus.

Falls ihr Oblivion auf einer anderen Partition installiert habt (z.B. auf der Festplatte D), dann gebt ihr einfach den Laufwerksbuchstaben mit anschließedem Doppelpunkt ein, um das Laufwerk zu wechseln.

Im Oblivion-Ordner angekommen, gebt ihr tes4bsa unpack " Oblivion – Meshes.bsa" und bestätigt mit Enter. Nach dem Entpack-Vorgang gebt: tes4bsa unpack " Oblivion - Textures – Compressed.bsa" ein, um auch diesen Ordner zu entpacken.

Wenn ihr das geschafft habt, könnt ihr endlich die NIF-Files verwenden. Wie ihr seht gibt es für beide Geschlechter verschiedene Models, bei Amuletten sind sie aber immer gleich. Wählt also für das Biped Model und World Model immer das gleiche. Unter Clothes > Amulet sind alle NIF-Files für die Amulette gespeichert. NIF-Files mit einem _gnd-Suffix sind übrigens ausschließlich für die World-Models gedacht. Unter Icon Image sucht ihr euch ein passendes Icon für eure Amulett aus.

Kommen wir nun zum wichtigsten Teil des Amuletts: Dem Skript. Klickt auf die Schaltflächte neben dem Script-Feld und erstellt im neuen Fenster ein neues Skript.

Wir nennen es "wetteramulettscript". Jetzt müssen wir festlegen, dass das Skript auf eine Object gelegt, und dass der Spieler einen bestimmen Zauber erhält, wenn er das Amulett anlegt. Wir wählen also unter Script Type Object.

Wie wir (hoffentlich) noch wissen, steht am Anfang eines Blocks immer ein Begin. Und da der Spieler den Zauber erhalten soll, wenn er das Amulett ausrüstet. Also schreiben wir (Ich habe meinem Zauber die ID wetterzauber gegeben, ihr müsst dann folglich eure ID eintragen):


scn wetteramulettscript
Begin OnEquip
player.AddSpell wetterzauber
End

Mit AddSpell können wir – wie der Name schon sagt, dem Objekt, welches das Skript ausführt, einen Zauber zur Zauberliste hinzufügen. Da es in diesem Fall allerdings das Amulett wäre, müssen wir noch ein player. davor setzen, um diesen Befehl auf den Spieler auszuführen. Mit End beenden wir den Block wieder.

Da der Spieler den Zauber aber wieder verlieren soll, wenn er das Amulett auszieht, setzen wir noch folgenden Block darunter:

Begin OnUnequip
player.RemoveSpell wetterzauber
End

Mit RemoveSpell kann man einen Zauber wieder aus der Zauberliste entfernen. Das Skript sollte nun so aussehen:



Speichert das Script ab, drückt im Item-Fenster OK, und ruft euer Item noch einmal auf, um nun im Drop-Down-Menü euer Skript auszuwählen. Fertig!

Wir haben nun also das Wetteramulett erschaffen. Aber wie soll der Spieler das Amulett erhalten? Am besten durch einen Quest, oder? Also gehen wir ins Quest-Fenster und rechtsklicken auf die Liste und wählen New, um einen neuen Quest zu erstellen. Nennen wir ihn "Das Wetteramulett". Ein richtig toller Name, was?

Auf der rechten Fensterhälfte erscheinen viele neue Felder, die ihr ausfüllen könnt. Ich erkläre hier kurz ihre Funktionen.

Reiter Quest Data
Quest Name: Eigentlich selbstverständlich, dass man dem Quest einen Namen gibt.
Priority: Setzt die Priorität des Quests. 1 ist für Tutorials, 10 für questlose Dialoge, 20 für Haus- und Pferdequests, 40 für Vampirquests, 50 für sonstige Quests, 60 für Gildenquests, 85 für die Hauptquest reserviert.
Script: Zur Auswahl eines Skriptes.
Start Game Enabled: Der Spieler startet das Spiel mit diesem Quest.
Allow Repeated Conversation Topics: Normalerweise verschwinden bestimmte Themen nach der Erfüllung ihrer Pflicht wieder, aber wenn diese Funktion aktiviert wird, bleiben sie erhalten.
Allow Repeated Stages: Siehe oben.
Add Icon Image: Hier könnt ihr ein Icon für eure Quest einfügen.
Quest Conditions: Die Bedingungen, unter denen der Quest angenommen werden kann.

Reiter Quest Stages
Index: Hier tragt ihr die verschienden "Stages" der Quest ein. Dazu später mehr.
Log Entry: Der Eintrag, der in eurem Ingame-Logbuch erscheint.
Result Script: Skript, das aktiviert wird, wenn der Quest in diesem Stage wechselt.
Conditions: Siehe oben.

Reiter Quest Targets
Hier tragt ihr ein, wo eure Kompassnadel hinzeigen soll.

Reiter Topics
Relativ kompliziert, deshalb machen wir das im Tutorial.

So, nach dieser langen Reihe von Fakten, begeben wir uns mal ans Praktische. Zunächst legen wir also fest, dass unser Quest "Das Wetteramulett" heißt, die Priorität 50 hat und nur von spielbaren Rassen angenommen werden kann. Dazu Rechtsklick auf das Conditionsfeld, New und wählt dann unten "GetIsPlayableRace" aus.

Im Quest Stages-Reiter legen wir fest, wieviele Stages, oder auch Stufen, unsere Quest haben soll. Sagen wir mal, dass uns ein Auftraggeber damit beauftragt das Wetteramulett zu holen, um es ihm zu bringen. Als Belohnung macht er eine Kopie davon (er will es Cyrodiil-weit vermarkten) und gibt sie dem Spieler. Das wären also: Annahme des Quests, Suchen des Amuletts und Rückkehr zum Auftraggeber. 1, 2, 3 Stages.
Klickt also rechts auf das Index-Feld und weist den Stages eine Zahl zwischen 0 und 255 zu. Ihr könnt zwar jede Zahl zwischen diesen beiden benutzen, allerdings ist es – übersichtshalber – anzuraten die Stages in Zehnerschritten zu benennnen.
Erstellt also 3 Stages: 0, 10, 20 und 30. Warum 0 auch noch eingefügt werden sollte, erkläre ich später.

Ihr könnt die Log Entrys nun ausfüllen. Lasst eurer Fantasie dabei freien Lauf.

Bei Quest Targets müssen wir jetzt ein wenig nachdenken. Was soll alles durch den Kompass angezeigt werden? Der Standort des Amuletts und der Standort des Auftraggebers vielleicht? Ja, ich glaub, dass wäre gut. Platziert eure Amulett also irgendwo in die Pampa rein und legt einen Xmarker darauf (WorldObjects > Static). Klickt auf den Marker doppelt und tragt bei ReferenceID "wetteramulettMarker" ein. Zurück im Quest Targets-Fenster, erstellt ihr ein neue Target und wählt mit "Select Reference in Render Window" den Xmarker aus. Da dieser Marker nur in der zweiten Phase, der Suche nach dem Amulett, angezeigt werden soll, wählt ihr unter den Conditions noch "GetStage". Hier müsst ihr ein bisschen aufpassen, denn es wird nicht die aktuelle Stage ausgegeben, sondern nur die zuletzt erfüllte. Da wir bis jetzt aber noch nichts gemacht haben, setzen wir den Value der Condition auf 0. Erstellt außerdem einen NPC, auf den ihr ebenfalls ein Quest Target setzt, allerdings mit der Condition "GetStage wetteramulettquest 10".

Im Topics-Reiter, dem mitunter wichtigsten Teil eines Quests, können wir die Dialoge zusammenstellen. Anfangs brauchen wir eine Begrüßung für den NPC. Wählt also unter "Add Topic"(rechtsklick auf das linke Feld) GREETING aus. In dem nun weißen Feld tragt ihr den Text des NPCs ein. Wie auch bei sovielem, spielen die Conditions eine wichtige Rolle. Hier sollten folgende Conditions gewählt werden:

GetIsplayableRace == 1
GetIsID == QuestNPC (hier die ID des NPCs einfügen)
GetStage (QuestID) (Stagenummer, Erklärung siehe oben) < 10

Damit wird festgelegt, dass nur der dafür bestimmte NPC diesen Dialog von sich gibt, und auch nur, falls die Stage nicht größer als 10 ist.
Der NPC bittet uns also das Amulett zu finden. Wir fügen nun zwei Choices ein. Dafür müssen wir aber erstmal zwei neue Topics erstellen. Klickt rechts auf das Choices-Feld und dann Add Topic. In diesem Fenster klickt ihr nochmal rechts und wählt New und gebt eurem neuen Topic einen Namen.

Wählt dieses Topic jetzt durch nochmaliges "Add Topic" aus. Nun habt ihr zwei Antwortmöglichkeiten; z.B. Ja und Nein. Dieses werden dann im Spiel angezeigt. Gebt dem NPC, je nach Antwort des Spielers, weiteren Text. Bei Nein könntet ihr allerdings auch gar nichts hinschreiben.

Sollte der Spieler den Quest angenommen haben, muss der Quest in die Stage 10 springen, damit der Marker aktiviert wird. Also schreiben wir unter "Result Script" folgende Zeile rein:

SetStage wetteramulett 10

Damit wird die Stage des Quests "wetteramulettquest" auf den Wert 10 gesetzt, was den Marker aktiviert. Für die spätere Nutzung solltet ihr übrigens noch ein Topic für die Belohnung erstellen. Wenn der Spieler den NPC darauf anspricht, wird dieser ihm sagen, dass er das Amulett erst holen soll (GetStage wetteramulett 0), sollte der Spieler das Amulett aber schon haben, wird der NPC ihm die Belohnung geben.

Damit aber der Zeiger wieder umspringt, wenn wir das Amulett aufnehmen, müssen wir noch ein kleines Skript schreiben, welches ihr auf das Amulett legt.

Das Skript muss so aussehen:


scn wetteramulettscript
Begin OnAdd player
SetStage wetteramulett 20
End

Dadurch wird die Stage auf den Wert 20 gesetzt, sobald der Spieler das Amulett aufnimmt. Nun sollte der Spieler den NPC auf die Belohnung ansprechen, woraufhin er eine Belohnung erhält. Um das zu realisieren muss das Skript, welches ihr unter "Result Script" reinschreibt, so aussehen:

player.RemoveItem wetteramulett 1
player.AddItem Gold001 200
Player.AddItem wetteramulett 1
SetStage wetteramulettquest 30

Setzt noch im Quest Stages-Reiter, bei der Stage 30, einen Haken bei "Complete Quest", damit die Quest nach Erhalt der Belohnung abgeschlossen ist. Genauso wie dieses Tutorial.

Download: Skript-Tutprial.pdf (Mit Rechtsklick > Ziel speichern unter runterladen)
Mirror: Skript-Tutorial.pdf (Mit Rechtsklick > Ziel speichern unter runterladen) Blockart
Parameter Beschreibung
GameMode Skript läuft einmal pro Frame durch (nicht im Menü-Modus). Wird nur benutzt, wenn es sich nicht vermeiden lässt.
MenuMode Menüart (optional) Skript läuft einmal pro Frame durch, wenn das Spiel sich im Menü-Modus befindet.
OnActivate Skript läuft einmal durch, wenn das Objekt aktiviert wird.
OnActorEquip Objekt-ID Skript läuft einmal durch, wenn der geskriptete Aktor ein bestimmtes Objekt ausrüstet.
OnActorUnequip Objekt-ID Skript läuft einmal durch, wenn der geskriptete Aktor das Objekt abrüstet.
OnAdd Referenz-ID des Containers Skript läuft einmal durch, wenn das Objekt dem Inventar eines Containers hinzugefügt wird.
OnAlarm Art des Verbrechens, Verbrecher (optional) Skript läuft einmal durch, wenn der Aktor bei einem bestimmten Verbrechen durch den Verbrecher (Aktor) alarmiert wird.
OnAlarmVictim Art des Verbrechens, Opfer (optional) Skript läuft einmal durch, wenn der Aktor bei einem bestimmten Verbrechen gegenüber einem Opfer (Aktor) alarmiert wird.
OnDeath Aktor-ID (optional) Skript läuft einmal durch, wenn ein Aktor durch Aktor-ID getötet wird.
OnDrop Referenz-ID des Containers (optional) Skript läuft einmal durch, wenn das einem Container entnommen wird.
OnEquip Aktor-ID (optional) Skript läuft einmal durch, wenn das Objekt von Aktor-ID ausgerüstet wird.
OnHit Aktor-ID (optional) Läuft einmal durch, wenn ein Aktor von Aktor-ID angegriffen und getroffen wird.
OnHitWith Objekt-ID (optional) Skript läuft einmal durch, wenn ein Aktor von Objekt-ID getroffen wird.
OnKnockout Aktor-ID (optional) Skript läuft einmal durch, wenn ein Aktor von Aktor-ID K.O. geschlagen wird.
OnLoad Skript läuft einmal durch, wenn das Objekt fertig geladen ist.
OnMagicEffectHit Effekt-ID (optional) Skript läuft einmal durch, wenn ein Aktor von einem bestimmten Magie-Effekt getroffen wird.
OnMurder Aktor-ID (optional) Skript läuft einmal durch, wenn ein Aktor von Aktor-ID getötet wird.
OnPackageChange Paket-ID Skript läuft einmal durch, wenn der Aktor von einem bestimmten Paket wechselt.
OnPackageDone Paket-ID Skript läuft einmal durch, wenn der Aktor das bestimmte Paket beendet hat.
OnPackageStart Paket-ID Skript läuft einmal durch, wenn der Aktor das bestimmte Paket beginnt.
OnReset Skript läuft einmal durch, wenn die Zelle, in der sich das geskriptete Objekt befindet, zurückgesetzt wird.
OnSell Referenz-ID des Verkäufers (optional) Skript läuft einmal durch, wenn das Objekt von dem bestimmten Verkäufer verkauft wird.
OnStartCombat Aktor-ID des Zielaktors (optional) Skript läuft einmal durch, wenn der Aktor den Kampf mit Aktor-ID beginnt.
OnTrigger Referenz-ID des Auslösers (optional) Skript läuft einmal durch, wenn das Objekt von einem mit ihm kollidierenden Objekt ausgelöst wird.
OnTriggerActor Referenz-ID des Auslösers (optional) Skript läuft einmal durch, wenn das Objekt von einem mit ihm kollidierenden Aktor ausgelöst wird.
OnTriggerMob Referenz-ID des Auslösers (optional) Skript läuft einmal durch, wenn das Objekt von einem mit ihm kollidierenden, sich bewegenden Objekt ausgelöst wird (Akteure, Pfeile, magische Projektile)
OnUnequip Aktor-ID (optional) Skript läuft einmal durch, wenn das Objekt von Aktor-ID abgerüstet wird.
ScriptEffectStarts Wird nur von Skripts für Magieeffekte genutzt.
ScriptEffectFinish Wird nur von Skripts für Magieeffekte genutzt.
ScriptEffectUpdate Wird nur von Skripts für Magieeffekte genutzt.
geschrieben von Lakos