| どうも。 ちょっと複雑ですが、実際に作りました武器劣化インクルードを公開します。 細かい部分は、ご自身でいろいろと調整なさってください。
なお、他の皆様も、更に動作が向上させられる案をお持ちでしたならば、ぜひともご意見、ご教示を願えればと思います。
↓
武器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
以上です。 偉そうにいってますが、素人が組んだコマンドですので、なかなか複雑になってしまっています。
まぁ、参考になさってください。
|