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.

211 lines
8.0 KiB

#ifndef YDWEDoubleItemSlotByItemIncluded
#define YDWEDoubleItemSlotByItemIncluded
#include "YDWEBase.j"
//===========================================================================
//¶àÖØÎïÆ·À¸
//===========================================================================
library YDWEDoubleItemSlotByItem requires YDWEBase
function YDWEIsItemSwitch takes unit u returns boolean
return YDWEGetBooleanByString(I2S(YDWEH2I(u)), "YDWEItemAbilitySystemTriggerClose")
endfunction
function YDWEItemSwitch takes unit Ua,unit Ub returns nothing
local item array Ia
local item array Ib
local integer i = 0
call YDWESaveBooleanByString(I2S(YDWEH2I(Ua)), "YDWEItemAbilitySystemTriggerClose",true)
call SetUnitOwner(Ub,GetOwningPlayer(Ua),false)
loop
exitwhen i >5
if UnitItemInSlot(Ua, i) != null then
set Ia[i]= UnitItemInSlot(Ua, i)
call UnitRemoveItemFromSlot(Ua,i)
endif
if UnitItemInSlot(Ub, i) != null then
set Ib[i]= UnitItemInSlot(Ub, i)
call UnitRemoveItemFromSlot(Ub,i)
endif
set i = i+1
endloop
set i = 0
loop
exitwhen i >5
if Ia[i] == null then
call UnitAddItem(Ub,CreateItem('stpg',GetUnitX(Ub),GetUnitY(Ub)))
else
call UnitAddItem(Ub,Ia[i])
endif
set i = i+1
endloop
//¸øAµÄÎïÆ·
set i = 0
loop
exitwhen i >5
if Ib[i] == null then
call UnitAddItem(Ua,CreateItem('stpg',GetUnitX(Ua),GetUnitY(Ua)))
else
call UnitAddItem(Ua,Ib[i])
endif
set i = i+1
endloop
set i = 0
loop
exitwhen i >5
if GetItemTypeId(UnitItemInSlot(Ua,i))=='stpg' then
call RemoveItem(UnitItemInSlot(Ua,i))
endif
if GetItemTypeId(UnitItemInSlot(Ub,i))=='stpg' then
call RemoveItem(UnitItemInSlot(Ub,i))
endif
set i = i+1
endloop
set i = 0
loop
exitwhen i >5
set Ia[i]=null
set Ib[i]=null
set i = i+1
endloop
call SetUnitOwner(Ub,Player(PLAYER_NEUTRAL_PASSIVE),false)
call YDWESaveBooleanByString(I2S(YDWEH2I(Ua)), "YDWEItemAbilitySystemTriggerClose",false)
endfunction
function YDWEDoubleItemSlotByAbility_CON takes nothing returns boolean
local unit u = null
local trigger trg = GetTriggeringTrigger()
local unit hero = GetTriggerUnit()
local integer ab = YDWEGetIntegerByString(I2S(YDWEH2I(trg)),"Ability")
local integer ItemSlotMax=YDWEGetIntegerByString(I2S(YDWEH2I(trg)),"ItemSlotMax")
local integer i=0
if GetSpellAbilityId() !=ab then
set u=null
set trg=null
set hero=null
return false
endif
if ItemSlotMax == 1 then
set u=null
set trg=null
set hero=null
return false
endif
set i=YDWEGetIntegerByString(I2S(YDWEH2I(trg)),"ItemSlotNum")
set i=i+1
if i>ItemSlotMax then
set i=1
endif
call YDWESaveIntegerByString(I2S(YDWEH2I(trg)),"ItemSlotNum",i)
set u=YDWEGetUnitByString(I2S(YDWEH2I(trg)),I2S(i))
call YDWEItemSwitch(hero,u)
call SetUnitAbilityLevel(hero,ab,i)
if i==1 then
call YDWESaveUnitByString(I2S(YDWEH2I(trg)),I2S(ItemSlotMax),u)
else
call YDWESaveUnitByString(I2S(YDWEH2I(trg)),I2S(i-1),u)
endif
set u=null
set trg=null
set hero=null
return false
endfunction
function YDWEDoubleItemSlotByAbility takes unit hero,integer ab,integer uid,integer MaxItemSlot returns nothing
local integer i = YDWEGetIntegerByString(I2S(YDWEH2I(hero)),"MulItemSlotByAbility")
local trigger trg = null
local unit u=null
if i==0 then
set trg = CreateTrigger()
call TriggerRegisterUnitEvent(trg, hero, EVENT_UNIT_SPELL_EFFECT)
call TriggerAddCondition(trg, Condition(function YDWEDoubleItemSlotByAbility_CON))
call YDWESaveTriggerByString(I2S(YDWEH2I(hero)),"MulItemSlotByAbility",trg)
call YDWESaveIntegerByString(I2S(YDWEH2I(trg)),"Ability",ab)
call YDWESaveIntegerByString(I2S(YDWEH2I(trg)),"ItemSlotMax",MaxItemSlot)
call YDWESaveIntegerByString(I2S(YDWEH2I(trg)),"ItemSlotNum",1)
if MaxItemSlot>1 then
loop
exitwhen MaxItemSlot==1
set u=CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),uid,0,0,0)
call YDWESaveBooleanByString(I2S(YDWEH2I(u)), "YDWEItemAbilitySystemTriggerClose",true)
call YDWESaveUnitByString(I2S(YDWEH2I(trg)),I2S(MaxItemSlot),u)
set MaxItemSlot=MaxItemSlot-1
set u=null
endloop
endif
endif
set trg=null
endfunction
function YDWEDoubleItemSlotByItem_CON takes nothing returns boolean
local unit u = null
local trigger trg = GetTriggeringTrigger()
local unit hero = GetTriggerUnit()
local integer itid = YDWEGetIntegerByString(I2S(YDWEH2I(trg)),"ItemTypeId")
local integer ItemSlotMax=YDWEGetIntegerByString(I2S(YDWEH2I(trg)),"ItemSlotMax")
local integer i=0
if GetItemTypeId(GetManipulatedItem()) !=itid then
set u=null
set trg=null
set hero=null
return false
endif
if ItemSlotMax == 1 then
set u=null
set trg=null
set hero=null
return false
endif
set i=YDWEGetIntegerByString(I2S(YDWEH2I(trg)),"ItemSlotNum")
set i=i+1
if i>ItemSlotMax then
set i=1
endif
call YDWESaveIntegerByString(I2S(YDWEH2I(trg)),"ItemSlotNum",i)
set u=YDWEGetUnitByString(I2S(YDWEH2I(trg)),I2S(i))
call YDWEItemSwitch(hero,u)
call SetItemCharges(UnitItemInSlot(hero,5),i)
if i==1 then
call YDWESaveUnitByString(I2S(YDWEH2I(trg)),I2S(ItemSlotMax),u)
else
call YDWESaveUnitByString(I2S(YDWEH2I(trg)),I2S(i-1),u)
endif
set u=null
set trg=null
set hero=null
return false
endfunction
function YDWEDoubleItemSlotByItem takes unit hero,integer ItemTypeId,integer uid,integer MaxItemSlot returns nothing
local integer i = YDWEGetIntegerByString(I2S(YDWEH2I(hero)),"MulItemSlotByItem")
local trigger trg = null
local unit u=null
local item it=null
if i==0 then
set trg = CreateTrigger()
call TriggerRegisterUnitEvent(trg, hero, EVENT_UNIT_USE_ITEM)
call TriggerAddCondition(trg, Condition(function YDWEDoubleItemSlotByItem_CON))
call YDWESaveTriggerByString(I2S(YDWEH2I(hero)),"MulItemSlotByItem",trg)
call YDWESaveIntegerByString(I2S(YDWEH2I(trg)),"ItemTypeId",ItemTypeId)
call YDWESaveIntegerByString(I2S(YDWEH2I(trg)),"ItemSlotMax",MaxItemSlot)
call YDWESaveIntegerByString(I2S(YDWEH2I(trg)),"ItemSlotNum",1)
if MaxItemSlot>1 then
loop
exitwhen MaxItemSlot==1
set u=CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),uid,0,0,0)
call YDWESaveBooleanByString(I2S(YDWEH2I(u)), "YDWEItemAbilitySystemTriggerClose",true)
call YDWESaveUnitByString(I2S(YDWEH2I(trg)),I2S(MaxItemSlot),u)
set it=CreateItem(ItemTypeId, 0, 0)
call UnitAddItem(u,it)
call UnitDropItemSlot(u,it,5)
set MaxItemSlot=MaxItemSlot-1
set u=null
set it=null
endloop
endif
endif
set trg=null
endfunction
endlibrary
#endif /// YDWEDoubleItemSlotByItemIncluded