# Discourse Frotz 🧙

**URL:** <https://meta.discourse.org/t/discourse-frotz/140617>\
**Category:** Plugin\
**Created:** [2020年二月4日 18:42 UTC](https://meta.discourse.org/t/discourse-frotz/140617 "2020-02-04T18:42:35Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [2020年二月4日 18:42 UTC](https://meta.discourse.org/t/discourse-frotz/140617/1 "2020-02-04T18:42:35Z")

</div>

哇，一个新插件！🎉 不过这个稍微没那么严肃。🎮

 ![image](https://global.discourse-cdn.com/meta/original/3X/c/7/c757e22262f4bb2c349ebb88ba08f313919fdd53.jpeg)

## Discourse Frotz

[![](https://global.discourse-cdn.com/meta/original/3X/4/7/477f2c8c14006fa019eea94d4ba9bd95b7259412.png) ](https://global.discourse-cdn.com/meta/original/3X/4/7/477f2c8c14006fa019eea94d4ba9bd95b7259412.png)  
不再需要在每一步都@提及机器人。一旦开始游戏，只需回复它即可。

Git 仓库：[GitHub - merefield/discourse-frotz: A plugin that uses Frotz to give you an interactive fiction experience on your Discourse forum · GitHub](https://github.com/merefield/discourse-frotz)

### 它是什么

这是一个“机器人”，用于在您的 Discourse 论坛上玩互动小说（即经典文字冒险游戏），本质上是一个适配器，连接到标准且出色的 Z-machine 解释器“frotz”，其地址为 [David Griffith / frotz · GitLab](https://gitlab.com/DavidGriffith/frotz)

### 如何使用

设置会添加两个游戏，您可以在设置中添加更多游戏。

每个条目包含一个标题和故事文件的名称。

要启动交互，您需要在设置中@提及机器人。之后，只需回复他们的帖子即可。

要列出可用的游戏，您首先需要提及机器人并询问：

`@mybot list games`

这将为您提供一系列选项。

要开始游戏，请输入：

`start game x`，将 x 替换为选项编号。

如果您想切换到另一个游戏，可以这样做；插件会在每一步保存您的进度，因此您可以随时返回到第一个故事。插件为每个尝试过的用户为每个故事保存一个存档。

要继续现有游戏，请输入：

`continue game x`，将 x 替换为选项编号。

注意：完全重建将销毁所有存档文件。这是一个必要的妥协。

### 如何玩互动小说（IF）游戏？

许多“元用户”（Meta’s）可能已经习惯了这些游戏。对于不太熟悉的人，请查看此速查表：[Play Some Interactive Fiction](https://pr-if.org/doc/play-if-card/play-if-card.html)

### 设置

#### 创建机器人用户

（抱歉，自动化此操作已在我的计划中！）

在 ssh 会话中，进入您的容器并打开 rails 控制台：

```plaintext
./launcher enter app
rails c

```

然后执行以下操作：

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

```

您的新机器人随后将在 UI 中可用，可以进行设置。通过管理按钮进入用户的设置，并关闭\_所有\_邮件发送。根据需要更新头像。

#### 安装 Discourse Frotz

#### 更新您的 app.yml

这比通常的插件更具侵入性。

将以下内容添加到 app.yml 中：

```plaintext
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

```

放在您的其他插件条目之前。

您现在还需要添加 [Discourse BBCode 插件](https://meta.discourse.org/t/discourse-bbcode/65425)！！

使用常规的 `./launcher rebuild app` 进行重建。

现在进入插件设置，选择您之前添加的机器人用户：

![image](https://cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com/meta/original/3X/8/9/8903133f611d6700d839ec1e89777aa009c1907d.png)

### 故事

您会注意到我包含了几则故事。您可以在 [https://ifdb.tads.org/](https://ifdb.tads.org/) 找到更多。  
_但是，请注意这里的速率限制！_ 从同一位置获取过多故事可能会导致错误。

另外请注意，这些故事并未托管在受 https 保护的服务器上（唉）。

如果您坚持要加载更多内容，请将它们添加到 app.yml 中。您也可以从命令行提示符手动添加，但请注意这些内容将在下一次完全重建时被清除。

### 为私人消息启用 FrotzBot（建议谨慎）

允许用户私下进行游戏，但使用过程将不够透明。如果您的服务器足够大，这可能不是问题。无论如何，请注意其对容量的影响。作为替代方案，鼓励用户在指定的分类中进行游戏。

![image](https://global.discourse-cdn.com/meta/original/3X/8/6/86b36a57d54afd8f2807919b5b7318fe280d3458.png)  
默认：关闭

如果未在此处启用，用户将收到一条礼貌的消息：

 ![image](https://global.discourse-cdn.com/meta/original/3X/2/1/21589be57aa462024736be717678cdb332a5f033.png)

### 按分类限制 FrotzBot

您可以将机器人限制在一个（或多个）分类中，以避免填满其他区域：

 ![image](https://global.discourse-cdn.com/meta/original/3X/d/2/d2efae9e37d886ce4f269927282c4a305b9761de.png)

### 键盘快捷键！

这对于提升“游戏”体验非常重要。您实际上只需要记住两个：

- Shift-R 回复机器人

- Ctrl-Enter 提交您的下一步操作

### 限制与注意事项

并非所有故事格式和游戏都得到支持，也不太可能得到支持。由于调用和响应协议的性质，许多游戏无法运行。由于我们是以帖子为单位进行交互，因此我们必须在每一步之后要求 Frotz 保存状态。如果游戏的某一步骤没有导致系统可以保存的提示（忽略“按任意键”或“更多”提示，这些应已处理），则该故事无法运行。例如，在《谋杀行动》（一款很棒的游戏！）中，门口的女士问您是否是警察。不幸的是，这是游戏中无法保存的状态，因此无法满足此要求，我看不出有什么方法可以让它运行。

注意：邮件列表模式与此插件完全不兼容，因此在尝试使用此插件之前，请确保\_不要\_启用此模式！

可以说，它有点浪费论坛资源，因为每一步至少需要两篇帖子。显然，使用聊天界面而不是论坛来玩这类游戏通常更合适，但您可能会争辩说，这可以用来创建攻略？😉

对于侵入性较小的解决方案，请考虑：[Turning a topic into interactive fiction ;)](https://meta.discourse.org/t/turning-a-topic-into-interactive-fiction/87885?u=merefield)

### 反馈

欢迎所有反馈！

### 致谢

本插件利用了 [David Griffith / frotz · GitLab](https://gitlab.com/DavidGriffith/frotz) 的 Frotz Z-解释器，该解释器由设置脚本克隆并“编译”。

感谢 @P16 允许我使用我们共同开发的一个闭源聊天机器人的代码片段。

---

_[View the full topic](https://meta.discourse.org/t/discourse-frotz/140617)._
