SoUI 0.5版本占坑
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
3.5 KiB

3 years ago
#ifndef YDWEAddAIOrderIncluded
#define YDWEAddAIOrderIncluded
#include "YDWEBase.j"
//===========================================================================
//AI-<EFBFBD>Զ<EFBFBD><EFBFBD>ͷż<EFBFBD><EFBFBD><EFBFBD>
//===========================================================================
library YDWEAddAIOrder requires YDWEBase
private function AIOrderRun takes nothing returns boolean
local unit u = GetTriggerUnit()
local integer count = YDWEGetIntegerByString(I2S(YDWEH2I(u)), "MercenaryAIOrder_Count")
local integer order = 0
local integer pro = 0
local integer index = 0
local integer i = 0
local integer a = 0
set a = GetRandomInt(0,100*count)
loop
set pro = YDWEGetIntegerByString(I2S(YDWEH2I(u)), "MercenaryAIOrder_Probability"+I2S(i))
if 100*i <= a and a < 100*i+pro then
set order = YDWEGetIntegerByString(I2S(YDWEH2I(u)), "MercenaryAIOrder"+I2S(i))
set index = YDWEGetIntegerByString(I2S(YDWEH2I(u)), "MercenaryAIOrder_Index"+I2S(i))
endif
exitwhen i >= count
set i = i + 1
endloop
// 1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD> 2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD> 3<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD> 4<EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>
if index == 1 then
call IssueTargetOrderById(u,order,GetEventTargetUnit())
elseif index == 2 then
call IssuePointOrderById(u,order,GetUnitX(GetEventTargetUnit()),GetUnitY(GetEventTargetUnit()))
elseif index == 3 then
call IssueImmediateOrderById(u, order)
elseif index == 4 then
call IssueTargetOrderById(u,order,u)
endif
set u = null
return false
endfunction
function YDWEAddAIOrder takes unit u,integer N,integer index,string orderA,string orderB,string orderC,integer probability returns nothing
local integer i = YDWEGetIntegerByString(I2S(YDWEH2I(u)), "MercenaryAIOrder_Count")
local trigger trg
local string order=null
if i==0 then
set trg = CreateTrigger()
if N==1 then
call TriggerRegisterUnitEvent(trg, u, EVENT_UNIT_TARGET_IN_RANGE) //<EFBFBD>÷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>¼<EFBFBD>
else
call TriggerRegisterUnitEvent(trg, u, EVENT_UNIT_ATTACKED ) //<EFBFBD>ñ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>¼<EFBFBD>
endif
call YDWESaveIntegerByString(I2S(YDWEH2I(u)), "MercenaryTrigger",YDWEH2I(trg))
call YDWESaveTriggerConditionByString(I2S(YDWEH2I(trg)), "TriggerCondition",TriggerAddCondition(trg, Condition(function AIOrderRun))) //<EFBFBD>ðɣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD>Ƿdz<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ե<EFBFBD>
endif
if index == 1 then
set order=orderA
elseif index == 2 then
set order=orderB
elseif index == 3 then
set order=orderC
elseif index == 4 then
set order=orderA
endif
call YDWESaveIntegerByString(I2S(YDWEH2I(u)), "MercenaryAIOrder"+I2S(i), OrderId(order)) //ʹ<EFBFBD><EFBFBD>OrderIdҪ<EFBFBD><EFBFBD>OrderString<EFBFBD>õö<EFBFBD>
call YDWESaveIntegerByString(I2S(YDWEH2I(u)), "MercenaryAIOrder_Probability"+I2S(i), probability)
call YDWESaveIntegerByString(I2S(YDWEH2I(u)), "MercenaryAIOrder_Index"+I2S(i), index)
call YDWESaveIntegerByString(I2S(YDWEH2I(u)), "MercenaryAIOrder_Count", i+1)
set trg = null
endfunction
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ<EFBFBD><EFBFBD><EFBFBD>
function YDWEFlushAIOrder takes unit u returns nothing
local trigger trg=YDWEGetTriggerByString(I2S(YDWEH2I(u)), "MercenaryTrigger")
call TriggerRemoveCondition(trg,YDWEGetTriggerConditionByString(I2S(YDWEH2I(trg)), "TriggerCondition"))
call DestroyTrigger(trg)
call YDWEFlushMissionByString(I2S(YDWEH2I(trg)))
call YDWEFlushMissionByString(I2S(YDWEH2I(u)))
set trg=null
endfunction
endlibrary
#endif /// YDWEAddAIOrderIncluded