Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Meine eigene modifizierte Story
#21
Du hast zwei NPCs: Chris und Wolfi. Mit jedem der beiden redest du. Also benötigst du zwei Einträge in _Story_ Dialogs. Da du zwei Dialoge hast, hast du natürlich auch für beide dazugehörige Einträge in der _Story_DialogTakes. So wie es im Moment ist, ist alles richtig und funktioniert auch. Du solltest also auf gar keinen Fall etwas ändern.
Zitieren
#22
Bei mir stürzt das Spiel ab. Hier die Fehlermeldung.
   
Zitieren
#23
Da muss ich natürlich auch wissen, an welcher Stelle das Spiel abstürzt, Ich hänge mal deinen von mir überarbeiteten Code an. Damit funktioniert es jedenfalls bei mir. Ich weiß ja nicht, was du sonst noch an Code erstellt hast.


.txt   sql_code.txt (Größe: 9,39 KB / Downloads: 1)
Zitieren
#24
Danke für Deine weitere Hilfe mir gegenüber. Es tut Mir Leid wenn Du langsam genervt von mir sein solltest.

Die genannten Probleme waren meines Wissens nach nur Unverständnisse produziert durch die vielen Einträge in der Datenbank. Ich habe dies nun komplett abgeändert die JoinParty Anweisung habe ich hinter der zweiten SetCounter Anweisung gesetzt und die eigenstehende JoinParty Anweisung und dazugehörige Begin Zeile gelöscht.


Hier ist die überarbeitete Zeile(Die Abenteuerpunkte Anweisung habe ich des weiteren auch gelöscht ich wollte die Anweisung ja nur testen was die Abenteuerpunkte befasst)



Ich mache mich jetzt an die Arbeit mit dem letzten Dialog mit Chris. Bevor ich loslege hätte ich aber noch eine Frage wenn es für Dich in Ordnung ist natürlich. 

Für den letzten Dialog muss ich eine weitere Zeile unter _Story_Dialogs anlegen ansonsten würde die Quest beim Gespräch mit dem NPC Chris direkt angenommen werden dann wieder geschlossen werden ist dies korrekt?


Anmerkung: Falls Du etwas falsch verstanden haben solltest was ich über die Story und deren Mechanismus sagte. Die Story sollte nicht nach ansprechen vom Hund geschlossen werden sondern nachdem man mit dem Hund zusammen wieder bei Chris ist und ihn anspricht. Erst dann soll die Quest geschlossen werden. Falls dies zu Missverständnissen geführt haben sollte.
Zitieren
#25
Wenn du das Statement so lässt, wird die Quest geschlossen, sobald Wolfi in der Party ist. Die Anweisung, die den Counter auf 2 setzt kommt in das Abschlussgespräch mit Chris.

Für das Abschlussgespräch mit Chris, würde ich keinen neuen Dialog anlegen. Hier ist es sinnvoller den bestehenden um weitere Dialogzeilen zu erweitern und über Conditions sicherzustellen, dass, je nach Questzustand, die entsprechende Zeile kommt.
Zitieren
#26
(29.07.2024, 18:40)Lord Demon schrieb: Wenn du das Statement so lässt, wird die Quest geschlossen, sobald Wolfi in der Party ist. Die Anweisung, die den Counter auf 2 setzt kommt in das Abschlussgespräch mit Chris.

Für das Abschlussgespräch mit Chris, würde ich keinen neuen Dialog anlegen. Hier ist es sinnvoller den bestehenden um weitere Dialogzeilen zu erweitern und über Conditions sicherzustellen, dass, je nach Questzustand, die entsprechende Zeile kommt.

Ich bekomme den Quest Zustand nicht wirklich auf die Reihe. Wenn ich eine weitere Dialogzeile anlege und eine neue Condition erstelle dann kommen zwar keine Fehlermeldungen. Aber der Counter funktioniert nicht. Habe gerade nicht den PC zur Hand wo ich das alles installiert habe. Aber ich kann mein Problem beschreiben.


Mein Problem:

Ich klicke den NPC Chris an

NPC Chris sagt: Hilfe! Mein Haustier....

Nächster Klick erscheint ein weiterer Textdialog

Held sagt: Hier ist dein Hund

Quest wird angenommen und direkt beendet.


Also wie ich dies bereits nannte wird dabei der Quest Teil mit dem Hund ansprechen komplett ignoriert. Wo könnte da der Fehler sein? Ich habe gerade den Computer nicht zu meiner Hand. Ich wäre froh wenn wir das Problem so klären könnten.



Anmerkung: Mir ist gerade in meine Augen gekommen das ich hier nie den SQL Code von NPC Chris geschrieben hatte. Er ist aber bei mir in der Datenbank vorhanden. Ich hoffe dies führte jetzt nicht für allzuviel Verwirrung. Ich werde den SQL Code hier noch schreiben. Es tut mir richtig Leid deswegen, ich war mir eigentlich sicher das ich den SQL Code geschrieben hatte. Das kommt davon wenn alles unübersichtlich ist
Zitieren
#27
Der Fehler liegt hier eindeutig im Dialogaufbau und den damit verbundenen Statements und Conditions.

