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.

119 lines
4.0 KiB

3 years ago
#ifndef YDWETriggerEventIncluded
#define YDWETriggerEventIncluded
//===========================================================================
//===========================================================================
//<EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
//===========================================================================
//===========================================================================
library YDWETriggerEvent
globals
#ifndef YDWE_DamageEventTrigger
#define YDWE_DamageEventTrigger
trigger yd_DamageEventTrigger = null
#endif
private trigger array DamageEventQueue
private integer DamageEventNumber = 0
item bj_lastMovedItemInItemSlot = null
private trigger MoveItemEventTrigger = null
private trigger array MoveItemEventQueue
private integer MoveItemEventNumber = 0
endglobals
//===========================================================================
//<EFBFBD><EFBFBD><EFBFBD>ⵥλ<EFBFBD>˺<EFBFBD><EFBFBD>¼<EFBFBD>
//===========================================================================
function YDWEAnyUnitDamagedTriggerAction takes nothing returns nothing
local integer i = 0
loop
exitwhen i >= DamageEventNumber
if DamageEventQueue[i] != null and IsTriggerEnabled(DamageEventQueue[i]) and TriggerEvaluate(DamageEventQueue[i]) then
call TriggerExecute(DamageEventQueue[i])
endif
set i = i + 1
endloop
endfunction
function YDWEAnyUnitDamagedFilter takes nothing returns boolean
if GetUnitAbilityLevel(GetFilterUnit(), 'Aloc') <= 0 then
call TriggerRegisterUnitEvent(yd_DamageEventTrigger, GetFilterUnit(), EVENT_UNIT_DAMAGED)
endif
return false
endfunction
function YDWEAnyUnitDamagedEnumUnit takes nothing returns nothing
local trigger t = CreateTrigger()
local region r = CreateRegion()
local group g = CreateGroup()
call RegionAddRect(r, GetWorldBounds())
call TriggerRegisterEnterRegion(t, r, Condition(function YDWEAnyUnitDamagedFilter))
call GroupEnumUnitsInRect(g, GetWorldBounds(), Condition(function YDWEAnyUnitDamagedFilter))
call DestroyGroup(g)
set r = null
set t = null
set g = null
endfunction
function YDWESyStemAnyUnitDamagedRegistTrigger takes trigger trg returns nothing
if trg == null then
return
endif
if DamageEventNumber == 0 then
set yd_DamageEventTrigger = CreateTrigger()
call TriggerAddAction(yd_DamageEventTrigger, function YDWEAnyUnitDamagedTriggerAction)
call YDWEAnyUnitDamagedEnumUnit()
endif
set DamageEventQueue[DamageEventNumber] = trg
set DamageEventNumber = DamageEventNumber + 1
endfunction
//===========================================================================
//<EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD>¼<EFBFBD>
//===========================================================================
function YDWESyStemItemUnmovableTriggerAction takes nothing returns nothing
local integer i = 0
if GetIssuedOrderId() >= 852002 and GetIssuedOrderId() <= 852007 then
set bj_lastMovedItemInItemSlot = GetOrderTargetItem()
loop
exitwhen i >= MoveItemEventNumber
if MoveItemEventQueue[i] != null and IsTriggerEnabled(MoveItemEventQueue[i]) and TriggerEvaluate(MoveItemEventQueue[i]) then
call TriggerExecute(MoveItemEventQueue[i])
endif
set i = i + 1
endloop
endif
endfunction
function YDWESyStemItemUnmovableRegistTrigger takes trigger trg returns nothing
if trg == null then
return
endif
if MoveItemEventNumber == 0 then
set MoveItemEventTrigger = CreateTrigger()
call TriggerAddAction(MoveItemEventTrigger, function YDWESyStemItemUnmovableTriggerAction)
call TriggerRegisterAnyUnitEventBJ(MoveItemEventTrigger, EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER)
endif
set MoveItemEventQueue[MoveItemEventNumber] = trg
set MoveItemEventNumber = MoveItemEventNumber + 1
endfunction
function GetLastMovedItemInItemSlot takes nothing returns item
return bj_lastMovedItemInItemSlot
endfunction
endlibrary
#endif /// YDWETriggerEventIncluded