Skip to content

Latest commit

 

History

History
192 lines (119 loc) · 6.72 KB

README.md

File metadata and controls

192 lines (119 loc) · 6.72 KB

simutrans world monitor

simutransとdiscordを連携させるシステムです.simutrans OTRP v29_5以降 が必要です.

pythonプログラムとSquirrel AI Playerから成り立っています.pythonプログラムはDiscordからの入力をテキストファイルに書き出し,Squirrel側でそれを読んで処理を行う仕組みです.

導入方法

CLIの使用を前提とします.

  1. Python3(3.8以降が必要)とpipを導入し, pip install -r python/requirements.txt でライブラリを導入します.
  2. DiscordでBOTアカウントを作成し,BOTをサーバーに招待します.
    参考: https://discordpy.readthedocs.io/ja/latest/discord.html
  3. DiscordのBOT設定ページで、BOTに対して"Message Content"インテントを付与します.
    参考: https://discordpy.readthedocs.io/ja/latest/intents.html#privileged-intents
  4. python/config.template.py をコピーしてpython/config.py を作成し,BOTのアクセストークン,メッセージをやり取りするテキストチャンネルのID(Discordで確認できます),Simutransの動作ディレクトリを記入します.UTF-8を扱えるエディタで編集してください.
  5. sqai_hm_monitor ディレクトリを,Simutransの動作ディレクトリ下のai ディレクトリにコピーします.

起動方法

  1. Pythonプログラムを起動します.python ディレクトリに移動した上で, python monitor.py を実行します. このとき,Simutrans動作ディレクトリにfile_io ディレクトリが作成され,ファイルが配置されます.正常に起動すると,Discordの指定したチャンネルに,おはようさん.?をつけてなんでもいうてな. というメッセージが送信されます.
  2. Simutransを起動し,AIプレイヤーを追加します.Scripted AI'sを選択し,左側の有効化ボタンを押します.スクリプトはsqai_hm_monitor を選択してください.
    画像

Simutrans本体より先にPythonプログラムを起動するようにしてください.

使用方法

Discordの指定したチャンネルにコマンドを投げることで情報を取り出せます.

config.nut で各機能のON/OFFなどを切り替えできます.

取得コマンド系

駅の待機客を取得

書式: ?待機,<駅名>,エントリ数

例:?待機,東京駅,3

応答例:

東京駅の待機客は 51人/1216人 やね.
21人 ... 座間駅
19人 ... 山科駅
8人 ... 松本駅

指定された停車場の待機客およびその行き先を返します.エントリ数は省略可能で,デフォルト値は5です.省略形のコマンドは ?待機,<駅名> です.

プレイヤー番号一覧を取得

書式:?プレイヤー

ゲームに参加しているプレイヤー一覧と,その番号を返します.ここで返される番号は,プレイヤーを指定するコマンドで使用します.

待機客が定員オーバーしている駅を取得

書式:?赤棒,<プレイヤー番号>

例:?赤棒,1

応答例:

こく☆てつ の赤棒駅はこれや!
上平塚駅 ... 507/480人
内子西停 ... 72/64人

指定したプレイヤーに所属する停車場で,いわゆる赤棒が立っている駅とその待機客を返します.

現在の年月を取得

書式: ?時間

現在の年と月を返します.

各社の残金を取得

書式:?財務

各社の現在の残金を返します.

路線の一覧を取得

書式: ?路線,<プレイヤー番号>,<waytype (option)>

例:?路線,5?路線,10,r

応答例:

プレイヤー会社 の路線一覧(計 138 路線) 
1 : (1) 路線
2 : (2) 路線
3 : (3) 路線
4 : 江差本線 普通 江差~小勢

指定したプレイヤーの路線番号と路線名を一覧で返します.

オプションとして、表示するwaytypeを指定できます。waytypeは以下の文字で指定します。

  • s ... 自動車(wt_road)
  • r ... 鉄道(wt_rail)
  • w ... 船(wt_water)
  • m ... モノレール(wt_monorail)
  • g ... マグレブ(wt_maglev)
  • n ... ナローゲージ(wt_narrowgauge)
  • a ... 航空(wt_air)

停車駅を取得

書式: ?停車駅,<路線番号>

例:?停車駅,4

応答例:

江差本線 普通 江差~小勢 (プレイヤー会社)はこんな感じにとまるで! 
江差駅
市東駅
羽衣町駅 (久野)
鳥羽街道駅 (坂梨)

指定した路線のスケジュール上にある停車駅を順番に返します.その路線が原因で混雑している駅は太字で表示されます。

3つ目のパラメタを指定すると,路線上にある駅を利用者順でソートして返します.

書式: ?停車駅,<路線番号>,<停車場数>

例:?停車駅,4,3

応答例:

江差本線 普通 江差~小勢 (プレイヤー会社)が止まる駅で繁盛しとるんはこのへんや! 
2,5564 人 ... 江差駅
1,9037 人 ... 小勢 修道院前 駅
2513 人 ... 市東駅
ちなみに利用者数は前の月やで.

ここで,利用者とは前月の「到着」と「出発」の和です.

常時監視系

定員オーバーの駅を監視

待機客が定員オーバーの駅が発生すると,通知します.

config.nut のパラメーター:chk_overcrowded_cmd(頻度, 割合, 最低待機数))

  • 頻度 ... 月あたり何回このチェックを行うか.
  • 割合 ... 駅の定員に対して何倍の客が溜まったときに通知を行うか.
  • 最低待機数 ... 通知を行う待機客の最低値.

デッドロックした路線を監視

路線に所属する編成で,積載中ではない停止が多数発生したときに通知します.

config.nut のパラメーター:chk_stucked_cmd(頻度, 割合))

  • 頻度 ... 月あたり何回このチェックを行うか.
  • 割合 ... 路線に所属する編成のうち,どれだけの割合が停止状態になったときに通知を行うか.

機能追加方法

コマンドや常時監視タスクはかんたんに追加できるようになっています.

くわしくは, modification_guide.mdをご覧ください.

追加予定

気が向いたら.アイデアください.

変更履歴

changes.md

ソース

https://github.com/teamhimeh/simutrans_world_monitor

ライセンス

MITライセンスです.