Discourse Frotz 🧙

Wooah, un nuovo plugin! :tada: Questo è un po’ meno serio, però. :video_game:

Discourse Frotz


Non è più necessario menzionare il bot con @ a ogni passo. Una volta iniziato il gioco, basta rispondere a lui.

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

Che cos’è

È un ‘bot’ con cui giocare a narrativa interattiva, ovvero classici giochi di avventura testuale, sul tuo forum Discourse. È essenzialmente un adattatore per l’interprete Z-machine standard e straordinario chiamato ‘frotz’, disponibile su David Griffith / frotz · GitLab

Come usarlo

La configurazione aggiunge due giochi; puoi aggiungerne altri nelle impostazioni.

Ogni voce contiene un Titolo e il nome del file della storia.

Per avviare l’interazione, devi menzionare con @ il bot impostato nelle impostazioni. Dopo di che, rispondere al suo post è sufficiente.

Per elencare i giochi disponibili, devi prima menzionare il bot e chiedere:

@mybot list games

Questo ti mostrerà le opzioni disponibili.

Per iniziare un gioco, digita:

start game x sostituendo x con il numero dell’opzione.

Se vuoi passare a un altro gioco, puoi farlo; il plugin salva il tuo progresso ad ogni mossa, così puoi tornare alla prima storia in qualsiasi momento. Il plugin mantiene un salvataggio per ogni storia per ogni utente che la prova.

Per continuare una partita esistente, digita:

continue game x sostituendo x con il numero dell’opzione.

NB Una ricostruzione completa distruggerà tutti i file di salvataggio. Questo è un compromesso necessario.

Come si gioca a un gioco di IF (Narrativa Interattiva)?

Molti “Meta” sono cresciuti con queste cose. Per chi è meno familiare, consulta questa guida rapida: Play Some Interactive Fiction

Configurazione

Crea l’utente Bot

(scusa, automatizzare questo è nella mia lista di cose da fare!)

In una sessione ssh, entra nel tuo container e nella console rails:

./launcher enter app
rails c

Poi fai questo:

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

Il tuo nuovo bot sarà quindi disponibile per la configurazione nell’interfaccia utente. Vai alle impostazioni dell’utente nell’UI tramite il pulsante admin e disattiva tutte le email. Aggiorna l’avatar a tuo piacimento.

Installa Discourse Frotz

Aggiorna il tuo app.yml

Questa procedura è un po’ più invasiva rispetto a un normale plugin.

Aggiungi questo al file app.yml:

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

prima delle altre voci dei plugin.

Ora devi anche aggiungere il plugin Discourse BBCode!!

Ricostruisci con il solito comando ./launcher rebuild app

Ora vai alle impostazioni del plugin e seleziona l’utente bot che hai aggiunto in precedenza:

image

Storie

Noterai che ho incluso un paio di storie. Puoi trovarne di più su https://ifdb.tads.org/.
Tuttavia, fai attenzione ai limiti di velocità qui! Ottenere troppe storie dalla stessa posizione potrebbe causare un errore.

Nota anche che le storie non si trovano su server protetti da HTTPS (tut tut).

Se insistete per caricarne di più, aggiungetele all’app.yml. Potreste anche aggiungerle manualmente dal prompt dei comandi, ma tenete presente che queste verranno cancellate alla prossima ricostruzione completa.

Abilita FrotzBot per i messaggi privati (consigliata cautela)

Permette agli utenti di giocare in privato, ma l’utilizzo sarà meno trasparente. Se hai un server abbastanza grande, questo potrebbe non essere un problema per te. In ogni caso, sii consapevole delle implicazioni per la capacità. In alternativa, incoraggia gli utenti a giocare in una Categoria dedicata.

image
default: OFF

Se non è abilitato lì, l’utente riceverà un messaggio gentile:

Limita FrotzBot per Categoria

Puoi limitare il bot a una (lista di) Categoria per evitare di riempire altre aree:

Scorciatoie da tastiera!

Questo è davvero importante per migliorare l’esperienza di ‘gioco’. E devi davvero ricordare solo due:

  • Shift-R per rispondere al bot

  • Ctrl-Enter per inviare la tua prossima mossa

Limitazioni e considerazioni

