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

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

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

■4678 / inTopicNo.1)  Attackイベントをサポートアタック
  
□投稿者/ グラムドリング -(2002/08/04(Sun) 06:04:43)
    疑似的にでも構わないのでAttackイベント後に
    サポートアタックを発生させることはできないでしょうか?

    攻撃 味方 敵:
    Set 攻撃ユニット 対象ユニット
    If Info(ユニット,相手ユニットID,武器,相手ユニット使用武器) = "" Then
    Attack 対象ユニットID 対象ユニット使用武器 相手ユニットID 防御
    Else
    Attack 対象ユニットID 対象ユニット使用武器 相手ユニットID 無抵抗
    Endif
    Local 判別X 判別Y 所属判別ID 援護可能武器 援護可能ユニット 援護攻撃可能
    For 判別X = -1 to 1
    For 判別Y = (abs(x) - 1) to (1 - abs(x))
    If (判別X = 0 And 判別Y = 0) Then
    Skip
    EndIf
    所属判別ID = Info(マップ,X(攻撃ユニット) + x,Y(攻撃ユニット) + y,"ユニットID")
    If Party(所属判別ID) = "味方" Then
    If Info(パイロット,所属判別ID,特殊能力所有,援護) = 1 Then
    If Info(ユニット,unit(所属判別ID),残りサポートアタック数) > 0 Then
    If Area(攻撃ユニット) = Area(所属判別ID) Then
    For i = 1 To Info(ユニット,unit(所属判別ID),武器数)
    If Info(ユニット,unit(所属判別ID),武器,i,属性所有,M) = 0 Then
    If Info(ユニット,unit(所属判別ID),武器,i,最大射程) >= Call(距離測定,相手ユニットID,所属判別ID) Then
    If Info(ユニット,unit(所属判別ID),武器,i,弾数) > 0 Then
    援護可能 1
    援護可能武器 Info(ユニット,unit(所属判別ID),武器,i)
    援護可能ユニット Pilot(所属判別ID)
    Endif
    Endif
    Endif
    Next
    Endif
    Endif
    EndIf
    EndIf
    Next
    Next
    If 援護攻撃可能 = 1 Then
    If Info(ユニット,相手ユニットID,武器,相手ユニット使用武器) = "" Then
    Attack 援護可能ユニット 援護可能武器 相手ユニットID 防御
    Else
    Attack 援護可能ユニット 援護可能武器 相手ユニットID 無抵抗
    Endif
    Endif
    Exit

    取りあえず上のように組んでみたのですが
    普通にAttackイベントが消化されたあと、イベントが終了していまいます。
    ただ所属判別IDが正しい動作をしているかちょっと分からないので
    どの辺りから修正したものか悩んでいます。

    どなたかお力添えお願いできないものでしょうか?
引用返信/返信 削除キー/
■4679 / inTopicNo.2)  Re[1]: Attackイベントをサポートアタック
□投稿者/ GAMEMASTER -(2002/08/04(Sun) 07:37:01)
http://nagoya.cool.ne.jp/gamemaster/
     お初にお目にかかります。
     SRCユーザーの1人「GAMEMASTER」と申します。

    > 取りあえず上のように組んでみたのですが
    > 普通にAttackイベントが消化されたあと、イベントが終了していまいます。
    > ただ所属判別IDが正しい動作をしているかちょっと分からないので
    > どの辺りから修正したものか悩んでいます。
    >
    > どなたかお力添えお願いできないものでしょうか?

     1:

     For 判別Y = (abs(x) - 1) to (1 - abs(x))

     xは何も代入されていない変数(=0)なので動作的には問題はないのですが、

     For 判別Y = -1 to 1

     としましょう。

     2:

     所属判別ID = Info(マップ,X(攻撃ユニット) + x,Y(攻撃ユニット) + y,"ユニットID")

     このxもyも突然出現した変数なので、ここには常に0しか代入されません。
     判別X・Yを入れるはずなので、

     所属判別ID = Info(マップ,(X(攻撃ユニット) + 判別X),(Y(攻撃ユニット) + 判別Y),"ユニットID")

     としましょう。

     3:

     If Info(パイロット,所属判別ID,特殊能力所有,援護) = 1 Then

     割り出したIDはユニットIDであり、基本的にユニット名称と同じ扱いをするものです。
     よって、パイロット名称を使うInfo関数に代入するには、

     If Info(パイロット,Pilot(所属判別ID),特殊能力所有,援護) = 1 Then

     としましょう。

     4:

     If Info(ユニット,unit(所属判別ID),武器,i,弾数) > 0 Then

     弾数制でない武器は弾数0と見なされるため、無消費やEN消費制武器はここから先に進めません。また、弾数とENを同時に消費する武器もまれに存在しますので、

     If ((Info(ユニット,unit(所属判別ID),武器,i,弾数) > 0) Or (Info(ユニット,unit(所属判別ID),武器,i,弾数) = 0 And Info(ユニット,unit(所属判別ID),武器,i,最大弾数) = 0)) And Info(ユニット,unit(所属判別ID),武器,i,消費EN) <= EN(所属判別ID) Then

     としましょう。

     5:

     援護可能 1
     援護可能武器 Info(ユニット,unit(所属判別ID),武器,i)
     援護可能ユニット Pilot(所属判別ID)

     変数へ代入するには、

     援護可能 = 1
     援護可能武器 = Info(ユニット,unit(所属判別ID),武器,i)
     援護可能ユニット = Pilot(所属判別ID)

     もしくは、

     Set 援護可能 1
     Set 援護可能武器 Info(ユニット,unit(所属判別ID),武器,i)
     Set 援護可能ユニット Pilot(所属判別ID)

     としましょう。

     6:

     If 援護攻撃可能 = 1 Then

     「援護攻撃可能」という変数はこのイベントでは全く作成されていません。

     If 援護可能 = 1 Then

     としましょう。

     以上の修正によって(それと「距離測定」サブルーチンを自作することで)、こちらはこのイベントを正常に動作させることが出来ました。

     参考になれば幸いです。

     もう時間がないようでございますね。では、これにて退散させてもらいましょう。
