Forum moved to if-forum.org
Autor Nachricht
<  doppelte Antworten vermeiden in Inform 7
kaethe
BeitragVerfasst am: Mi, 26 März 2014 - 8:27  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 04.03.2014
Beiträge: 9

Guten Morgen,

ich habe das Problem, dass in meinem Spiel manchmal zwei Antworten auftauchen, meine und die Standardantwort.
Hier ein Beispiel:

Code:
>steig auf theke
Mit einem dumpfen Geräusch landest du auf dem hohen Verkaufstresen. Von hieraus hat man einen guten Überblick.

Du steigst auf den Verkaufstresen.

>steig von Theke
Mit einem gekonnten Sprung landest du wieder auf dem Boden.

Du steigst von dem Verkaufstresen.


Kann man das irgendwie ausschalten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mikawa
BeitragVerfasst am: Mi, 26 März 2014 - 9:01  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 03.09.2009
Beiträge: 453
Wohnort: Cham

Ich galube, das kannst Du mit dem nachgestellten Schlüsselwort "instead" abfangen. Probiers mal, wenn nicht poste bitte den betreffenden Codeabschnitt.

Code:
say "Mit einem gekonnten Sprung landest du wieder auf dem Boden." instead.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mi, 26 März 2014 - 10:59  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 923
Wohnort: Berlin

kaethe hat folgendes geschrieben:
Kann man das irgendwie ausschalten?

Das I7-Regelwerk ist etwas gewöhnungsbedürftig, indem die Ausnahme-Rulebooks Instead und After nach Ausführung einer getriggerten Regel automatisch stoppen, alle anderen sich aber weiter durch die passenden Rulebooks wühlen. Wenn eine eigene Regel nach einer Ausgabe stoppen soll, muss das ansonsten explizit gesagt ("stop the action") oder eben Instead verwendet werden. Der Debug-Befehl RULES ON macht sichtbar, wo die Ausgaben entstehen und wo also ein Stop (oder identisch ein rangehängtes instead) eingebaut werden müsste. Hier die Aktions-Rulebooks in der Reihenfolge, wie sie (falls vorhanden) abgearbeitet werden (-> Doku 12.2.):

Before (Ausnahme) -> macht weiter
Instead (Ausnahme) -> stoppt
Check (Standard) -> macht weiter
Carry out (Standard) -> macht weiter
After (Ausnahme) -> stoppt
Report (Standard) -> macht weiter.
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mikawa
BeitragVerfasst am: Mi, 26 März 2014 - 11:15  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 03.09.2009
Beiträge: 453
Wohnort: Cham

Also kurz und knapp: So etwas wie

Code:
The table is a male enterable supporter in wohnzimmer.

Report getting off the table:
   say "Du springst vom Tisch, juchu!" instead.

klinkt sich in die "Report-Regelliste" ein und sollte funktionieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mi, 26 März 2014 - 11:28  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 923
Wohnort: Berlin

Oder eben, da es sich um eine Ausnahme handelt, ein After. Das hebelt dann die vorgefertigten Report-Rules explizit aus. Mit Report geht's hier auch weil "getting off the table" spezieller ist als "getting off" und im Report getting off-Rulebook daher weiter oben gelistet wird (-> Doku 18.18.)
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Mi, 26 März 2014 - 13:48  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

proc hat folgendes geschrieben:
Oder eben, da es sich um eine Ausnahme handelt, ein After.

Genau. Die After-Rulebooks sind zum Ändern der Standard-Meldungen in speziellen Fällen (und eigentlich auch nur dafür) gedacht, ohne dass dabei (wie z.B. bei instead) der Ausgang der Aktion verändert wird.

Die Standard-Rulebooks sollte man nur verwenden, wenn man Standard-Regeln für eigene (neue) Aktionen definiert oder bestehende Standard-Regeln austauschen bzw. ergänzen möchte.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Mi, 26 März 2014 - 17:05  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 923
Wohnort: Berlin

ChristianB hat folgendes geschrieben:
Die Standard-Rulebooks sollte man nur verwenden, wenn man Standard-Regeln für eigene (neue) Aktionen definiert oder bestehende Standard-Regeln austauschen bzw. ergänzen möchte.

Da gibt es leider noch einen Nach-Haken, der Eingriffe in den Default-Mechanismus von check-carry out-report nahelegt statt After zu verwenden, insofern kann Mikawas Report-Beispiel unter Umständen besser geeignet sein. So werden After-Meldungen inkonsistenterweise auch bei impliziten Versuchen ("try silently") gebracht, was bei Report nicht der Fall ist. Auf dem Tisch stehend (mal Mikawas Beispiel aufgegriffen) wird bei implizitem Aktionssaufruf wie bei "geh runter" erst ein going ausgeführt, was auf einem Supporter seiend erstmal ein silently exiting auslöst, das über die "convert exit into get off rule" dann bei After die vom-Tisch-spring-Jauchzmeldung bringt, um außerdem noch - going abschließend - die "can't go that way rule"-Meldung "Du kannst nicht in diese Richtung gehen" zu bringen. Das liest sich nicht ganz flüssig und die Handhabung über eine Report-Rule vermeidet dabei zumindest eine eigene getting off-Meldung. Die Idee, Ausnahmen in die Ausnahmerulebooks zu packen und Defaults in den Standard Rulebooks zu belassen ist durch die vielen try silently-Konstruktionen in den Standard Rules daher erstmal vor allem Theorie, zumindest was After-Rulebooks betrifft: gestoppt wird bei After immer nur das eigene Rulebook und nicht das übergeordnete. Wobei das implizite getting off ja ausgeführt wird, falsch ist die After-Meldung also nicht. Der Spieler schüttelt halt den Kopf über die Meldungswirrnis.
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Do, 27 März 2014 - 0:09  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

proc hat folgendes geschrieben:
So werden After-Meldungen inkonsistenterweise auch bei impliziten Versuchen ("try silently") gebracht, was bei Report nicht der Fall ist.

Das war mir gar nicht bewusst. Das muss doch wohl ein Design-Fehler in Inform 7 sein; wenn der Autor für Sonderfälle in den Standard-Rulebooks rumschreiben muss, ist das nicht besonders hübsch.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
proc
BeitragVerfasst am: Do, 27 März 2014 - 6:30  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 923
Wohnort: Berlin

ChristianB hat folgendes geschrieben:
Das war mir gar nicht bewusst. Das muss doch wohl ein Design-Fehler in Inform 7 sein; wenn der Autor für Sonderfälle in den Standard-Rulebooks rumschreiben muss, ist das nicht besonders hübsch.

Mir auch nicht, das hab ich erst jetzt durch Ausprobieren herausbekommen und das ist noch viel katastrophaler als angenommen, die ganzen Action-Converts in den Standard Rules und GerX sind davon auch betroffen. After in den ... - also Tschüss After würd ich mal sagen, das taugt so nix.
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Mikawa
BeitragVerfasst am: Do, 27 März 2014 - 12:14  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 03.09.2009
Beiträge: 453
Wohnort: Cham

Das mit dem "After" hab ich sowieso nie so ganz verstanden. Meiner Ansicht nach sollte eigentlich das "Report" Rulebook für die Meldungsausgabe zuständig sein, denn genau das impliziert ja der Name.

"After" Regeln sind für mich klassische Regeln, die greifen, wenn ich eine Aktion erfolgreich ausgeführt habe (wohlgemerkt unabhängig vom eigentlichen Report) also verwende ich sowas falls ich einen "Schalter" für den Spielmechanismus umlegen möchte, wie z.B. dass nach dem Lesen eines Buches die Zeit fortgeschritten ist und es Abend geworden ist ...

Für mich wäre logisch:

Before kann ich verwenden falls ich aus irgendeinem speziellen Grund die Aktion verhindern will (z.B. ich muss erst von dem Gral gehört haben, damit das Lesen im Buch Sinn macht ...)

Check prüft gültige Vorraussetzungen (z.B. Buch muss zum Lesen in der Hand gehalten werden)

Carry Out führt die Aktion aus (Buch wird als gelesen = true markiert)

Report gibt die Meldung aus (Du liest stundenlang in dem Buch...)

