変形先ユニットIDリストを作成する
変形能力を持つユニットを作成したとき、変形先ユニットも同時に作成される。
このとき、当然変形先ユニットには異なるユニットIDが割り振られるが、イベントコマンドなどで直接それらのIDを取得できない。
このとき、当然変形先ユニットには異なるユニットIDが割り振られるが、イベントコマンドなどで直接それらのIDを取得できない。
あるユニットから変形先ユニットへの変形テーブルを構築するサブルーチンは次のように実装できる。
サブルーチン
詳細
あるユニットID「UnitID」を持つユニットの変形先の数を
変形テーブル[UnitID] = 変形先の数
という形式で格納し、そのうちのi番目の変形先ユニットのユニットID「TargetID」を
変形テーブル[UnitID, i] = TargetID
という形式で格納する。
コード
変形テーブル構築:
Local _UnitID = Args(1)
Local _PilotID = PilotID(_UnitID)
# 変形を持ってないなら終了
If IsAvailable(_UnitID, "変形") = 0 Then
Return
EndIf
変形テーブル[_UnitID] = 0
Local _trans_list = Info("ユニット", _UnitID, "特殊能力データ", "変形")
#Local _alias = LIndex(_trans_list, 1)
Local i _trans_name _TragetUnitID _idx
For i = 2 To LLength(_trans_list)
# 変形先のユニット名称を取得
_trans_name = LIndex(_trans_list, i)
# 強制変換
Transform _UnitID _trans_name
# パイロットIDを元にユニットIDを取得
_TragetUnitID = UnitID(_PilotID)
# 変数に記憶
Incr 変形テーブル[_UnitID]
_idx = 変形テーブル[_UnitID]
変形テーブル[_UnitID, _idx] = _TragetUnitID
# 変形先の変形テーブルが構築されていないなら
If IsVarDefined(変形テーブル[_TragetUnitID]) = 0 Then
# 変形先のさらに変形先を再帰的に取得
Call "変形テーブル構築" _TragetUnitID
EndIf
# 元に戻す
Transform _TragetUnitID Unit(_UnitID)
Next
Return
サンプル
test.eve
スタート:
Create "味方" テスト・変形ユニット 1 無人(ザコ) 1 5 5
Call "変形テーブル構築" 対象ユニットID
ForEach key In 変形テーブル
list[key] = key & ":" & 変形テーブル[key]
Next
Ask list "test" キャンセル可
Exit
実行結果
テスト・変形ユニット:1 = 2
テスト・変形ユニット:1,1 = テスト・変形ユニット:2
テスト・変形ユニット:1,2 = テスト・変形ユニット:3
テスト・変形ユニット:2 = 1
テスト・変形ユニット:2,1 = テスト・変形ユニット:1
テスト・変形ユニット:3 = 1
テスト・変形ユニット:3,1 = テスト・変形ユニット:1
pilot.txt
無人(ザコ)
無人, 男性, オリジナル, AAAA, 0
特殊能力なし
0, 0, 0, 0, 0, 0, 機械
精神なし
SRW_Unknown.bmp, -.mid
robot.txt
テスト・変形ユニット
テスト・変形ユニット, テストユニット, 1, 1
陸, 5, M, 4000, 175
特殊能力
変形=トランザム! テスト・変形ユニット・WS テスト・変形ユニット・バースト
1000, 100, 400, 90
AAAA, _.bmp
ナックル, 1100, 1, 1, +20, -, -, -, AAAA, +10, 突JL2
テスト・変形ユニット・WS
テスト・変形ユニット・WS, テストユニット, 1, 1
空中, 5, M, 4000, 175
特殊能力
変形=トランザムおわた テスト・変形ユニット
1000, 100, 400, 90
AAAA, _.bmp
ナックル, 1100, 1, 1, +20, -, -, -, AAAA, +10, 突JL2
テスト・変形ユニット・バースト
テスト・変形ユニット・バースト, テストユニット, 1, 1
空中, 5, M, 4000, 175
特殊能力
変形=トランザムおわた テスト・変形ユニット
1000, 100, 400, 90
AAAA, _.bmp
ナックル, 1100, 1, 1, +20, -, -, -, AAAA, +10, 突JL2