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, back again!

New Feature-rettes

Enable FrotzBot for private messages (at your peril! :wink: )

Allows users to play in private, but usage will be less transparent. If you have a big enough server this may not be an issue for you.

image
default: OFF

If (s)he is not enabled there, the user will get a polite message:

Restrict to a list of Categories, or allow all:


default: ON for all Categories

10 „GefĂ€llt mir“

Hi Robert! Thank you, I really like this plugin !
I tried to install it on dev environment (without docker) and my system asked for the ncursesw lib when making dfrotz, after installing that it worked, will it be the case with a prod env with docker?

1 „GefĂ€llt mir“

I tested on Production and building on Docker (to my surpirse) worked out of the box. Feel free to deploy to a Production instance and let me know how you get on.

Glad you like it!!

2 „GefĂ€llt mir“

For those like me, who might loose their last few hairs about that:

hhgg.z3,9,7,3
that’s :

  story_header_lines = 9
  story_load_lines = 7
  story_save_lines = 3

and now, how to adapt it
 :sweat_smile:, that’s an adventure inside an adventure
!

1 „GefĂ€llt mir“

I’m currently working with the maintainer of Frotz to see if we can do away with those. It’s an approach I ported from restful-Frotz but hardly perfect :slight_smile:

1 „GefĂ€llt mir“

Yes ! found it !
kheper.z8,20,15,4 almost works
for this one :

:smiley:

it’s nothing, but there is something weird

) Line-type display OFF
Compression mode MAX, hiding top 0 lines

is displayed once by Pause() with

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

1 „GefĂ€llt mir“

Ha, yeah, there are lots of quirks and a considerable amount of variety in the stories. I cannot promise to support all.

Right now my focus is on:

  1. simplifying code
  2. making the code more secure
  3. adding formatting where pragmatic.

#3 is surprisingly hard.

1 „GefĂ€llt mir“

I’ve pushed some improvements to a feature branch:

This does away with the silly suppression settings, introduces translation to BBCode to support formatting and colour, leverages the Dumb Frotz command line options better, obviates the need to write to a text stream and squashes a vulnerability.

This branch requires the official BBCode plugin to be installed.

I’m still experimenting with it. Feel free to do so too.

I’ll probably merge after some significant trials.

1 „GefĂ€llt mir“

Does the plugin need the whole frotz repo clone or does it just need $home/frotz/dfrotz to exist? Because I’d rather just compile it once and save the binary between rebuilds.

Not sure why you would care? The resources we are talking about are comparatively tiny. (6MB for the entire repo post make versus Gigabytes for the forum?). It clones the whole repo, then just makes dfrotz. Perhaps that is slightly wasteful, but the simplicity and repeatability is more important I feel. I could go into greater detail and perform a sparse clone, but that would make the build script more complex and less robust. Would it be worth it? Feel free to suggest an optimisation. This is all building inside the container, so will get cleaned whenever the container does.

I’m just trying to optimize for my tiny server, not asking you to change the general install.

1 „GefĂ€llt mir“

This is a really cool plugin! This reminds me of a “classic” computer game that was created years ago(I forgot the name).

3 „GefĂ€llt mir“

It’s a great suggestion for a future optimisation if I can keep it simple and robust. Thanks!

1 „GefĂ€llt mir“

Yes there are many playable classics. More via the link in the 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“