Discourse Frotz 🧙

Wooah, ein neues Plugin! :tada: Dieses ist jedoch etwas weniger ernst. :video_game:

Discourse Frotz


Es ist nicht mehr notwendig, den Bot bei jedem Schritt zu erwÀhnen (@ mention). Sobald das Spiel lÀuft, antworte einfach darauf.

Git-Repo: GitHub - merefield/discourse-frotz: A plugin that uses Frotz to give you an interactive fiction experience on your Discourse forum · GitHub

Was ist das?

Es ist ein „Bot", mit dem du interaktive Fiktion, auch bekannt als klassische Text-Abenteuer-Spiele, auf deinem Discourse-Forum spielen kannst. Er fungiert im Wesentlichen als Adapter fĂŒr den Standard- und fantastischen Z-Machine-Interpreter namens „frotz" unter David Griffith / frotz · GitLab

Wie man es benutzt

Das Setup fĂŒgt zwei Spiele hinzu; du kannst weitere in den Einstellungen hinzufĂŒgen.

Jeder Eintrag enthÀlt einen Titel und den Namen der Story-Datei.

Um die Interaktion zu starten, musst du den in den Einstellungen festgelegten Bot erwÀhnen (@ mention). Danach reicht es aus, auf einen seiner BeitrÀge zu antworten.

Um die verfĂŒgbaren Spiele aufzulisten, musst du zuerst den Bot erwĂ€hnen und folgendes fragen:

@meinbot Spiele auflisten

Dies gibt dir die Auswahlmöglichkeiten.

Um ein Spiel zu starten, tippe:

Spiel x starten und ersetze x durch die Optionsnummer.

Wenn du zu einem anderen Spiel wechseln möchtest, kannst du dies tun; das Plugin speichert deinen Fortschritt bei jedem Zug, sodass du jederzeit zur ersten Story zurĂŒckkehren kannst. Das Plugin fĂŒhrt fĂŒr jede Story und jeden Benutzer, der es ausprobiert, eine separate Speicherung durch.

Um ein bestehendes Spiel fortzusetzen, tippe:

Spiel x fortsetzen und ersetze x durch die Optionsnummer.

NB: Ein vollstÀndiger Neuaufbau zerstört alle Speicherdaten. Dies ist ein notwendiger Kompromiss.

Wie spiele ich ein IF-Spiel?

Viele „Meta-Nutzer" sind mit diesen Dingen aufgewachsen. FĂŒr diejenigen, die weniger vertraut sind, schau dir diese Spickzettel an: Play Some Interactive Fiction

Setup

Bot-Benutzer erstellen

(Entschuldigung, die Automatisierung davon steht auf meiner Liste!)

Gib in einer SSH-Sitzung deinen Container und die Rails-Konsole ein:

./launcher enter app
rails c

FĂŒhre dann Folgendes aus:

u = User.create!(username: "Frotz", name: "FrotzBot", id:-5, email: "not@really.valid")
u.activate

Dein neuer Bot ist dann in der BenutzeroberflĂ€che verfĂŒgbar. Gehe ĂŒber den Admin-Button zu den Einstellungen des Benutzers in der UI und schalte alle E-Mails aus. Passe das Avatar nach Belieben an.

Discourse Frotz installieren

Deine app.yml aktualisieren

Dies ist etwas invasiver als ein ĂŒbliches Plugin.

FĂŒge dies zu app.yml hinzu:

hooks:
  after_code:
    - exec:
        cd: $home
        cmd:
          - git clone https://gitlab.com/DavidGriffith/frotz
    - exec:
        cd: $home/frotz
        cmd:
          - make dfrotz
    - exec:
        cd: $home/frotz
        cmd:
          - mkdir savegames
    - exec:
        cd: $home/frotz
        cmd:
          - mkdir stories
    - exec:
        cd: $home/frotz/stories
        cmd:
          - wget -O zork1.z3 https://eblong.com/infocom/gamefiles/zork1-r119-s880429.z3
    - exec:
        cd: $home/frotz/stories
        cmd:
          - wget --no-check-certificate http://www.douglasadams.com/creations/hhgg.z3
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/merefield/discourse-frotz

vor deinen anderen Plugin-EintrÀgen.

Du musst nun auch das Discourse BBCode-Plugin hinzufĂŒgen!!

Baue mit dem ĂŒblichen ./launcher rebuild app neu auf.

Gehe nun zu den Plugin-Einstellungen und wĂ€hle den zuvor hinzugefĂŒgten Bot-Benutzer aus:

image

Geschichten

Du wirst feststellen, dass ich ein paar Geschichten hinzugefĂŒgt habe. Weitere findest du unter https://ifdb.tads.org/.
Aber beachte hier die Ratenbegrenzungen! Zu viele Geschichten von derselben Quelle zu erhalten, kann einen Fehler verursachen.

