つい先日、数ヶ月ぶりにRPGツクールVXAを開いた。以前から導入してみたかった機能、「ドラクエⅩ風のパッシブスキル」の目処が立ったためだ。厳密には少々違うスクリプトであり、利用者側で改造、二次公開が問題無いと書かれてあったので、稚拙な変更ではあるが、作り方を載せてみようと思う。
スクリプト名は「条件付きパッシブスキル」、製作者「白雪レイカ」様。FSM掲示板にて発見。このスクリプトでは、指定した武器や防具を装備中の時、あるいは自身の現在HP、ステート等を条件としたパッシブスキルが実現可能となる。パッシブスキルとして利用するは、スキル及び武器の2つとなる。スキルのメモ欄に、○○の状態の時、武器IDxxを装備している状態にする、というタグを書き込む。
また、今回こちらで探していたのは、冒頭で述べた通り、ドラクエⅩ形式のパッシブスキルであり、その内容は、「ヤリ装備時に攻撃力+20」や「ツメ装備時に会心率+2%」といったもの。つまり、無改造の状態でも、このスクリプトを導入することで実現できる。しかし、その「ヤリ」に属する武器が100個あったら、或いは「ツメ」が200種類用意さえていたらどうだろう。武器IDでの指定は非常に厄介となり、武器の数やデータベース上の位置を変更することに苦心するはず。
そこで、武器IDでの指定を改変し、武器タイプで判別させることにした。例えばスキルのメモに「武器 2,5」と書いたとすれば、武器タイプ2及び武器タイプ5の武器を装備している際に効果が発揮される。これまで何回、武器と連呼しただろうか。とにかく、これでデータベース上で武器を変更したとて、スキルのメモ欄まで変更する必要が無くなる。
自分で使用しない機能は削り落としてしまうため、スクリプトの何行目を改変したのか不明。該当スクリプトの「class Game_Actor」内、「特殊パッシブスキルの発動条件を満たしているかチェック」の中に、条件分岐「case key」がある。その中、「when :weapon」の項目だ。
when :weapon
if self.weapons[0] == nil
conditions[:weapon] = false
else
conditions[:weapon] = value.all?{|w| self.weapons[0].wtype_id == value[0] or self.weapons[0].wtype_id == value[1]}
end
相変わらずスマートな記述が全然分からないため、いかにも手作り感が溢れているだろうが解説したい。条件、武器の場合に、もしも自身の武器[0]が何も無い状態か否かを加える。私の書き方だと、素手の状態でエラーを吐いてしまうために必要な処理だ。ちなみに何度か出てくる武器[0]とは、装備中武器のことで、二刀流の場合だと、武器[0]と武器[1]になる。上記で二刀流の件が考慮されていないのは、私が二刀流システムを利用する予定が無いためである。
そして、自身が何らかの武器を装備している場合の条件(else)にて、全武器の武器タイプID要素[0]と一致する時にTrueを返す。つまり、メモ欄で指定した武器タイプと、装備中武器の武器タイプが一致していれば、パッシブスキルの発動条件を満たすという意味だ。これまでの例として出した「武器 2,5」を用いると、2の値が要素[0]、5の値が要素[1]である。であるからして、上述の改変では武器タイプを同時に指定できるのは2つまでとなる。
本当に、スマートな記述を教授願いたいものだ。
ところでドラクエのほうは、若干飽きてきたのと、カジノコインが1万~3万くらいを行ったり来たりで全然増えずやきもきしている。これまでに溶かした総ゴールドは1000万弱、交換した神秘のカードは20枚くらいだろうか。ちなみにルーレットが好きなので、スロットやポーカーには手をつけていない。VIPでちまちま遊んでいるが、カジノレイドの討伐成功したことが一度も無い。なんだかなぁ。
スクリプト名は「条件付きパッシブスキル」、製作者「白雪レイカ」様。FSM掲示板にて発見。このスクリプトでは、指定した武器や防具を装備中の時、あるいは自身の現在HP、ステート等を条件としたパッシブスキルが実現可能となる。パッシブスキルとして利用するは、スキル及び武器の2つとなる。スキルのメモ欄に、○○の状態の時、武器IDxxを装備している状態にする、というタグを書き込む。
また、今回こちらで探していたのは、冒頭で述べた通り、ドラクエⅩ形式のパッシブスキルであり、その内容は、「ヤリ装備時に攻撃力+20」や「ツメ装備時に会心率+2%」といったもの。つまり、無改造の状態でも、このスクリプトを導入することで実現できる。しかし、その「ヤリ」に属する武器が100個あったら、或いは「ツメ」が200種類用意さえていたらどうだろう。武器IDでの指定は非常に厄介となり、武器の数やデータベース上の位置を変更することに苦心するはず。
そこで、武器IDでの指定を改変し、武器タイプで判別させることにした。例えばスキルのメモに「武器 2,5」と書いたとすれば、武器タイプ2及び武器タイプ5の武器を装備している際に効果が発揮される。これまで何回、武器と連呼しただろうか。とにかく、これでデータベース上で武器を変更したとて、スキルのメモ欄まで変更する必要が無くなる。
自分で使用しない機能は削り落としてしまうため、スクリプトの何行目を改変したのか不明。該当スクリプトの「class Game_Actor」内、「特殊パッシブスキルの発動条件を満たしているかチェック」の中に、条件分岐「case key」がある。その中、「when :weapon」の項目だ。
when :weapon
if self.weapons[0] == nil
conditions[:weapon] = false
else
conditions[:weapon] = value.all?{|w| self.weapons[0].wtype_id == value[0] or self.weapons[0].wtype_id == value[1]}
end
相変わらずスマートな記述が全然分からないため、いかにも手作り感が溢れているだろうが解説したい。条件、武器の場合に、もしも自身の武器[0]が何も無い状態か否かを加える。私の書き方だと、素手の状態でエラーを吐いてしまうために必要な処理だ。ちなみに何度か出てくる武器[0]とは、装備中武器のことで、二刀流の場合だと、武器[0]と武器[1]になる。上記で二刀流の件が考慮されていないのは、私が二刀流システムを利用する予定が無いためである。
そして、自身が何らかの武器を装備している場合の条件(else)にて、全武器の武器タイプID要素[0]と一致する時にTrueを返す。つまり、メモ欄で指定した武器タイプと、装備中武器の武器タイプが一致していれば、パッシブスキルの発動条件を満たすという意味だ。これまでの例として出した「武器 2,5」を用いると、2の値が要素[0]、5の値が要素[1]である。であるからして、上述の改変では武器タイプを同時に指定できるのは2つまでとなる。
本当に、スマートな記述を教授願いたいものだ。
ところでドラクエのほうは、若干飽きてきたのと、カジノコインが1万~3万くらいを行ったり来たりで全然増えずやきもきしている。これまでに溶かした総ゴールドは1000万弱、交換した神秘のカードは20枚くらいだろうか。ちなみにルーレットが好きなので、スロットやポーカーには手をつけていない。VIPでちまちま遊んでいるが、カジノレイドの討伐成功したことが一度も無い。なんだかなぁ。
※コメント投稿者のブログIDはブログ作成者のみに通知されます