tibia-client/modules/game_containers/containers.lua

128 lines
3.8 KiB
Lua
Raw Normal View History

function init()
g_ui.importStyle('container')
connect(Container, { onOpen = onContainerOpen,
onClose = onContainerClose,
onAddItem = onContainerAddItem,
onUpdateItem = onContainerUpdateItem,
onRemoveItem = onContainerRemoveItem })
connect(Game, { onGameEnd = clean() })
reloadContainers()
end
function terminate()
disconnect(Container, { onOpen = onContainerOpen,
onClose = onContainerClose,
onAddItem = onContainerAddItem,
onUpdateItem = onContainerUpdateItem,
onRemoveItem = onContainerRemoveItem })
disconnect(Game, { onGameEnd = clean() })
end
function reloadContainers()
clean()
for _,container in pairs(g_game.getContainers()) do
onContainerOpen(container)
end
end
function clean()
for containerid,container in pairs(g_game.getContainers()) do
destroy(container)
end
end
function destroy(container)
if container.window then
container.window:destroy()
container.window = nil
container.itemsPanel = nil
end
end
2012-04-03 16:15:11 +02:00
2012-07-26 08:10:28 +02:00
function refreshContainerItems(container)
for slot=0,container:getCapacity()-1 do
local itemWidget = container.itemsPanel:getChildById('item' .. slot)
itemWidget:setItem(container:getItem(slot))
2012-01-13 01:31:39 +01:00
end
end
2012-07-26 08:10:28 +02:00
function onContainerOpen(container, previousContainer)
local containerWindow
if previousContainer then
containerWindow = previousContainer.window
previousContainer.window = nil
previousContainer.itemsPanel = nil
else
containerWindow = g_ui.createWidget('ContainerWindow', modules.game_interface.getRightPanel())
end
containerWindow:setId('container' .. container:getId())
local containerPanel = containerWindow:getChildById('contentsPanel')
local containerItemWidget = containerWindow:getChildById('containerItemWidget')
containerWindow.onClose = function()
g_game.close(container)
containerWindow:hide()
2012-01-13 01:31:39 +01:00
end
2012-01-14 20:31:20 +01:00
2012-04-30 18:40:12 +02:00
-- this disables scrollbar auto hiding
local scrollbar = containerWindow:getChildById('miniwindowScrollBar')
scrollbar:mergeStyle({ ['$!on'] = { }})
2012-04-30 18:40:12 +02:00
local upButton = containerWindow:getChildById('upButton')
upButton.onClick = function()
g_game.openParent(container)
2012-01-13 01:31:39 +01:00
end
upButton:setVisible(container:hasParent())
2012-01-14 20:31:20 +01:00
local name = container:getName()
name = name:sub(1,1):upper() .. name:sub(2)
containerWindow:setText(name)
2012-01-14 20:31:20 +01:00
containerItemWidget:setItem(container:getContainerItem())
containerPanel:destroyChildren()
for slot=0,container:getCapacity()-1 do
2012-06-26 00:13:30 +02:00
local itemWidget = g_ui.createWidget('Item', containerPanel)
itemWidget:setId('item' .. slot)
itemWidget:setItem(container:getItem(slot))
itemWidget:setMargin(0)
itemWidget.position = container:getSlotPosition(slot)
2012-01-13 01:31:39 +01:00
end
container.window = containerWindow
container.itemsPanel = containerPanel
2012-08-18 07:04:01 +02:00
local layout = containerPanel:getLayout()
local cellSize = layout:getCellSize()
containerWindow:setContentMinimumHeight(cellSize.height)
2012-08-18 07:04:01 +02:00
containerWindow:setContentMaximumHeight(cellSize.height*layout:getNumLines())
2012-08-21 01:56:16 +02:00
if not previousContainer then
local filledLines = math.max(math.ceil(container:getItemsCount() / layout:getNumColumns()), 1)
containerWindow:setContentHeight(filledLines*cellSize.height)
end
2012-08-21 23:40:47 +02:00
containerWindow:setup()
2012-01-13 01:31:39 +01:00
end
2012-07-24 07:41:59 +02:00
function onContainerClose(container)
destroy(container)
2012-01-13 01:31:39 +01:00
end
2012-07-24 07:41:59 +02:00
function onContainerAddItem(container, slot, item)
2012-04-03 16:15:11 +02:00
if not container.window then return end
refreshContainerItems(container)
2012-01-20 03:33:11 +01:00
end
2012-01-13 01:31:39 +01:00
2012-07-24 07:41:59 +02:00
function onContainerUpdateItem(container, slot, item, oldItem)
2012-04-03 16:15:11 +02:00
if not container.window then return end
local itemWidget = container.itemsPanel:getChildById('item' .. slot)
2012-01-20 03:33:11 +01:00
itemWidget:setItem(item)
end
2012-07-24 07:41:59 +02:00
function onContainerRemoveItem(container, slot, item)
2012-04-03 16:15:11 +02:00
if not container.window then return end
refreshContainerItems(container)
end