minimapWidget = nil minimapButton = nil minimapWindow = nil otmm = true preloaded = false fullmapView = false oldZoom = nil oldPos = nil function init() minimapButton = modules.client_topmenu.addRightGameToggleButton('minimapButton', tr('Minimap') .. ' (Ctrl+M)', '/images/topbuttons/minimap', toggle) minimapButton:setOn(true) minimapWindow = g_ui.loadUI('minimap', modules.game_interface.getRightPanel()) minimapWindow:setContentMinimumHeight(64) minimapWidget = minimapWindow:recursiveGetChildById('minimap') local gameRootPanel = modules.game_interface.getRootPanel() g_keyboard.bindKeyPress('Alt+Left', function() minimapWidget:move(1,0) end, gameRootPanel) g_keyboard.bindKeyPress('Alt+Right', function() minimapWidget:move(-1,0) end, gameRootPanel) g_keyboard.bindKeyPress('Alt+Up', function() minimapWidget:move(0,1) end, gameRootPanel) g_keyboard.bindKeyPress('Alt+Down', function() minimapWidget:move(0,-1) end, gameRootPanel) g_keyboard.bindKeyDown('Ctrl+M', toggle) g_keyboard.bindKeyDown('Ctrl+Shift+M', toggleFullMap) minimapWindow:setup() connect(g_game, { onGameStart = online, onGameEnd = offline, }) connect(LocalPlayer, { onPositionChange = updateCameraPosition }) if g_game.isOnline() then online() end end function terminate() if g_game.isOnline() then saveMap() end disconnect(g_game, { onGameStart = online, onGameEnd = offline, }) local gameRootPanel = modules.game_interface.getRootPanel() g_keyboard.unbindKeyPress('Alt+Left', gameRootPanel) g_keyboard.unbindKeyPress('Alt+Right', gameRootPanel) g_keyboard.unbindKeyPress('Alt+Up', gameRootPanel) g_keyboard.unbindKeyPress('Alt+Down', gameRootPanel) g_keyboard.unbindKeyDown('Ctrl+M') g_keyboard.unbindKeyDown('Ctrl+Shift+M') minimapWindow:destroy() minimapButton:destroy() end function toggle() if minimapButton:isOn() then minimapWindow:close() minimapButton:setOn(false) else minimapWindow:open() minimapButton:setOn(true) end end function onMiniWindowClose() minimapButton:setOn(false) end function preload() loadMap(false) preloaded = true end function online() loadMap(not preloaded) end function offline() saveMap() end function loadMap(clean) local protocolVersion = g_game.getProtocolVersion() if clean then g_minimap.clean() end if otmm then local minimapFile = '/minimap.otmm' if g_resources.fileExists(minimapFile) then g_minimap.loadOtmm(minimapFile) end else local minimapFile = '/minimap_' .. protocolVersion .. '.otcm' if g_resources.fileExists(minimapFile) then g_map.loadOtcm(minimapFile) end end minimapWidget:load() end function saveMap() local protocolVersion = g_game.getProtocolVersion() if otmm then local minimapFile = '/minimap.otmm' g_minimap.saveOtmm(minimapFile) else local minimapFile = '/minimap_' .. protocolVersion .. '.otcm' g_map.saveOtcm(minimapFile) end minimapWidget:save() end function updateCameraPosition() local player = g_game.getLocalPlayer() if not minimapWidget:isDragging() then if not fullmapView then minimapWidget:setCameraPosition(player:getPosition()) end minimapWidget:setCrossPosition(player:getPosition()) end end function toggleFullMap() if not fullmapView then fullmapView = true minimapWindow:hide() minimapWidget:setParent(modules.game_interface.getRootPanel()) minimapWidget:fill('parent') minimapWidget:setAlternativeWidgetsVisible(true) else fullmapView = false minimapWidget:setParent(minimapWindow:getChildById('contentsPanel')) minimapWidget:fill('parent') minimapWindow:show() minimapWidget:setAlternativeWidgetsVisible(false) end local zoom = oldZoom or 0 local pos = oldPos or minimapWidget:getCameraPosition() pos.z = 7 oldZoom = minimapWidget:getZoom() oldPos = minimapWidget:getCameraPosition() minimapWidget:setZoom(zoom) minimapWidget:setCameraPosition(pos) end