7/22に実装された覚醒千里行〜試練の道〜ヒイラギどうじ編のめったに枠「モヒカント」のこころ性能、他のこころ装備時にダメージ率がアップするという新機軸です。これは悩みました。過去にも天候や時間によりダメージ率がアップするこころが実装された際、データとロジックの追加で汎用的に動作するよう対応してきました。例えば、サンライズスライムは、[晴れ]イオ属性斬撃・体技ダメージ+3%、という新要素を実装して初登場しましたが、その後に実装されたテンタクロスの[雨]斬撃・体技ダメージ+12%などにも対応できるように処理したコードがこちらです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
’2022/04/29 時間対応 天候と時間(夜間)のみが[]で括られている前提、[夜間]が二つあっても、発動効果セルには一つに括る必要あり ’ 天候と時間の同時指定はない前提 If 天候 = "晴れ" Or 天候 = "曇り" Or 天候 = "雨" Or 天候 = "雪" Or 時間 = "夜間" Then Dim 発動効果内容 Dim 天候時間DU条件 Dim 天候時間DU種類 Dim 天候時間DU率 For i = 1 To MN 発動効果内容 = D(i, Application.Match("発動効果", 列名, 0)) ’[がない場合は天候、時間なしと判定 If InStr(発動効果内容, "[") > 0 Then ’天候、時間効果がある場合、発動効果を分解 天候時間DU条件 = Mid(発動効果内容, InStr(発動効果内容, "["), InStrRev(発動効果内容, "]") - InStr(発動効果内容, "[") + 1) 天候時間DU種類 = Mid(発動効果内容, InStrRev(発動効果内容, "]") + 1, InStr(発動効果内容, "+") - InStrRev(発動効果内容, "]") - 1) 天候時間DU率 = Mid(発動効果内容, InStr(発動効果内容, "+") + 1, InStr(発動効果内容, "%") - InStr(発動効果内容, "+") - 1) ’指定された天候条件が合致した場合 If ((天候 = "晴れ" Or 天候 = "曇り" Or 天候 = "雨" Or 天候 = "雪") And InStr(天候時間DU条件, 天候) > 0) Or _ (時間 = "夜間" And InStr(天候時間DU条件, 時間) > 0) Then ’こころデータ配列に天候や時間効果のDU率を加算 斬撃・体技の場合のみ、斬撃と体技それぞれを加算 If InStr(天候時間DU種類, "斬撃・体技") > 0 Then D(i, Application.Match(Replace(天候時間DU種類, "斬撃・", ""), 列名, 0)) = D(i, Application.Match(Replace(天候時間DU種類, "斬撃・", ""), 列名, 0)) + 天候時間DU率 / 100 D(i, Application.Match(Replace(天候時間DU種類, "・体技", ""), 列名, 0)) = D(i, Application.Match(Replace(天候時間DU種類, "・体技", ""), 列名, 0)) + 天候時間DU率 / 100 Else D(i, Application.Match(天候時間DU種類, 列名, 0)) = D(i, Application.Match(天候時間DU種類, 列名, 0)) + 天候時間DU率 / 100 End If End If End If Next i End If |
[晴れ]イオ属性斬撃・体技ダメージ+3%を 晴れ 、イオ属性斬撃・体技ダメージ 、3%に分解して、ユーザーがTopシートで指定した天候や時間と一致した場合は、ダメージアップ率のテーブルを加算して書き換える、というロジックです。
今回のモヒカントは困りました。他のこころに依存するので、このように事前にテーブルを書き換えることでは対応できず、こころセットが確定したタイミングで他のこころを見て、バッファロンが居ればダメージ率を加算する、というロジックにしなければなりません。
ということで、こころが決まったタイミングで以下の処理を行うこととしました。いわゆる例外処理です。ワークシートに設定されたデータだけで汎用的に動作するようにしたかったのですが、今回は仕方ないかなと思っています。
1 2 3 4 5 6 7 8 9 10 |
'2022/07/23 モヒカントとバッファロンのセット対応 h = 0 For i5 = 1 To KWS If D(Koko(i5), 1) = "モヒカント" Then h = h + 1 If D(Koko(i5), 1) = "バッファロン" Then h = h + 1 Next i5 If h = 2 Then If 種類 = "体技" Or 種類 = "攻魔体技" Then DUp = DUp + 0.1 If かいしん暴走C > 0 Then KBup = KBup + 0.05 End If |
こころ枠の数(4だけでなく低コスト制限の場合、1,2,3もあり得る)だけループして、モヒカントかバッファロンが居た場合は、変数hを加算、hが2となった場合は抱き合わせ状態なので、体技の場合のみダメージアップ率を加算、かいしん暴走を考慮する設定になっていた場合は、かいしん暴走率を加算することとしました。今後、別の抱き合わせこころが登場した際は、この部分にコード追加することになります。
ちなみにかいしん暴走Cは、こんな風にかいしん率アップや暴走率アップのカラムを指定していて、かいしんが発生しないブレスの時は0となるようになっています。
1 2 3 4 5 6 7 |
If 種類 = "ブレス" Or かいしん暴走 <> "考慮する" Then かいしん暴走C = 0 ElseIf 種類 = "じゅもん" Then かいしん暴走C = Application.Match("魔力の暴走率", 列名, 0) Else かいしん暴走C = Application.Match("会心率", 列名, 0) End If |
火力計算を実行してみた結果がこちら。
レンジャーで無属性体技の「百獣の暗黒鞭(メタル切り裂き打ち)」で火力計算してみたら2匹セットが上位55位を独占、しっかりと反映していました。これ、火力だけでなくHP/みのまもりも大幅にアップ!実用的ですね。バッファロンとモヒカントのこころS、ゲットしたいものです。
コメント
[…] モヒカントのバッファロン抱き合わせ対応7/22に実装された覚醒千里行〜試… […]