Non tutti i formati di storia e i giochi sono ancora supportati, né è probabile che lo siano. Ci sono molti giochi che non funzionano a causa della natura dei loro protocolli di richiesta e risposta. Dato che interagiamo post per post, dobbiamo chiedere a Frotz di salvare lo stato dopo ogni mossa. Se un passo del gioco non porta a un prompt in cui il sistema può salvare (ignorando i prompt “premi un tasto” o “Altro” che dovrebbero essere gestiti), allora la storia non funzionerà. Ad esempio, in Act of Murder (grande gioco!), la donna alla porta chiede se sei un poliziotto. Purtroppo questo è uno stato del gioco che non può essere salvato, quindi non soddisfa questo requisito e non vedo un modo per farlo funzionare.

NB La modalità mailing list è un disastro con questo plugin, quindi assicurati che non sia qualcosa che usi prima di provare a utilizzare questo plugin!

Si può dire che sprechi un po’ le risorse del forum, poiché richiede almeno due post per ogni ‘mossa’. È ovviamente spesso più appropriato giocare a questo tipo di giochi usando un’interfaccia di chat piuttosto che un forum, ma potresti obiettare che questo potrebbe essere usato per creare Guide di gioco? :wink:

Per una soluzione meno invasiva, considera: Turning a topic into interactive fiction ;)

Feedback

Tutti i feedback sono benvenuti!

Crediti

Questo plugin sfrutta David Griffith / frotz · GitLab, l’interprete Z-Interpreter di Frotz, che viene clonato e ‘compilato’ dallo script di configurazione.

Grazie a @P16 per avermi permesso di utilizzare estratti di codice da un chatbot a codice chiuso su cui abbiamo lavorato insieme.

45 Mi Piace

Wooah, di nuovo qui!

Nuove Feature-rettes

Abilita FrotzBot per i messaggi privati (a tuo rischio! :wink: )

Permette agli utenti di giocare in privato, ma l’utilizzo sarà meno trasparente. Se hai un server abbastanza grande, questo potrebbe non essere un problema per te.

image
default: OFF

Se non è abilitato, l’utente riceverà un messaggio gentile:

Limita a un elenco di Categorie o consenti tutte:


default: ON per tutte le Categorie

10 Mi Piace

Ciao Robert! Grazie, mi piace molto questo plugin!
Ho provato a installarlo in un ambiente di sviluppo (senza Docker) e il mio sistema ha richiesto la libreria ncursesw durante la compilazione di dfrotz; dopo averla installata, tutto ha funzionato. Accadrà lo stesso in un ambiente di produzione con Docker?

1 Mi Piace

Ho testato in produzione e la build su Docker (a mia sorpresa) ha funzionato immediatamente. Sentiti libero di distribuire su un’istanza di produzione e fammi sapere come va.

Sono felice che ti piaccia!!

2 Mi Piace

Per chi, come me, potrebbe perdere gli ultimi capelli per questo:

hhgg.z3,9,7,3
cioè:

  story_header_lines = 9
  story_load_lines = 7
  story_save_lines = 3

e ora, come adattarlo… :sweat_smile:, è un’avventura dentro un’avventura…!

1 Mi Piace

Attualmente sto lavorando con il maintainer di Frotz per vedere se possiamo eliminarli. È un approccio che ho portato da restful-Frotz, ma non è affatto perfetto :slight_smile:

1 Mi Piace

Sì! L’ho trovato!
kheper.z8,20,15,4 funziona quasi
per questo:

:smiley:

non è nulla, ma c’è qualcosa di strano

) Visualizzazione a righe DISATTIVATA
Modalità di compressione MAX, che nasconde le prime 0 righe

viene visualizzato una volta da Pause() con

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

1 Mi Piace

Ah già, ci sono molte particolarità e una notevole varietà nelle storie. Non posso promettere di supportarle tutte.

Al momento il mio focus è su:

  1. semplificare il codice
  2. rendere il codice più sicuro
  3. aggiungere formattazione dove è pratico.

Il punto 3 è sorprendentemente difficile.

1 Mi Piace

Ho apportato alcuni miglioramenti a un ramo di funzionalità:

Questo elimina le impostazioni di soppressione inutili, introduce la traduzione in BBCode per supportare la formattazione e i colori, sfrutta meglio le opzioni della riga di comando di Dumb Frotz, elimina la necessità di scrivere in un flusso di testo e risolve una vulnerabilità.

Questo ramo richiede l’installazione del plugin BBCode ufficiale.

Sto ancora sperimentando con esso. Sentiti libero di fare lo stesso.

Probabilmente effettuerò l’unione dopo alcuni test significativi.

1 Mi Piace

Il plugin ha bisogno dell’intero clone del repository frotz o gli basta che esista $home/frotz/dfrotz? Preferirei compilarlo una sola volta e conservare il file binario tra le ricompilazioni.

