clean containers when relogging

This commit is contained in:
Eduardo Bart 2012-04-03 11:15:11 -03:00
parent 4b7e0e8e58
commit d4afb71263
5 changed files with 40 additions and 9 deletions

View File

@ -1,4 +1,5 @@
Containers = {}
local function refreshContainerItems(container)
for slot=0,container:getCapacity()-1 do
local itemWidget = container.itemsPanel:getChildById('item' .. slot)
@ -48,22 +49,22 @@ local function onContainerOpen(container, previousContainer)
end
local function onContainerClose(container)
local containerWindow = container.window
if containerWindow then
containerWindow:destroy()
end
if container.window then container.window:destroy() end
end
local function onContainerAddItem(container, slot, item)
if not container.window then return end
refreshContainerItems(container)
end
local function onContainerUpdateItem(container, slot, item, oldItem)
if not container.window then return end
local itemWidget = container.itemsPanel:getChildById('item' .. slot)
itemWidget:setItem(item)
end
local function onContainerRemoveItem(container, slot, item)
if not container.window then return end
refreshContainerItems(container)
end
@ -75,6 +76,9 @@ function Containers.init()
onAddItem = onContainerAddItem,
onUpdateItem = onContainerUpdateItem,
onRemoveItem = onContainerRemoveItem })
connect(Game, { onGameEnd = Containers.clean() })
Containers.reloadContainers()
end
function Containers.terminate()
@ -83,8 +87,23 @@ function Containers.terminate()
onAddItem = onContainerAddItem,
onUpdateItem = onContainerUpdateItem,
onRemoveItem = onContainerRemoveItem })
disconnect(Game, { onGameEnd = Containers.clean() })
Containers = nil
end
function Containers.reloadContainers()
Containers.clean()
for containerid,container in pairs(g_game.getContainers()) do
onContainerOpen(container)
end
end
function Containers.clean()
for containerid,container in pairs(g_game.getContainers()) do
if container.window then
container.window:destroy()
container.window = nil
container.itemsPnale = nil
end
end
end

View File

@ -123,6 +123,8 @@ void Connection::write(uint8* buffer, uint16 size)
if(!m_sendEvent || m_sendEvent->isExecuted() || m_sendEvent->isCanceled()) {
auto weakSelf = ConnectionWeakPtr(shared_from_this());
// wait 1 ms to do the real send
m_sendEvent = g_eventDispatcher.scheduleEvent([=] {
if(!weakSelf.lock())
return;

View File

@ -107,6 +107,12 @@ void Protocol::internalRecvHeader(uint8* buffer, uint16 size)
void Protocol::internalRecvData(uint8* buffer, uint16 size)
{
// process data only if really connected
if(!isConnected()) {
logTraceError("received data while disconnected");
return;
}
memcpy(m_inputMessage.getBuffer() + InputMessage::CHECKSUM_POS, buffer, size);
if(m_checksumEnabled) {

View File

@ -1300,10 +1300,10 @@ void UIWidget::onGeometryChange(const Rect& oldRect, const Rect& newRect)
updateText();
// move children that is outside the parent rect to inside again
//for(const UIWidgetPtr& child : m_children) {
//if(!child->isAnchored())
//child->bindRectToParent();
//}
for(const UIWidgetPtr& child : m_children) {
if(!child->isAnchored())
child->bindRectToParent();
}
}
void UIWidget::onLayoutUpdate()

View File

@ -48,7 +48,11 @@ void Game::resetGameStates()
m_safeFight = true;
m_followingCreature = nullptr;
m_attackingCreature = nullptr;
for(auto& it : m_containers)
(it.second)->close();
m_containers.clear();
m_worldName = "";
}