※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

変形先ユニット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