fix dragqueen and containers

This commit is contained in:
Henrique Santiago
2012-01-20 00:33:11 -02:00
parent 9b9e837e97
commit bd63bde722
7 changed files with 87 additions and 21 deletions

View File

@@ -18,7 +18,7 @@ function Containers.getFreeContainerId()
end
-- hooked events
function Containers.onContainerOpen(containerId, itemId, name, capacity, hasParent)
function Containers.onContainerOpen(containerId, itemId, name, capacity, hasParent, items)
local container = m_containers[containerId]
if container then
Game.gameRightPanel:removeChild(container)
@@ -35,22 +35,26 @@ function Containers.onContainerOpen(containerId, itemId, name, capacity, hasPare
-- parent button
end
container.itemCount = 0
container.itemCount = #items
container.capacity = capacity
for i=1,capacity do
local item = UIItem.create()
item:setStyle('Item')
container:addChild(item)
item.position = {x=65535, y=containerId+64, z=i-1}
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]
item:setPos(itemWidget.position)
itemWidget:setItem(item)
end
end
m_containers[containerId] = container
print("opencid ".. containerId)
end
function Containers.onContainerClose(containerId)
print("closecid ".. containerId)
local container = m_containers[containerId]
if container then
Game.gameRightPanel:removeChild(container)
@@ -59,23 +63,75 @@ function Containers.onContainerClose(containerId)
end
function Containers.onContainerAddItem(containerId, item)
print("addcid ".. containerId)
local container = m_containers[containerId]
if not container or not item or container.itemCount >= container.capacity then return end
-- maybe this has to be moved to client internal's files
local pos = item:getPos()
pos.z = container.itemCount
item:setPos(pos)
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 itemWidget = container:getChildByIndex(container.itemCount + 1)
local swapItem = itemWidget:getItem()
if swapItem then
swapItem:setPos(nextItemWidget.position)
nextItemWidget:setItem(swapItem)
end
i = i - 1
end
local itemWidget = container:getChildByIndex(1)
if not itemWidget then return end
item:setPos(itemWidget.position)
itemWidget:setItem(item)
container.itemCount = container.itemCount + 1
container.itemCount = container.itemCount + 1
end
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)
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()
local pos = item:getPos()
pos.z = pos.z - 1
item:setPos(pos)
itemWidget:setItem(item)
nextItemWidget:setItem(nil)
end
container.itemCount = container.itemCount - 1
end
connect(Game, { onLogin = Containers.clean,
onLogout = Containers.clean,
onContainerOpen = Containers.onContainerOpen,
onContainerClose = Containers.onContainerClose,
onContainerAddItem = Containers.onContainerAddItem })
onContainerAddItem = Containers.onContainerAddItem,
onContainerUpdateItem = Containers.onContainerUpdateItem,
onContainerRemoveItem = Containers.onContainerRemoveItem })