サーバー版のしくみ
サーバー版では、部屋ごとに置かれたサーバー(部屋のサーバー)に参加者がつながり、そこで卓の状態を持ちます。SkyWayも、トークン発行サーバーも使いません。Axe v1.68.0から使えます。
部屋のサーバーは、Cloudflare版かVercel版のどちらかで置きます。どちらでも、Axeから見て同じように動きます(選びかたはどれを置くか)。
このページでは、部屋のサーバーが参加者に何をするかを説明します。置く前に、参加者に伝えることや、決めておくことを確かめるのに使ってください。
部屋のサーバーがすること
- 参加者のWebSocketを受けて、部屋の中のやりとりを中継し、卓の状態を持ちます。全員が抜けても、しばらくは卓が残ります。
- 参加者の役割(GM・PL・見学)を決めて守ります。GMとPLは、Discordでログインして入ります。
- 裏向きのカードの表や他人宛ての秘話を、見てはいけない人には届けません。
- 部屋に置いた画像と音声を預かり、その部屋の参加者にだけ配ります。
- チャットのダイスを、サーバーの上のBCDiceで振ります。ダイス表と、4,000字を超える行は、振った人のブラウザで振ります。
部屋に入るまで
- GMがDiscordでログインして、部屋を作ります。部屋を作れるのはログインした人だけで、作った人がその部屋のGMになります。
- ほかの参加者は、部屋の一覧か、GMが渡した招待リンクから入ります。パスワードのある部屋では、パスワードを入れます。
- ログインして入った人はPLに、ログインしていない人は見学になります。
役割
| 役割 | なる人 | できること |
|---|---|---|
| GM | 部屋を作った人。GMがGMにした人。GMの招待で初めて入った人 | すべて。ほかの人の役割を変える、招待を作る |
| PL | ログインして入った人(招待やGMが変えたときを除く) | 卓のものを書く、画像と音声を置く |
| 見学 | ログインせずに入った人。GMが見学にした人。見学に切り替えた人 | 見るだけ。自分のカーソルと、見学者も話せるタブへの発言だけを書ける |
- 役割は、部屋ごと、ログインした人ごとに、サーバーが覚えます。抜けて入り直しても、同じ役割です。見学に切り替えていれば、見学のまま入ります。
- ほかの人の役割を変えられるのはGMだけです。部屋のGMが1人もいなくなる変更は断ります。
- ログインした人は、自分で見学に切り替え、元の役割に戻れます。サーバーが覚えている役割は変わらないので、GMが見学に切り替えても、部屋のGMの数はそのままです。
- ログインしていない人は、GMが選んでも見学のままです。
招待
GMは、役割の付いた招待リンクを作れます。
- 招待で決まるのは、ログインした人がその部屋に初めて入るときの役割です。前に入ったことのある人は、いまの役割のままです。
- 招待は、作ってから30日使えます。過ぎた招待で入った人は、PLになります。
- GMの招待は、作った人がいまもGMのときだけ効きます。GMを外された人が前に配ったリンクでは、PLとして入ります。
- ほかの部屋の招待は使えません。ログインしていない人は、招待があっても見学です。
部屋が消えるとき
- 部屋を作るGMがログインして作る
- 遊ぶ人が入ったり抜けたりしても続く
- 最後の1人が抜けるここから時間を数える
- 既定24時間たつそのあいだに入れば、続きから遊べる
- 部屋が消える卓の状態と、画像と音声をすべて消す
- 最後の1人が抜けてから
ROOM_RETENTION_HOURS(既定24時間)が過ぎると、部屋を一覧から外し、卓の状態と、部屋に置いた画像と音声をすべて消します。その前に誰かが入れば、消す予定は取り消します。 - 作ったまま誰も入らなかった部屋も、同じ時間で消えます。
- 部屋のGMか運営する人(→ 管理画面とBAN)が部屋を削除したときは、待たずに消し、部屋にいる人の接続を閉じます。
- 部屋のサーバーが落ちて接続が切れたときも、つながっている人を数え直し、そこから時間を数えます。
- Axeを開いたまま3時間操作しなかった人は、部屋から外します。開いたまま忘れられたタブで、部屋が残り続けないためです。Axeは「部屋に戻る」かを尋ね、戻ればそのまま続けられます。
部屋のサーバーは、卓の状態のバックアップを取りません。残したい卓は、Axeの保存で、各自の手元に保存してもらいます。続きに使うのは、GMの保存です。GM以外の人の保存には、その人に見えていなかった物が欠けた形で入ります(→ Axeの保存と読み込み)。保存した部屋のデータを新しい部屋で読み込めば、画像と音声も、その部屋にまた上がります。
画像と音声
部屋に置いた画像と音声は、部屋のサーバーが部屋ごとに預かります。これを部屋のアセットと呼びます。置き場所は、Cloudflare版ではR2、Vercel版ではVercel Blobです。
- 読めるのは、その部屋の席(GM・PL・見学)だけです。部屋に入っていない人は、ファイルの名前や部屋の鍵を知っていても読めません。部屋を抜けた人が読めるのは、抜けてから長くて15分です。
- 置けるのは、その部屋のGMとPLだけです。部屋から消せるのは、その部屋のGMだけです。
- 部屋と一緒に消えます(→ 部屋が消えるとき)。部屋が続いているあいだは、部屋のGMか運営する人が消したときだけ消えます。
- 名前は、中身のSHA-256です。同じ部屋の中なら、同じものは何度上げても1つしか置かれません。部屋が違えば、同じ中身でも別々に置きます。
受け付ける形式と大きさは、次のとおりです。
| 種類 | 形式 | 大きさの上限 |
|---|---|---|
| 画像 | PNG・JPEG・GIF・BMP・WebP・AVIF・HEIC・SVG | 2MiB |
| 音声 | MP3・WAV・Ogg・FLAC・M4A・AAC | 10MiB |
- 形式は、ファイルの中身の先頭で見分けます。動画(MP4やMOV)は受け付けません。
- 部屋のアセットに置けなかったもの(形式が違う、大きすぎる)は、持っている人から、部屋のサーバーの中継で配ります。遊ぶのに困ることはありません。
- Vercel版では、4,000,000バイトを超える音声を、AxeがVercel Blobへ直接上げます。
画像と音声のAPIは、部屋のサーバーのAPIにあります。
見えない情報
SkyWay版では、裏向きのカードの表や他人宛ての秘話も、データとしては全員のブラウザに届いていて、画面に出さないだけでした。サーバー版では、見てはいけない人には、そもそも届けません。Axeを改造したり、ブラウザの開発者ツールで通信をのぞいたりしても、届いていないものは見えません。
| もの | 届けない相手と、届けないもの |
|---|---|
| 裏向きのカード | 表が見えない人(覗いておらず、自分の手札でもない人)には、表の絵を指すデータ・名前・表の文字・詳細を届けない。GMには届ける |
| 秘話 | 宛先と送り主のほかには届けない。Axeと同じく、GMにも届けない |
| シークレットダイス | 振った人とGMのほかには、結果の文面と出目を空にして届ける。振った人かGMが公開すると、全員に届く |
| 持ち主のいるダイス | 持ち主とGMのほかには、出目と名前を空にして届ける |
| 公開を絞ったメモ | 見えない人には、題と本文を伏せて届ける |
| PLや見学に見せないタブ | その役割の人には、そのタブの発言を届けない |
| シナリオテキスト | GMのほかには届けない |
見え方は、ログインした人のユーザーIDで決まります。ログインしていない人は、ログインした人のユーザーIDを名乗れないので、ログインした人になりすまして手札や秘話をのぞくことはできません。ただし、ログインしていない見学者どうしは互いのユーザーIDを名乗れます。また、SkyWay版の卓を読み込んだ部屋にも例外があります(→ 安全のしくみ)。GMでない人は、ものを書き換えて、自分に見えるものを増やすこともできません。ただし、PLは山札やほかの人の手札から引いたカードの表を見てから、元へ戻せます。山札のシャッフルも切った人のブラウザで行うので、一度見たカードは改造したAxeなら追えます(→ 安全のしくみ)。シーンとシナリオテキストは、GMのほかには作ることも、書き換えることも、消すこともできません。
カードをめくる、手札に入れる、秘話の宛先を変える、役割が変わる、などで見え方が変わると、見えるようになった人に渡し、見えなくなった人の手元から外させます。
わざと隠さないもの
次のものは、隠すとプレイヤーの画面で動くしくみが働かなくなるので、これまでどおり全員に届けます(画面には出しません)。そのため、改造したAxeなら、これらの中身を読めます。
- GMにだけ見せるスイッチと地形:罠は駒を動かした人の画面で発動し、視界もその人の画面で計算しています。プレイヤーの手元に無いと、プレイヤーの駒で罠が動かず、視界も遮られません。
- GMにだけ見せるエフェクト:使った人が識別子だけを送り、各自の画面が手元のエフェクトを引いて描きます。届けないと、GMが使ったエフェクトがプレイヤーの画面に出ません。
- シーン:盤面のスイッチは押した人の画面でシーンを反映するので、プレイヤーの手元にもシーンが要ります。シーンの名前と、反映したときにチャットへ出す文も届きます。書き換えられるのはGMだけです。
- キャラクターの詳細:公開を絞ったキャラクターでも、プレイヤーがリソースのコマンド(
:HP-5など)でHPを減らすときに、手元の値を使います。 - 名前を隠したキャラクターと、持ち主のいないダイスの名前:名前は、各自の画面で隠しています。
- スイッチで伏せた物:卓に描かない置き場に移るだけで、中身は全員に届きます。スイッチで見せるときに、押した人の画面が元の場所に戻すためです。
- 視界と霧:サーバーでは計算しません。
- 画像と音声のファイル:部屋の席ならだれでも受け取れます。伏せたカードで隠すのは「どのカードの表がどの絵か」だけで、絵のファイルは見学者を含めて全員の手元に届きます。GMが「秘匿」にした画像も、選ぶ一覧に出ないだけです。
- カードとダイスの公開範囲で絞った詳細:Axeは範囲の外の人にシートを開かせませんが、サーバーはこの範囲を見ずに届けます(メモの公開範囲だけを見ます)。
上限
部屋のサーバーには、次の上限があります。
| 項目 | 上限 |
|---|---|
| 1つの部屋に入れる人数 | 32人 |
| 操作せずにいられる時間 | 3時間 |
| 部屋の名前 | 1〜255文字 |
| パスワード | 64文字まで |
| 部屋を作る・削除する・入る | 送信元ごとに、合わせて1分30回まで |
| 新しく画像と音声を置く | 送信元ごとに1分100件まで |
| サーバーで振るダイス | 1つの接続から10秒に20回まで |
ふつうに遊んでいて当たる上限ではありません。
次に読むもの
- 置く:Discordのアプリを作る、Cloudflareに置く、Vercelに置く
- 設定を知る:設定項目
- 運営する:運用、安全のしくみ、運営の方針