挖出个还不错的东东
自己写的函数
作用是选择出单位组中最具价值攻击目标[jass]function AISelect takes group G returns unit
local integer GN = CountUnitsInGroup(G)
local integer i = 1
local group GG = CreateGroup()
local group GGG = CreateGroup()
local unit u
if(GN == 0) then //单位组为0
call DestroyGroup(GG)
call DestroyGroup(GGG)
set u = null
set GG = null
set GGG = null
return null
endif
if(GN == 1) then //单位组为1
set udg_Unit_FunctionHelper = FirstOfGroup(G)
call DestroyGroup(GG)
call DestroyGroup(GGG)
set u = null
set GG = null
set GGG = null
return udg_Unit_FunctionHelper
endif
call GroupAddGroup(GGG,G)
loop //第一选择 血量
exitwhen i > GN
set u = FirstOfGroup(GGG)
if(GetUnitState(u,ConvertUnitState(0)) < LoadReal(G,"Damage")) then
call GroupAddUnit(GG,u)
endif
call GroupRemoveUnit(GGG,u)
set i = i + 1
endloop
set GN = CountUnitsInGroup(GG)
if(GN == 0) then //没有过低血量单位
call GroupClear(GGG)
call GroupClear(GG)
call GroupAddGroup(GGG,G)
set GN = CountUnitsInGroup(GGG)
loop //第二选择 英雄
exitwhen i > GN
set u = FirstOfGroup(GGG)
if IsUnitType(u,ConvertUnitType(0)) then
call GroupAddUnit(GG,u)
endif
call GroupRemoveUnit(GGG,u)
set i = i + 1
endloop
set GN = CountUnitsInGroup(GG)
if(GN == 0) then //没有英雄单位
set udg_Unit_FunctionHelper = FirstOfGroup(G)
call DestroyGroup(GG)
call DestroyGroup(GGG)
set u = null
set GG = null
set GGG = null
return udg_Unit_FunctionHelper
endif
if(GN >= 1) then //有英雄单位
set udg_Unit_FunctionHelper = FirstOfGroup(GG)
call DestroyGroup(GG)
call DestroyGroup(GGG)
set u = null
set GG = null
set GGG = null
return udg_Unit_FunctionHelper
endif
endif
if(GN == 1) then
set udg_Unit_FunctionHelper = FirstOfGroup(GG) //单一血量过低单位
call DestroyGroup(GG)
call DestroyGroup(GGG)
set u = null
set GG = null
set GGG = null
return udg_Unit_FunctionHelper
endif
if(GN > 1) then //更多血量过低单位
set udg_Unit_FunctionHelper = FirstOfGroup(GG)
call GroupClear(GGG)
call GroupAddGroup(GGG,GG)
call GroupClear(GG)
set GN = CountUnitsInGroup(GGG)
loop //第二选择 英雄
exitwhen i > GN
set u = FirstOfGroup(GGG)
if IsUnitType(u,ConvertUnitType(0)) then
call GroupAddUnit(GG,u)
endif
call GroupRemoveUnit(GGG,u)
set i = i + 1
endloop
set GN = CountUnitsInGroup(GG)
if(GN == 0) then //没有英雄单位
call DestroyGroup(GG)
call DestroyGroup(GGG)
set u = null
set GG = null
set GGG = null
return udg_Unit_FunctionHelper
endif
if(GN >= 1) then //存在英雄单位
set udg_Unit_FunctionHelper = FirstOfGroup(GG)
call DestroyGroup(GG)
call DestroyGroup(GGG)
set u = null
set GG = null
set GGG = null
return udg_Unit_FunctionHelper
endif
endif
call DestroyGroup(GG)
call DestroyGroup(GGG)
set u = null
set GG = null
set GGG = null
return FirstOfGroup(G)
endfunction[/jass]
[ 本帖最后由 C_Kuhn 于 2008-10-7 19:49 编辑 ]