Skip to content

Instantly share code, notes, and snippets.

@ysakasin
Created February 25, 2021 11:15
Show Gist options
  • Save ysakasin/528ff8b8be69b34d90db1800d5ede166 to your computer and use it in GitHub Desktop.
Save ysakasin/528ff8b8be69b34d90db1800d5ede166 to your computer and use it in GitHub Desktop.
# frozen_string_literal: true
require "bcdice/base"
module BCDice
module GameSystem
class Template < Base
# ゲームシステムの識別子
ID = "Template"
# ゲームシステム名
NAME = "テンプレート"
# ゲームシステム名の読みがな
# ゲームシステムの表示順を制御するために設定しています。
# 特殊な法則に沿って設定するため docs/dicebot_sort_key.md を参照してください
SORT_KEY = "てんふれえと"
# ダイスボットの使い方
HELP_MESSAGE = <<~HELP
ダイスボットの使い方を書くところです。
適宜文章を置き換えてください
行頭の空白は、最も短いところに合わせて省略されます。
例えばこの行は行頭の空白が完全になくなります。
この行は最も短いところより半角スペース2個多いため、行頭に半角スペース2個が残ります。
 この行は全角スペースが行頭に残ります。
HELP
# 共通コマンドの振る舞いを変更するためのオプションを設定できます。
# 下記はデフォルト設定が書かれた状態でコメントアウトされています。
# 変更したい部分のコメントを解除して書き換えてください。
# 変更点がない場合、このメソッド全体を消しましょう。
def initialize(command)
super(command)
# @sort_add_dice = false # 加算ダイスでダイス目をソートするかどうか
# @sort_barabara_dice = false # バラバラダイスでダイス目をソートするかどうか
# @d66_sort_type = D66SortType::NO_SORT # 入れ替えの種類 詳しくはBCDice::D66SortTypeを参照すること
# @enabled_d9 = false # D9ダイスを有効にするか(ガンドッグ)で使用
# @round_type = RoundType::FLOOR # 割り算をした時の端数の扱い (FLOOR: 切り捨て, CEIL: 切り上げ, ROUND: 四捨五入)
# @sides_implicit_d = 6 # 1D のようにダイスの面数が指定されていない場合に何面ダイスにするか
# @upper_dice_reroll_threshold = nil # UpperDiceで振り足しをする出目の閾値 nilの場合デフォルト設定なし
# @reroll_dice_reroll_threshold = nil # RerollDiceで振り足しをする出目の閾値 nilの場合デフォルト設定なし
# @default_cmp_op = nil # 目標値が空欄の場合の比較演算子をシンボルで指定する (:>, :>= :<, :<=, :==, :!=)
# @default_target_number = nil # 目標値が空欄の場合の目標値 こちらだけnilにするのは想定していないので注意
# @enabled_upcase_input = true # 入力を事前に大文字化するかどうか
end
# このメソッドにコマンドの処理を記述します。
# 引数 command は文字列で、事前に小文字アルファベットは大文字に置換され、
# カッコを使った四則演算は計算して展開されています。
def eval_game_system_specific_command(command)
if command == "TT"
return roll_tt()
end
# TABLESに該当するテーブルがあれば実行してくれます。
return roll_tables(command, TABLES)
end
# このようにコマンドごとにメソッドを分けて記述するとコードの見通しがよくなります。
def roll_tt()
total = @randomizer.roll_sum(2, 6) # 2D6の合計
dice_list = @randomizer.roll_barabara(4, 10) # 4D10で合計せずに出目を配列で返す
result = Result.new("(TT) > #{total} > #{dice_list.join(',')}")
result.condition = total >= 7 # 2D6が7以上だったら成功とする
# クリティカルやファンブルも設定可能です
# result.critical = true
# result.fumble = true
# ここではResultクラスのインスタンスを戻り値としていますが、文字列を戻り値にしても動作します。
# ただし、コマンドの成否やクリティカルしたことの情報を渡すことができなくなります。
return result
end
# 表類は以下のようにして書きます
# この場合は OT で1D4のお名前表を実行できるようになります。
TABLES = {
"OT" => DiceTable::Table.new(
"お名前表",
"1D4",
[
"あかね",
"あおい",
"しろ",
"くろ",
]
),
"DUMMY" => DiceTable::Table.new(
"ダミー",
"1D2",
[
"かかし",
"デコイ",
]
),
}
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment