現在ツクールVXaceでゲーム制作をしております。
敵の攻撃を受けた時、その攻撃対象が防御状態(防御ステートにかかっている)だった場合、
攻撃側と防御側に特定のステートを与えるような処理を組み込みたいです。
(例:味方Aが防御ステートにかかってる状態の時、敵Bの攻撃を受けると、
敵Bはスタンのステートになり、味方Aは攻撃力がUPしたステートにかかる)
恐らく実現するとすればスクリプトをいじることになるのでしょうが、
その辺の知識や技術が足りないのでどうにも独力では実装できません。
どなたかご協力いただけないでしょうか。
防御成功時の効果について
Re: 防御成功時の効果について
まずは防御状態の判定がどうなっているか確認しましょうか。
スクリプト内を「防御」で全体検索すると、この部分が見つかるはずです。ここから、「guard?」で防御状態かどうかの判別ができるということが分かります。
さて、実際に攻撃側/防御側にステートを付加するにはどうしたら、という部分ですが、
この「防御修正の適用」内では攻撃側のデータが取得できません。
なので、スキル等を使用した際の処理を見てみましょう。今回はここを使いましょう。「item_user_effect」で全体検索をすると、こちらが出てきます。ちょうど良く使用者側(攻撃側)への効果と出てきます。
後は適当にadd_state(id)でステートを付加しましょう。基本はこんなところですかね。
おそらく、これ以上に条件が必要になるでしょうから、適当に小ネタでも出しておきます。
item.is_a?(RPG::Skill) # スキルかどうかの判別
user.actor != self.actor? # 敵味方が分かれているかどうかの判別
(「攻撃者がアクターかどうか」が、「防御側がアクターかどうか」と異なるかどうかの判別)
self.result.hp_damage > 0 # HPダメージを1でも受けたかどうか
……実際にどう組めばいいのかわからない場合は、また質問してください。
スクリプト内を「防御」で全体検索すると、この部分が見つかるはずです。
コード: 全て選択
#--------------------------------------------------------------------------
# ● 防御修正の適用
#--------------------------------------------------------------------------
def apply_guard(damage)
damage / (damage > 0 && guard? ? 2 * grd : 1)
end
さて、実際に攻撃側/防御側にステートを付加するにはどうしたら、という部分ですが、
この「防御修正の適用」内では攻撃側のデータが取得できません。
なので、スキル等を使用した際の処理を見てみましょう。
コード: 全て選択
#--------------------------------------------------------------------------
# ● スキル/アイテムの効果適用
#--------------------------------------------------------------------------
def item_apply(user, item)
@result.clear
@result.used = item_test(user, item)
@result.missed = (@result.used && rand >= item_hit(user, item))
@result.evaded = (!@result.missed && rand < item_eva(user, item))
if @result.hit?
unless item.damage.none?
@result.critical = (rand < item_cri(user, item))
make_damage_value(user, item)
execute_damage(user)
end
item.effects.each {|effect| item_effect_apply(user, item, effect) }
item_user_effect(user, item) # <= ここ
end
end
コード: 全て選択
#--------------------------------------------------------------------------
# ● スキル/アイテムの使用者側への効果
#--------------------------------------------------------------------------
def item_user_effect(user, item)
user.tp += item.tp_gain * user.tcr
end
後は適当にadd_state(id)でステートを付加しましょう。
コード: 全て選択
def item_user_effect(user, item)
user.tp += item.tp_gain * user.tcr
if guard? # 追加
user.add_state(B) # 攻撃側のステート
self.add_state(A) # 防御側のステート
end
end
おそらく、これ以上に条件が必要になるでしょうから、適当に小ネタでも出しておきます。
item.is_a?(RPG::Skill) # スキルかどうかの判別
user.actor != self.actor? # 敵味方が分かれているかどうかの判別
(「攻撃者がアクターかどうか」が、「防御側がアクターかどうか」と異なるかどうかの判別)
self.result.hp_damage > 0 # HPダメージを1でも受けたかどうか
……実際にどう組めばいいのかわからない場合は、また質問してください。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
Re: 防御成功時の効果について
faida様、ご丁寧な解説ありがとうございます。
ご指導いただいた方法を元にスクリプトをいじってはみましたが、どうにも上手くいきません。
(AとBで設定したステートがどちらも防御側に適用されているみたい?)
具体的な実装方法を教えていただけないでしょうか。よろしくお願いいたします。
ご指導いただいた方法を元にスクリプトをいじってはみましたが、どうにも上手くいきません。
(AとBで設定したステートがどちらも防御側に適用されているみたい?)
具体的な実装方法を教えていただけないでしょうか。よろしくお願いいたします。
Re: 防御成功時の効果について
先に提示した通り組むと、「防御」した時に条件を満たしてしまいます。(「攻撃側」と「防御側」が同じため)
なので、if文を増やして回避しましょう。また、「and」で条件文をつなぐこともできます。さらに、「and」は「&&」で置き換えることもできます。(厳密には異なるものですが、とりあえず置き換えることができるものであるとさせてください)
基本的には使いやすいものを使用してください。(どの追加方法でも同じ条件文を使用できます)
※今更ながら、「self.actor? != user.actor?」の代わりに「self.opposite?(user)」が使えることが分かったので追記しておきます。
なので、if文を増やして回避しましょう。
コード: 全て選択
def item_user_effect(user, item)
user.tp += item.tp_gain * user.tcr
if guard?
if self != user # 「攻撃側」が自身(「防御側」)でなければ
user.add_state(B)
self.add_state(A)
end
end
end
コード: 全て選択
def item_user_effect(user, item)
user.tp += item.tp_gain * user.tcr
if guard? and self.actor? != user.actor? # 「攻撃側」が味方でなければ
user.add_state(B)
self.add_state(A)
end
end
コード: 全て選択
def item_user_effect(user, item)
user.tp += item.tp_gain * user.tcr
if guard? && self.result.hp_damage > 0 # 受けたダメージが1以上であれば
user.add_state(B)
self.add_state(A)
end
end
基本的には使いやすいものを使用してください。(どの追加方法でも同じ条件文を使用できます)
※今更ながら、「self.actor? != user.actor?」の代わりに「self.opposite?(user)」が使えることが分かったので追記しておきます。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。