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

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

No20440 の記事


■20440 / )  Re[1]: 武器劣化について
□投稿者/ jam -(2007/11/06(Tue) 11:43:34) [ID:cYSkfGMh]
    どうも。
    ちょっと複雑ですが、実際に作りました武器劣化インクルードを公開します。
    細かい部分は、ご自身でいろいろと調整なさってください。

    なお、他の皆様も、更に動作が向上させられる案をお持ちでしたならば、ぜひともご意見、ご教示を願えればと思います。



    武器ID整理:
    Local i j k 使用武器ID 装備判定 存在判定 武器ID E判定

    ForEach 味方
     For i = 1 To CountItem(対象パイロット)
      Switch Info(アイテム,Item(対象パイロット,i),装備個所)
       Case 主武器
        Set 使用武器ID[対象パイロット,1] ItemID(対象パイロット,i)
        Set 装備判定[対象パイロット,1]
       Case 副武器
        Set 使用武器ID[対象パイロット,2] ItemID(対象パイロット,i)
        Set 装備判定[対象パイロット,2]

       ●装備箇所で武器を判定しています。ですので、アイテムとして武器を設定し、更に装備箇所をそれぞれに指定していることが必須となります。
        もちろん、種類を増やすのであればその分Caseを増やし、IDの序数を足していくことも忘れてはなりません。●

      Endsw
     Next
     Set i 0

     ↓ ★上で指定した装備箇所の種類の数だけ、ここでルーチン処理することになります。
        コマンドの内容は、もしそれを装備していて、その武器に関する磨耗度の変数が定義されていない場合、新たに武器の磨耗度を変数として作るというものです。
        上では「主武器」と「副武器」の二種類ですので、Forコマンドで二回行っています。

     For i = 1 To 2
      If 装備判定[対象パイロット,i] = 1 And IsVarDefined(武器磨耗度["$(使用武器ID[対象パイロット,i])"]) = 0 Then
       Set 武器磨耗度["$(使用武器ID[対象パイロット,i])"] 0
      EndIf
     Next
     Set i 0
    Next
    Set i 0

     ↓ ■これは誰も装備していない武器について、上と同じ判定をしている箇所です。

    For i = 1 To CountItem(未装備)
     Switch Info(アイテム,Item(未装備,i),装備個所)
      Case 主武器
       Set 使用武器ID[未装備,i,1] ItemID(未装備,i)
       Set 装備判定[未装備,i,1]
      Case 副武器
       Set 使用武器ID[未装備,i,2] ItemID(未装備,i)
       Set 装備判定[未装備,i,2]
     Endsw
    Next
    Set i 0

    For i = 1 To CountItem(未装備)
     For j = 1 To 2
      If 装備判定[未装備,i,j] = 1 And IsVarDefined(武器磨耗度["$(使用武器ID[未装備,i,j])"]) = 0 Then
       Set 武器磨耗度["$(使用武器ID[未装備,i,j])"] 0
      EndIf
     Next
    Next
    Set i 0
    Set j 0

    ▼上の二つの作業で、全てのアイテムとしての武器に武器磨耗度が変数として割り当てられます。

    ▲ ↓ こっちはややこしいのですが、アイテム武器が無くなった時、余計な変数を除去するコマンドです。

    ForEach 武器ID In 武器磨耗度
     Set 存在判定[i] 武器ID
     Incr i
    Next
    Set i 0

    For i = 0 To Count(武器磨耗度)
     ForEach 味方 (出撃 待機 格納 離脱)
      For j = 1 To CountItem(対象パイロット)
       If Info(アイテム,Item(対象パイロット,i),装備個所) Not 非表示 Then
        If 存在判定[i] = ItemID(対象パイロット,j) Then
         Set E判定 1
         Break
        Else
         Set E判定 0
        EndIf
       EndIf
      Next

      If E判定 = 1 Then
       Break
      EndIf
     Next

     If E判定 = 0 Then
      For k = 1 To CountItem(未装備)
       If Info(アイテム,Item(対象パイロット,i),装備個所) Not 非表示 Then
        If 存在判定[i] = ItemID(未装備,k) Then
         Set E判定 1
         Break
        Else
         Set E判定 0
        EndIf
       EndIf
      Next
     EndIf

     If E判定 = 0 Then
      UnSet 武器磨耗度["$(存在判定[i])"]
     EndIf
    Next

    Return

    ◆以上で、下準備が完了します。次に、以下のように実際のバトルの様々な状況において、武器磨耗度が加算されるように設定します。

    *攻撃 味方 全:
    Set HP判定[相手ユニット] HP(相手ユニット)
    Exit

    *攻撃後 味方 全:
    If (HP判定[相手ユニット] - HP(相手ユニット)) = 0 Then
     UnSet HP判定
     Exit
    EndIf

    Call 武器劣化共通処理

    UnSet HP判定
    UnSet 使用武器判定
    UnSet 使用武器ID
    Exit

    *破壊 全:
    If Party(相手パイロット) = 中立 or Party(相手パイロット) = 敵 Then
     UnSet HP判定
     Exit
    EndIf

    Call 武器劣化共通処理

    UnSet HP判定
    UnSet 使用武器判定
    UnSet 使用武器ID
    Exit

    ★こうしておいて、本インクルードのキモとなる「武器劣化共通処理」が以下です

    武器劣化共通処理:
    Local i

    Switch 対象ユニット使用武器
     Case "" 防御 回避 応戦
      UnSet HP判定
      Exit

     Case Else
      Set 使用武器判定 対象ユニット使用武器
    Endsw

    ▲注:例えば「連続切り」などのように、武器アイテム名と異なる技でも武器を劣化させたい、という場合は、

    例:Case 連続切り
       If IsEquiped(対象パイロット,鉄の剣) = 1 Then
        Set 使用武器判定 鉄の剣
       ElseIf IsEquiped(対象パイロット,鋼の剣) = 1 Then
        Set 使用武器判定 鋼の剣
       EndIf

    ●などのように、「使用武器判定」変数にどうにかして、そのキャラが今装備し、使用した武器名を入れるよう工夫する必要があります。

    Set i 0
    For i = 1 To CountItem(対象パイロット)
     If Item(対象パイロット,i) = 使用武器判定 Then
      Set 使用武器ID ItemID(対象パイロット,i)
     EndIf
    Next

    Incr 武器磨耗度["$(使用武器ID)"] 1

    If 武器磨耗度["$(使用武器ID)"] >= Info(アイテム,使用武器判定,特殊能力レベル,使用耐久) Then
     Call 武器破壊処理
    EndIf

    Return

    ★ ↑ いい忘れましたが、アイテムの特殊能力に「使用耐久」を指定しておいてください。例えば「鉄の剣」ならば「使用耐久Lv50=非表示」といった感じです。

    ■そして、武器破壊処理 ↓

    武器破壊処理:
    RemoveItem 対象ユニット 使用武器判定
    Unset 武器磨耗度["$(使用武器ID)"]

    Talk
    $(NickName(対象パイロット))が所持していた$(使用武器判定)は、壊れてしまった。
    End

    Return


    以上です。
    偉そうにいってますが、素人が組んだコマンドですので、なかなか複雑になってしまっています。

    まぁ、参考になさってください。
返信/引用返信 削除キー/


Pass/

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

- Child Tree -
- Antispam Version -