Non sono sicuro del perché dovresti preoccuparti? Le risorse di cui stiamo parlando sono comparativamente minime. (6 MB per l’intero repository dopo il make contro i gigabyte del forum?). Clona l’intero repository, poi compila solo dfrotz. Forse è leggermente sprecone, ma la semplicità e la ripetibilità sono più importanti, secondo me. Potrei entrare nei dettagli ed eseguire un clone parziale, ma renderebbe lo script di build più complesso e meno robusto. Ne varrebbe la pena? Sentiti libero di suggerire un’ottimizzazione. Tutto questo viene eseguito all’interno del container, quindi verrà pulito ogni volta che il container viene ricreato.

Sto solo cercando di ottimizzare per il mio server piccolo, non ti sto chiedendo di modificare l’installazione generale.

1 Mi Piace

Questo è un plugin davvero figo! Mi ricorda un “classico” videogioco creato anni fa (ho dimenticato il nome).

3 Mi Piace

È un’ottima idea per una futura ottimizzazione, purché riesca a mantenerla semplice e robusta. Grazie!

1 Mi Piace

Sì, ci sono molti classici giocabili. Di più nel link del post originale.

2 Mi Piace

AGGIORNAMENTO IMPORTANTE: :tada: :kiwi_fruit:

(Questo ha richiesto mesi di lavoro occasionale sullo sfondo e coordinamento con il team di Frotz).

Introduzione del supporto per colori e testo monospaziato nelle storie

Questo grande aggiornamento include una serie di miglioramenti:

  • AGGIUNTO supporto per la formattazione dei colori e per il testo monospaziato
  • MIGLIORATE le impostazioni semplificate: non è più necessaria la calibrazione di intestazione e piè di pagina, basta indicare il titolo desiderato e il file della storia, evviva!
  • MIGLIORATO l’uso del gem Open3 per i comandi di sistema, riducendo il rischio di abusi/vulnerabilità.
  • MIGLIORATA l’interazione interna con la riga di comando per eliminare la necessità di file di stream; ora gestisce meglio le richieste “più” o “premi un tasto”

ORA È OBBLIGATORIO il plugin Discourse BBCode!!

Ciò ha richiesto la collaborazione del manutentore di Frotz, David Griffiths, e di uno dei membri molto attivi di quella comunità, Borg323, che ha scritto le estensioni BBCode conformi allo standard BBCode di Discourse. Moltissimi ringraziamenti a loro! Abbiamo dovuto essere un po’ creativi per far funzionare il testo monospaziato, ma la soluzione è davvero ottima!

Alcuni esempi del nuovo formato (non ho testato completamente queste storie, sono solo esempi di formattazione)

e notate la bussola colorata qui:

PROBLEMI NOTI: Ci sono molti giochi che non funzionano a causa della natura dei loro protocolli di richiesta e risposta. Se una fase del gioco non porta a un prompt in cui è possibile salvare (ignorando i prompt “premi un tasto” o “più”, che dovrebbero essere gestiti), la storia non funzionerà. Ad esempio, in Act of Murder (grande gioco!), la signora alla porta chiede se sei un poliziotto. Purtroppo questo è uno stato del gioco in cui non è possibile salvare, quindi non soddisfa questo requisito e non vedo come potremmo farlo funzionare.

Ci sono probabilmente giochi che ora sono compatibili con Discourse Frotz ma prima non lo erano… fate pure delle prove, ma tenete presente la limitazione sopra!

Fatemelo sapere se avete problemi a far funzionare questo aggiornamento e affinerò le istruzioni come necessario.

8 Mi Piace

Un promemoria: puoi utilizzare le scorciatoie da tastiera per migliorare la tua esperienza con questo plugin:

  • Shift-R per rispondere al bot

  • Ctrl-Invio per inviare la tua prossima mossa

(Scorciatoie da tastiera standard predefinite).

5 Mi Piace

Ciao Robert!
Finalmente ho avuto tempo di andare oltre, finora tutto bene, ha funzionato subito in produzione :+1:

Stranamente frotz non riesce a rispondere ai messaggi privati a meno che non lo imposti anche in una categoria :thinking:
Prossimo passo: giocare :grinning_face_with_smiling_eyes:

1 Mi Piace

Grazie per la segnalazione!

Ho già provveduto a correggere il problema: FIX: behaviour of private messages playing permission setting · merefield/discourse-frotz@34b022e · GitHub

NTS: bisogna aggiungere alcuni test unitari!

2 Mi Piace

Ho provato ad aggiungere :grin: in una fonte,

sarà divertente!

1 Mi Piace