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.
118 lines
4.0 KiB
118 lines
4.0 KiB
#ifndef YDWETriggerEventIncluded
|
|
#define YDWETriggerEventIncluded
|
|
|
|
//===========================================================================
|
|
//===========================================================================
|
|
//自定义事件
|
|
//===========================================================================
|
|
//===========================================================================
|
|
|
|
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
|
|
|
|
//===========================================================================
|
|
//任意单位伤害事件
|
|
//===========================================================================
|
|
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
|
|
|
|
//===========================================================================
|
|
//移动物品事件
|
|
//===========================================================================
|
|
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
|
|
|