まずは防御状態の判定がどうなっているか確認しましょうか。
スクリプト内を「防御」で全体検索すると、この部分が見つかるはずです。
コード: 全て選択
#--------------------------------------------------------------------------
# ● 防御修正の適用
#--------------------------------------------------------------------------
def apply_guard(damage)
damage / (damage > 0 && guard? ? 2 * grd : 1)
end
ここから、「guard?」で防御状態かどうかの判別ができるということが分かります。
さて、実際に攻撃側/防御側にステートを付加するにはどうしたら、という部分ですが、
この「防御修正の適用」内では攻撃側のデータが取得できません。
なので、スキル等を使用した際の処理を見てみましょう。
コード: 全て選択
#--------------------------------------------------------------------------
# ● スキル/アイテムの効果適用
#--------------------------------------------------------------------------
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
今回はここを使いましょう。「item_user_effect」で全体検索をすると、こちらが出てきます。
コード: 全て選択
#--------------------------------------------------------------------------
# ● スキル/アイテムの使用者側への効果
#--------------------------------------------------------------------------
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でも受けたかどうか
……実際にどう組めばいいのかわからない場合は、また質問してください。