| 考え方は間違っていないと思います。
自分にもそれしか思いつきませんし。
ヘルプのLocalとReturnのページに『ユニット間距離』というサブルーチンが書かれています。
これをインクルードに書いた上で、
メインパイロットが特殊能力『単純思考』を持っている場合を対象としたモノが以下です。
*ターン 全 全:
foreach フェイズ
if condition(対象ユニットID,"混乱") = 1 then
skip
endif
if skill(pilotid(対象ユニットID),"単純思考") = 1 then
if condition(対象ユニットID,"暴走") = 1 then
call 単純思考サブルーチン 対象ユニットID 無差別
elseif party(対象ユニットID) != "味方" then
call 単純思考サブルーチン 対象ユニットID 通常
endif
endif
next
exit
単純思考サブルーチン:
local UID = args(1)
local unit_buf = ""
local min_buf = 999
local mode i buf EID
if args(2) = "無差別" then
set mode "全"
else
switch party(UID)
case "NPC"
set mode "敵 中立"
case "敵"
set mode "味方 中立 NPC"
case "中立"
set mode "味方 敵 NPC"
endsw
endif
for i = 1 to llength(mode)
foreach lindex(mode,i) 出撃
set EID 対象ユニットID
if EID != UID then
set buf ユニット間距離(UID,EID)
if min_buf > buf then
set min_buf buf
set unit_buf EID
elseif min_buf = buf then
if damage(unit_buf) > damage(EID) then
set min_buf buf
set unit_buf EID
elseif damage(unit_buf) = damage(EID) then
if random(2) = 1 then
set min_buf buf
set unit_buf EID
endif
endif
endif
endif
next
next
if unit_buf != "" then
changemode UID unit_buf
endif
return
以上で問題なく動くと思います。
混乱状態や暴走状態に対する修正や対ザコ判定等は適宜行って下さい。
|