引用返信/返信 削除キー/
■4680 / inTopicNo.3)  Re[2]: Attackイベントをサポートアタック
□投稿者/ グラムドリング -(2002/08/04(Sun) 09:44:57)
    GAMEMASTERさんの仰られた部分の修正により
    ちゃんとAttaxkイベント後の援護可能ユニットのサポートアタックを
    再現することが出来ました。
    多少メッセージのつなぎに間隙が入ったり、
    仕様上、援護ユニットの残り援護回数が減らせなかったりはしますが
    用途に依れば問題はないと思います。
    最終的に使用した記述は…

    Set 攻撃ユニット 対象ユニット
    If Info(ユニット,相手ユニットID,武器,相手ユニット使用武器) = "" Then
    Attack 対象ユニットID 対象ユニット使用武器 相手ユニットID 防御
    Else
    Attack 対象ユニットID 対象ユニット使用武器 相手ユニットID 無抵抗
    Endif
    Local 判別X 判別Y 所属判別ID 援護可能武器 援護可能ユニット 援護攻撃可能
    For 判別X = -1 to 1
    For 判別Y = -1 to 1
    If (判別X = 0 And 判別Y = 0) Then
    Skip
    EndIf
    所属判別ID = Info(マップ,X(攻撃ユニット) + 判別X,Y(攻撃ユニット) + 判別Y,"ユニットID")
    If Party(所属判別ID) = "味方" Then
    If Info(パイロット,Pilot(所属判別ID),特殊能力所有,援護) = 1 Then
    If Info(ユニット,unit(所属判別ID),残りサポートアタック数) > 0 Then
    If Area(攻撃ユニット) = Area(所属判別ID) Then
    For i = 1 To Info(ユニット,unit(所属判別ID),武器数)
    If Info(ユニット,unit(所属判別ID),武器,i,属性所有,M) = 0 Then
    If Info(ユニット,unit(所属判別ID),武器,i,最大射程) >= Call(距離測定,相手ユニットID,所属判別ID) Then
    If ((Info(ユニット,unit(所属判別ID),武器,i,弾数) > 0) Or (Info(ユニット,unit(所属判別ID),武器,i,弾数) = 0 And Info(ユニット,unit(所属判別ID),武器,i,最大弾数) = 0)) And Info(ユニット,unit(所属判別ID),武器,i,消費EN) <= EN(所属判別ID) Then
    援護攻撃可能 = 1
    援護可能武器 = Info(ユニット,unit(所属判別ID),武器,i)
    援護可能ユニット = Pilot(所属判別ID)
    Endif
    Endif
    Endif
    Next
    Endif
    Endif
    EndIf
    EndIf
    Next
    Next
    If 援護攻撃可能 = 1 Then
    #相手の反撃の有無=====================================
    If Info(ユニット,相手ユニットID,武器,相手ユニット使用武器) = "" Then
    Attack 援護可能ユニット 援護可能武器 相手ユニットID 防御
    Else
    Attack 援護可能ユニット 援護可能武器 相手ユニットID 無抵抗
    Endif

    距離測定:
    Local X距離 Y距離 ユニット間距離
    Set 測定元ユニットX X(Args(1))
    Set 測定元ユニットY Y(Args(1))
    Set 測定先ユニットX X(Args(2))
    Set 測定先ユニットY Y(Args(2))
    Set X距離 (測定元ユニットX - 測定先ユニットX)
    Set Y距離 (測定元ユニットY - 測定先ユニットY)
    Set ユニット間距離 (Abs(X距離) + Abs(Y距離))
    Return ユニット間距離

    …です。的確なご指摘ありがとうございました。
解決済み!
引用返信/返信 削除キー/



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

このトピックに書きこむ

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

Pass/

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

- Child Tree -
- Antispam Version -