IF-Forum

» IF-Forum - Autorencafé - Schreiben! - Freies Reden und menügestuerte Kommunikation zugleich nutzen
AntwortenNeues ThemaNeue Umfrage

Freies Reden und menügestuerte Kommunikation zugleich nutzen

Geschrieben um 02:01 am 24.11.2010 | Zitat | Editieren | Löschen
TAGträumer
Gast

Hey Leute!

Jau, ich habe mir die Reden-erweiterung geholt.

http://www.martin-oehm.de/tag/nuetzl.html

Menügesteuerte Kommunikation schränkt den Spieler meiner Meinung nach zu sehr ein, doch ohne diese Menüsteuerung ist kein gescheiter Dialog möglich. (Oder doch? Das Kapitel im Handbuch fehlt...) Daher schwebt mir eine "Kombination" vor, bei dem das Menü nur als "Reaktion" erscheinen soll.

Beispiel:

Ich habe in meinem Mini-Adventure eine Oma gebaut, die man nach einem Briefkastenschlüssel fragen kann; der Spieler soll allerdings selbst auf die Idee kommen, sie danach zu fragen.

"Frage Oma nach Briefkastenschlüssel."

Darauf soll die Oma verwirrt in ihrer Hosentasche herumsuchen.

Jetzt soll der Spieler durch eine Menüsteuerung verschiedene Reaktionsmöglichkeiten bekommen.

*"Mh, kannst du nicht selbst den Briefkasten öffnen?"

"Das dauert aber..."

"Lass dir ruhig Zeit."*

Ich habe so etwas versucht, zu programmieren, doch dann kam folgende Fehlermeldung:

**Fehler

REDEN.ADX, Zeile 124: 'reden' - Doppelte Variable**

Dieser Fehler erscheint mir durchaus logisch, denn das Menüsystem ist ja denke ich mal so programmiert worden, dass es auch erscheint, wenn man eingibt "rede mit xy".

Bevor ich mir also lange Gedanken mache und nach möglichen Fehlerursachen den Kopf zerbreche, wollte ich fragen, ob meine Idee überhaupt zu verwirklichen ist. Wenn ich das bestätigt bekomme, werde ich auch meinen Quellcode nachreichen.

Besten Dank!

(P.S: Ist es erwünscht, wenn ich 100.000 Fragethreads aufmache? Meinetwegen kann ich auch einen "TAGträumer hat mal wieder Probleme"-Thread aufmachen...)

EDIT: Kann man eigentlich diese "Drücke 0, um nichts zu sagen"-Funktion ausstellen? Die hätte nämlich in meinem Fall keinen Sinn; irgendwie muss ja der Spieler reagieren. Ich finde in dem Beispiel "Papagei" nichts darüber.

Geschrieben um 09:38 am 24.11.2010 | Zitat | Editieren | Löschen
Martin
Avatar
Mitglied
Prof Gumby
Beiträge: 634

Ja, das Kapitel fehlt tatsächlich. Lies dir stattdessen mal Kapitel 9 im Tutorium durch, da werden Konversationen mit dem Schema "frage x über y" behandelt.

TAGträumer:

... Daher schwebt mir eine "Kombination" vor, bei dem das Menü nur als "Reaktion" erscheinen soll.

