123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- InventorySlotStyles = {
- [InventorySlotHead] = "HeadSlot",
- [InventorySlotNeck] = "NeckSlot",
- [InventorySlotBack] = "BackSlot",
- [InventorySlotBody] = "BodySlot",
- [InventorySlotRight] = "RightSlot",
- [InventorySlotLeft] = "LeftSlot",
- [InventorySlotLeg] = "LegSlot",
- [InventorySlotFeet] = "FeetSlot",
- [InventorySlotFinger] = "FingerSlot",
- [InventorySlotAmmo] = "AmmoSlot"
- }
-
- inventoryWindow = nil
- inventoryPanel = nil
- inventoryButton = nil
- purseButton = nil
-
- function init()
- connect(LocalPlayer, {
- onInventoryChange = onInventoryChange,
- onBlessingsChange = onBlessingsChange
- })
- connect(g_game, { onGameStart = refresh })
-
- g_keyboard.bindKeyDown('Ctrl+I', toggle)
-
- inventoryButton = modules.client_topmenu.addRightGameToggleButton('inventoryButton', tr('Inventory') .. ' (Ctrl+I)', '/images/topbuttons/inventory', toggle)
- inventoryButton:setOn(true)
-
- inventoryWindow = g_ui.loadUI('inventory', modules.game_interface.getRightPanel())
- inventoryWindow:disableResize()
- inventoryPanel = inventoryWindow:getChildById('contentsPanel')
-
- purseButton = inventoryPanel:getChildById('purseButton')
- local function purseFunction()
- local purse = g_game.getLocalPlayer():getInventoryItem(InventorySlotPurse)
- if purse then
- g_game.use(purse)
- end
- end
- purseButton.onClick = purseFunction
-
- refresh()
- inventoryWindow:setup()
- end
-
- function terminate()
- disconnect(LocalPlayer, {
- onInventoryChange = onInventoryChange,
- onBlessingsChange = onBlessingsChange
- })
- disconnect(g_game, { onGameStart = refresh })
-
- g_keyboard.unbindKeyDown('Ctrl+I')
-
- inventoryWindow:destroy()
- inventoryButton:destroy()
- end
-
- function toggleAdventurerStyle(hasBlessing)
- for slot = InventorySlotFirst, InventorySlotLast do
- local itemWidget = inventoryPanel:getChildById('slot' .. slot)
- if itemWidget then
- itemWidget:setOn(hasBlessing)
- end
- end
- end
-
- function refresh()
- local player = g_game.getLocalPlayer()
- for i = InventorySlotFirst, InventorySlotPurse do
- if g_game.isOnline() then
- onInventoryChange(player, i, player:getInventoryItem(i))
- else
- onInventoryChange(player, i, nil)
- end
- toggleAdventurerStyle(player and Bit.hasBit(player:getBlessings(), Blessings.Adventurer) or false)
- end
-
- purseButton:setVisible(g_game.getFeature(GamePurseSlot))
- end
-
- function toggle()
- if inventoryButton:isOn() then
- inventoryWindow:close()
- inventoryButton:setOn(false)
- else
- inventoryWindow:open()
- inventoryButton:setOn(true)
- end
- end
-
- function onMiniWindowClose()
- inventoryButton:setOn(false)
- end
-
- -- hooked events
- function onInventoryChange(player, slot, item, oldItem)
- if slot > InventorySlotPurse then return end
-
- if slot == InventorySlotPurse then
- if g_game.getFeature(GamePurseSlot) then
- purseButton:setEnabled(item and true or false)
- end
- return
- end
-
- local itemWidget = inventoryPanel:getChildById('slot' .. slot)
- if item then
- itemWidget:setStyle('InventoryItem')
- itemWidget:setItem(item)
- else
- itemWidget:setStyle(InventorySlotStyles[slot])
- itemWidget:setItem(nil)
- end
- end
-
- function onBlessingsChange(player, blessings, oldBlessings)
- local hasAdventurerBlessing = Bit.hasBit(blessings, Blessings.Adventurer)
- if hasAdventurerBlessing ~= Bit.hasBit(oldBlessings, Blessings.Adventurer) then
- toggleAdventurerStyle(hasAdventurerBlessing)
- end
- end
|