Class: BCDice::GameSystem::Postman

Inherits:
Base
  • Object
show all
Defined in:
lib/bcdice/game_system/Postman.rb

Constant Summary collapse

ID =

ゲームシステムの識別子

'Postman'
NAME =

ゲームシステム名

'壊れた世界のポストマン'
SORT_KEY =

ゲームシステム名の読みがな

'こわれたせかいのほすとまん'
HELP_MESSAGE =

ダイスボットの使い方

<<~MESSAGETEXT
  ◆判定:[n]PO[+-a][> or >= or @X]  []内省略可。

  達成値と判定の成否、クリティカル、ファンブルを結果表示します。
  「n」でダイス数を指定。省略時は2D。
  「+-a」で達成値への修正を指定。「+2+1-4」のような複数回指定可。
  「>X」「>=X」「@X」で難易度を指定可。
  「>X」は達成値>難易度、「>=X」「@X」は達成値>=難易度で判定します。

  【書式例】
  3PO+2-1 → 3Dで達成値修正+1の判定。達成値のみ表示。
  PO@5+2 → 2Dで目標値7の判定。判定の成否と達成値を表示。
  4PO-2+1>7+2 → 4Dで達成値修正-1、目標値9(同値は失敗)の判定。


  ◆天候チェック:WEA[n]  []内省略可。

  天候チェック表を参照します。
  「n」を指定すると、指定した結果を表示します。(【幸運点】使用時用)


  ◆自由行動シチュエーション表:FRE
MESSAGETEXT

Instance Attribute Summary

Attributes inherited from Base

#d66_sort_type, #default_cmp_op, #default_target_number, #randomizer, #reroll_dice_reroll_threshold, #round_type, #sides_implicit_d, #upper_dice_reroll_threshold

Instance Method Summary collapse

Methods inherited from Base

#change_text, #check_result, command_pattern, #enable_debug, #enabled_d9?, eval, #eval, #grich_text, prefixes_pattern, register_prefix, register_prefix_from_super_class, #sort_add_dice?, #sort_barabara_dice?

Methods included from Translate

#translate

Constructor Details

#initialize(command) ⇒ Postman

Returns a new instance of Postman.



46
47
48
49
# File 'lib/bcdice/game_system/Postman.rb', line 46

def initialize(command)
  super(command)
  @sort_add_dice = true # ダイスのソート有
end

Instance Method Details

#checkRoll(diceCount, modify, type, target) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/bcdice/game_system/Postman.rb', line 88

def checkRoll(diceCount, modify, type, target)
  diceArray = @randomizer.roll_barabara(diceCount, 6).sort
  dice = diceArray.sum()
  diceText = diceArray.join(",")

  dice2 = diceArray[-2] + diceArray[-1]
  diceText2 = "#{diceArray[-2]},#{diceArray[-1]}"
  criticalCount = diceArray.count(6)

  if modify != 0
    modifyText = ''
    modifyText = "+" if modify > 0
    modifyText += modify.to_s
  end

  result = dice2 + modify

  if type != ''
    resultText = " 【失敗】"
    operatorText = ">"
    if type == '>'
      resultText = " 【成功】" if result > target
    else
      operatorText += "="
      resultText = " 【成功】" if result >= target
    end
  end

  if criticalCount >= 2
    resultText = " 【成功】(クリティカル)"
  elsif dice == diceCount
    resultText = " 【失敗】(ファンブル)"
  end

  text = "#{diceCount}D6(#{diceText})#{modifyText}#{dice2}(#{diceText2})#{modifyText} = 達成値:#{result}"
  text += "#{operatorText}#{target} " if target > 0
  text += resultText.to_s

  return text
end

#eval_game_system_specific_command(command) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/bcdice/game_system/Postman.rb', line 51

def eval_game_system_specific_command(command)
  text =
    case command.upcase

    when /(\d+)?PO(\d+)?(([+-]\d+)*)?((>|>=|@)(\d+)(([+-]\d+)*)?)?/i
      diceCount = (Regexp.last_match(1) || 2).to_i
      diceCount = 2 if diceCount < 2

      modify = (Regexp.last_match(2) || 0).to_i
      modifyAddString = Regexp.last_match(3) || ''

      type = Regexp.last_match(6) || ''
      target = (Regexp.last_match(7) || 0).to_i
      targetAddString = Regexp.last_match(8) || ''

      modify_list = modifyAddString.scan(/[+-]\d+/)
      modify_list.each { |i| modify += i.to_i }

      if target != 0
        target_list = targetAddString.scan(/[+-]\d+/)
        target_list.each { |j| target += j.to_i }
      end

      checkRoll(diceCount, modify, type, target)

    when /WEA(\d+)?/i
      roc = (Regexp.last_match(1) || 0).to_i
      get_weather_table(roc)

    when 'FRE'
      get_free_situation_table

    end

  return text