Beachte auch, dass die Geschichten nicht auf https-geschĂŒtzten Servern liegen (tut tut).

Wenn du darauf bestehst, weitere zu laden, fĂŒge sie zu app.yml hinzu. Du könntest sie auch manuell ĂŒber die Eingabeaufforderung hinzufĂŒgen, aber beachte, dass diese beim nĂ€chsten vollstĂ€ndigen Neuaufbau gelöscht werden.

FrotzBot fĂŒr private Nachrichten aktivieren (Vorsicht geboten)

Ermöglicht Benutzern das private Spielen, aber die Nutzung ist weniger transparent. Wenn du einen ausreichend großen Server hast, ist dies möglicherweise kein Problem fĂŒr dich. In jedem Fall sei dir der Einfluss auf die KapazitĂ€t bewusst. Als Alternative kannst du Benutzer ermutigen, in einer ausgewiesenen Kategorie zu spielen.

image
Standard: AUS

Wenn (er/sie) dort nicht aktiviert ist, erhÀlt der Benutzer eine höfliche Meldung:

FrotzBot nach Kategorie einschrÀnken

Du kannst den Bot auf eine (Liste von) Kategorie(n) beschrĂ€nken, um andere Bereiche nicht zu fĂŒllen:

TastenkĂŒrzel!

Dies ist wirklich wichtig, um das „Gaming"-Erlebnis zu verbessern. Und du musst wirklich nur zwei merken:

  • Shift-R, um dem Bot zu antworten

  • Ctrl-Enter, um deinen nĂ€chsten Zug einzureichen

EinschrĂ€nkungen und Überlegungen

Nicht alle Story-Formate und Spiele werden unterstĂŒtzt, und es ist auch unwahrscheinlich, dass sie es jemals sein werden. Es gibt viele Spiele, die nicht funktionieren, weil sie Art und Weise ihrer Anruf- und Antwortprotokolle. Aufgrund der Art und Weise, wie wir postweise interagieren, mĂŒssen wir Frotz nach jedem Zug auffordern, den Zustand zu speichern. Wenn ein Schritt des Spiels nicht zu einer Eingabeaufforderung fĂŒhrt, bei der das System speichern kann (wobei „DrĂŒcke eine beliebige Taste" oder „Mehr"-Aufforderungen ignoriert werden, die behandelt werden sollten), funktioniert die Story nicht. Zum Beispiel: In „Act of Murder" (ein großartiges Spiel!) fragt die Dame an der TĂŒr, ob du ein Polizist bist. Leider ist dies ein Spielzustand, der nicht gespeichert werden kann, was diese Anforderung nicht erfĂŒllt, und ich sehe keinen Weg, dies zum Laufen zu bringen.

NB: Der Mailinglisten-Modus ist mit diesem ein Desaster, also stelle sicher, dass du dies nicht verwendest, bevor du versuchst, dieses Plugin zu nutzen!

Es ist wohl etwas verschwenderisch mit Forum-Ressourcen, da fĂŒr jeden „Zug" mindestens zwei BeitrĂ€ge erforderlich sind. Offensichtlich ist es oft angemessener, solche Spiele ĂŒber eine Chat-Schnittstelle statt ĂŒber ein Forum zu spielen, aber man könnte argumentieren, dass dies zur Erstellung von Walkthroughs genutzt werden könnte? :wink:

FĂŒr eine weniger invasive Lösung betrachte: Turning a topic into interactive fiction ;)

Feedback

Alle RĂŒckmeldungen sind willkommen!

Credits

Dieses Plugin nutzt David Griffith / frotz · GitLab, den Frotz Z-Interpreter, der vom Setup-Skript geklont und „gebaut" wird.

Danke an @P16, der mir erlaubt hat, Code-AuszĂŒge aus einem Closed-Source-Chatbot zu verwenden, an dem wir gemeinsam gearbeitet haben.

45 „GefĂ€llt mir“

Wooah, wieder da!

Neue Feature-ettes

FrotzBot fĂŒr private Nachrichten aktivieren (auf eigene Gefahr! ;))

Ermöglicht Benutzern das Spielen im privaten Bereich, die Nutzung ist jedoch weniger transparent. Wenn Sie einen ausreichend großen Server haben, ist dies möglicherweise kein Problem fĂŒr Sie.

image
Standard: AUS

Wenn (er/sie) dort nicht aktiviert ist, erhÀlt der Benutzer eine höfliche Meldung:

Auf eine Liste von Kategorien beschrÀnken oder alle zulassen:


Standard: FÜR ALLE KATEGORIEN AKTIVIERT

10 „GefĂ€llt mir“

Hallo Robert! Vielen Dank, dieses Plugin gefÀllt mir wirklich gut!
Ich habe versucht, es in einer Dev-Umgebung (ohne Docker) zu installieren, und mein System hat beim Kompilieren von dfrotz nach der ncursesw-Bibliothek gefragt. Nach der Installation funktionierte es. Wird das in einer Prod-Umgebung mit Docker ebenfalls der Fall sein?

1 „GefĂ€llt mir“

Ich habe es in der Produktion getestet, und der Build auf Docker hat (zu meiner Überraschung) sofort funktioniert. FĂŒhlen Sie sich frei, es auf einer Produktionsinstanz bereitzustellen und lassen Sie mich wissen, wie es lĂ€uft.

Freut mich, dass es Ihnen gefÀllt!!

2 „GefĂ€llt mir“

FĂŒr diejenigen unter uns, die vielleicht noch ein paar Haare darĂŒber verlieren:

hhgg.z3,9,7,3
Das bedeutet:

  story_header_lines = 9
  story_load_lines = 7
  story_save_lines = 3

Und nun, wie man das anpasst
 :sweat_smile:, das ist ein Abenteuer im Abenteuer
!

1 „GefĂ€llt mir“

Ich arbeite derzeit mit dem Betreuer von Frotz zusammen, um zu prĂŒfen, ob wir diese abschaffen können. Es ist ein Ansatz, den ich von restful-Frotz portiert habe, aber er ist alles andere als perfekt :slight_smile:

1 „GefĂ€llt mir“

Ja! Ich habe es gefunden!
kheper.z8,20,15,4 funktioniert fast.
FĂŒr diese hier:

:smiley:

Es ist nichts Ernstes, aber etwas ist seltsam:

) Zeilenanzeige AUS
Kompressionsmodus MAX, versteckt die obersten 0 Zeilen

wird einmal von Pause() angezeigt mit:

[Pause notNeeded;
@read_char 1 notNeeded;
rtrue;
];

1 „GefĂ€llt mir“

Ha, ja, die Geschichten weisen zahlreiche Eigenheiten und eine betrĂ€chtliche Vielfalt auf. Ich kann nicht versprechen, alle zu unterstĂŒtzen.

Derzeit konzentriere ich mich auf:

  1. Vereinfachung des Codes
  2. Erhöhung der Sicherheit des Codes
  3. HinzufĂŒgen von Formatierung, wo es sinnvoll ist.

Punkt 3 ist ĂŒberraschend schwierig.

1 „GefĂ€llt mir“

Ich habe einige Verbesserungen in einen Feature-Branch gepusht:

Dadurch werden die albernen UnterdrĂŒckungseinstellungen abgeschafft, die Übersetzung nach BBCode eingefĂŒhrt, um Formatierung und Farben zu unterstĂŒtzen, die Dumb-Frotz-Command-Line-Optionen besser genutzt, das Schreiben in einen Textstream ĂŒberflĂŒssig gemacht und eine SicherheitslĂŒcke geschlossen.

Dieser Branch setzt die Installation des offiziellen BBCode-Plugins voraus.

Ich experimentiere noch damit. FĂŒhlen Sie sich frei, das auch zu tun.

Ich werde ihn wahrscheinlich nach einigen wesentlichen Tests zusammenfĂŒhren.

1 „GefĂ€llt mir“

Benötigt das Plugin den vollstĂ€ndigen Klon des frotz-Repos oder reicht es, wenn $home/frotz/dfrotz existiert? Ich wĂŒrde es lieber einmal kompilieren und das BinĂ€r zwischen den Neukompilierungen speichern.

Ich bin mir nicht sicher, warum dir das wichtig sein sollte? Die Ressourcen, ĂŒber die wir sprechen, sind vergleichsweise winzig (6 MB fĂŒr das gesamte Repository nach dem Make-Vorgang gegenĂŒber Gigabytes fĂŒr das Forum?). Es klonen das gesamte Repository und erstellen dann nur dfrotz. Das mag etwas verschwenderisch sein, aber fĂŒr mich sind Einfachheit und Wiederholbarkeit wichtiger. Ich könnte zwar ins Detail gehen und einen Sparse-Clone durchfĂŒhren, doch das wĂŒrde das Build-Skript komplexer und weniger robust machen. WĂŒrde es sich lohnen? Du kannst gerne eine Optimierung vorschlagen. Dies lĂ€uft alles innerhalb des Containers ab und wird daher immer dann bereinigt, wenn der Container das tut.

Ich versuche nur, meine kleine Server zu optimieren und bitte dich nicht, die allgemeine Installation zu Àndern.

1 „GefĂ€llt mir“

Das ist ein wirklich cooler Plugin! Das erinnert mich an ein „klassisches

3 „GefĂ€llt mir“

