Forum moved to if-forum.org
Autor Nachricht
<  Freies Reden und menügestuerte Kommunikation zugleich nutzen
TAGträumer
BeitragVerfasst am: Mi, 24 Nov 2010 - 1:01  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 15.11.2010
Beiträge: 11

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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Martin
BeitragVerfasst am: Mi, 24 Nov 2010 - 8:38  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 25.08.2002
Beiträge: 677
Wohnort: München

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 hat folgendes geschrieben:
... 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 hat folgendes geschrieben:
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?
_________________
Every silver lining has a cloud.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TAGträumer
BeitragVerfasst am: Mi, 24 Nov 2010 - 17:39  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 15.11.2010
Beiträge: 11

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...

Code:

#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ööö
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TAGträumer
BeitragVerfasst am: Sa, 27 Nov 2010 - 20:26  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 15.11.2010
Beiträge: 11

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.


Code:
#DAT    'normal.adv'   
#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]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: So, 28 Nov 2010 - 10:53  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

TAGträumer hat folgendes geschrieben:
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:

Code:
/* Bef     reden
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:

Code:
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

Code:
Text "r" <nummer>

ausgegeben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
TAGträumer
BeitragVerfasst am: So, 28 Nov 2010 - 17:47  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 15.11.2010
Beiträge: 11

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.

3. 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?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ChristianB
BeitragVerfasst am: So, 28 Nov 2010 - 19:50  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

TAGträumer hat folgendes geschrieben:
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:

Code:
Bef      reden_mit
Name    'mit jemandem reden'
Verb    'rede' 'sprich' 'spreche'
Syntax  mit demObj (Person) über dasObj (Allg)
Ausf    erzählen


TAGträumer hat folgendes geschrieben:
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:

Code:
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.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 1
if-de :: Forum Foren-Übersicht  >  T.A.G.

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05