end

#get_free_situation_tableObject



161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# File 'lib/bcdice/game_system/Postman.rb', line 161

def get_free_situation_table()
  name = "自由行動シチュエーション表"
  table = [
    [2, '何をするでもなく、霞がかったような夜空を見上げる。ふと隣に目を向ければ、彼/彼女が居た。彼/彼女は、こうなる前の夜空を知っているのだろうか。'],
    [3, '夢を見た。大戦の最中、街が、人が、世界が焼けていく悪夢を。追い立てられるようにして目を覚ますと、彼/彼女が君を見ていた。 ……もしかして、自分はよほどうなされていたのだろうか。'],
    [4, '周囲で見つけたガラクタを使って、ちょっとしたビックリ玩具を作ってみた。「彼/ 彼女」にコイツをけしかけたら、どんな反応をするだろうか?'],
    [5, '使えそうなものがないか探していると、カタンと物音がして何かが落ちた。拾い上げてみたそれは、かつてここで生活していた誰かの名残(写真、家具、玩具等)だった。'],
    [6, 'テントの中で夜を過ごしていると、ふと彼/彼女と話したくてたまらない気持ちになった。言ってしまえば、夜の静けさに寂しさを覚えてしまったのだ。'],
    [7, 'ここまでの配達の記録をつけていたら、背後から視線を感じる……! もしや、彼/彼女に覗かれている……!?'],
    [8, '周囲を探索していると、君一人では手の届かないところに金属製の箱か何かがあることに気づいた。彼/彼女に手伝ってもらえば、取れるだろうか……?'],
    [9, '朝まではまだしばらくあるというのに、目が覚めてしまった。二度寝しようにも寝付けずに居ると、隣でもぞもぞと動く気配がする。彼/彼女も、どうやら同じらしい。'],
    [10, '他愛のない話をするうちに、君は彼/彼女に問いかけていた。「何故、ポストマンになろうと思ったのか」 ……そういえば、君自身はどうだったろうか。'],
    [11, '保存食にありつこうとしたその時、君は気づいた。一匹のネズミが、彼/彼女の荷物の中に潜り込もうとしている。彼/彼女は気づいていないが、このままでは食料が危ない!'],
    [12, 'テントを設営し、落ち着いた頃にふと気づく。 ……身体が熱い。少し、だるさもあるような気もする。大したことはないと思うが、彼/彼女に相談しておいた方がいいだろうか。']
  ]
  dice_list = @randomizer.roll_barabara(2, 6)
  dice = dice_list.sum()
  diceText = dice_list.join(",")
  tableText = get_table_by_number(dice, table)
  text = "#{name}(#{diceText}) > #{dice}#{tableText}"
  return text
end

#get_weather_table(roc) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/bcdice/game_system/Postman.rb', line 129

def get_weather_table(roc)
  name = "天候チェック"
  table = [
    [2, '大雨と強風。探索判定の難易度に+4。'],
    [3, '風が強い1日になりそう。探索判定の難易度に+2。'],
    [4, '晴れ。特になし。'],
    [5, '夜の間の雨でぬかるむ。探索判定の難易度に+2。'],
    [6, 'それなりの雨足。探索判定の難易度に+2。'],
    [7, '晴れ。特になし。'],
    [8, '天気は大荒れ。探索判定の難易度に+4。'],
    [9, '小雨が降る。探索判定の難易度に+1。'],
    [10, 'それなりの雨足。探索判定の難易度に+2。'],
    [11, '晴れ。特になし。'],
    [12, '風が強い1日になりそう。探索判定の難易度に+2。']
  ]

  if roc == 0
    dice_list = @randomizer.roll_barabara(2, 6)
    dice = dice_list.sum()
    diceText = dice_list.join(",")
  else
    roc = 2 if roc < 2
    roc = 12 if roc > 12
    dice = roc
    diceText = "Choice:#{roc}"
  end

  tableText = get_table_by_number(dice, table)
  text = "#{name}(#{diceText}) > #{dice}#{tableText}"
  return text
end