| 2009/03/10(Tue) 03:29:06 編集(投稿者) 2009/03/10(Tue) 03:29:05 編集(投稿者)
こんにちは、ニーチェです。
そもそもですね、援護防御というのは戦闘ごとに援護できるかチェックするものですから、 ターンイベントじゃなくて攻撃イベントじゃないとダメなんじゃないでしょうか。 また、援護防御というのはかばうのが発生するのに距離以外にも様々な条件を チェックしています。それらを完全に再現しようと思ったら、かなり手間がかかることに なることを覚悟しておいてください。
*攻撃 味方 敵: *攻撃 味方 中立: *攻撃 NPC 敵: *攻撃 NPC 中立: Local i j ###護衛するユニット UnSet Guard Set Guard ""
###護衛されるユニット UnSet GuardTarget Set GuardTarget ""
###味方からの攻撃やマップ兵器には発動しない If フェイズ = 味方 Exit If フェイズ = NPC Exit If Info(Unit(相手ユニット),武器,相手ユニット使用武器,属性所有,M) = 1 Exit
Set GuardTarget 対象ユニット
###出撃中のユニットのうち、対象と2マス以内で、このターンに援護防御した回数が ###かばうレベル - 2 より少ないユニットをチェック ###その中で最もHPの高いユニットを護衛ユニットに設定 ForEach 味方 出撃 If 対象ユニット = GuardTarget Then Skip EndIf If (Skill(対象ユニット,庇う) - 2) > GuardNumber[対象ユニット] And ユニット間距離(対象ユニット,GuardTarget) <= 2 Then If Guard "" Then Set Guard 対象ユニット ElseIf HP(対象ユニット) > HP(Guard) Then Set Guard 対象ユニット EndIf EndIf Next
###対象者がいた場合、みがわりをかける If Guard <> "" Then SpecialPower Guard みがわり GuardTarget EndIf Exit
*攻撃後 味方 敵: *攻撃後 味方 中立: *攻撃後 NPC 敵: *攻撃後 NPC 中立: If Guard = "" Exit
###みがわりが消えている場合は援護防御成功なので援護防御回数を+1 ###みがわりが残っている場合は自力回避なのでSPを消す If SpecialPower(GuardTarget,みがわり) = 0 Then Incr GuardNumber[Guard] +1 Else ClearSpecialPower GuardTarget みがわり EndIf Exit
*ターン 全 味方: ###援護防御回数をリセット UnSet GuardNumber Exit
ユニット間距離: Local xdiff ydiff xdiff = Abs(X(Args(1)) - X(Args(2))) ydiff = Abs(Y(Args(1)) - Y(Args(2))) Return (xdiff + ydiff)
実際の援護防御はかばった味方がやられるような攻撃や 弱すぎる攻撃はかばわないので、攻撃のダメージを計算して そういう攻撃は除外しなければいけません。(この部分がとても大変です) サポートガード無効化のSPがかかっている場合なども同様です。 他にも色々と細かい条件があるので、完全な再現を目指すのならば 1つ1つ条件をチェックしていく必要があります。 あと、デフォルトでみがわりを持っているキャラがいる場合なども。
|