scripting:tutorials:level2:quest_menu
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
scripting:tutorials:level2:quest_menu [2023/11/11 15:30] – angelegt fritz_98 | scripting:tutorials:level2:quest_menu [2023/11/15 15:21] (aktuell) – fritz_98 | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
Das Auftragsmenü ist für den Spieler ein wichtiger Überblick über alle offenen und erledigten Aufgaben. Für eine Karte mit einer Fülle an Quests solltest du als Skripter das Auftragsmenü dementsprechend gut pflegen und alle notwendigen Informationen zur Lösung der Quests darin aufschreiben. | Das Auftragsmenü ist für den Spieler ein wichtiger Überblick über alle offenen und erledigten Aufgaben. Für eine Karte mit einer Fülle an Quests solltest du als Skripter das Auftragsmenü dementsprechend gut pflegen und alle notwendigen Informationen zur Lösung der Quests darin aufschreiben. | ||
- | FIXME | + | Um die Quests voneinander zu unterscheiden, |
+ | <code lua> | ||
+ | Quests = { | ||
+ | MainquestFindHelias = 1, | ||
+ | MainquestBuildTowers = 2, | ||
+ | MainquestDefeatKerberos = 3, | ||
+ | SubquestHelpLeonardo = 4, | ||
+ | SubquestRescueTrader = 5 | ||
+ | } | ||
+ | </ | ||
+ | Diese Quest-Ids werden weiter unten in den Quest-Funktionen verwendet, um Questlogeinträge anzulegen und zu aktualisieren. | ||
+ | |||
+ | **Wichtig**: | ||
+ | |||
+ | Jede Quest hat außerdem einen Typ. Es gibt Hauptaufgaben (im Questlog mit rötlichem Symbol) und Nebenaufgaben (im Questlog mit gelblichem Symbol). Beide Aufgabentypen können entweder offen oder gelöst sein. Dafür gibt es vorgefertigte Variablen, die das ausdrücken: | ||
+ | <code lua> | ||
+ | MAINQUEST_OPEN -- Variable für offene Hauptaufgabe | ||
+ | MAINQUEST_CLOSED -- Variable für gelöste Hauptaufgabe | ||
+ | SUBQUEST_OPEN -- Variable für offene Nebenaufgabe | ||
+ | SUBQUEST_CLOSED -- Variable für gelöste Nebenaufgabe | ||
+ | </ | ||
+ | |||
+ | Für die Spiellogik ist es nicht von Belang, welchen Questtyp du wählst. Für die Übersicht des Spielers kann es aber helfen, die Quests entsprechend den Bestimmungen deines Kartenablaufs anzuzeigen. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Eine Quest anlegen==== | ||
+ | |||
+ | Es gibt zwei verschiedene Funktionen, mit denen sich Quests anlegen lassen. Diese unterscheiden sich aber nur marginal. | ||
+ | |||
+ | ===Logic.AddQuest=== | ||
+ | |||
+ | Mit '' | ||
+ | |||
+ | - **_PlayerId** - Die Spieler-Id des Spielers, dem die Quest angezeigt werden soll, also eine ganze Zahl zwischen 1 und 8 | ||
+ | - **_QuestId** - Die oben bereits erwähnte, für jede Quest einzigartige Quest-Id | ||
+ | - **_QuestType** - Einer der oben gelisteten Questtypen, also '' | ||
+ | - **_QuestTitle** - Der Titel der Quest, wie er im Auftragsmenü erscheinen soll, als String | ||
+ | - **_QuestText** - Die Questbeschreibung, | ||
+ | - **_Info** - Entweder 0 oder 1. Bei 1 entsteht am linken Bildschirmrand eine Notiz "Neuer Auftrag" | ||
+ | |||
+ | Die erste Hauptaufgabe, | ||
+ | |||
+ | <code lua> | ||
+ | Logic.AddQuest(1, | ||
+ | .." | ||
+ | </ | ||
+ | |||
+ | ===Logic.AddQuestEx=== | ||
+ | |||
+ | '' | ||
+ | Dementsprechend ähnlich sind die Parameter: | ||
+ | |||
+ | - **_PlayerId** - Die Spieler-Id des Spielers, dem die Quest angezeigt werden soll, also eine ganze Zahl zwischen 1 und 8 | ||
+ | - **_QuestId** - Die oben bereits erwähnte, für jede Quest einzigartige Quest-Id | ||
+ | - **_QuestType** - Einer der oben gelisteten Questtypen, also '' | ||
+ | - **_QuestTitle** - Der Titel der Quest, wie er im Auftragsmenü erscheinen soll, als String | ||
+ | - **_QuestText** - Die Questbeschreibung, | ||
+ | - **_PosX** - X-Wert der Quest-Position | ||
+ | - **_PosY** - Y-Wert der Quest-Position | ||
+ | - **_Info** - Entweder 0 oder 1. Bei 1 entsteht am linken Bildschirmrand eine Notiz "Neuer Auftrag" | ||
+ | |||
+ | Wenn der Spieler in einer Mission beispielsweise einige Ballistatürme an einer bestimmten Position errichten soll, kann man die Position mit in die Quest geben. Wir gehen im Beispiel unten davon aus, dass auf der Map eine '' | ||
+ | <code lua> | ||
+ | local PositionQuestBuildTowers = GetPosition(" | ||
+ | Logic.AddQuestEx(1, | ||
+ | "der Stadt zu stärken, solltet Ihr an der angegebenen Position drei Ballistatürme bauen.", | ||
+ | PositionQuestBuildTowers.X, | ||
+ | </ | ||
+ | |||
+ | Beachte, dass die Angabe der Position in der Quest keinerlei Auswirkungen hat außer den Kamerasprung beim Klick auf das Info-Symbol. Eine Markierung, wie beispielsweise durch ein [[ scripting: | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Eine Quest ändern==== | ||
+ | |||
+ | Weitere Informationen, | ||
+ | |||
+ | ===Logic.AddQuest=== | ||
+ | |||
+ | '' | ||
+ | Das ist auch der Grund, warum es wichtig ist, die Quest-Ids sauber zu trennen. Wenn du in der Funktion die falsche Quest-Id angibst, überschreibst du u.U. den Eintrag einer existierenden Quest oder legst eine Quest doppelt an. | ||
+ | |||
+ | Um das Beispiel mit Helias fortzuführen: | ||
+ | |||
+ | <code lua> | ||
+ | -- Mit @cr im String kannst du einen " | ||
+ | Logic.AddQuest(1, | ||
+ | .." | ||
+ | "er Helias zuletzt in der Nähe des Friedhofs gesehen hat.", 0) | ||
+ | </ | ||
+ | |||
+ | Durch die Angabe eines anderen Questtyps kann diese Quest beispielsweise auch mit '' | ||
+ | |||
+ | Das Verändern vorhandener Quests funktioniert analog mit '' | ||
+ | |||
+ | ===Logic.SetQuestPosition=== | ||
+ | |||
+ | Mit '' | ||
+ | |||
+ | - **_PlayerId** - Die Spieler-Id des Spielers, dem die Quest angezeigt werden soll, also eine ganze Zahl zwischen 1 und 8 | ||
+ | - **_QuestId** - Die oben bereits erwähnte, für jede Quest einzigartige Quest-Id | ||
+ | - **_PosX** - X-Wert der Quest-Position | ||
+ | - **_PosY** - Y-Wert der Quest-Position | ||
+ | - **_Info** - Entweder 0 oder 1. Bei 1 entsteht am linken Bildschirmrand eine Notiz "Neuer Auftrag" | ||
+ | |||
+ | Auf der Suche nach Helias begegnet der Spieler einem Kundschafter, | ||
+ | |||
+ | <code lua> | ||
+ | local PositionHelias = GetPostion(" | ||
+ | Logic.SetQuestPosition(1, | ||
+ | </ | ||
+ | |||
+ | ===Logic.SetQuestType=== | ||
+ | |||
+ | Mit '' | ||
+ | |||
+ | - **_PlayerId** - Die Spieler-Id des Spielers, dem die Quest angezeigt werden soll, also eine ganze Zahl zwischen 1 und 8 | ||
+ | - **_QuestId** - Die oben bereits erwähnte, für jede Quest einzigartige Quest-Id | ||
+ | - **_QuestType** - Einer der oben gelisteten Questtypen, also '' | ||
+ | - **_Info** - Entweder 0 oder 1. Bei 1 entsteht am linken Bildschirmrand eine Notiz "Neuer Auftrag" | ||
+ | |||
+ | So kann die Helias-Quest beendet werden, wenn der Spieler ihn endlich findet: | ||
+ | <code lua> | ||
+ | Logic.SetQuestType(1, | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====Eine Quest entfernen==== | ||
+ | |||
+ | '' | ||
+ | |||
+ | - **_PlayerId** - Die Spieler-Id des Spielers, dem die Quest angezeigt werden soll, also eine ganze Zahl zwischen 1 und 8 | ||
+ | - **_QuestId** - Die oben bereits erwähnte, für jede Quest einzigartige Quest-Id | ||
+ | - **_Info** - Entweder 0 oder 1. Bei 1 entsteht am linken Bildschirmrand eine Notiz "Neuer Auftrag" | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Die wichtigsten Aspekte der Questprogrammierung sind hiermit alle beschrieben. In den folgenden Kapiteln wollen wir untergeordnete Aspekte betrachten und beginnen bei Schatztruhen. | ||
+ | |||
+ | [[ scripting: | ||
+ | [[ scripting: | ||
+ | [[ scripting: | ||
- | - jede Quest hat eine Id | ||
- | - pro Id hat eine Quest einen State aus {Main, Sub}x{Offen, | ||
- | - eigentlich braucht man dafür nu 2 Funktionen: Logic.AddQuest und Logic.RemoveQuest. Der Rest ist eher Beiwerk und kann mit den anderen auch umgesetzt werden |
scripting/tutorials/level2/quest_menu.1699716632.txt.gz · Zuletzt geändert: 2023/11/11 15:30 von fritz_98