SRC質問掲示板Mk2
(現在 過去ログ122 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■21417 / inTopicNo.1)  離れた味方も援護防御したい
  
□投稿者/ ヒゲンジン -(2009/03/04(Wed) 05:31:51) [ID:s4c0Atm1]
    いつもお世話になっております。

    自作シナリオにて、2マスまでの距離なら離れていても援護防御ができ、かつレベルに応じて援護防御回数が増えるインクルードを作りたいのですが、
    途中でどうしたらいいのかわからなくなりました。。。orz

    ユニット間距離:
    #サブルーチンローカル変数xdiff,ydiffを作成
    Local xdiff ydiff
    #X座標の差とY座標の差を計算
    xdiff = Abs(X(Args(1)) - X(Args(2)))
    ydiff = Abs(Y(Args(1)) - Y(Args(2)))
    #両方の座標軸の差からユニット間の距離を求め、サブルーチンの戻り値として返す
    Return (xdiff + ydiff)

    *ターン 全 敵:
    If ユニット間距離 ○○ 味方 < 3 Then
    SpecialPower ○○ みがわり 対象ユニット
    EndIf
    Exit


    …で、そこからどうしたらいいのかと…
    しかも↑のもうまく動かないし…

    どなたか親切な方、ご教授よろしくお願いいたします。

引用返信/返信 削除キー/
■21419 / inTopicNo.2)  Re[1]: 離れた味方も援護防御したい
□投稿者/ Mr -(2009/03/04(Wed) 13:17:28) [ID:xu962QgY]
http://mrsrc.web.fc2.com/
    ■動かない理由について
    サブルーチンの戻り値を取得するためには、Call関数を使う必要があります。

    If ユニット間距離 ○○ 味方 < 3 Then
    とするのではなく、
    If Call(ユニット間距離,○○,味方) < 3 Then
    もしくは
    If ユニット間距離(○○,味方) < 3 Then
    としてやらなくてはいけません

    これに関連して、『味方』と表記されていますが、これは『味方陣営のユニットならなんでも』ということでしょうか?
    だとすると、このままでは動きません。『ユニット間距離』内でForEachコマンドなどを使用する必要が出てくるでしょう。
    違うなら、別に問題はないと思います。

    ■レベルに応じて〜
    ユニットやパイロットの情報を取得するにはInfo関数を使います。
    他にもユニットやパイロットに関連する各種関数があります。ヘルプの関数のページを見てください。

    どうしたらいいか分からなくなったときは、
    1行ずつ、1コマンドずつ、ヘルプを見ながら、その意味や想定される動作を確認していくといいでしょう。
    そうすれば、自分が今どこまでできているのか、何ができていないのかを判断することができます。
    何ができていないかが分かれば、アドバイスもしやすいというものです。
    インクルードは理詰めです。なんとなく、ということはありません。
    見たところ、座標の差の絶対値でユニット間の距離を出す、などの考え方ができているのですからもう少しです。がんばってください。

    #このままだとみがわりが発動しなかった場合に効果が残ってしまうので、味方ターンにClearSpecialPowerを使っておくといいかもしれません。
引用返信/返信 削除キー/
■21426 / inTopicNo.3)  Re[2]: 離れた味方も援護防御したい
□投稿者/ ヒゲンジン -(2009/03/10(Tue) 00:51:51) [ID:QwDOeW2Z]
    返信遅れまして申し訳ございません。

    ヘルプと格闘しながら、初心者ながら頑張ってみました。
    なんとか下記の記述までは至ったのですが、これだとエラーは出ませんが肝心のスペシャルパワー身代わりが発動しません。

    ここから先、どうしたら宜しいでしょうか?
    間違っている点はともかく、考え方などあればご教授ください。

    それと、質問文でMr様のご指摘通り、私の説明不足でした。
    私がやりたいのは、
    特殊能力 庇う がLv3になった時に、2マス離れた味方全てを1回まで援護防御(擬似的に身代わりをかける)する。
    特殊能力 庇う Lv4では、2回まで援護防御する。

    と、いうことがやりたいです。
    伝わりづらかったらすみません。。。。orz



    ここから↓↓↓↓↓

    まもる:
    ForEach 味方
    If Info(パイロット, 対象パイロット, 特殊能力レベル, 庇う) = 3 Then
    えんごきゃら[対象パイロット] = Pilot()
    EndIf
    If Info(パイロット, 対象パイロット, 特殊能力レベル, 庇う) = 0 Then
    まもって[対象パイロット] = Pilot()
    EndIf
    Next
    Return

    ユニット間距離:
    Local xdiff ydiff
    ForEach 味方
    xdiff = Abs(X(Args(1)) - X(Args(2)))
    ydiff = Abs(Y(Args(1)) - Y(Args(2)))
    Next
    Return (xdiff + ydiff)

    *ターン 全 敵:
    ForEach 味方
    まもる
    If ユニット間距離(えんごきゃら[対象パイロット], まもって[対象パイロット]) < 3 Then
    SpecialPower えんごきゃら[対象パイロット] みがわり まもって[対象パイロット]
    EndIf
    Next

    *ターン 全 味方:
    ClearSpecialPower 味方 みがわり

引用返信/返信 削除キー/
■21427 / inTopicNo.4)  Re[3]: 離れた味方も援護防御したい
□投稿者/ ニーチェ -(2009/03/10(Tue) 03:21:02) [ID:Fu9g7LNP]
http://nietzsche000.jugem.jp/?cid
    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つ条件をチェックしていく必要があります。
    あと、デフォルトでみがわりを持っているキャラがいる場合なども。


引用返信/返信 削除キー/
■21428 / inTopicNo.5)  Re[4]: 離れた味方も援護防御したい
□投稿者/ ヒゲンジン -(2009/03/10(Tue) 04:48:37) [ID:QwDOeW2Z]
    ニーチェ様
    ご返信ありがとうございます。

    ご指摘ありがとうございます。
    ターンイベントではなく、攻撃イベントなんですね。。。

    なるほど…実際の援護防御は、かなりいろいろな部分まで計算していたんですね。
    完全な再現は、今の私には相当前途多難です。。。
    しかしこの能力は私が実装してみたかったもののひとつですので、
    なんとか擬似的にでもがんばってやってみます。

    ありがとうございます!!
解決済み!
引用返信/返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Pass/

HOME HELP 新規作成 新着記事 トピック表示 検索 掲示板新着情報RSS配信新着情報 過去ログ

- Child Tree -
- Antispam Version -