a j j bones
New Member
- Reaction score
- 3
I got this system from Mr.Zero but its not working, it works off the level of the item and that is how much it should stack, but there not stacking.
JASS:
function ISS_Set_Charges takes nothing returns nothing
local integer i = 0
local item a = GetManipulatedItem()
local unit b = GetManipulatingUnit()
if (GetItemCharges(a)>=1) then
loop
exitwhen i>5
if (((UnitItemInSlot(b,i)!=a)and(GetItemTypeId(UnitItemInSlot(b,i))==GetItemTypeId(a)))and(GetItemCharges(UnitItemInSlot(b,i))<GetItemLevel(a))) then
if ((GetItemCharges(UnitItemInSlot(b,i))+GetItemCharges(a))<=GetItemLevel(a)) then
call SetItemCharges(UnitItemInSlot(b,i),(GetItemCharges(UnitItemInSlot(b,i))+GetItemCharges(a)))
call RemoveItem(a)
set i = 5
else
call SetItemCharges(a, ((GetItemCharges(UnitItemInSlot(b, i)) + GetItemCharges(a))) - GetItemLevel(a))
call SetItemCharges(UnitItemInSlot(b, i), GetItemLevel(a))
call UnitAddItem(b, a)
set i = 5
endif
endif
set i = i + 1
endloop
endif
set a = null
set b = null
return
endfunction
function ISS_Remove_Charges takes nothing returns nothing
local integer i
local integer b = GetIssuedOrderId()
local unit c = GetOrderedUnit()
local location d = GetUnitLoc(c)
local location e = Location(GetLocationX(d) + 80.00 * Cos(GetUnitFacing(c) * (3.14159/180.0)),GetLocationY(d) + 80.00 * Sin(GetUnitFacing(c) * (3.14159/180.0)))
local item f = GetOrderTargetItem()
local item g = UnitItemInSlot(c, (b - 852002))
if ((((b >= 852002) and (b <= 852007)) and (GetItemCharges(f) != 0) and (g != null))) then
if (f == g) then
set g = CreateItem(GetItemTypeId(f), GetLocationX(e), GetLocationY(e))
set i = GetItemCharges(g)
call RemoveItem(g)
if (GetItemCharges(f) > i) then
call SetItemCharges(f, (GetItemCharges(f) - i))
set g = CreateItem(GetItemTypeId(f), GetLocationX(e), GetLocationY(e))
call SetItemCharges(g, i)
set i = 0
loop
exitwhen i > 5
if ( UnitItemInSlot(c, i) == null) then
call DisableTrigger(gg_trg_Item_Stacking_System)
call UnitAddItem(c, g)
call EnableTrigger(gg_trg_Item_Stacking_System)
set i = 5
endif
set i = i + 1
endloop
else
call UnitRemoveItem(c, f)
call SetItemPosition(f, GetLocationX(e), GetLocationY(e))
endif
else
if (((GetItemTypeId(f) == GetItemTypeId(g)) and (f != g)) and (GetItemCharges(f) < GetItemLevel(f))) then
if ((GetItemCharges(f) + GetItemCharges(g)) <= GetItemLevel(f)) then
call SetItemCharges(f, (GetItemCharges(f) + GetItemCharges(g)))
call RemoveItem(g)
else
call SetItemCharges(g, ((GetItemCharges(f) + GetItemCharges(g))) - GetItemLevel(f))
call SetItemCharges(f, GetItemLevel(f))
endif
endif
endif
endif
set c = null
set f = null
set g = null
call RemoveLocation(d)
call RemoveLocation(e)
return
endfunction
//===========================================================================
function InitTrig_Item_Stacking_System takes nothing returns nothing
local integer i = 0
local trigger ISS_Remove_Charges_Trigger = CreateTrigger()
set gg_trg_Item_Stacking_System = CreateTrigger()
loop
exitwhen i == bj_MAX_PLAYER_SLOTS
call TriggerRegisterPlayerUnitEvent(gg_trg_Item_Stacking_System, Player(i), EVENT_PLAYER_UNIT_PICKUP_ITEM, null)
call TriggerRegisterPlayerUnitEvent(ISS_Remove_Charges_Trigger, Player(i), EVENT_PLAYER_UNIT_ISSUED_TARGET_ORDER, null)
set i = i + 1
endloop
call TriggerAddAction(gg_trg_Item_Stacking_System, function ISS_Set_Charges)
call TriggerAddAction(ISS_Remove_Charges_Trigger, function ISS_Remove_Charges)
set ISS_Remove_Charges_Trigger = null
endfunction