Class: BCDice::GameSystem::Alsetto

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

Constant Summary collapse

ID =

ゲームシステムの識別子

'Alsetto'
NAME =

ゲームシステム名

'詩片のアルセット'
SORT_KEY =

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

'うたかたのあるせつと'
HELP_MESSAGE =

ダイスボットの使い方

<<~MESSAGETEXT
  ・成功判定:nAL[m]    ・トライアンフ無し:nALC[m]
  ・命中判定:nAL[m]*p   ・トライアンフ無し:nALC[m]*p
  ・命中判定(ガンスリンガーの根源詩):nALG[m]*p
  []内は省略可能。

  ALコマンドはトライアンフの分だけ、自動で振り足し処理を行います。
  「n」でダイス数を指定。
  「m」で目標値を指定。省略時は、デフォルトの「3」が使用されます。
  「p」で攻撃力を指定。「*」は「x」でも可。
  攻撃力指定で命中判定となり、成功数ではなく、ダメージを結果表示します。

  ALCコマンドはトライアンフ無しで、成功数、ダメージを結果表示します。
  ALGコマンドは「2以下」でトライアンフ処理を行います。

  【書式例】
  ・5AL → 5d6で目標値3。
  ・5ALC → 5d6で目標値3。トライアンフ無し。
  ・6AL2 → 6d6で目標値2。
  ・4AL*5 → 4d6で目標値3、攻撃力5の命中判定。
  ・7AL2x10 → 7d6で目標値2、攻撃力10の命中判定。
  ・8ALC4x5 → 8d6で目標値4、攻撃力5、トライアンフ無しの命中判定。
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) ⇒ Alsetto

Returns a new instance of Alsetto.



42
43
44
45
# File 'lib/bcdice/game_system/Alsetto.rb', line 42

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

Instance Method Details

#checkRoll(rapid, target, damage, isCritical, criticalNumber) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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
# File 'lib/bcdice/game_system/Alsetto.rb', line 71

def checkRoll(rapid, target, damage, isCritical, criticalNumber)
  totalSuccessCount = 0
  totalCriticalCount = 0
  text = ""

  rollCount = rapid

  while rollCount > 0
    diceArray = @randomizer.roll_barabara(rollCount, 6).sort
    diceText = diceArray.join(",")

    successCount = 0
    criticalCount = 0

    diceArray.each do |i|
      if i <= target
        successCount += 1
      end

      if i <= criticalNumber
        criticalCount += 1
      end
    end

    totalSuccessCount += successCount
    totalCriticalCount += 1 unless criticalCount == 0

    text += "+" unless text.empty?
    text += "#{successCount}[#{diceText}]"

    break unless isCritical

    rollCount = criticalCount
  end

  isDamage = (damage != 0)

  if isDamage
    totalDamage = totalSuccessCount * damage

    result = "(#{rapid}D6\<\=#{target}) > #{text} > Hits:#{totalSuccessCount}*#{damage}#{totalDamage}ダメージ"
  else
    result = "(#{rapid}D6\<\=#{target}) > #{text} > 成功数:#{totalSuccessCount}"
  end

  if isCritical
    result += " / #{totalCriticalCount}トライアンフ"
  end

  return result
end

#eval_game_system_specific_command(command) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/bcdice/game_system/Alsetto.rb', line 47

def eval_game_system_specific_command(command)
  # ALCコマンド:命中判定
  # ALCコマンド:成功判定
  if command =~ /(\d+)AL(C|G)?(\d+)?((x|\*)(\d+))?$/i
    rapid = Regexp.last_match(1).to_i
    isCritical = Regexp.last_match(2).nil?
    if isCritical
      criticalNumber = 1
    else
      if Regexp.last_match(2) == "G"
        isCritical = true
        criticalNumber = 2
      else
        criticalNumber = 0
      end
    end
    target = (Regexp.last_match(3) || 3).to_i
    damage = (Regexp.last_match(6) || 0).to_i
    return checkRoll(rapid, target, damage, isCritical, criticalNumber)
  end

  return nil
end