Wenn du einen questrelevanten Dialog erstellst, musst du dabei alle Möglichkeiten berücksichtigen und mit entsprechenden Conditions und Statements sicherstellen, dass alles in der richtigen Reihenfolge abläuft.

Bei deinem Dialog sieht das dann wie folgt aus:

Du brauchst eine Dialogzeile, die die Quest aktiviert. Dann eine Zeile, die berücksichtigt, dass die Quest aktiv ist, aber Wolfi noch nicht gerettet ist. Zum Schluss noch eine Zeile, bei der Wolfi gerettet wurde. Damit je nach dem wie weit die Quest fortgeschritten ist, auch immer die richtige Dialogzeile kommt musst du diese mit Conditions versehen, die den Questverlauf berücksichtigen.

Bevor wir bei den Conditions ins Detail gehen, solltest du erst einmal den volllständigen Dialog mit allen Möglichkeiten schreiben und die Einträge für die DialogTakes und Childmapping erstellen. Mach das erstmal und dann sehen wir weiter.
Zitieren
#28
Danke für deine weitere Hilfe. Habe auch den PC wieder zur Hand. Ich musste das Spiel neuinstallieren weil ich eine falsche Zeile löschte in der Datenbank.





Ich wollte einfach mal sehen wie weit meine Kenntnisse nun sind. Also habe ich eine neue Story mit Inhalt angelegt.



Das alles sieht mittlerweile so aus. Ich steige bei den ganzen auch vollständig durch was ich bis hierhin angelegt habe. Ich hoffe mal, dass dies nicht schlimm ist aus dem Grunde von das wechseln der Story.





Mir war das ehrlich gesagt mit Wolfi und den NPC Chris etwas durcheinander geraten.





Meine neue Story ist übersichtlicher.



Inhalt:

Dachs ansprechen

Quest startet

Einbeeren einsammeln(Item liegt auf der Erde neben dem Baum)

Dachs erneut ansprechen

Eingesammeltes Item also die Einbeeren abgegeben.

5 Abenteuerpunkte bekommen

Quest geschlossen







Mein Fortschritt zur Zeit.



Localea1







Gamea1



















statica1














































Zitieren
#29
Du solltest natürlich Backups der Originaldatenbanken erstellen, bevor du irgendwelche Änderungen vornimmst. Dann musst du das Spiel nicht jedes Mal neu installieren.

Was erwartest du jetzt von mir? Soll ich den Code testen? Oder weißt du jetzt nicht weiter? Wäre schön, wenn du da konkrete Aussagen machen bzw. Fragen stellen würdest.
Zitieren
#30
Also wie Du es beschreibst, weiß ich ehrlich gesagt nicht mehr weiter. Wenn ich den Dachs anspreche dann beginnt die Quest und gleichzeitig gilt sie als geschlossen. Ich komme einfach nicht weiter mit der Story. Könntest Du bitte den Code testen und mir weiter helfen? Ich schaffe es nicht diese Story zu erstellen.

Story: Dachs ansprechen Quest startet
Questitem Einbeere taucht neben dem Baum auf
Questitem aufheben
Questitem beim Dachs abgeben
Quest abgeschlossen
Zitieren
#31
Der Code für den Dachs, den du gepostet hast, ist der Dachs aus der Quest mit Laurelin, wenn der Held bei ihm seine Ausbildung abschließen soll. Den kannst du hier nicht verwenden. Erstens ist er in Nadoret und zweites würde es die Laurelin Quest abschießen. Ich habe also einen neuen Dachs für die Nachtlagerinsel erstellt.

Die Quest wird sofort wieder geschlossen, weil du bei der Task keine CloseCondition eingetragen hast.

Außerdem habe ich den Dialog erweitert, Conditions und Statements hinzugefügt bzw. geändert. 

Hier der vollständige Code:


.txt   mod_test.txt (Größe: 8,2 KB / Downloads: 2)

Um jede Änderung detailliert zu beschreiben, fehlt mir jetzt leider die Zeit. Am besten schaust du dir den Code an und vergleichst ihn mit deinem. Dann siehst du, was bei dir noch gefehlt hat und was ich hinzugefügt habe. Wenn du dann noch Fragen hast, kannst du sie gerne stellen.
Zitieren
#32
Vielen Dank für Deine Hilfe. Nun verstehe ich auch wie die Funktion mit TransferEnity funktioniert. Ich hatte die ganze Zeit gedacht das man zuerst einen EntryPoint Namen erstellen muss da der NPC sonst keine Zuweisung stehen hat. Dies läuft ja über angegebene Transform und das der EntryPoint frei wählbar ist


Eine Sache verstehe ich bis jetzt immer noch nicht, dies betrifft die Conditions.
Dies habe ich nun so in Erkenntnis genommen:

Bei der _Story_Task

Die erste Begin Condition kommt in die _Story_Task rein
Die letzte Begin Condition kommt ebenfalls in die _Stoy_Task
Die anderen Begin Conditions kommen nicht in die _Story_Task rein

Bei der _Story_DialogTakes mit dem Conditions steige ich nicht ganz durch.

Läuft dies so ab:

Dachs ansprechen. Letzte Zeile vom Gespräch enthält die erste Condition also die CompareCounter 1 Anwendung und das erste dazugehörige statement also die SetCounter 1 Anwendung. Dadurch wird die Quest gestartet.
Einbeeren einsammeln

Einbeeren beim Dachs abgeben. Die letzte Zeile vom Gespräch enthält die zweite Condition also die CompareCounter 2 Anwendung und das dazugehörige Statement also die SetCounter 2 Anwendung

Ist dies so korrekt?
Zitieren
#33
Für jede Quest brauchst du immer mindestens zwei Conditions: eine zum Öffnen der Quest und eine zum Schließen der Quest.

Wie Conditions beim Dialog verwendet werden, hängt vom jeweiligen Dialog ab. Dein Dialog hatte nur eine einzige Zeile, in der durch das Statement die Quest aktiviert wurde. Wenn man den Dachs ein zweites Mal anspricht, wird der Counter wieder auf 1 gesetzt. Da er diesen Wert schon hatte, passiert also absolut nichts. Es geht einfach nicht weiter. Diese Zeile wird also nur dafür benötigt die Quest zu aktivieren. Damit diese Zeile nicht nochmal kommt, habe ich dort eine Condition eingesetzt, die abfragt, ob der Counter kleiner als (less) 1 ist und das ist er nur, wenn die Quest noch nicht aktiv ist.

Die zweite Dialogzeile hat weder eine Condtion noch ein Statement. Sie wird nur benötigt, damit man mit dem Dachs erneut reden kann.

In der dritten Dialogzeile, wird abgefragt, ob der Held die Einbeeren im Gepäck hat. Hat er keine, erscheint sie erst gar nicht, da die Bedingung ja nicht erfüllt ist. Hat der Held die Einbeeren, werden in dem Statement die Einbeeren aus dem Gepäck entfernt und an den Dachs übergeben und der Counter auf 2 gesetzt und die Quest damit geschlossen.

Die TransferEntity Anweisung kannst übrigens löschen, diese wird nicht benötigt und ist nur versehentlich im Code geblieben. Deshalb fehlt auch der von mir angelegt EntryPoint. Mit Items funktioniert diese Anweisung nicht. Wenn du möchtest, dass die Einbeeren erst erscheinen, nachdem die Quest angenommen würde, musst du die Einbeeren als StateObject anlegen. Ein EntryPoint wird dafür natürlich ebenfalls benötigt, damit das Spiel weiß, wo die Einbeeren erscheinen sollen.
Zitieren
#34
Also ich glaub das ich es nun fast vollständig verstanden habe.

Ich hab dies nun so verstanden: Die Condition wird vor dem Statement ausgeführt und wenn die Anweisung von der Condition nicht zutrifft dann wird das Statement nicht ausgeführt? Also ist dies nur ein Vergleichsoperator der überprüft ob das Ergebnis Wahr oder Unwahr ist. Bei Wahr wird das Statement ausgeführt, bei Unwahr nicht. Wenn man den NPC zum ersten mal anspricht dann wird überprüft ob der Condition Wert bei unter 1 liegt also bei 0. Da er beim ersten ansprechen bei 0 liegt wird dieser Dialog ausgeführt und das Statement tritt in Kraft, dieses Statement erhöht den Counter Wert auf 1. Wodurch beim erneuten ansprechen der Dialog gesperrt wird. Aber woher weiß das System welcher Counter darauffolgen muss?
Zitieren
#35
Der Dialog wird nicht gesperrt. Du kannst den Dachs immer noch ansprechen. Um einen Dialog zu sperren, wird eine SetDialogLockStatus Anweisung benötigt.

Du setzt am Ende des Dialogs den Counter auf 2. Dadurch treffen die anderen Bedingungen (gleich 1 und kleiner 1) nicht mehr zu. Das heißt, das System weiß, welcher Counter folgt, indem du die entsprechenden Werte vergibst.
Zitieren
#36
Also sind Conditions nur Bedingungen ob der Counter zutreffend ist oder nicht und das zutreffende Statement wird abhängig des Counters benutzt? Ist die Condition immer auf ein Statement angewiesen?
Zitieren
#37
Condition ist der englische Begriff für Bedingung. Eine Bedingung ist entweder wahr oder falsch. Damit überprüfst du, ob etwas zutrifft oder nicht.

Es kann durchaus sein, dass eine Condition von einem Statement aufgerufen wird. Bei deiner Quest trifft das aber nicht zu. Die Conditions öffnen bzw. schließen eine Quest oder sie entscheiden darüber, ob eine Dialogzeile kommt oder nicht. Statements sind dafür nicht nötig. Die im Dialog verwendeten Statements sorgen lediglich dafür, dass sie Quest erfolgreich ablaufen kann.
Zitieren




Benutzer, die gerade dieses Thema anschauen: 8 Gast/Gäste