|
|
|
|
#ifndef YDWEDoubleItemSlotByItemIncluded
|
|
|
|
|
#define YDWEDoubleItemSlotByItemIncluded
|
|
|
|
|
|
|
|
|
|
#include "YDWEBase.j"
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
|
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ<EFBFBD><EFBFBD>
|
|
|
|
|
//===========================================================================
|
|
|
|
|
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
|
|
|
|
|
//<EFBFBD><EFBFBD>A<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ʒ
|
|
|
|
|
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
|