-- OT-MMO: modos de la mascota del Cazador, como en WoW. El servidor (server/scripts/clases/cazador.lua, opcode 114) -- manda «E|modo|lobo» (lobo = 1 si está fuera) y recibe «M|modo» al pulsar un botón. La barra solo se ve con el lobo. local OPCODE = 114 -- { modo del servidor, nombre, qué hace, ícono (objeto de Tibia, como el micromenú) } local MODOS = { { 1, 'Pasivo', 'No ataca: te sigue y se queda a tu lado.', 3115 }, -- bone { 0, 'Defensivo', 'Ataca lo que atacas y a quien te ataque a ti o al lobo.', 3409 }, -- steel shield { 2, 'Agresivo', 'Ataca a cualquier enemigo que tenga cerca.', 5897 }, -- wolf paw } mascotaController = Controller:new() local barra, botones, actual = nil, {}, 0 local function enviar(texto) local protocol = g_game.getProtocolGame() if protocol then protocol:sendExtendedOpcode(OPCODE, texto) end end local function marcar() for modo, b in pairs(botones) do local si = modo == actual b:setBorderWidth(si and 2 or 1) b:setBorderColor(si and OtmmoTheme.color.accent or OtmmoTheme.color.border) -- activa = borde de acento, como la barra b:setBackgroundColor(si and OtmmoTheme.color.surface or OtmmoTheme.color.bg .. 'F2') end end local function onOpcode(protocol, opcode, buffer) local modo, lobo = buffer:match('^E|(%d)|(%d)$') if not modo then return end actual = tonumber(modo) marcar() barra:setVisible(lobo == '1') end function mascotaController:onInit() barra = g_ui.loadUI('mascota', modules.game_interface.getRootPanel()) -- a la izquierda de la barra de atajos (10 botones de 46 px centrados abajo) barra:addAnchor(AnchorBottom, 'parent', AnchorBottom) barra:addAnchor(AnchorRight, 'parent', AnchorHorizontalCenter) barra:setMarginBottom(14) barra:setMarginRight(250) for _, m in ipairs(MODOS) do local b = g_ui.createWidget('MascotaBoton', barra) b.icono:setItemId(m[4]) b:setTooltip(m[2] .. '\n' .. m[3]) b.onClick = function() enviar('M|' .. m[1]) end botones[m[1]] = b end marcar() barra:hide() ProtocolGame.registerExtendedOpcode(OPCODE, onOpcode) end function mascotaController:onGameStart() enviar('P') end function mascotaController:onGameEnd() if barra then barra:hide() end end function mascotaController:onTerminate() ProtocolGame.unregisterExtendedOpcode(OPCODE) if barra then barra:destroy() end barra, botones = nil, {} end