原神が好きなので原神でプログラミングの勉強をする その4

前回の続きです。

ダメージ = (攻撃力 × 天賦倍率 × 特殊乗算 + 実数ダメージ加算) × ダメージバフ補正 × 会心補正 × 元素反応補正 × 敵の防御補正 × 敵の元素耐性補正
原神 Wiki

前回は攻撃力の計算ができたので今回はその続きから。

天賦倍率

天賦倍率っていうのはスキルのダメージ倍率のことですね。
まずはこちらを変数に入れて準備しましょう。

const hutao_skill = genshindb.talent('胡桃')

今回は元素爆発を発動した場合についてみてみたいと思います。

> hutao_skill.combat3
{
  name'安神秘法',
  info'灼熱の魂を振り回し、広範囲に炎元素ダメージを与える。\n' +
    '敵に命中した時、胡桃のHP上限を基準に自身のHPが回復する。この効果は命中した敵1体毎に発動し、最大で5体まで効果が発動する。\n' +
    '胡桃のHPが50%以下の時、より高いダメージと回復効果を持つ。',
  description'既にこの世を去った者がまだ元気そうにしていると、往生堂は焦燥や不安に駆られる。火葬は胡桃の心を一番落ち着かせることができる手段である。そのため、彼女は焦燥すればするほど、火力が上昇する。',
  attributes: {
    labels: [
      'スキルダメージ|{param1:P}',
      '低HP時スキルダメージ|{param2:P}',
      'スキル回復量|{param3:F2P}HP上限',
      '低HP時スキル回復量|{param4:F2P}HP上限',
      'クールタイム|{param5:F1}秒',
      '元素エネルギー|{param6:I}'
    ],
    parameters: {
      param1: [Array],
      param2: [Array],
      param3: [Array],
      param4: [Array],
      param5: [Array],
      param6: [Array],
      param7: [Array]
    }
  }
}

説明を見ると、HPを回復するなどの効果はありますが、結局のところは炎ダメージが発生するだけの結構シンプルなスキルなことがわかります。
そのためスキルダメージというところだけ見れば良さそうです。

> hutao_skill.combat3.attributes.parameters.param1
[
  3.0327200889587402,  3.214319944381714,
  3.3959200382232666,  3.631999969482422,
  3.8136000633239746, 3.9951999187469482,
  4.2312798500061035,  4.467360019683838,
   4.703440189361572,  4.939519882202148,
   5.175600051879883,  5.411680221557617,
   5.647759914398193,  5.883840084075928,
   6.119919776916504
]

15個の値が入っていますが、これは天賦レベルごとの倍率のようですね。
今回は天賦レベル13(完凸)の値で計算したいと思います。なんで完凸なのかはそのうち・・・

const hutao_combat3_13 = hutao_skill.combat3.attributes.parameters.param1[12undefined
> hutao_combat3_13
5.647759914398193

今回新しく変数に入れた「hutao_skill.combat3.attributes.parameters.param1」の後ろには[12]というものがくっついています。
hutao_skill.combat3.attributes.parameters.param1は上で見たように15個の値が入ったデータなのですが、これは配列というものになります。
大体のプログラミング言語では、配列は0番から数えるため、13番目の値が欲しい場合は[12]のように書くことで1から数えて13番目の値を取り出せるわけですね。

特殊乗算

Wikiによると何やらごく一部のキャラはここに倍率がかかるようですが、胡桃には一切関係がないようなので、1倍固定でいいようです。

実数ダメージ加算

胡桃の場合、2凸していると元素スキル使用時に加算する効果があるようですが、今回は元素爆発の計算なのでなし。0になります。

ダメージバフ補正

今回計算する元素爆発は炎ダメージのため、対応するパラメータがあればボーナスがあります。

ですが残念ながら胡桃にも護摩にも炎ダメージを上昇させるものがないため、倍率は1になります。(HP減少時には発動する物はありますが今回は満タン想定なのでスルー)

会心補正

胡桃は会心ダメージおばけなのでとても重要!
キャラと武器それぞれに会心ダメージの補正があるため、それらを足し合わせます。

> hutao.stats(90).specialized
0.8840000033378601
> goma.stats(90).specialized
0.6615359517469415const crit_ratio = hutao.stats(90).specialized + goma.stats(90).specialized
undefined
> crit_ratio
1.5455359550848016

会心が起きなかった場合は倍率1、起きた場合は2.5ぐらいになることがわかりますね。

元素反応補正

今回は素ダメージを見たいのでこちらの倍率は1とします。

味方側の全パラメータが揃った

残りのパラメータは全部敵依存なので、とりあえずここまででまとめてみたいと思います。

> (hutao_goma_90_attack * hutao_combat3_13 * 1 + 0 ) * 1 * 1 * 1
4878.598011370848
> (hutao_goma_90_attack * hutao_combat3_13 * 1 + 0 ) * 1 * (1 + crit_ratio) * 1
12418.646648349706

会心が起きなかった場合は4878、発生の場合は12418となりました。

次回は敵のデータを入れて実際に発生するダメージを計算していきたいと思います。

今回までのコードまとめ

// 前回まで
const genshindb = require('genshin-db');
genshindb.setOptions({queryLanguages: ['Japanese'], resultLanguage'Japanese'})
const hutao = genshindb.characters('胡桃');
const goma = genshindb.weapons('護摩の杖');
const hutao_goma_90_attack = (hutao.stats(90).attack + goma.stats(90).attack) * (1 + 0) + 0 + 0 + (hutao.stats(90).hp * 1.2 * 0.008);

// 今回
const hutao_skill = genshindb.talent('胡桃');
const hutao_combat3_13 = hutao_skill.combat3.attributes.parameters.param1[12];
const crit_ratio = hutao.stats(90).specialized + goma.stats(90).specialized;


この記事が気に入ったらサポートをしてみませんか?