tibia-client/modules/game_containers/containers.lua

139 lines
3.7 KiB
Lua
Raw Normal View History

2012-01-13 01:31:39 +01:00
Containers = {}
-- private variables
local m_containers = {}
-- public functions
function Containers.clean()
m_containers = {}
end
function Containers.getFreeContainerId()
for i=0,15 do
if not m_containers[i] then
return i
end
end
return 0
end
-- hooked events
2012-01-20 03:33:11 +01:00
function Containers.onContainerOpen(containerId, itemId, name, capacity, hasParent, items)
2012-01-13 01:31:39 +01:00
local container = m_containers[containerId]
if container then
Game.gameRightPanel:removeChild(container)
end
2012-01-14 20:31:20 +01:00
2012-01-13 01:31:39 +01:00
container = displayUI('container.otui', { parent = Game.gameRightPanel })
2012-01-14 20:31:20 +01:00
name = name:sub(1,1):upper() .. name:sub(2)
2012-01-13 01:31:39 +01:00
container:setText(name)
2012-01-14 20:31:20 +01:00
2012-01-13 01:31:39 +01:00
-- set icon, itemid
-- closebutton
-- resize
if hasParent then
-- parent button
end
2012-01-14 20:31:20 +01:00
2012-01-20 03:33:11 +01:00
container.itemCount = #items
2012-01-13 01:31:39 +01:00
container.capacity = capacity
2012-01-14 20:31:20 +01:00
2012-01-13 01:31:39 +01:00
for i=1,capacity do
2012-01-20 03:33:11 +01:00
local itemWidget = UIItem.create()
itemWidget:setStyle('Item')
container:addChild(itemWidget)
itemWidget.position = {x=65535, y=containerId+64, z=i-1}
if i <= #items then
local item = items[i]
2012-01-30 01:00:12 +01:00
item:setPosition(itemWidget.position)
2012-01-20 03:33:11 +01:00
itemWidget:setItem(item)
end
2012-01-13 01:31:39 +01:00
end
m_containers[containerId] = container
end
function Containers.onContainerClose(containerId)
local container = m_containers[containerId]
if container then
Game.gameRightPanel:removeChild(container)
end
m_containers[containerId] = nil
end
function Containers.onContainerAddItem(containerId, item)
local container = m_containers[containerId]
if not container or not item or container.itemCount >= container.capacity then return end
2012-01-20 03:33:11 +01:00
local i = container.itemCount
while i >= 1 do
local itemWidget = container:getChildByIndex(i)
if not itemWidget then return end
local nextItemWidget = container:getChildByIndex(i+1)
if not nextItemWidget then return end
local swapItem = itemWidget:getItem()
if swapItem then
2012-01-30 01:00:12 +01:00
swapItem:setPosition(nextItemWidget.position)
2012-01-20 03:33:11 +01:00
nextItemWidget:setItem(swapItem)
end
i = i - 1
end
2012-01-14 20:31:20 +01:00
2012-01-20 03:33:11 +01:00
local itemWidget = container:getChildByIndex(1)
if not itemWidget then return end
2012-01-30 01:00:12 +01:00
item:setPosition(itemWidget.position)
2012-01-13 01:31:39 +01:00
itemWidget:setItem(item)
2012-01-20 03:33:11 +01:00
2012-01-13 01:31:39 +01:00
container.itemCount = container.itemCount + 1
2012-01-20 03:33:11 +01:00
end
2012-01-13 01:31:39 +01:00
2012-01-20 03:33:11 +01:00
function Containers.onContainerUpdateItem(containerId, slot, item)
local container = m_containers[containerId]
if not container then return end
local itemWidget = container:getChildByIndex(slot + 1)
if not itemWidget then return end
itemWidget:setItem(item)
2012-01-30 01:00:12 +01:00
item:setPosition(itemWidget.position)
2012-01-20 03:33:11 +01:00
end
function Containers.onContainerRemoveItem(containerId, slot)
local container = m_containers[containerId]
if not container then return end
local itemWidget = container:getChildByIndex(slot+1)
if not itemWidget then return end
itemWidget:setItem(nil)
for i=slot,container.itemCount-2 do
local itemWidget = container:getChildByIndex(i+1)
if not itemWidget then return end
local nextItemWidget = container:getChildByIndex(i+2)
if not nextItemWidget then return end
local item = nextItemWidget:getItem()
2012-01-30 01:00:12 +01:00
local pos = item:getPosition()
2012-01-20 03:33:11 +01:00
pos.z = pos.z - 1
2012-01-30 01:00:12 +01:00
item:setPosition(pos)
2012-01-20 03:33:11 +01:00
itemWidget:setItem(item)
nextItemWidget:setItem(nil)
end
container.itemCount = container.itemCount - 1
2012-01-13 01:31:39 +01:00
end
connect(Game, { onLogin = Containers.clean,
onLogout = Containers.clean,
onContainerOpen = Containers.onContainerOpen,
onContainerClose = Containers.onContainerClose,
2012-01-20 03:33:11 +01:00
onContainerAddItem = Containers.onContainerAddItem,
onContainerUpdateItem = Containers.onContainerUpdateItem,
onContainerRemoveItem = Containers.onContainerRemoveItem })