#============================================================================== # ★ DiceRoll ver1.0 by USK #------------------------------------------------------------------------------ # ・変数やダメージ計算式で1d6のようなTRPG的記述が使用できるようになります。 #============================================================================== =begin 変数、ダメージ計算式で 5d10 のように記述すると十面ダイスを五個振った値になる という感じで、ダイスを用いたときの分布で乱数が生成されます。 =end #==============================================================================#============================================================================== # ★ DiceRoll ver 2.0 by USK #------------------------------------------------------------------------------ # ・変数やダメージ計算式で1d6のようなTRPG的記述が使用できるようになります。 #============================================================================== =begin 変数、ダメージ計算式で 5d10 のように記述すると十面ダイスを五個振った値になる という感じで、ダイスを用いたときの分布で乱数が生成されます。 ver 2.0 (式)d(式) のように記述することができます 例1 ($game_variables[1])d($game_variables[2]) 例2 (a.agi+1)d(a.atk) 例3 (n=rand 10;n+1)d(m=rand 6;m+1) *注意 (rand(10)+1)d(rand(6)+1) のような()の中に()が入るような形は認識されません。 例3のように()がいらない工夫がいります。 =end #============================================================================== # ■ #============================================================================== class RPG::UsableItem::Damage #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- alias :usk_dice_eval :eval def eval(a, b, v) temp = @formula.clone @formula.gsub!(/(\d+|\([^\(]*\))d(\d+|\([^\)]*\))/)do |match| n, m = instance_eval($1).to_i, instance_eval($2).to_i ret = 0 n.times{|i|ret += rand(m) + 1} ret.to_i.to_s end d = usk_dice_eval(a, b, v) @formula = temp d end end #============================================================================== # ■ #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def eval(val) fix = val.gsub(/(\d+|\([^\(]*\))d(\d+|\([^\)]*\))/)do |m| n, m = instance_eval($1).to_i, instance_eval($2).to_i ret = 0 n.times{|i|ret += rand(m) + 1} ret.to_i.to_s end instance_eval(fix) end end # ■ #============================================================================== class RPG::UsableItem::Damage #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- alias :usk_dice_eval :eval def eval(a, b, v) temp = @formula.clone @formula.gsub!(/(\d+)d(\d+)/)do |match| n, m = $1.to_i, $2.to_i ret = 0 n.times{|i|ret += rand(m) + 1} ret.to_s end d = usk_dice_eval(a, b, v) @formula = temp d end end #============================================================================== # ■ #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● #-------------------------------------------------------------------------- def eval(val) fix = val.gsub(/(\d+)d(\d+)/)do |m| n, m = $1.to_i, $2.to_i ret = 0 n.times{|i|ret += rand(m) + 1} ret end Kernel.eval(fix) end end