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.

64 lines
2.5 KiB

#ifndef YDWEItemAbilitySystemIncluded
#define YDWEItemAbilitySystemIncluded
#include "YDWEBase.j"
library YDWEItemAbilitySystem initializer YDWEItemAbilitySystemInit requires YDWEBase
//===========================================================================
//物品属性系
//===========================================================================
function YDWEItemAbilityStorage takes integer itid,integer ab returns nothing
local integer index = YDWEGetIntegerByString(I2S(itid),"AbilityStorageIndex")
set index = index + 1
call YDWESaveIntegerByString(I2S(itid),"AbilityStorage"+I2S(index),ab)
call YDWESaveIntegerByString(I2S(itid),"AbilityStorageIndex",index)
endfunction
//===========================================================================
//拾取物品触发
//===========================================================================
function YDWEItemAbilitySystemByAbility_CON takes nothing returns boolean
local unit hero = GetTriggerUnit()
local item it=GetManipulatedItem()
local trigger trg=YDWEGetTriggerByString(I2S(YDWEH2I(hero)), "MulItemSlotByAbility")
local integer itid=GetItemTypeId(it)
local integer index = YDWEGetIntegerByString(I2S(itid),"AbilityStorageIndex")
local integer array skills
local integer i=0
local integer N=YDWEGetIntegerByString(I2S(YDWEH2I(trg)), "ItemSlotNum")
local boolean OnOff=YDWEGetBooleanByString(I2S(YDWEH2I(hero)), "YDWEItemAbilitySystemTriggerClose")
if index==0 or OnOff==true then
set it=null
set hero=null
set trg=null
return false
endif
loop
set i=i+1
exitwhen i>index
set skills[i] = YDWEGetIntegerByString(I2S(itid),"AbilityStorage"+I2S(i))
if GetTriggerEventId()==EVENT_PLAYER_UNIT_DROP_ITEM then
call UnitRemoveAbility(hero,skills[i])
elseif GetTriggerEventId()==EVENT_PLAYER_UNIT_PICKUP_ITEM then
call UnitAddAbility(hero,skills[i])
call UnitMakeAbilityPermanent(hero,true,skills[i])
endif
endloop
set it=null
set hero=null
set trg=null
return false
endfunction
function YDWEItemAbilitySystemInit takes nothing returns nothing
local trigger trg = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(trg,EVENT_PLAYER_UNIT_PICKUP_ITEM)
call TriggerRegisterAnyUnitEventBJ(trg,EVENT_PLAYER_UNIT_DROP_ITEM)
call TriggerAddCondition(trg, Condition(function YDWEItemAbilitySystemByAbility_CON))
set trg=null
endfunction
endlibrary
#endif