モンク DPS予想

これまでの実験で分かったことを総合し、モンクのDPSを予想するプログラムを作っている。

今のところ、チェインはファストブローとブラスティングブローのみで、通常放置でかかしを叩いた場合のみを想定している。
それでも、グロで与ダメが変わったりするので、案外作るのに苦労している。
まだ未完成で、動かすこともできていない><。けれど、「りあえず今こんな感じ」というのを載せてみる。完成までもう少しかかりそう。

FB=0.45*(1.21+0.05)      # FB発動率
BB1=0.05*(1.21+0.05)     # BB発動率
BB2=BB1+0.45             # BB発動率(FBからの発動)

DM_N  = 371
DM_FB = 824
DM_BB = 1396

CRI=0.8                  # クリ率
CRI_DM=1.5+1.0+0.07      # クリダメ増
GRO_DM= 1.0+1.2          # グロダメ増

MaxStamina = 280         # かかしの最大スタミナ

$frand=Random.new()
def occ(q)
  $frand.rand(1.0) < q
end

# 攻撃の種類を決める
def at_type(prev)
  case prev
  when :start
    return :normal
  when :normal
    return :bb if occ(BB1)
    return :fb if occ(FB)
    return :normal
  when :fb
    return :bb if occ(BB2)
    return :fb if occ(FB)
    return :normal
  when :bb
    return :fb if occ(FB)
    return :normal
  end
end

DM_Hash={:normal => DM_N, :fb => DM_FB, :bb => DM_BB}
ST_Hash={:normal => ST_N, :fb => ST_FB, :bb => ST_BB}
TM_Hash={:normal => TM_N, :fb => TM_FB, :bb => TM_BB}


def sim (max_time)
  type=:start
  stamina=MaxStamina
  gro_time=0
  time=0
  
  while time < max_time
    type=at_type(type)

    dm = DM_Hash[type]
    dm *= CRI_DM if occ(CRI)

    if time <= gro_time then   # グロ中
      dm *= GRO_DM if gro
    else                       # グロ中でない
      stamina -= ST_Hash[type]
    end

    total+=dm
    time  +=TM_Hash[type]

    if stamina < 0 then
      stamina = MaxStamina
      gro_time = time + 5      # 5秒間グロ
    end
  end
end
    
sim(60)