HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

ITem test not working right.

04-03-2009, 01:24 PM#1
wraithseeker
Collapse JASS:
library BackpackSys

globals
    //                                     vvvv
    private constant integer BackpackId = 'A000'
    //Change this to the ID of the backpack item in your map.
endglobals

private struct Data
 //! runtextmacro PUI()
    integer array ItemType[6]
    integer array Charges[6]
    integer array UserData[6]
    
    static method Create takes unit u returns Data
        local Data d = Data.create()
        local integer i = 0
        local item it
        local integer id
        loop
            set it = UnitItemInSlot(u, i)
            set id = GetItemTypeId(it)
            if GetSpellAbilityId() == BackpackId then
                set d.ItemType[i] = id
                set d.Charges[i] = GetItemCharges(it)
                set d.UserData[i] = GetItemUserData(it)
                call RemoveItem(it)
            else
                set d.ItemType[i] = 0
                set d.Charges[i] = 0
                set d.UserData[i] = 0
            endif
            set i = i + 1
            exitwhen i > 5
        endloop
        set it = null
        return d
    endmethod
endstruct

function ActivateBackpack takes unit target returns nothing
    local Data d1
    local Data d2 = Data[target]
    local integer i = 0
    local item it
    if d2 == 0 then
    set Data[target] = d2
    endif
    if GetSpellAbilityId() == BackpackId then
        set d1 = Data.Create(target)
      
        if d2 != 0 then
            loop
                if d2.ItemType[i] != 0  then
                    set it = UnitAddItemById(target, d2.ItemType[i])
                    call SetItemCharges(it, d2.Charges[i])
                    call SetItemUserData(it, d2.UserData[i])
                endif
                set i = i + 1
                exitwhen i > 5
            endloop
        endif
        call SetUnitUserData(target, d1)
    endif
    set it = null
endfunction

endlibrary

This code gave me syntax error with PUI GetUnitIndex library?
04-03-2009, 03:03 PM#2
Hans_Maulwurf
Quote:
Originally Posted by wraithseeker
This code gave me syntax error with PUI GetUnitIndex library?

me too


Collapse JASS:
library BackpackSys requires PUI

this way it didnt
04-03-2009, 03:12 PM#3
wraithseeker
Collapse JASS:
library BackpackSys requires PUI

globals
    //                                     vvvv
    private constant integer BackpackId = 'A000'
    //Change this to the ID of the backpack item in your map.
endglobals

private struct Data
    //! runtextmacro PUI()
    integer array ItemType[6]
    integer array Charges[6]
    integer array UserData[6]
    
    static method Create takes unit u returns Data
        local Data d = Data.create()
        local integer i = 0
        local item it
        local integer id
              set d = Data[u]
        loop
            set it = UnitItemInSlot(u, i)
            set id = GetItemTypeId(it)
            if GetSpellAbilityId() == BackpackId then
                set d.ItemType[i] = id
                set d.Charges[i] = GetItemCharges(it)
                set d.UserData[i] = GetItemUserData(it)
                call RemoveItem(it)
            else
                set d.ItemType[i] = 0
                set d.Charges[i] = 0
                set d.UserData[i] = 0
            endif
            set i = i + 1
            exitwhen i > 5
        endloop
        set it = null
        return d
    endmethod
endstruct

function ActivateBackpack takes unit target returns nothing
    local Data d1
    local Data d2 = Data[target]
    local integer i = 0
    local item it
    if d2 == 0 then
    set Data[target] = d2
    set d2 = Data.Create(target)
    endif
    if GetSpellAbilityId() == BackpackId then
        set d1 = Data.Create(target)
      
        if d2 != 0 then
            loop
                if d2.ItemType[i] != 0  then
                    set it = UnitAddItemById(target, d2.ItemType[i])
                    call SetItemCharges(it, d2.Charges[i])
                    call SetItemUserData(it, d2.UserData[i])
                endif
                set i = i + 1
                exitwhen i > 5
            endloop
        endif
       // call SetUnitUserData(target, d1)
    endif
    set it = null
endfunction

endlibrary

Right now i am trying to replace SetUnitUserData and GetUnitUserData with PUI, can anyone tell me what is wrong?
04-03-2009, 06:54 PM#4
Hans_Maulwurf
To replace UnitData:
Frist you create a array in the globals section, for each Data you wanna use
eg:
Collapse JASS:
globals
    //                                     vvvv
    private constant integer BackpackId = 'A000'
    //Change this to the ID of the backpack item in your map.
    private integer array MyData
endglobals


and then you attach your data to it like that:
set MyData[GetUnitIndex(target)] = d1 instead of call SetUnitUserData(target, d1)

and get it like that:
MyData[GetUnitIndex(target)] instead of GetUnitUserData(target)


but what u mean with "can anyone tell me what is wrong?"
04-04-2009, 01:16 AM#5
wraithseeker
solved