jass基础-公式合成道具

// 道具合成
library demo initializer test
globals
HechengTemplate array hcArr
integer index
endglobals
function getPackageItemCount takes unit u, integer itemTypeId returns integer
local integer i = 0
local integer count = 0
local item tempItem
loop
exitwhen i >= 6
set tempItem = UnitItemInSlot(u, i)
if tempItem != null and GetItemTypeId(tempItem) == itemTypeId then
set count = count + 1
endif
set i = i + 1
endloop
set tempItem = null
return count
endfunction
struct HechengTemplate
integer itemTypeId0
integer itemTypeCount0
integer itemTypeId1
integer itemTypeCount1
integer itemTypeId2
integer itemTypeCount2
integer itemTypeId3
integer itemTypeCount3
integer itemTypeId4
integer itemTypeCount4
integer itemTypeId5
integer itemTypeCount5
integer targetItemId
effect ef
public static method create takes integer id0, integer count0, integer id1, integer count1, integer id2, integer count2, integer id3, integer count3, integer id4, integer count4, integer id5, integer count5, integer targetId returns HechengTemplate
local HechengTemplate this = HechengTemplate.allocate()
set itemTypeId0 = id0
set itemTypeCount0 = count0
set itemTypeId1 = id1
set itemTypeCount1 = count1
set itemTypeId2 = id2
set itemTypeCount2 = count2
set itemTypeId3 = id3
set itemTypeCount3 = count3
set itemTypeId4 = id4
set itemTypeCount4 = count4
set itemTypeId5 = id5
set itemTypeCount5 = count5
set targetItemId = targetId
return this
endmethod
public method isEnough takes unit u returns boolean
if getPackageItemCount(u, this.itemTypeId0) >= this.itemTypeCount0 and getPackageItemCount(u, this.itemTypeId1) >= this.itemTypeCount1 and getPackageItemCount(u, this.itemTypeId2) >= this.itemTypeCount2 and getPackageItemCount(u, this.itemTypeId3) >= this.itemTypeCount3 and getPackageItemCount(u, this.itemTypeId4) >= this.itemTypeCount4 and getPackageItemCount(u, this.itemTypeId5) >= this.itemTypeCount5 then
return true
endif
return false
endmethod
endstruct
function doSomething takes nothing returns nothing
endfunction
function getItemIndex takes unit u, integer itemTypeId returns integer
local integer i = 0
loop
exitwhen i >= 6
if GetItemTypeId(UnitItemInSlot(u, i)) == itemTypeId then
return i
endif
set i = i + 1
endloop
return - 1
endfunction
function hecheng takes unit u, HechengTemplate ht returns nothing
local integer count = ht.itemTypeCount0
local integer index
loop
exitwhen count <= 0
set index = getItemIndex(u, ht.itemTypeId0)
if index != - 1 then
call RemoveItem(UnitItemInSlot(u, index))
endif
set count = count - 1
endloop
set count = ht.itemTypeCount1
if count > 0 then
loop
exitwhen count <= 0
set index = getItemIndex(u, ht.itemTypeId1)
if index != - 1 then
call RemoveItem(UnitItemInSlot(u, index))
endif
set count = count - 1
endloop
endif
set count = ht.itemTypeCount2
if count > 0 then
loop
exitwhen count <= 0
set index = getItemIndex(u, ht.itemTypeId2)
if index != - 1 then
call RemoveItem(UnitItemInSlot(u, index))
endif
set count = count - 1
endloop
endif
set count = ht.itemTypeCount3
if count > 0 then
loop
exitwhen count <= 0
set index = getItemIndex(u, ht.itemTypeId3)
if index != - 1 then
call RemoveItem(UnitItemInSlot(u, index))
endif
set count = count - 1
endloop
endif
set count = ht.itemTypeCount4
if count > 0 then
loop
exitwhen count <= 0
set index = getItemIndex(u, ht.itemTypeId4)
if index != - 1 then
call RemoveItem(UnitItemInSlot(u, index))
endif
set count = count - 1
endloop
endif
set count = ht.itemTypeCount5
if count > 0 then
loop
exitwhen count <= 0
set index = getItemIndex(u, ht.itemTypeId5)
if index != - 1 then
call RemoveItem(UnitItemInSlot(u, index))
endif
set count = count - 1
endloop
endif
call UnitAddItemById(u, ht.targetItemId)
set ht.ef = AddSpecialEffectTargetUnitBJ("overhead", u, "Abilities\\Spells\\Items\\AIsm\\AIsmTarget.mdl")
endfunction
function aaaa takes nothing returns nothing
if hcArr[index].ef != null then
call DestroyEffect(hcArr[index].ef)
endif
call DestroyTimer(GetExpiredTimer())
endfunction
function pickupNew takes nothing returns nothing
local unit u = GetTriggerUnit()
local timer tm = CreateTimer()
local integer i = 0
loop
exitwhen i >= 2
if hcArr[i].isEnough(u) then
call hecheng(u, hcArr[i])
set index = i
call TimerStart(tm, 2, false, function aaaa)
return
endif
set i = i + 1
endloop
set u = null
set tm = null
endfunction
function triggerInit takes nothing returns nothing
local trigger t = CreateTrigger()
local trigger t2 = CreateTrigger()
call TriggerRegisterPlayerChatEvent(t, Player(0), "1", true)
call TriggerAddAction(t, function doSomething)
call TriggerRegisterAnyUnitEventBJ(t2, EVENT_PLAYER_UNIT_PICKUP_ITEM)
call TriggerAddAction(t2, function pickupNew)
call CreateUnit(Player(0), 'H000', - 100, - 100, 0)
set t = null
set t2 = null
call CreateItem('rin1', 0, 0 )
call CreateItem('rin1', 0, 0 )
call CreateItem('rin1', 0, 0 )
call CreateItem('rin1', 0, 0 )
call CreateItem('rin1', 0, 0 )
call CreateItem('rin1', 0, 0 )
call CreateItem('rag1', 100, 0 )
call CreateItem('rag1', 100, 0 )
call CreateItem('rag1', 100, 0 )
call CreateItem('rag1', 100, 0 )
call CreateItem('rag1', 100, 0 )
call CreateItem('rag1', 100, 0 )
call CreateItem('rst1', 200, 0 )
call CreateItem('rst1', 200, 0 )
call CreateItem('rst1', 200, 0 )
call CreateItem('rst1', 200, 0 )
call CreateItem('rst1', 200, 0 )
call CreateItem('rst1', 200, 0 )
call CreateItem('cnob', 300, 0 )
call CreateItem('cnob', 300, 0 )
call CreateItem('cnob', 300, 0 )
call CreateItem('cnob', 300, 0 )
call CreateItem('cnob', 300, 0 )
call CreateItem('cnob', 300, 0 )
endfunction
function gameInit takes nothing returns nothing
call FogEnable(false)
call FogMaskEnable(false)
endfunction
function test takes nothing returns nothing
call gameInit()
call triggerInit()
set hcArr[0] = HechengTemplate.create('rin1', 1, 'rag1', 1, 'rst1', 1, 0, 0, 0, 0, 0, 0, 'cnob')
set hcArr[1] = HechengTemplate.create('rin1', 1, 'rag1', 1, 'cnob', 1, 0, 0, 0, 0, 0, 0, 'clsd')
endfunction
endlibrary