文字列で表示していた見づらい耐性表示、これをすっきりとかつ機能的に見せるべく、耐性項目別の列として、こころセットの合計%値を表示するように次のようなコードで改善を試みました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
'耐性 For j = 74 To 122 TotalV = 0 For h = 1 To 4 If Dmg(i, h) <> 0 Then 'こころが空でなければ TotalV = TotalV + d(Dmg(i, h), j) End If Next h If TotalV > 0 Then '今までに存在した耐性か判定 i2 = 1 Do '結果欄の耐性名がブランク、あるいは既に存在する場合 If Kekka2(1, i2) = "" Or Kekka2(1, i2) = Replace(列名(j), "耐性", "") Then Kekka2(1, i2) = Replace(列名(j), "耐性", "") Kekka2(r + 2, i2) = TotalV * 100 If i3 < i2 Then i3 = i2 '表示耐性最終列数 Exit Do End If i2 = i2 + 1 Loop End If Next j |
まずは、耐性一つずつ見ていきます。こころが4つあるので、それを順にみていくループで、こころが空でなければ(セットが4つではなく1~3つの場合もあるので)、当該耐性の値をToTalVに加算、ここまでは前回の文字列表示と同じです。異なるのは、その次のDoループ。TotalVが0より大きい場合、つまり耐性があった場合、その耐性項目名と耐性値を、結果一覧に表示するための配列Kekka2()に格納します。当該耐性が、既に格納済みの耐性と一致していたら、その耐性値に加算、そうでない、新しく登場した耐性値であれば、新たに耐性項目と耐性値を格納するというループです。最終的に値が0より大きい耐性がいくつあったか、変数i3に格納しています。この値は後ほどの処理、結果表示の際の列表示非表示設定で使用します。
前回の文字列表示よりコードも短くスッキリ!これで実際にうまくいったんですよ・・・やつが登場するまでは。そう、やつの名はドラゴンキッズ。
耐性が「ドラゴンゾンビへの耐性+10%」?、こんな特殊な耐性項目はありません。あるとしたら、こころ全種類の耐性項目を新設せねばならなくなり、とんでもないことです。実は、こころマクロで利用させていただいている、心の一覧データを公開されている「ドラクエウォークVIEW」さんでは、そのあたり適切に表現されいて「特定耐性」という項目を設け、その値として「ドラゴンゾンビへの耐性+10%」という文字列が表記されています。
https://dqw-view.com/kokoro/
耐性値が数字という前提で加算している次の処理において、文字列が混在することでエラーが発生してしまうのです。
1 |
otalV = TotalV + d(Dmg(i, h), j) |
可愛い顔して、おそるべし「ドラゴンキッズ」・・・・
というわけで、「ドラゴンゾンビへの耐性+10%」のような文字列から10%を取り出すことに、またこれらは「ドラゴンゾンビへの耐性+10%、ヘルジュラシックへの耐性+10%」のように複数存在することもあるので、ループで処理する必要もありました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
If IsNumeric(d(Dmg(i, h), j)) = False Then '文字列の場合%値を取り出し TSV = 0 i4 = 1 Do i4 = InStr(i4, d(Dmg(i, h), j), "+") If i4 = 0 Then Exit Do Else TSV = Val(Mid(d(Dmg(i, h), j), i4 + 1, InStr(i4, d(Dmg(i, h), j), "%") - i4)) TotalV = TotalV + TSV * 0.01 i4 = i4 + 1 End If Loop Else TotalV = TotalV + d(Dmg(i, h), j) End If |
耐性値が数字でないなら、ドラゴンキッズのようなパターンと判断し、「+」と「%」の間にある数字を探して取得してTotalVに加算、次の「%」が見つからなくなるまで繰り返すループ処理です。取り出した数字は整数となるので、0.01を乗算し%として計算できるようにしています。
今のところ、これらの特殊な特定まものに対する耐性を持つこころは「ドラゴンキッズ」と「りゅうせんし」だけでした。いやあ、良く気づけたな、これ。ということで、完成した耐性一覧はこんな感じ。
うん!スッキリ!耐性項目名をダブルクリックしてソートもできます。耐性数値表示にも対応した「こころマクロ」ダウンロードはこちらからどうぞ。
コメント