GerenciarBau = {} GerenciarBau_Vip = 0 GerenciarBau_BauAtual = 0 GerenciarBau_TotalBaus = 0 GerenciarBau_BauDigitado = "" GerenciarBau_TxtCompra = "Deseja comprar 1 ba� extra?" GerenciarBau_ShowSuccess = false GerenciarBau_ShowFalta = false GerenciarBau_ShowAtual = false GerenciarBau_ShowTroca = false GerenciarBau_ShowCompra = false GerenciarBau_NormalState = true GerenciarBau_BtnRightTimer = 0 GerenciarBau_BtnRightClicked = false GerenciarBau_BtnLeftTimer = 0 GerenciarBau_BtnLeftClicked = false GerenciarBau_Buttons = {} GerenciarBau_Alfabeto = {[48] = "0",[49] = "1",[50] = "2",[51] = "3",[52] = "4",[53] = "5",[54] = "6",[55] = "7",[56] = "8",[57] = "9", [96] = "0",[97] = "1",[98] = "2",[99] = "3",[100] = "4",[101] = "5",[102] = "6",[103] = "7",[104] = "8",[105] = "9"} function GerenciarBau.Init() -- So ativa com a chave LuaWarehouse = 1 do main.emu (MainInfo.ini): com ela o -- bau nativo deixa a parte de baixo (zen/taxa/botoes) para este script. if GerenciarBau_Ativado and LuaWarehouseEnabled() == 1 then InterfaceController.MainProcInterface(GerenciarBau.Interface) InterfaceController.MainProcWorldKey(GerenciarBau.KeyListener) InterfaceController.InterfaceClickEvent(GerenciarBau.ClickEvent) InterfaceController.ClientProtocol(GerenciarBau.ClientProtocol) end end function GerenciarBau.CreateButton(IdBotao, X, Y, W, H) if GerenciarBau_Buttons[IdBotao] == nil then table.insert(GerenciarBau_Buttons, IdBotao) end GerenciarBau_Buttons[IdBotao] = {X1 = X, X2 = X+W, Y1 = Y, Y2 = Y+H} end function GerenciarBau.CheckButton(IdBotao, X, Y) if GerenciarBau_Buttons[IdBotao] == nil then return false end if X >= GerenciarBau_Buttons[IdBotao].X1 and X <= GerenciarBau_Buttons[IdBotao].X2 and Y >= GerenciarBau_Buttons[IdBotao].Y1 and Y <= GerenciarBau_Buttons[IdBotao].Y2 then return true end return false end -- Layout na base S3 (chave LuaWarehouse = 1 do main.emu): a janela nativa do -- bau fica em (260,0) 190x429 e, com a chave ligada, o C++ NAO desenha nem -- processa a parte de baixo (caixa do zen, taxa e os botoes retirar/depositar/ -- trancar - NewUIStorageInventory.cpp). Este script assume essa area (y>=310): -- nenhum botao duplicado. Chave desligada = script nao ativa, bau original. local GB_Y = 8 -- setas no topo, ao lado do titulo "Storage" local GB_TXT_Y = 22 -- "Bau atual X de Y" logo abaixo do titulo local GB_ARROW_L, GB_ARROW_R = 280, 415 local GB_TIP_Y = 300 -- linha das dicas (acima) local GB_ZEN_Y = 342 -- caixa do zen (mesmo lugar do nativo) local GB_FEE_Y = 368 -- taxa do bau local GB_BTN_Y = 390 -- linha unica de botoes (24x24, passo 34) local GB_BX = { 276, 310, 344, 378, 412 } -- retirar zen | depositar zen | trancar | trocar | comprar local GB_POP_X, GB_POP_Y = 230, 170 -- popup (trocar/comprar) -- parte de baixo do bau (o que o C++ deixou de desenhar com a chave ligada) local function GB_NativeBottom(texts) -- caixa do zen + valor CreateInterface(IMG_EDITBOX, 315, GB_ZEN_Y, 110, 18, 0, 0, 0.8828125, 0.5625, 1, 1) SetFont(1) SetTextBackColor(0, 0, 0, 0) SetTextColor(216, 216, 216, 255) SetText(292, GB_ZEN_Y + 3, texts[9]) SetTextColor(255, 220, 150, 255) SetText(322, GB_ZEN_Y + 3, FormatZen(GetWarehouseZen())) -- taxa SetTextBackColor(30, 30, 30, 255) SetTextColor(240, 64, 64, 255) SetText(315, GB_FEE_Y, texts[8]) SetTextColor(255, 220, 150, 255) SetText(365, GB_FEE_Y, FormatZen(GetWarehouseFee())) SetFont(0) -- Linha unica de botoes (y=390), 24x24 com 10px de espaco: -- [7] retirar zen 268 | [8] depositar zen 302 | [9] trancar 336 | [1] trocar 370 | [2] comprar 404 GerenciarBau.CreateButton(7, GB_BX[1], GB_BTN_Y, 24, 24) CreateInterface(IMG_ZEN, GB_BX[1], GB_BTN_Y, 24, 24, 0, 0, 0.75, 0.75, 1, 1) GerenciarBau.CreateButton(8, GB_BX[2], GB_BTN_Y, 24, 24) CreateInterface(IMG_ZEN, GB_BX[2], GB_BTN_Y, 24, 24, 0, 0, 0.75, 0.75, 1, 1) GerenciarBau.CreateButton(9, GB_BX[3], GB_BTN_Y, 24, 24) if IsWarehouseLocked() == 1 then CreateInterface(IMG_UNLOCK, GB_BX[3], GB_BTN_Y, 24, 24, 0, 0, 0.75, 0.75, 1, 1) else CreateInterface(IMG_LOCK, GB_BX[3], GB_BTN_Y, 24, 24, 0, 0, 0.75, 0.75, 1, 1) end if GerenciarBau.CheckButton(7, MousePosX(), MousePosY()) then GB_Tip(GB_BX[1] - 10, texts[10]) end if GerenciarBau.CheckButton(8, MousePosX(), MousePosY()) then GB_Tip(GB_BX[2] - 20, texts[11]) end if GerenciarBau.CheckButton(9, MousePosX(), MousePosY()) then GB_Tip(GB_BX[3] - 50, texts[2]) end end local GB_BtnText = { ["Eng"] = { "Ok", "Cancel" }, ["Por"] = { "Ok", "Cancelar" }, ["Spn"] = { "Ok", "Cancelar" }, } -- dica acima da faixa (fundo preto) [global: usada por GB_NativeBottom acima] function GB_Tip(x, text, y) SetFont(0) SetTextBackColor(0, 0, 0, 255) SetTextColor(220, 220, 220, 255) SetText(x, y or GB_TIP_Y, text) end -- botao generico IMG_BTN com texto; darken no hover function GB_TextButton(id, x, y, w, h, label) GerenciarBau.CreateButton(id, x, y, w, h) if GerenciarBau.CheckButton(id, MousePosX(), MousePosY()) then glColor4f(0.8, 0.8, 0.8, 1.0) end CreateInterface(IMG_BTN, x, y, w, h, 0, 0, 0.875, 0.75, 1, 1) glColor4f(1.0, 1.0, 1.0, 1.0) -- rotulo escuro sobre a placa clara (text_button); centralizado "na mao" -- (~6px por caractere na fonte normal) para nao depender do SetText2 SetFont(1) SetTextBackColor(0, 0, 0, 0) SetTextColor(30, 30, 30, 255) local tw = string.len(label or "") * 6 SetText(math.floor(x + (w - tw) / 2), math.floor(y + (h - 10) / 2), label or "") SetFont(0) end function GerenciarBau.Interface() if CheckWindowOpen(UIWarehouse) == 1 then GerenciarBau_Reabrindo = false -- TB_Login pode ter chegado antes do Lua iniciar: pede a info ao abrir o bau if GerenciarBau_TotalBaus == 0 and not GerenciarBau_InfoPedida then GerenciarBau_InfoPedida = true CreatePacket("TB_Info", GerenciarBau_Packet) SendPacket("TB_Info") ClearPacket("TB_Info") end local lang = getLanguage() local texts = GerenciarBau_Texts[lang] or GerenciarBau_Texts["Eng"] local btxt = GB_BtnText[lang] or GB_BtnText["Eng"] GerenciarBau.CreateButton(1, 0, 0, 0, 0) GerenciarBau.CreateButton(2, 0, 0, 0, 0) GerenciarBau.CreateButton(3, 0, 0, 0, 0) GerenciarBau.CreateButton(4, 0, 0, 0, 0) GerenciarBau.CreateButton(5, 0, 0, 0, 0) GerenciarBau.CreateButton(6, 0, 0, 0, 0) EnableAlphaTest(1) -- "Bau atual: X de Y" centralizado na faixa SetFont(0) SetTextBackColor(0, 0, 0, 0) SetTextColor(255, 220, 150, 255) SetText2(355, GB_TXT_Y, string.format(texts[1], GerenciarBau_BauAtual, GerenciarBau_TotalBaus)) SetUnlockInterfaces() GerenciarBau_Locked = false -- toda a parte de baixo do bau (linha do bau + zen + taxa + botoes) local mx, my = MousePosX(), MousePosY() local areaBaixo = (mx >= 262 and mx <= 448 and my >= 336 and my <= 416) local areaTopo = (mx >= 262 and mx <= 422 and my >= 4 and my <= 32) if areaBaixo or areaTopo or GerenciarBau_ShowTroca or GerenciarBau_ShowCompra then SetLockInterfaces() GerenciarBau_Locked = true end -- [5] bau anterior (seta do pack, 15x15) GerenciarBau.CreateButton(5, GB_ARROW_L, GB_Y, 15, 15) if GerenciarBau.CheckButton(5, MousePosX(), MousePosY()) then GB_Tip(GB_ARROW_L + 18, texts[5], GB_TXT_Y) end if GerenciarBau_BtnLeftClicked then if GerenciarBau_BtnLeftTimer >= 2 then GerenciarBau_BtnLeftClicked = false GerenciarBau_BtnLeftTimer = 0 end CreateInterface(GerenciarBau_Images[6], GB_ARROW_L, GB_Y, 15, 15, 0, 0, 0.591827401425252121, 0.591827401425252121, 1, 1) GerenciarBau_BtnLeftTimer = GerenciarBau_BtnLeftTimer + 1 else CreateInterface(GerenciarBau_Images[5], GB_ARROW_L, GB_Y, 15, 15, 0, 0, 0.591827401425252121, 0.591827401425252121, 1, 1) end -- [6] proximo bau GerenciarBau.CreateButton(6, GB_ARROW_R, GB_Y, 15, 15) if GerenciarBau.CheckButton(6, MousePosX(), MousePosY()) then GB_Tip(GB_ARROW_R - 90, texts[6], GB_TXT_Y) end if GerenciarBau_BtnRightClicked then if GerenciarBau_BtnRightTimer >= 2 then GerenciarBau_BtnRightClicked = false GerenciarBau_BtnRightTimer = 0 end CreateInterface(GerenciarBau_Images[4], GB_ARROW_R, GB_Y, 15, 15, 0, 0, 0.591827401425252121, 0.591827401425252121, 1, 1) GerenciarBau_BtnRightTimer = GerenciarBau_BtnRightTimer + 1 else CreateInterface(GerenciarBau_Images[3], GB_ARROW_R, GB_Y, 15, 15, 0, 0, 0.591827401425252121, 0.591827401425252121, 1, 1) end -- [1] trocar bau (icone "O" nativo) - na linha de botoes, 4a posicao GerenciarBau.CreateButton(1, GB_BX[4], GB_BTN_Y, 24, 24) if GerenciarBau_ShowTroca then CreateInterface(IMG_OK_DOWN, GB_BX[4], GB_BTN_Y, 24, 24, 0, 0, 0.75, 0.75, 1, 1) else CreateInterface(IMG_OK, GB_BX[4], GB_BTN_Y, 24, 24, 0, 0, 0.75, 0.75, 1, 1) end if GerenciarBau.CheckButton(1, MousePosX(), MousePosY()) then GB_Tip(GB_BX[4] - 30, texts[3]) end -- [2] comprar bau (icone Zen nativo) - 5a posicao GerenciarBau.CreateButton(2, GB_BX[5], GB_BTN_Y, 24, 24) if GerenciarBau_ShowCompra then CreateInterface(IMG_ZEN_DOWN, GB_BX[5], GB_BTN_Y, 24, 24, 0, 0, 0.75, 0.75, 1, 1) else CreateInterface(IMG_ZEN, GB_BX[5], GB_BTN_Y, 24, 24, 0, 0, 0.75, 0.75, 1, 1) end if GerenciarBau.CheckButton(2, MousePosX(), MousePosY()) then GB_Tip(GB_BX[5] - 50, texts[4]) end -- zen / taxa / retirar-depositar-trancar (substitui o que o C++ deixou de desenhar) GB_NativeBottom(texts) -- popup: trocar (digitar numero) if GerenciarBau_ShowTroca then CreateInterface(IMG_PANEL, GB_POP_X, GB_POP_Y, 180, 70, 0, 0, 0.83203125, 1.0, 1, 1) SetFont(0) SetTextBackColor(0, 0, 0, 0) SetTextColor(255, 255, 0, 255) SetText(GB_POP_X + 12, GB_POP_Y + 18, texts[7]) CreateInterface(IMG_EDITBOX, GB_POP_X + 85, GB_POP_Y + 14, 80, 18, 0, 0, 0.8828125, 0.5625, 1, 1) SetTextColor(255, 255, 255, 255) SetText(GB_POP_X + 92, GB_POP_Y + 18, string.format("%s", GerenciarBau_BauDigitado)) GB_TextButton(3, GB_POP_X + 25, GB_POP_Y + 42, 55, 16, btxt[1]) GB_TextButton(4, GB_POP_X + 100, GB_POP_Y + 42, 55, 16, btxt[2]) end -- popup: comprar (confirmacao) if GerenciarBau_ShowCompra then CreateInterface(IMG_PANEL, GB_POP_X, GB_POP_Y, 180, 70, 0, 0, 0.83203125, 1.0, 1, 1) SetFont(0) SetTextBackColor(0, 0, 0, 0) SetTextColor(255, 255, 255, 255) SetText2(GB_POP_X + 90, GB_POP_Y + 18, GerenciarBau_TxtCompra) GB_TextButton(3, GB_POP_X + 25, GB_POP_Y + 42, 55, 16, btxt[1]) GB_TextButton(4, GB_POP_X + 100, GB_POP_Y + 42, 55, 16, btxt[2]) end DisableAlphaBlend() else -- bau fechado: solta o lock do mouse (senao o clique no mundo fica travado) if GerenciarBau_Locked then SetUnlockInterfaces() GerenciarBau_Locked = false end GerenciarBau_ShowCompra = false GerenciarBau_ShowTroca = false GerenciarBau_NormalState = true GerenciarBau_BauDigitado = "" end end function GerenciarBau.KeyListener(key) if CheckWindowOpen(UIWarehouse) == 1 then if GerenciarBau_ShowTroca then if GetChatPlayerOpen() == 0 then if GerenciarBau_Alfabeto[key] ~= nil then if string.len(GerenciarBau_BauDigitado) < 4 then GerenciarBau_BauDigitado = GerenciarBau_BauDigitado..GerenciarBau_Alfabeto[key] return true end end if key == Keys.Back then if string.len(GerenciarBau_BauDigitado) > 0 then GerenciarBau_BauDigitado = GerenciarBau_BauDigitado:sub(1, -2) return true end end if key == Keys.Return then if string.len(GerenciarBau_BauDigitado) > 4 or string.len(GerenciarBau_BauDigitado) <= 0 then GerenciarBau_BauDigitado = "" return true end local b = tonumber(GerenciarBau_BauDigitado) if b > GerenciarBau_TotalBaus or b <= 0 then GerenciarBau_BauDigitado = "" return true end GerenciarBau_ShowTroca = false SetUnlockInterfaces() GerenciarBau_NormalState = true CreatePacket("TB_Trocar", GerenciarBau_Packet) SetWordPacket("TB_Trocar", b) SendPacket("TB_Trocar") ClearPacket("TB_Trocar") return true end if key == Keys.Escape then GerenciarBau_ShowTroca = false GerenciarBau_NormalState = true return true end end if GerenciarBau_ShowCompra then if key == Keys.Escape then GerenciarBau_ShowCompra = false GerenciarBau_NormalState = true return true end end end end end function GerenciarBau.ClickEvent() if CheckWindowOpen(UIWarehouse) == 1 then if GerenciarBau_NormalState then if GerenciarBau.CheckButton(1, MousePosX(), MousePosY()) then GerenciarBau_ShowTroca = true GerenciarBau_NormalState = false return true end if GerenciarBau.CheckButton(2, MousePosX(), MousePosY()) then GerenciarBau_ShowCompra = true GerenciarBau_NormalState = false return true end -- botoes nativos reencarnados no Lua (chave LuaWarehouse): -- 7 retirar zen, 8 depositar zen, 9 trancar/destrancar -> mesma acao do C++ if GerenciarBau.CheckButton(7, MousePosX(), MousePosY()) then WarehouseAction(0) return true end if GerenciarBau.CheckButton(8, MousePosX(), MousePosY()) then WarehouseAction(1) return true end if GerenciarBau.CheckButton(9, MousePosX(), MousePosY()) then WarehouseAction(2) return true end if GerenciarBau.CheckButton(5, MousePosX(), MousePosY()) then GerenciarBau_BtnLeftClicked = true if GerenciarBau_BauAtual > 1 then SetUnlockInterfaces() GerenciarBau_NormalState = true CreatePacket("TB_Trocar", GerenciarBau_Packet) SetWordPacket("TB_Trocar", GerenciarBau_BauAtual-1) SendPacket("TB_Trocar") ClearPacket("TB_Trocar") end return true end if GerenciarBau.CheckButton(6, MousePosX(), MousePosY()) then GerenciarBau_BtnRightClicked = true if GerenciarBau_BauAtual < GerenciarBau_TotalBaus then SetUnlockInterfaces() GerenciarBau_NormalState = true Console(1, string.format("[GerenciarBau] enviando TB_Trocar -> bau %d", GerenciarBau_BauAtual+1)) CreatePacket("TB_Trocar", GerenciarBau_Packet) SetWordPacket("TB_Trocar", GerenciarBau_BauAtual+1) SendPacket("TB_Trocar") ClearPacket("TB_Trocar") end return true end end if GerenciarBau_ShowTroca then if GerenciarBau.CheckButton(3, MousePosX(), MousePosY()) then if string.len(GerenciarBau_BauDigitado) > 4 or string.len(GerenciarBau_BauDigitado) <= 0 then GerenciarBau_BauDigitado = "" return true end local b = tonumber(GerenciarBau_BauDigitado) if b > GerenciarBau_TotalBaus or b <= 0 then GerenciarBau_BauDigitado = "" return true end GerenciarBau_ShowTroca = false SetUnlockInterfaces() GerenciarBau_NormalState = true CreatePacket("TB_Trocar", GerenciarBau_Packet) SetWordPacket("TB_Trocar", b) SendPacket("TB_Trocar") ClearPacket("TB_Trocar") return true end if GerenciarBau.CheckButton(4, MousePosX(), MousePosY()) then GerenciarBau_ShowTroca = false GerenciarBau_NormalState = true return true end end if GerenciarBau_ShowCompra then if GerenciarBau.CheckButton(3, MousePosX(), MousePosY()) then GerenciarBau_ShowCompra = false SetUnlockInterfaces() GerenciarBau_NormalState = true CreatePacket("TB_Comprar", GerenciarBau_Packet) SendPacket("TB_Comprar") ClearPacket("TB_Comprar") return true end if GerenciarBau.CheckButton(4, MousePosX(), MousePosY()) then GerenciarBau_ShowCompra = false GerenciarBau_NormalState = true return true end end end end function GerenciarBau.ClientProtocol(Packet, PacketName) if Packet == GerenciarBau_Packet then if PacketName == "TB_Login" then Console(1, "[GerenciarBau] TB_Login recebido") GerenciarBau_TotalBaus = GetWordPacket(PacketName, -1) GerenciarBau_BauAtual = GetWordPacket(PacketName, -1) local lentxt = GetWordPacket(PacketName, -1) GerenciarBau_TxtCompra = GetCharPacketLength(PacketName, -1, lentxt) ClearPacket(PacketName) return true end if PacketName == "TB_Sucesso" then Console(1, "[GerenciarBau] TB_Sucesso recebido") GerenciarBau_TotalBaus = GetWordPacket(PacketName, -1) GerenciarBau_BauAtual = GetWordPacket(PacketName, -1) local lentxt = GetWordPacket(PacketName, -1) GerenciarBau_TxtCompra = GetCharPacketLength(PacketName, -1, lentxt) ClearPacket(PacketName) GerenciarBau_NormalState = true -- a lista do bau novo chega em seguida e e trocada na janela aberta -- (recarga silenciosa, sem fechar/reabrir) return true end end end GerenciarBau.Init() return GerenciarBau