Need help with inventory system
Hey Guys,
I got following problem:
I added an esc version of The Witcher's MUI-inventory system to my map. Normally the inventory is supposed to open when pressing esc and the abilities "drop to normal inventor" and "equip" should appear. The problem is: You're inside a shop and press esc. Somehow the abilities appear inside the shop, but the inventory does not open. (I dont want the inventory to open while inside a shop nor do I want these abilities to show up) Also If possible I'd prefer to have the system without any abilities just by pressing keys. (for example to equip an item) I am a TOTAL NOOB at JASS! s please help me guys! I already contacted The Witcher about 3 times (the first time about 2 or 3 months ago and the last time one or two weeks ago) but he didn't answer. I am grateful for the system and I'd like to get it working in my map. Here is the Code:
Please help me with this! I'm counting in YOU!
Hey Guys,
I got following problem:
I added an esc version of The Witcher's MUI-inventory system to my map. Normally the inventory is supposed to open when pressing esc and the abilities "drop to normal inventor" and "equip" should appear. The problem is: You're inside a shop and press esc. Somehow the abilities appear inside the shop, but the inventory does not open. (I dont want the inventory to open while inside a shop nor do I want these abilities to show up) Also If possible I'd prefer to have the system without any abilities just by pressing keys. (for example to equip an item) I am a TOTAL NOOB at JASS! s please help me guys! I already contacted The Witcher about 3 times (the first time about 2 or 3 months ago and the last time one or two weeks ago) but he didn't answer. I am grateful for the system and I'd like to get it working in my map. Here is the Code:
JASS:
[SIZE="4"] // The_Witcher's Multiboard Equipment and Inventory System
//
//This is a MUI inventory-in-a-multiboard-system.
//it allows you to add an inventory to any unit
//the inventory has a part for equipment and a part for a "normal" inventory
//you can register items for this system (unregistered ones won't move inside the inventory),
//check whether a unit has a item of type xy in its inventory, force dropping of an item of type,
//directly remove a item of type xy from the iventory from the game or check whether a itemtype is already registered
//
// when you give a unit a inventory it will only open when you cast the open ability. you can navigate with the arrow keys.
// items with charges will stack automatically. to add an item right click on it and the right click again on the "Inventory" item.
// when autoadd is enabled all pickuped items which are registered will be added automatically
//
// here are the included functions:
//
// 1.to give a unit the inventory use
//
// call InitInventory(ToWhichUnit)
// unit
//
// 2.To get rid of a inventory just use
// call DestroyInventory( which unit's)
// unit
//
// 3.to register an item for this system use(if the item shouldn't be equipable enter 0 for UsedSlotWhenEquipment. the abilities can be 0 then, too.)
// call RegisterItem(itemid, ItemDescription, PathToIcon, ability1, ability2, ability3, UsedSlotWhenEquipment)
// integer string string integer integer integer integer
//
// 4.to check whether you have an item already registered use(it will return true or false)
// call IsItemRegistered(itemid)
// integer
//
// 5.to force dropping of a item use (it will drop the first found item of that type)
// call DropItemById(fromWhich, itemid)
// unit integer
//
// 6.to remove an item directly use ( it will remove the first found item of that type)
// call RemoveItemById(FromWhichUnit, itemid)
// unit integer
//
// 7.to check whether a unit has an item of type xy use
// call UnitHasItemOfId(WhichUnit, itemid)
// unit integer
//
// 8.to change the description of a registered itemtype use
// call ChangeItemDescription(itemid, newdescription)
// integer string
//
// 9.to manually enable/disable the auto add for a specific unit use
// call ForceAutoAdd(forwhich, flag)
// unit boolean
//
//
// to implement this system, just copy this trigger in your map
// it requires jngp to be edited/saved
//
// have fun^^
//
//--------------------------------
//--------The SETUP PART----------
//--------------------------------
globals
private constant integer dropabi = 'A002' // the ability to drop the selected item to the normal inventory
private constant integer equipabi = 'A003' // the ability to equip the selected item
private constant integer autoadd = 'A005' // the ability to enable/disable autoadd
private constant integer inventitem = 'I00E' // the rawcode of the invetory item you use to add single items
private constant string emptyslot = "[------]" // the text shown when a slot is not used
private constant string NewLine = "PP" // the text used in the description to show the parser that he should start a new line (\n will NOT work)
private constant string name = "|cff0863B5" // the colorcode of the Name of the selected item in the info part
private constant string description = "|cff08B5FF" // the colorcode of the description of the selected item in the info part
private constant string help = "|cffE62929" // the colorcode of the help texts
private constant string titles = "|cffFFCC00" // the colorcode of the names of the cathegories
private constant integer classes = 10 // the amount of different classes you have for equipable items
private constant boolean autoadd_enabled = false // if this is false units won't get the autoadd ability. autoadd is only possible by functions then.
//make sure that you synch the following hotkey variables with the hotkeys of the abilities in the object editor
private constant string HotkeyExit = "Esc" // the hotkey for opening/closing the multiboard inventory
private constant string HotkeyDrop = "D" // the hotkey for dropping an item
private constant string HotkeyEquip = "E" // the hotkey for equiping/unequiping an item
private constant string HotkeyAutoadd = "T" // the hotkey for Enabling/Disabling the AutoAdd feature
private string array EquipName // ignore this one here
endglobals
private function InitItems takes nothing returns nothing // use this function to register all the items you want to be registered from the start
// potion
// call RegisterItem.evaluate('phea',"Heals very good, and is very healthy...","ReplaceableTextures\\CommandButtons\\BTNPotionGreenSmall.blp",0,0,0,0)
// clear vision
// call RegisterItem.evaluate('plcl',"For clear vision.PPEnables best underwaterview ever seen.PPAlso is very userfriendly!!!","ReplaceableTextures\\CommandButtons\\BTNLesserClarityPotion.blp",0,0,0,0)
// sword
// call RegisterItem.evaluate('I001',"This is just a normal sword!PP PPType: Mainhand.PPAdds 5 Damage.","ReplaceableTextures\\CommandButtons\\BTNDaggerOfEscape.blp",'A004',0,0,2)
// big sword
// call RegisterItem.evaluate('I002',"This sword is very huge!PPIt deals epic damage!!PP PPType: Mainhand.PPAdds 20 Damage.","ReplaceableTextures\\CommandButtons\\BTNArcaniteMelee.blp",'A006',0,0,2)
// big shield
// call RegisterItem.evaluate('I003',"A heavy shield. Helping even against strong blows.PP PPType: Offhand.PPAdds 10 Armor.","ReplaceableTextures\\CommandButtons\\BTNHumanArmorUpThree.blp",'A007',0,0,3)
// shield
// call RegisterItem.evaluate('I004',"A small shield. Helps only against light blows.PP PPType: Offhand.PPAdds 3 Armor.","ReplaceableTextures\\CommandButtons\\BTNHumanArmorUpOne.blp",'A008',0,0,3)
// cursed armor
// call RegisterItem.evaluate('I005',"This Armor is cursed and will help you, boosting your defensive and offensive skillsPP PPType: Armor.PPAdds 3 Armor and 4 damage.","ReplaceableTextures\\CommandButtons\\BTNMoonArmor.blp",'A009','A00A',0,4)
// special box
// call RegisterItem.evaluate('I006',"Huh? A small box with a paper in it:PP PPThis System is created by The_Witcher!!","ReplaceableTextures\\CommandButtons\\BTNBox.blp",0,0,0,8)
//Templer's blades
call RegisterItem.evaluate('I02V',"This Armor is cursed and will help you, boosting your defensive and offensive skillsPP PPType: Armor.PPAdds 3 Armor and 4 damage.","war3mapImported\\BTNCrossedSwords.blp",'A0TB','ATB2','ABTB',2)
//Rusty Sword
call RegisterItem.evaluate('I002',"This is only a cheap sword. Increases the damade by 10.PP PPType: Mainhand.PPAdds 10 damage.","war3mapImported\\BTNRustySword.blp",'A00N',0,0,2)
//Rusty Iron Helmet
call RegisterItem.evaluate('I005',"This is only a cheap helmet. Increases the HP by 100 and the armor by 1.PP PPType: Helmet.PPAdds 10 damage.","ReplaceableTextures\\CommandButtons\\BTNHelmutPurple.blp",'A00O','A00P',0,1)
//Leather Cap
call RegisterItem.evaluate('I006',"This cheap leathery cap grants you 10 speed and 1 mana per second.PP PPType: Helmet.PPAdds 10 speed and 1 mana regeneration. (does not add up with others).","ReplaceableTextures\\CommandButtons\\BTNHoodOfCunning.blp",'A00U','A00Y',0,1)
//knife
call RegisterItem.evaluate('I007',"Fast but low damage. Increases the attack speed by 10%.PP PPType: Mainhand.PPIncreases tha attackspeed by 10%.","war3mapImported\\BTNKnife.blp",'A01C',0,0,2)
//Disrupted shield
call RegisterItem.evaluate('I008',"A broken and worthless shield that still grants its owner 1.5 armor and 50HP..PP PPType: Offhand.PPIncreases tha armor by 2 and the HP by 50.","war3mapImported\\BTNShield.blp",'A032','A034',0,3)
//wooden vambrace
call RegisterItem.evaluate('I009',"A weak vambrace that will still shield from some weak attacks. Therefore it will increase the armor by 0.5 and the attack speed by 6%.PP PPType: Offhand.PPIncreases tha armor by 1 and the attackspeed by 6%.","war3mapImported\\BTNINV_Bracer_08.blp",'A00P','A035',0,3)
//Sharp stick
call RegisterItem.evaluate('I00A',"Just an ordinary wooden stick that does low damage (8).PP PPType: Offhand.PPgrants 8 damage.","war3mapImported\\BTNSharpWoodenStick.blp",'A03B',0,0,3)
//Fabric Torso
call RegisterItem.evaluate('I00B',"A cheap piece of cloth that grants the hero 50% mana regeneration and 100 mana.PP PPType: Armor.PPgrants 50% mana reg. and 100mana.","war3mapImported\\BTNMageArmor.blp",'A04I','A039',0,5)
//shabby leather armor
call RegisterItem.evaluate('I00C',"A cheap piece armor that grants the hero 10 attackspeed as well as 10 speed.PP PPType: Armor.PPgrants 10 attack speed and 10 speed.","war3mapImported\\BTNWoodenArmor2.blp",'A0IC','A00Y',0,5)
//Rusty Chainmail
call RegisterItem.evaluate('I00H',"A cheap piece armor that grants the hero 150 hp -bonus and 1 armor.PP PPType: Armor.PPgrants 150hp and 1 armor.","war3mapImported\\BTNINV_Chest_Chain_05.blp",'A03A','A00P',0,5)
//Copper Plates
call RegisterItem.evaluate('I00I',"A cheap piece armor that grants the hero 1 armor.PP PPType: Plates.PPgrants 1 armor.","war3mapImported\\BTNINV_Chest_Chain_08.blp",'A00P',0,0,4)
//Stone
call RegisterItem.evaluate('I0QJ',"Just an ordinary stone with some magical powers. It grants 50% more mana regeneration.PP PPType: Amulet.PPgrants 25% mana regeneration.","war3mapImported\\BTNINV_Misc_Rock_01.blp",'A039',0,0,8)
//sandals
call RegisterItem.evaluate('I00L',"Cheep shoes that allow you to walk 10 faster.PP PPType: Boots.PPgrants 10 speed","war3mapImported\\BTNSandalZ.blp",'A00Y',0,0,6)
//wooden ring
call RegisterItem.evaluate('I00L',"Just a cheap wooden ring. It grants the hero +25% mana regeneration.PP PPType: Ring.PPgrants 25% mana regeneration.","war3mapImported\\BTNINV_Jewelry_Ring_13.blp",'A04J',0,0,9)
endfunction
private function InitEquipment takes nothing returns nothing // use this function to set up the names of the equipment slots
set EquipName[1] = "[Helmet]"
set EquipName[2] = "[Mainhand]"
set EquipName[3] = "[Offhand]"
set EquipName[4] = "[Shoulder Plates]"
set EquipName[5] = "[Armor]"
set EquipName[6] = "[Boots]"
set EquipName[7] = "[Gloves]"
set EquipName[8] = "[Amulet]"
set EquipName[9] = "[Ring]"
set EquipName[10] = "[Special]"
endfunction
//--------------------------------
//---------END OF SETUP-----------
//--------------------------------
globals
private integer items = 1
private integer array itemm
private string array text
private string array iconpath
private integer array abi1
private integer array abi2
private integer array abi3
private integer array slot
private integer array x
private integer array y
private group g = CreateGroup()
private multiboard array board
private unit array t
private integer maxchars = 35
private hashtable h = InitHashtable()
private group d =CreateGroup()
private boolean array typebool
endglobals
function RegisterItem takes integer itemid, string description, string path, integer abil1, integer abil2, integer abil3, integer slott returns nothing
set items = items + 1
call SaveInteger(h,itemid,0,items)
set itemm[items] = itemid
set text[items] = description
set iconpath[items] = path
set abi1[items] = abil1
set abi2[items] = abil2
set abi3[items] = abil3
set slot[items] = slott + 1
endfunction
function ChangeItemDescription takes integer itemid, string newdescr returns nothing
set text[LoadInteger(h,itemid,0)] = newdescr
endfunction
function IsClassEnabled takes itemtype t returns boolean
local integer i = 0
loop
exitwhen i > 8
if ConvertItemType(i) == t then
return typebool[i]
endif
set i = i + 1
endloop
return false
endfunction
function EnableItemClass takes itemtype t, boolean flag returns nothing
local integer i = 0
loop
exitwhen i > 8
if ConvertItemType(i) == t then
set typebool[i] = flag
endif
set i = i + 1
endloop
endfunction
private struct data
unit u
multiboard m
integer lu = 1
item invent
boolean auto = false
integer array stack[99]
integer array slot2index[99]
endstruct
private function ParseString takes string toparse, integer i returns nothing
local integer s = 0
local integer line = 0
local integer linestart = 0
local integer spacepoint = 0
local boolean next = false
loop
exitwhen s > 28
call MultiboardSetItemValueBJ( board[i], 2, 9+s, "")
set s = s+ 1
endloop
set s = 0
loop
exitwhen linestart+s > StringLength(toparse)
set s = s+1
if SubString(toparse,linestart+s-1,linestart+s) == " " then
set spacepoint = linestart+s
endif
if SubString(toparse,linestart+s-StringLength(NewLine),linestart+s) == NewLine then
set spacepoint = linestart+s-StringLength(NewLine)
set s = maxchars
set next = true
endif
if s >= maxchars then
call MultiboardSetItemValueBJ( board[i], 2, 9+line, description + SubString(toparse,linestart,spacepoint ) + "|r" )
set linestart = spacepoint
set spacepoint = linestart
set s = 0
set line = line + 1
if next then
set next = false
set linestart = linestart + StringLength(NewLine)
endif
endif
endloop
call MultiboardSetItemValueBJ( board[i], 2, 9+line, description + SubString(toparse,linestart,StringLength(toparse) ) + "|r" )
endfunction
private function UpdateDescription takes integer i returns nothing
local item ite
local integer a = 2
local data dat = LoadInteger(h,GetHandleId(t[i]),1)
if dat == 0 then
return
endif
loop
exitwhen a > 28
if dat.slot2index[a] != 0 then
call MultiboardSetItemColorBJ(dat.m,3,a,100,100,100,0)
call MultiboardSetItemColorBJ(dat.m,4,a,100,100,100,0)
else
call MultiboardSetItemColorBJ(dat.m,3,a,50,50,50,0)
call MultiboardSetItemColorBJ(dat.m,4,a,50,50,50,0)
endif
set a = a + 1
endloop
set a = 30
loop
exitwhen a > 56
if dat.slot2index[a] != 0 then
call MultiboardSetItemColorBJ(dat.m,1,a-28,100,100,100,0)
else
call MultiboardSetItemColorBJ(dat.m,1,a-28,50,50,50,0)
endif
set a = a + 1
endloop
if x[i] == 1 then
call MultiboardSetItemColorBJ( dat.m, 1, y[i], 10, 100, 10, 0 )
else
call MultiboardSetItemColorBJ( dat.m, 3, y[i], 10, 100, 10, 0 )
call MultiboardSetItemColorBJ( dat.m, 4, y[i], 10, 100, 10, 0 )
endif
if x[i] == 1 then
set ite = CreateItem(itemm[dat.slot2index[y[i] + 28]],0,0)
call MultiboardSetItemValueBJ( dat.m, 2, 8, name + GetItemName(ite) + "|r" )
call RemoveItem(ite)
set ite = null
call ParseString(text[dat.slot2index[y[i] + 28]],i)
else
set ite = CreateItem(itemm[dat.slot2index[y[i]]],0,0)
call MultiboardSetItemValueBJ( dat.m, 2, 8, name + GetItemName(ite) + "|r" )
call RemoveItem(ite)
set ite = null
call ParseString(text[dat.slot2index[y[i]]],i)
endif
endfunction
private function AddItem takes item which, data dat returns nothing
local integer i = LoadInteger(h,GetItemTypeId(which),0)
local integer a = 0
local boolean b
if which == null then
return
endif
loop
exitwhen a > dat.lu
if itemm[dat.slot2index[a]] == GetItemTypeId(which) and GetItemCharges(which)!= 0 and dat.stack[a] < 99 then
set dat.stack[a] = dat.stack[a] + GetItemCharges(which)
call MultiboardSetItemValueBJ( dat.m, 4, a, I2S(dat.stack[a]) )
call RemoveItem(which)
return
endif
set a = a + 1
endloop
if dat.lu != 28 then
set dat.lu = dat.lu + 1
set dat.slot2index[dat.lu] = i
set dat.stack[dat.lu] = GetItemCharges(which)
call MultiboardSetItemStyleBJ( dat.m, 3, dat.lu, true, true )
call MultiboardSetItemIconBJ( dat.m, 3, dat.lu, iconpath[i] )
call MultiboardSetItemValueBJ( dat.m, 3, dat.lu, GetItemName(which) )
if dat.stack[dat.lu]!= 0 then
call MultiboardSetItemValueBJ( dat.m, 4, dat.lu, I2S(dat.stack[dat.lu]) )
endif
call RemoveItem(which)
endif
call UpdateDescription(GetPlayerId(GetOwningPlayer(dat.u)))
endfunction
private function InventoryRemoveItem takes integer i, data dat returns nothing
local integer k = y[i]
local item ite
if (x[i] == 3 and k > dat.lu) or (x[i] == 1 and dat.slot2index[k+28] == 0)then
return
endif
if x[i] == 1 then
call UnitRemoveAbility(dat.u,abi1[dat.slot2index[k+28]])
call UnitRemoveAbility(dat.u,abi2[dat.slot2index[k+28]])
call UnitRemoveAbility(dat.u,abi3[dat.slot2index[k+28]])
set dat.slot2index[k+28] = 0
call MultiboardSetItemValueBJ( dat.m, 1, k, EquipName[k-1] )
call MultiboardSetItemStyleBJ( dat.m, 1, k, true, false )
else
loop
call MultiboardSetItemIconBJ( dat.m, 3, k, iconpath[dat.slot2index[k+1]] )
set ite = CreateItem(itemm[dat.slot2index[k+1]],0,0)
call MultiboardSetItemValueBJ( dat.m, 3, k, GetItemName(ite) )
if dat.stack[k+1]!= 0 then
call MultiboardSetItemValueBJ( dat.m, 4, k, I2S(dat.stack[k+1]) )
else
call MultiboardSetItemValueBJ( dat.m, 4, k, "" )
endif
set dat.stack[k] = dat.stack[k+1]
call RemoveItem(ite)
set dat.slot2index[k] = dat.slot2index[k+1]
exitwhen k == dat.lu
set k = k + 1
endloop
call MultiboardSetItemStyleBJ( dat.m, 3, dat.lu, true, false )
call MultiboardSetItemValueBJ( dat.m, 3, dat.lu, emptyslot )
call MultiboardSetItemValueBJ( dat.m, 4, dat.lu, "" )
set dat.slot2index[dat.lu] = 0
set dat.stack[dat.lu] = 0
set dat.lu = dat.lu - 1
endif
set ite = null
call UpdateDescription(i)
endfunction
private function Unequip takes integer i,integer slot, data dat returns nothing
local integer k = slot
local item ite
if itemm[dat.slot2index[k+28]] == 0 then
return
endif
set ite = CreateItem(itemm[dat.slot2index[k+28]],0,0)
call AddItem(ite,dat)
call UnitRemoveAbility(dat.u,abi1[dat.slot2index[k+28]])
call UnitRemoveAbility(dat.u,abi2[dat.slot2index[k+28]])
call UnitRemoveAbility(dat.u,abi3[dat.slot2index[k+28]])
set dat.slot2index[k+28] = 0
call MultiboardSetItemValueBJ( dat.m, 1, k, EquipName[k-1] )
call MultiboardSetItemStyleBJ( dat.m, 1, k, true, false )
call UpdateDescription(i)
set ite = null
endfunction
private function Equip takes integer i, data dat returns nothing
local integer k = y[i]
local item ite
if k > dat.lu or slot[dat.slot2index[k]] == 1 then
return
endif
if dat.slot2index[slot[dat.slot2index[y[i]]]+28] != 0 then
set k = slot[dat.slot2index[k]]
set ite = CreateItem(itemm[dat.slot2index[k+28]],0,0)
call AddItem(ite,dat)
call UnitRemoveAbility(dat.u,abi1[dat.slot2index[k+28]])
call UnitRemoveAbility(dat.u,abi2[dat.slot2index[k+28]])
call UnitRemoveAbility(dat.u,abi3[dat.slot2index[k+28]])
set dat.slot2index[k+28] = 0
call MultiboardSetItemValueBJ( dat.m, 1, k, EquipName[k-1] )
call MultiboardSetItemStyleBJ( dat.m, 1, k, true, false )
set k = y[i]
endif
set dat.slot2index[slot[dat.slot2index[k]]+28] = dat.slot2index[k]
set ite = CreateItem(itemm[dat.slot2index[k]],0,0)
call MultiboardSetItemValueBJ( dat.m, 1, slot[dat.slot2index[k]], GetItemName(ite) )
call MultiboardSetItemIconBJ( dat.m, 1, slot[dat.slot2index[k]], iconpath[dat.slot2index[k]] )
call MultiboardSetItemStyleBJ( dat.m, 1, slot[dat.slot2index[k]], true, true )
call RemoveItem(ite)
call UnitAddAbility(dat.u,abi1[dat.slot2index[k]])
call UnitAddAbility(dat.u,abi2[dat.slot2index[k]])
call UnitAddAbility(dat.u,abi3[dat.slot2index[k]])
set ite = null
call InventoryRemoveItem(i,dat)
endfunction
function IsItemRegistered takes integer itemid returns boolean
return LoadInteger(h,itemid,0) != 0
endfunction
function InitInventory takes unit u returns nothing
local integer i = 2
local data dat = data.create()
set dat.u = u
set dat.m = CreateMultiboardBJ(4,30,"Inventory")
call MultiboardSetItemWidthBJ( dat.m, 1, 0, 25 )
call MultiboardSetItemWidthBJ( dat.m, 2, 0, 22 )
call MultiboardSetItemWidthBJ( dat.m, 3, 0, 25 )
call MultiboardSetItemWidthBJ( dat.m, 4, 0, 8 )
call MultiboardSetItemStyleBJ( dat.m, 0, 0, true, false )
call MultiboardSetItemValueBJ( dat.m, 3, 0, emptyslot )
call MultiboardSetItemValueBJ( dat.m, 3, 29, "" )
call MultiboardSetItemValueBJ( dat.m, 3, 30, "" )
call MultiboardSetItemValueBJ( dat.m, 3, 1, titles + "INVENTORY" + "|r")
call MultiboardSetItemValueBJ( dat.m, 1, 1, titles + "EQUIPMENT" + "|r")
call MultiboardSetItemValueBJ( dat.m, 2, 7, titles + "INFO" + "|r" )
call MultiboardSetItemValueBJ( dat.m, 2, 1, titles + "HELP" + "|r" )
call MultiboardSetItemValueBJ( dat.m, 4, 1, titles + "CHARGES" + "|r" )
call MultiboardSetItemValueBJ( dat.m, 2, 2, help + HotkeyExit +" = Exit" + "|r")
call MultiboardSetItemValueBJ( dat.m, 2, 3, help + HotkeyDrop +" = Drop to normal Inventory" + "|r")
call MultiboardSetItemValueBJ( dat.m, 2, 4, help + HotkeyEquip +" = Equip/Unequip" + "|r")
call MultiboardSetItemValueBJ( dat.m, 2, 5, help + HotkeyAutoadd +" = AutoPickup ON/OFF [OFF]" + "|r")
loop
exitwhen i == classes+2
call MultiboardSetItemValueBJ( dat.m, 1, i, EquipName[i-1] )
set i = i + 1
endloop
call MultiboardDisplay(dat.m,false)
if autoadd_enabled then
call UnitAddAbility(u,autoadd)
endif
call UnitRemoveItemFromSlot(u,5)
call UnitAddItemToSlotById(u,inventitem,5)
set dat.invent = UnitItemInSlot(u,5)
call GroupAddUnit(g,u)
call SaveInteger(h,GetHandleId(u),1,dat)
endfunction
function DestroyInventory takes unit u returns boolean
local data dat = LoadInteger(h,GetHandleId(u),1)
local integer i = 0
if dat == 0 then
return false
endif
call MultiboardDisplay(dat.m,false)
call UnitRemoveAbility(u,autoadd)
call UnitRemoveAbility(u,dropabi)
call UnitRemoveAbility(u,equipabi)
call UnitRemoveItemFromSlot(u,5)
call GroupRemoveUnit(g,u)
call FlushChildHashtable(h,GetHandleId(u))
call dat.destroy()
return true
endfunction
private function onEsc takes nothing returns nothing
local group g = CreateGroup()
local data dat
local unit u
local integer i = GetPlayerId(GetTriggerPlayer())
call GroupEnumUnitsSelected(g, GetTriggerPlayer(),null)
set u = FirstOfGroup(g)
call DestroyGroup(g)
set g = null
set dat = LoadInteger(h,GetHandleId(u),1)
if board[i] != null then
call MultiboardDisplay(board[i],false)
call UnitRemoveAbility(u,dropabi)
call UnitRemoveAbility(u,equipabi)
set board[i] = null
set t[i] = null
else
set x[i] = 3
set y[i] = 2
if GetLocalPlayer() == Player(i) then
call MultiboardDisplay(dat.m,true)
call MultiboardMinimize(dat.m, false)
endif
set board[i] = dat.m
set t[i] = dat.u
call UnitAddAbility(u,dropabi)
call UnitAddAbility(u,equipabi)
call UpdateDescription(i)
endif
endfunction
private function abilities takes nothing returns nothing
local data dat
local unit u = GetTriggerUnit()
local integer i = GetPlayerId(GetOwningPlayer(u))
local boolean b
if (GetSpellAbilityId() == dropabi) then
set dat = LoadInteger(h,GetHandleId(u),1)
set b = dat.auto
set dat.auto = false
if x[i] == 3 then
if dat.stack[y[i]]!=0 then
call SetItemCharges(UnitAddItemById(dat.u, itemm[dat.slot2index[y[i]]]),dat.stack[y[i]])
else
call UnitAddItemById(dat.u, itemm[dat.slot2index[y[i]]])
endif
else
call UnitAddItemById(dat.u, itemm[dat.slot2index[y[i]+28]])
endif
call InventoryRemoveItem(i,dat)
set dat.auto = b
elseif (GetSpellAbilityId() == equipabi) then
set dat = LoadInteger(h,GetHandleId(u),1)
if x[i] == 1 then
call Unequip(i,y[i], dat)
else
call Equip(i, dat)
endif
elseif (GetSpellAbilityId() == autoadd) then
set dat = LoadInteger(h,GetHandleId(u),1)
if dat.auto == false then
set dat.auto = true
call MultiboardSetItemValueBJ( dat.m, 2, 5, help + "T = AutoPickup ON/OFF [ON]" + "|r")
else
set dat.auto = false
call MultiboardSetItemValueBJ( dat.m, 2, 5, help + "T = AutoPickup ON/OFF [OFF]" + "|r")
endif
endif
set u = null
endfunction
private function GetXOfItemOfId takes unit u, integer itemid returns integer
local data dat = LoadInteger(h,GetHandleId(u),1)
local integer a = 0
loop
exitwhen a == 56
if itemm[dat.slot2index[a]] == itemid then
if a > 28 then
return 1
endif
return 3
endif
set a = a + 1
endloop
return 0
endfunction
private function GetYOfItemOfId takes unit u, integer itemid returns integer
local data dat = LoadInteger(h,GetHandleId(u),1)
local integer a = 0
loop
exitwhen a == 56
if itemm[dat.slot2index[a]] == itemid then
if a > 28 then
return a-28
endif
return a
endif
set a = a + 1
endloop
return 0
endfunction
private function AddingItemsAndMultiboardStuff takes nothing returns nothing
local data dat
local unit u
local item ite
local boolean b
local integer i = 0
loop
exitwhen i > bj_MAX_PLAYER_SLOTS
if board[i] != null then
if IsUnitSelected(t[i],Player(i)) == false then
set dat = LoadInteger(h,GetHandleId(t[i]),1)
call MultiboardDisplay(dat.m,false)
set board[i] = null
call UnitRemoveAbility(dat.u,dropabi)
call UnitRemoveAbility(dat.u,equipabi)
set t[i] = null
endif
if IsMultiboardMinimized(board[i]) and board[i] != null then
call MultiboardMinimize(board[i],false)
endif
endif
set i = i + 1
endloop
call GroupAddGroup(g,d)
loop
set u = FirstOfGroup(d)
exitwhen u == null
set ite = UnitItemInSlot(u,5)
if GetItemTypeId(ite) != inventitem then
if IsItemRegistered(GetItemTypeId(ite)) and IsClassEnabled(GetItemType(ite)) then
set dat = LoadInteger(h,GetHandleId(u),1)
if dat.lu == 28 then
call UnitRemoveItem(u,ite)
endif
call AddItem(ite,dat)
call RemoveItem(dat.invent)
call UnitAddItemToSlotById(u,inventitem,5)
set dat.invent = UnitItemInSlot(u,5)
if ite != null then
call UnitAddItem(u,ite)
endif
else
set dat = LoadInteger(h,GetHandleId(u),1)
set b = dat.auto
set dat.auto = false
call UnitRemoveItem(dat.u,ite)
call RemoveItem(dat.invent)
call UnitAddItemToSlotById(u,inventitem,5)
set dat.invent = UnitItemInSlot(u,5)
call UnitAddItem(dat.u,ite)
set dat.auto = b
endif
endif
call GroupRemoveUnit(d,u)
endloop
set ite = null
endfunction
function UnitHasItemOfId takes unit u, integer itemid returns boolean
local data dat = LoadInteger(h,GetHandleId(u),1)
local integer a = 0
if dat == 0 then
return false
endif
loop
exitwhen a == 56
if itemm[dat.slot2index[a]] == itemid then
return true
endif
set a = a + 1
endloop
return false
endfunction
function DropItemById takes unit fromwhich, integer itemid returns item
local data dat = LoadInteger(h,GetHandleId(fromwhich),1)
local item ite
local integer i = GetPlayerId(GetOwningPlayer(dat.u))
local boolean b
local integer xx = x[i]
local integer yy = y[i]
if dat == 0 then
return null
endif
set b = dat.auto
set dat.auto = false
set x[i] = GetXOfItemOfId(dat.u,itemid)
set y[i] = GetYOfItemOfId(dat.u,itemid)
if x[i] != 0 and y[i] != 0 then
if x[i] == 3 then
if dat.stack[y[i]]!=0 then
set ite = UnitAddItemById(dat.u, itemm[dat.slot2index[y[i]]])
call SetItemCharges(ite,dat.stack[y[i]])
else
set ite = UnitAddItemById(dat.u, itemm[dat.slot2index[y[i]]])
endif
else
set ite = UnitAddItemById(dat.u, itemm[dat.slot2index[y[i]+28]])
endif
call InventoryRemoveItem(i, dat)
endif
set dat.auto = b
set x[i] = xx
set y[i] = yy
return ite
endfunction
function RemoveItemById takes unit fromwhich, integer itemid returns nothing
local data dat = LoadInteger(h,GetHandleId(fromwhich),1)
if dat == 0 then
return
endif
call RemoveItem(DropItemById( fromwhich, itemid))
endfunction
function ForceAutoAdd takes unit forwhich, boolean flag returns nothing
local data dat = LoadInteger(h,GetHandleId(forwhich),1)
if dat == 0 then
return
endif
set dat.auto = flag
endfunction
private function autopick takes nothing returns nothing
local unit u = GetTriggerUnit()
local data dat = LoadInteger(h,GetHandleId(u),1)
local item ite = GetManipulatedItem()
if GetItemTypeId(ite) != inventitem and IsItemRegistered(GetItemTypeId(ite)) and IsClassEnabled(GetItemType(ite)) then
call AddItem(ite, dat)
endif
set u = null
set ite = null
endfunction
function CreateItemIntoInventory takes unit u, integer itemid returns nothing
local data dat = LoadInteger(h,GetHandleId(u),1)
local item ite = CreateItem(itemid,GetUnitX(u),GetUnitY(u))
if GetItemTypeId(ite) != inventitem and IsItemRegistered(GetItemTypeId(ite)) and IsClassEnabled(GetItemType(ite)) then
call AddItem(ite, dat)
endif
set ite = null
endfunction
private function check takes nothing returns boolean
local data dat = LoadInteger(h,GetHandleId(GetTriggerUnit()),1)
return dat.auto == true
endfunction
private function LEFTpress takes nothing returns nothing
local integer i = GetPlayerId(GetTriggerPlayer())
set x[i] = x[i] - 1
if x[i] == 0 then
set x[i] = 3
elseif x[i] == 2 then
set x[i] = 1
if y[i] > classes+1 then
set y[i] = classes+1
endif
endif
call UpdateDescription(i)
endfunction
private function UPpress takes nothing returns nothing
local integer i = GetPlayerId(GetTriggerPlayer())
set y[i] = y[i] - 1
if y[i] == 1 then
if x[i] == 3 then
set y[i] = 28
else
set y[i] = classes+1
endif
endif
call UpdateDescription(i)
endfunction
private function DOWNpress takes nothing returns nothing
local integer i = GetPlayerId(GetTriggerPlayer())
set y[i] = y[i] + 1
if x[i] == 3 then
if y[i] == 29 then
set y[i] = 2
endif
else
if y[i] == classes+2 then
set y[i] = 2
endif
endif
call UpdateDescription(i)
endfunction
private function RIGHTpress takes nothing returns nothing
local integer i = GetPlayerId(GetTriggerPlayer())
set x[i] = x[i] + 1
if x[i] == 4 then
set x[i] = 1
if y[i] > classes+1 then
set y[i] = classes+1
endif
elseif x[i] == 2 then
set x[i] = 3
endif
call UpdateDescription(i)
endfunction
//! textmacro KEY takes KEY
set ttt = CreateTrigger()
call TriggerRegisterPlayerKeyEventBJ( ttt, Player(i), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_$KEY$ )
call TriggerAddAction( ttt, function $KEY$press )
//! endtextmacro
private function Init takes nothing returns nothing
local trigger t = CreateTrigger()
local trigger tt = CreateTrigger()
local trigger ttt = CreateTrigger()
local integer i = 0
call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_CAST )
call TriggerAddAction(t, function abilities)
call TriggerRegisterTimerEvent(tt,0.01,true)
call TriggerAddAction(tt, function AddingItemsAndMultiboardStuff)
call TriggerRegisterAnyUnitEventBJ( ttt, EVENT_PLAYER_UNIT_PICKUP_ITEM )
call TriggerAddAction(ttt, function autopick)
call TriggerAddCondition(ttt, Condition(function check))
set t = CreateTrigger()
call TriggerAddAction(t,function onEsc)
loop
exitwhen i == 12
//! runtextmacro KEY("LEFT")
//! runtextmacro KEY("RIGHT")
//! runtextmacro KEY("UP")
//! runtextmacro KEY("DOWN")
call TriggerRegisterPlayerEvent(t,Player(i),EVENT_PLAYER_END_CINEMATIC)
set x[i] = 3
set y[i] = 2
set typebool[i] = true
set i = i + 1
endloop
call InitItems()
call InitEquipment()
endfunction
endlibrary[/SIZE]
Please help me with this! I'm counting in YOU!
Last edited: