-- =========================================================================== -- NpcMalucoTimer - contagem regressiva na tela enquanto o NPC Maluco esta em Devias (pedido do dono, 21/10/2026) -- Quem sabe o tempo e o servidor (Data/Script/Scripts/NpcMalucoTimer): manda NM_Timer com os segundos que faltam -- quando o NPC aparece, a quem entra no jogo com ele no ar, e 0 quando ele vai embora. Aqui so desenha. -- -- Painel no alto da tela, centralizado: "NPC Maluco (Devias)" e o tempo, vermelho nos ultimos 30 s. Fundo do -- tamanho exato (BancoJoias_Linha, 134 x 34), o mesmo das linhas do banco de joias. -- =========================================================================== local IMG_FUNDO = 40030 -- Custom\Interface\BancoJoias_Linha.tga (134 x 68: 2 estados de 34; usa o 1o) local LARG, ALT = 134, 34 local Y = 44 -- abaixo do "Active Invasions" do Louis, no alto e no centro (print de 21/10/2026) -- Centro da tela em pontos de interface. A largura vem da mesma medida do banco de joias (print a 1600 px de -- 21/10/2026: o inventario comeca em GetWideX() + 130, e ele tem 190 de largura): largura = GetWideX() + 320. -- Na 4:3 essa conta errava (GetWideX vale 640 la): desde 22/10/2026 vem do Scripts/Comum/Tela.lua. local function CentroX() return MO_CentroX and MO_CentroX() or math.floor((GetWideX() + 320) / 2) end local TITULO = { Por = "NPC Maluco (Devias)", Eng = "NPC Maluco (Devias)", Spn = "NPC Maluco (Devias)" } local Fim = nil local function Agora() local ok, t = pcall(os.time) return ok and t or 0 end local function Pot2(n) local p = 1 while p < n do p = p * 2 end return p end local function Lingua() local ok, l = pcall(GetLanguage) return ok and TITULO[l] and l or "Eng" end local function Protocolo(head, nome) if nome ~= "NM_Timer" then return nil end local ok, s = pcall(GetDwordPacket, nome) if not ok or tonumber(s) == nil then ok, s = pcall(GetDwordPacket, nome, -1) end pcall(ClearPacket, nome) s = tonumber(s) or 0 Fim = (s > 0) and (Agora() + s) or nil return true end ProtocolFunctions.ClientProtocol(Protocolo) function NpcMalucoTimer_Desenhar() if not Fim then return end local resta = Fim - Agora() if resta <= 0 then Fim = nil; return end local x = CentroX() - math.floor(LARG / 2) -- com leilao no ar, o contador dele fica no topo e este desce para baixo dele (24/10/2026) local Y = (MO_LeilaoAberto and MO_LeilaoAberto()) and math.max(Y, MO_LeilaoAltura or Y) or Y pcall(RenderImage2, IMG_FUNDO, x, Y, LARG, ALT, 0, 0, LARG / Pot2(LARG), ALT / Pot2(68), 1, 1, 1.0) SetFontType(1); SetTextBg(0, 0, 0, 0) SetTextColor(255, 255, 255, 255) RenderText5(x, Y + 5, TITULO[Lingua()], LARG, 3) if resta <= 30 then SetTextColor(255, 80, 80, 255) else SetTextColor(255, 189, 25, 255) end RenderText5(x, Y + 19, string.format("%d:%02d", math.floor(resta / 60), resta % 60), LARG, 3) end function NpcMalucoTimer_Carregar() pcall(LoadBitmap, "Custom\\Interface\\BancoJoias_Linha.tga", IMG_FUNDO) end BridgeFunctionAttach('MainLoader', 'NpcMalucoTimer_Carregar') BridgeFunctionAttach('MainInterfaceProcThread', 'NpcMalucoTimer_Desenhar')