Klar geht so was. Du musst halt bei jedem Stichwort zunächst 'redeDialog' ausführen und dann die Variable 'redeAuswahl' auslesen, d.h. du musst für jedes Stichwort das machen, was normalerweise in der 'VorAusf' zu 'reden' gemacht wird. (Den Beehl 'reden' brauchst Du aber nicht.')

Ganz leicht ist das aber nicht: Vor 'redeDialog' musst Du nämlich das Feld 'aktiv' an das Stichwort anpassen. Und dann möchtest Du Dir gewiss merken, was zu jedem Sichwort bereits gesagt wurde. Du müsstest also ein paralleles Feld pflegen, aus dem Du die relevanten Flaggen jeweils hinüber- und nach dem Reden wieder zurückkopierst.

Viel Arbeit. Als Spieler wäre ich gewiss nicht begeistert, wenn ich merke, dass ich auf fast kein Stichwort eine Antwort erhalte, aber beim Briefkastenschlüssel durch ein nachgeschaltetes Menü weiter in die Tiefe gehe. Ich würde entweder nur 'frage x nach y' verwenden (wobei die Antwort ja vom Spielstand abhängen kann) oder nur 'rede mit' mit Menüsteuerung.

TAGträumer:

Kann man eigentlich diese "Drücke 0, um nichts zu sagen"-Funktion ausstellen? Die hätte nämlich in meinem Fall keinen Sinn; irgendwie muss ja der Spieler reagieren.

Wieso hat das keinen Sinn? Was ist, wenn der Spieler mit 'frage Oma nach Briefkastenschlüssel' keine Deiner Auswahlmöglichkeiten im Sinn hatte?

Geschrieben um 18:39 am 24.11.2010 | Zitat | Editieren | Löschen
TAGträumer
Gast

Die Oma soll ja auch zu den anderen Stichworten passend antworten, und der Spieler soll ja auch nur weiterkommen, wenn er die Oma nach dem Schlüssel fragt.

Hm, vielleicht mute ich mir da aber echt zu viel zu. Das Problem ist halt, dass ich nicht weiß, wie ich ohne Menüsteuerung Dialoge führen soll. Ich weiß nur, dass man über "irgendetwas" reden kann. Wirklich realistisch ist das nicht. Vielleicht müsste ich mir mal ein Beispielprogramm suchen, bei dem der Spieler etwas komplexer antworten kann. So was fehlt nämlich auch im Tutorum, und beim Beispielprogramm Karn auch. Glaube ich.

Zum letzten Punkt: Im echten Leben kann man bei einer bestimmten Situation auch nicht einfach den Dialog abbrechen, durch die Gegend spazieren und dann später erst zurückkehren und antworten. In dieser Situation wäre es zu verkraften, doch es gibt genügend Beispiele, bei denen es wirklich stören würde.

Die Menüführung soll alle Antworten abdecken, die zu dem gespielten Charaktär passend sind. Mir ist klar, dass die Menüführung die Freiheit des Spielers stark einschränkt, darum will ich sie ja kombinieren.

Öhm... ja ich kann ja mal meinen (stark verkürzten) Code kopieren...

Ich habe lediglich das Papagei-Programm als Vorbild genutzt... erwartet also nicht zu viel...


#DAT    'reden.adx'

Aktion Anfang

Ausf

Ausf redeInit   

Text 'Du bist Mehmet Abdulla, und du bist Dönerverkäufer.[x][x][x][x]'

geheZu tresen

EndeAusf

Obj     Oma

  Name    'Oma Erika' f

  vor     'Oma'

  subst   'Oma' f  'Erika' f

  Ort     Privat

  Var     redeBeginn 1

  Var     redeEnde   3

  Attr    Person

  Besch   'Oma Erika ey.. Kultfigur und Hassfigur zugleich. Dein   Dönerladen

           ist nur durch sie so populär geworden. Das allerdings nur durch Oma

           Erikas veraltete Weltanschauung...'

  VorAusf

    (fragen erzählen)

    Text 'Oma Erika labert: '

    Jenach aObj2

        (Briefkasten)

            Text '"Der müsste dringendst mal wieder geleert werden."'

        (Briefkastenschlüssel)

             Bed (Briefkastenschlüssel bei Oma)

              '"Ich habe dir doch bereits den Schlüssel gegeben,

                du Schussel!"'       

              ObjNach Briefkastenschlüssel beimir

              Text '"Den Briefkastenschluessel? Hm." Oma Erika kramt in ihrer Dings... in ihrer Hosentasche herum. Dann guckt sie

                     verwirrt durch die Gegend. Dann kramt sie wieder in ihrer Tasche herum.'

              Ausf redeDialog

                  jenach redeAuswahl

                      !Du wirst auch immer vercheckter, was?

                     (1)     Text '"Rede nicht so unflätig. Dann suche ich

                             halt nicht nach dem Schlüssel..."'

                             lösche aktiv.1

                      !Hast du den Schlüssel vielleicht irgendwo anders

                      !hingelegt?

                     (2)     Text '"Hetz mich nicht so, ich werde den Schlüssel

                                    schon finden...

                                    lösche aktiv.2

                                   

                      !Ja oder dann guck du doch einfach in den Briefkasten..             

                      !ich habe nicht so viel Zeit!

                      (3)     Text '"Stehst du unter Zeitdruck"'

                                     lösche aktiv.3

              EndeAusf

        (sonst)

            Text '"Ach mein Mehmet, du erzählst viel zu viel..."'

    Ende

    Stop

EndeAusf

Block "r"

1       '"Du wirst auch immer vercheckter, was?"'

2       '"Oder haste den Schlüssel irgendwo anders hingetan?"'

3       '"Kannst du nicht einfach den Briefkasten aufmachen, ich habe besseres

          zu tun!"'

Aktion  redeInit

Ausf

    Daten aktiv  1 (1 1 1)            ! Oma

EndeAusf

Dankööö

Geschrieben um 21:26 am 27.11.2010 | Zitat | Editieren | Löschen
TAGträumer
Gast

Also das Problem ist noch aktuell... die Fehlermeldung bekomme ich immer noch. Ich habe mal versucht, das freie Gespräch herauszunehmen, und mich auf das Menügestuerte zu fokussieren... klappt immer noch nicht. Ich weiß auch nicht was es mit dem Block 'r' auf sich hat.



#DAT    'reden.adx'

Aktion Anfang

Ausf redeInit   

Text 'Du bist Mehmet Abdulla, und du bist Dönerverkäufer.'

geheZu Privat

EndeAusf

Raum Privat

Name 'Privatbereich'

Besch 'Privatbereich [x] [x]Hier lagert sämtlicher Scheiß, unter

       anderem auch Oma Erika.'

           

  Obj     Oma

  Name    'Oma Erika' f

  vor     'Oma'

  subst   'Oma' f  'Erika' f

  Ort     Privat

  Var     redeBeginn 1

  Var     redeEnde   3

  Attr    Person

  Besch   'Oma Erika ey.. Kultfigur und Hassfigur zugleich. Dein Dönerladen

           ist nur durch sie so populär geworden. Das allerdings nur durch Oma

           Erikas veraltete Weltanschauung...'

  VorAusf

    (reden)

              Ausf redeDialog

                  jenach redeAuswahl

                      !Du wirst auch immer vercheckter, was?

                     (1)     Text '"Rede nicht so unflätig. Dann suche ich

                             halt nicht nach dem Schlüssel..."'

                             lösche aktiv.1

                      !Hast du den Schlüssel vielleicht irgendwo anders

                      !hingelegt?

                     (2)     Text '"Hetz mich nicht so, ich werde den Schlüssel

                                    schon finden...

                                    lösche aktiv.2

                                   

                      !Ja oder dann guck du doch einfach in den Briefkasten..             

                      !ich habe nicht so viel Zeit!

                      (3)     Text '"Stehst du unter Zeitdruck"'

                                     lösche aktiv.3

              Ende

    Stop

EndeAusf

Block "r"

1       '"Du wirst auch immer vercheckter, was?"'

2       '"Oder haste den Schlüssel irgendwo anders hingetan?"'

3       '"Kannst du nicht einfach den Briefkasten aufmachen, ich habe besseres

          zu tun!"'

Aktion  redeInit

Ausf

    Daten aktiv  1 (1 1 1)            ! Oma

EndeAusf

Ende

```[/code]
Geschrieben um 11:53 am 28.11.2010 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

TAGträumer:

Also das Problem ist noch aktuell... die Fehlermeldung bekomme ich immer noch.

Das liegt daran, dass der Befehl reden doppelt defniert wird: einmal in normal.adv und einmal in reden.adx, jeweil mit unterschiedlicher Syntax. Um den Befehl reden in reden.adx zu benutzen, müsstest du die Doublette in normal.adv auskommentieren:



Name    'reden'

Verb    'rede' 'sprich' 'spreche'

Syntax  mit demObj (Person) über dasObj (Allg)

Ausf    erzählen */```

In deinem Beispielcode werden die Themen niemals aktiviert, weil du in dem zweiten Beispiel einen kleinen Fehler in der Aktion Anfang gemacht hast, den du beim ersten Mal nicht gemacht hast. Wenn Du die Aktion folgendermaßen schreibst, sollte es funktionieren:

```Aktion Anfang

Ausf

   Ausf redeInit   

   Text 'Du bist Mehmet Abdulla, und du bist Dönerverkäufer.'

   geheZu Privat

EndeAusf```

Was es mit dem Textblock "r" auf sich hat: "r" ist der Name des Blocks. Hier werden Gesprächsthemen (Quips) mit Nummern versehen angegeben. Diese Nummern entsprechen den Antworten, die du beim Objekt angibst. In redeDialog (im Modul reden.adx) werden die Themen aus dem Textblock "r" dann mit dem Befehl

```Text "r" <nummer>```

ausgegeben.
Geschrieben um 18:47 am 28.11.2010 | Zitat | Editieren | Löschen
TAGträumer
Gast

Vielen Dank! Ist echt cool, dass einem hier so geholfen wird!

Aber drei Fragen habe ich noch:

  1. Wenn ich den "reden"-Befehl in normal.adv lösche, dann kann ich die beiden Verfahren nicht mehr miteinander kombinieren, so wie ich es ursprünglich dachte, oder? Oder kann ich den Befehl in normal.adv auch einfach umbenennen, so dass es keine Komplikationen mehr gibt?

  2. Kann man denn verhindern, dass jemand bei einem menügesteuerten Gespräch den Dialog einfach mit 0 verlässt?

Das hätte vielleicht Sinn, wenn man jemanden ansprechen will, dann aber merkt, dass man keines von den genannten Sachen sagen will. Wobei man in dem Fall ja auch einfach eine Nummer anfügen kann, in der "(Doch nichts sagen)" steht.

Aber als Reaktion (wie in meinem Beispiel) finde ich ein abruptes Dialogende (das nachher beliebig fortgesetzt werden kann) lächerlich.

  1. Gibt es vielleicht irgendwo ein Beispielprogramm oder ein Tutorum, in dem ausführlich über einen menülosen Dialog berichtet wird, der sich jenseits von "Frage xy nach xy" befindet?
Geschrieben um 20:50 am 28.11.2010 | Zitat | Editieren | Löschen
ChristianB
Mitglied
Retired Gumby
Beiträge: 1062

TAGträumer:

Wenn ich den "reden"-Befehl in normal.adv lösche, dann kann ich die beiden Verfahren nicht mehr miteinander kombinieren, so wie ich es ursprünglich dachte, oder? Oder kann ich den Befehl in normal.adv auch einfach umbenennen, so dass es keine Komplikationen mehr gibt?

Den Befehl kannst du einfach umbenennen, z.B. in reden_mit:



Name    'mit jemandem reden'

Verb    'rede' 'sprich' 'spreche'

Syntax  mit demObj (Person) über dasObj (Allg)

Ausf    erzählen```

**TAGträumer:**
> Kann man denn verhindern, dass jemand bei einem menügesteuerten Gespräch den Dialog einfach mit 0 verlässt?

Dazu müsstest du wohl etwas in reden.adx herumschreiben (es gibt in T.A.G., glaube ich, keinen Mechanismus zum Ersetzen von Codeblöcken). Zum Beispiel so:

```Aktion  redeDialog

Ausf

    lokal i j

    lösche j

    Schleife i aObj.redeBeginn aObj.redeEnde

        Wenn (aktiv.i) und (j < 9) dann

            inkr j

            sei redeRef.j i

            Text '  [(][j][)][+8][Text "r" i][+0][x]'

        Ende

    Ende

    lösche redeAuswahl

    Bed (j) 'Dir fällt nichts ein, worüber du mit [dem aObj]

        reden könntest.'

    Text '[+0][x](Bitte einen Text [(]1-[j][)] wählen)'

    Auswahl redeAuswahl '123456789'

    Wenn (redeAuswahl > j) lösche redeAuswahl

    Wenn (redeAuswahl > 0) sei redeAuswahl redeRef.redeAuswahl

EndeAusf```

Ich habe die Null aus der Auswahl herausgenommen und die Eingabeaufforderung etwas abgeändert. Jetzt werrden am Anfang nur noch die Möglichkeiten 1-3 angeboten. Aber eine vierte Möglichkeit zum Beenden des Dialogs sollte schon sein, denke ich. Wenn dem Spieler z.B. noch etwas einfallt, das er lieber vor dem weiteren Dialog noch erledigen möchte und es dann nicht darf, kann das zu akutem Genervtsein führen.
AntwortenNeues ThemaNeue Umfrage
Powered by Spam Board SVN © 2007 - 2021
Impressum / Datenschutz