| 
  
    | Autor | Nachricht |  
    | <  Freies Reden und menügestuerte Kommunikation zugleich nutzen |  
    |  | 
        
          |  Verfasst am:
            Mi, 24 Nov 2010 - 1:01 |   |  |  
    | | 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.
 |  |  
    |  |  |  
    |  |  
    |  | 
        
          |  Verfasst am:
            Mi, 24 Nov 2010 - 8:38 |   |  |  
    | | 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.
 |  |  
    |  |  |  
    |  |  
    |  | 
        
          |  Verfasst am:
            Mi, 24 Nov 2010 - 17:39 |   |  |  
    | | 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ööö
 |  |  
    |  |  |  
    |  |  
    |  | 
        
          |  Verfasst am:
            Sa, 27 Nov 2010 - 20:26 |   |  |  
    | | 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] 	  | 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
 
 
 | 
 |  |  
    |  |  |  
    |  |  
    |  | 
        
          |  Verfasst am:
            So, 28 Nov 2010 - 10:53 |   |  |  
    | | 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
 
 
 ausgegeben.
 |  |  
    |  |  |  
    |  |  
    |  | 
        
          |  Verfasst am:
            So, 28 Nov 2010 - 17:47 |   |  |  
    | | 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?
 |  |  
    |  |  |  
    |  |  
    |  | 
        
          |  Verfasst am:
            So, 28 Nov 2010 - 19:50 |   |  |  
    | | 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.
 |  |  
    |  |  |  
    |  |  
    |  |  
  
    |  | Alle Zeiten sind GMT + 1 Stunde (MEZ) |  
 
 
 
  
	| 
 
 | 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.
 
 |  
 |