After schaltet die Zeit weiter (Es ist jetzt schon dunkel geworden und der Mond steht hoch am Himmel.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ChristianB
BeitragVerfasst am: Do, 27 März 2014 - 17:58  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 05.05.2004
Beiträge: 633
Wohnort: Hamburg

Mikawa hat folgendes geschrieben:
Meiner Ansicht nach sollte eigentlich das "Report" Rulebook für die Meldungsausgabe zuständig sein, denn genau das impliziert ja der Name.

Ja, der Name legt das nahe, aber Graham hat sich eben zwei Arten von Rulebooks ausgedacht, die für das Standardverhalten einer Aktion und die für Sonderfälle, so wie proc es weiter oben auch sehr übersichtlich aufgelistet hat. (In Inform 6 war die Property After übrigens auch schon zuständig für das Ändern von Meldungen, da gab's gar keine Report-Phase.)

Die Benennung mag aufgrund der Inkonsistenz in Bezug auf Before ("Aktion läuft weiter") etwas unglücklich erscheinen, so richtig problematisch finde ich das nicht. Viel mehr verwirrt mich, dass "try silently" (keep_silent in I6) für die Standard- und die Spezial-Regelbücher unterschiedlich gehandhabt wird. Wenn man da z.B. Verkettungen von Aktionen realisieren möchte, kann das ja ein Feuerwerk der überflüssigen Ansagen geben.

Ich muss noch mal nachsehen, ob "after" in I6 auch keep-silent-resistent war; mir ist das dort jedenfalls nie aufgefallen. Wir könnten ja auch mal überlegen, ob es sinnvoll wäre, das Beachten der "Ruhe-und-Klappe-halten-und-wenn-ich-sage-Ruhe-dann-meine-ich-Ruhe-Regel" in GerX zu realisieren.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Basti
BeitragVerfasst am: Do, 27 März 2014 - 23:58  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

@kaethe

Alternativ kannst du auch (jedenfalls wenn du die Windows IDE benutzt) unter Index -> Action die Lupe neben der Aktion 'getting off' auswählen und dort neben der 'standard report getting off rule' auf das Icon für 'unlist' klicken. Dann wird der nötige Code in deinem Projekt hinterlegt (Cursor sollte sich dafür an eine freie Stelle in deinem Sourcecode befinden).

Hier der Code, den das Icon generiert:
Code:
The standard report getting off rule is not listed in the report getting off rulebook.


Dann kannst du auf das Instead verzichten, damit auch die restlichen Regeln (in diesem Fall die 'describe room stood up into rule') ausgelöst werden. Inform zählt das Instead nämlich so, dass die Regel fehlgeschlagen ist und somit das rulebook vorzeitig verlassen wird.

Willst du aber auf die Standard Regel nicht verzichten wollen, kannst du alternativ deiner eigenen Report Regel am Schluss noch ein 'ignore the standard report getting off rule' anhängen. Dann wird die Standard Regel zwar ignoriert, falls deine Regel aktiviert wird, bleibt aber weiterhin im rulebook.

EDIT: Hoppla, wie ich gerade erfahren habe, soll ignore generell nicht mehr verwendet werden, da die Funktion wohl eingestellt wird. Soviel also dazu.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
proc
BeitragVerfasst am: Fr, 28 März 2014 - 11:57  Antworten mit Zitat
Experte
Experte


Anmeldungsdatum: 08.12.2009
Beiträge: 923
Wohnort: Berlin

Basti hat folgendes geschrieben:
Code:
The standard report getting off rule is not listed in the report getting off rulebook.

Beim Löschen von Standardregeln muss man schon genau wissen was man tut. Der Spieler erhält in diesem Fall generell nie wieder Rückmeldung über seinen veränderten Drauf-/Drinsei-oder-nicht-Zustand beim Verlassen eines holders, die Standard-Reportregel macht schon Sinn. Dann besser mit "is listed instead of" durch eine eigene ersetzen, die dann aber allgemeingültig sein muss und nicht nur den Tisch oder die Theke betrifft. Alles spricht nach letzten After-Erkenntnissen für eigene Report-Regeln in speziellen Fällen mit Stop-Anweisung drin, die im Zweifelsfall explizit z.B. "listed first in the ... rulebook" platziert werden können.

Basti hat folgendes geschrieben:
Dann kannst du auf das Instead verzichten.

Instead ist da gefährlich, weil es den gesamten Standardprozess aushebelt, vor allem das Carry out. Wenn Instead hier nur eine Meldung bringt, steckt der Spieler danach immer noch im holder. Das führt dann zu Bugs wie in DW1, wenn man sich in Loleks Stuhl setzt und nie wieder rauskommt...
_________________
interactive fiction database
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
kaethe
BeitragVerfasst am: Fr, 28 März 2014 - 14:17  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 04.03.2014
Beiträge: 9

Funktioniert! Danke!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Basti
BeitragVerfasst am: Fr, 28 März 2014 - 23:32  Antworten mit Zitat
Neuling
Neuling


Anmeldungsdatum: 12.02.2007
Beiträge: 22

proc hat folgendes geschrieben:
Alles spricht nach letzten After-Erkenntnissen für eigene Report-Regeln in speziellen Fällen mit Stop-Anweisung drin, die im Zweifelsfall explizit z.B. "listed first in the ... rulebook" platziert werden können.


Yo, da bin ich derselben Meinung. Ich finds nur ein bisschen doof, dass man damit evtl. auch nachfolgende Regeln abschießt, die man eigentlich noch brauchen könnte, wie etwa hier z.B. die 'describe room stood up into' Regel.

proc hat folgendes geschrieben:
Instead ist da gefährlich, weil es den gesamten Standardprozess aushebelt, vor allem das Carry out.


Sorry, kleines Missverständnis hier. Ich meinte das 'say "" instead', welches die Regel als gescheitert markiert, was das rulebook vorzeitig beendet und außerdem so meiner Ansicht nach nicht stimmt. Da wäre für mich ein rule succeeds eher angebracht. Macht aber praktisch bei einer Aktion wohl keinen Unterschied, da eine Aktion scheinbar immer als Erfolg gilt (demnach das 'if rule succeeded' greift), solange das Check rulebook nicht scheitert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 1 von 2
Gehe zu Seite 1, 2  Weiter
if-de :: Forum Foren-Übersicht  >  Inform & Glulx

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