Das ist ein großartiger Vorschlag fĂŒr eine zukĂŒnftige Optimierung, falls ich es einfach und robust halten kann. Danke!

1 „GefĂ€llt mir“

Ja, es gibt viele spielbare Klassiker. Weitere ĂŒber den Link im OP.

2 „GefĂ€llt mir“

Großes Update: :tada: :kiwi_fruit:

(Das hat Monate an gelegentlicher Hintergrundarbeit und Koordination mit dem Frotz-Team erfordert.)

EinfĂŒhrung von Vollfarbe und monospaced Formatierung fĂŒr Geschichten

Dieses große Update bringt eine Reihe von Verbesserungen mit sich:

  • HINZUGEFÜGT: Farbformatierung und UnterstĂŒtzung fĂŒr monospaced Text
  • VERBESSERT: Vereinfachte Einstellungen: Keine Kalibrierung von Kopf- und Fußzeile mehr erforderlich, nur noch gewĂŒnschter Titel und Story-Datei, whoop!
  • VERBESSERT: Verwendet die Open3-Bibliothek fĂŒr Systembefehle, wodurch das Risiko von Missbrauch/SicherheitslĂŒcken reduziert wird.
  • VERBESSERT: Interne Interaktion mit der Kommandozeile, um die Notwendigkeit von Stream-Dateien zu eliminieren; bewĂ€ltigt nun auch „mehr/DrĂŒcken Sie eine beliebige Taste“-Aufforderungen

Erfordert jetzt das Discourse BBCode-Plugin!!

Dies erforderte die Zusammenarbeit des Betreuers von Frotz, David Griffiths, und eines der sehr aktiven Mitglieder dieser Community, Borg323, der die BBCode-Erweiterungen gemĂ€ĂŸ dem BBCode-Discourse-Standard geschrieben hat. Vielen, vielen Dank an beide! Wir mussten etwas kreativ werden, um die monospaced-Text-Funktion zum Laufen zu bringen, aber die Lösung ist wirklich großartig!

Einige Beispiele fĂŒr die neue Formatierung (ich habe diese Geschichten noch nicht vollstĂ€ndig getestet, dies sind nur Beispiele fĂŒr die Formatierung):

Und beachten Sie den farbigen Kompass hier:

BEKANNTEN PROBLEME: Es gibt viele Spiele, die aufgrund der Art ihrer Anruf- und Antwortprotokolle nicht funktionieren. Wenn ein Schritt des Spiels nicht zu einer AuffĂŒhrung fĂŒhrt, an der Sie speichern können (wobei „DrĂŒcken Sie eine beliebige Taste“ oder „Mehr“-Aufforderungen ignoriert werden, die verarbeitet werden sollten), funktioniert die Geschichte nicht. Zum Beispiel: In „Act of Murder“ (tolles Spiel!) fragt die Dame an der TĂŒr, ob Sie ein Polizist sind. Leider ist dies ein Zustand des Spiels, der nicht gespeichert werden kann, sodass diese Anforderung nicht erfĂŒllt wird, und ich sehe keinen Weg, dies zum Laufen zu bringen.

Es gibt wahrscheinlich Spiele, die jetzt mit Discourse Frotz kompatibel sind, die es vorher nicht waren 
 bitte experimentieren Sie, aber beachten Sie die oben genannte EinschrÀnkung!

Lassen Sie mich wissen, wenn Sie Probleme haben, dies zum Laufen zu bringen, und ich werde die Anweisungen bei Bedarf verfeinern.

8 „GefĂ€llt mir“

Eine Erinnerung: Du kannst TastenkĂŒrzel verwenden, um deine Erfahrung mit diesem Plugin zu verbessern:

  • Shift-R, um auf den Bot zu antworten

  • Strg-Enter, um deinen nĂ€chsten Zug einzureichen

(Standard-TastenkĂŒrzel aus dem Lieferumfang).

5 „GefĂ€llt mir“

Hallo Robert!
Endlich hatte ich Zeit, weiterzumachen. Bisher lÀuft alles gut, es hat in der Produktionsumgebung sofort funktioniert :+1:

Seltsamerweise kann frotz keine privaten Nachrichten beantworten, es sei denn, ich stelle es auch in einer Kategorie ein :thinking:
NĂ€chster Schritt: Spielen :grinning_face_with_smiling_eyes:

1 „GefĂ€llt mir“

Danke fĂŒr den Bericht!

Ich habe das bereits behoben: FIX: behaviour of private messages playing permission setting · merefield/discourse-frotz@34b022e · GitHub

NTS: Ich muss noch ein paar Unit-Tests hinzufĂŒgen!

2 „GefĂ€llt mir“

Ich habe versucht, :grin: in einer Quelle hinzuzufĂŒgen,

es wird Spaß machen!

1 „GefĂ€llt mir“