欢迎光临散文网 会员登陆 & 注册

jass基础-合成代码整理

2023-07-28 00:02 作者:庞各庄大棚  | 我要投稿

//  道具合成

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 array itemTypeIdArr[6]

        integer array itemTypeCountArr[6]

       

        integer targetItemId


        effect ef


        string efId


        public static method create takes 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 targetId, string efId returns HechengTemplate

            local HechengTemplate this = HechengTemplate.allocate()

            set itemTypeIdArr[0] = itemTypeId0

            set itemTypeIdArr[1] = itemTypeId1

            set itemTypeIdArr[2] = itemTypeId2

            set itemTypeIdArr[3] = itemTypeId3

            set itemTypeIdArr[4] = itemTypeId4

            set itemTypeIdArr[5] = itemTypeId5

           

            set itemTypeCountArr[0] = itemTypeCount0

            set itemTypeCountArr[1] = itemTypeCount1

            set itemTypeCountArr[2] = itemTypeCount2

            set itemTypeCountArr[3] = itemTypeCount3

            set itemTypeCountArr[4] = itemTypeCount4

            set itemTypeCountArr[5] = itemTypeCount5


            set this.targetItemId = targetId

            set this.efId = efId

            return this

        endmethod

    endstruct


    function isEnough takes unit u, HechengTemplate ht returns boolean

        local integer i = 0


        loop

            exitwhen i >= 6

            if getPackageItemCount(u, ht.itemTypeIdArr[i]) < ht.itemTypeCountArr[i] then

                return false

            endif

            set i = i + 1

        endloop

        return true

    endfunction


    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

        local integer index

        local integer i = 0

        loop

            exitwhen i >= 6

            set count = ht.itemTypeCountArr[i]

            if count > 0 then

                loop

                    exitwhen count <= 0

                    set index = getItemIndex(u, ht.itemTypeIdArr[i])

                    if index != - 1 then

                        call RemoveItem(UnitItemInSlot(u, index))

                    endif

                    set count = count - 1

                endloop

            endif

            set i = i + 1

        endloop

        call UnitAddItemById(u, ht.targetItemId)

        set ht.ef = AddSpecialEffectTargetUnitBJ("overhead", u, ht.efId)

    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 isEnough(u, hcArr[i]) 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', "Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl")

        set hcArr[1] = HechengTemplate.create('rin1', 1, 'rag1', 1, 'cnob', 1, 0, 0, 0, 0, 0, 0, 'clsd', "Abilities\\Spells\\Items\\AIem\\AIemTarget.mdl")

    endfunction

endlibrary



jass基础-合成代码整理的评论 (共 条)

分享到微博请遵守国家法律