diff --git a/modules/game_console/console.lua b/modules/game_console/console.lua index 32fce2c7..559c0d08 100644 --- a/modules/game_console/console.lua +++ b/modules/game_console/console.lua @@ -111,6 +111,16 @@ local function onOpenPrivateChannel(receiver) end end +local function onCloseChannel(channelId) + local channel = channels[channelId] + if channel then + local tab = Console.getTab(channel) + if tab then + consoleTabBar:removeTab(tab) + end + end +end + local function doChannelListSubmit() local channelListPanel = channelsWindow:getChildById('channelList') local openPrivateChannelWith = channelsWindow:getChildById('openPrivateChannelWith'):getText() @@ -156,6 +166,7 @@ function Console.init() onChannelList = onChannelList, onOpenChannel = onOpenChannel, onOpenPrivateChannel = onOpenPrivateChannel, + onCloseChannel = onCloseChannel, onGameEnd = Console.clear }) consolePanel = displayUI('console.otui', GameInterface.getBottomPanel()) @@ -189,6 +200,7 @@ function Console.terminate() onChannelList = onChannelList, onOpenChannel = onOpenChannel, onOpenPrivateChannel = onOpenPrivateChannel, + onCloseChannel = onCloseChannel, onGameEnd = Console.clear }) for channelid, channelname in pairs(channels) do diff --git a/src/otclient/core/map.cpp b/src/otclient/core/map.cpp index 15fdc4da..50e7c7d0 100644 --- a/src/otclient/core/map.cpp +++ b/src/otclient/core/map.cpp @@ -291,9 +291,13 @@ void Map::setCentralPosition(const Position& centralPosition) } else { for(const auto& pair : m_knownCreatures) { const CreaturePtr& creature = pair.second; - if(!isAwareOfPosition(creature->getPosition())) { - removeThing(creature); + if(creature) { + if(!isAwareOfPosition(creature->getPosition())) { + removeThing(creature); + } } + else + logTraceError("invalid creature"); } } }