Jump to content
×
×
  • Create New...

Search the Community

Showing results for tags 'otclient'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • xTibia - Notícias e Suporte
    • Regras
    • Noticias
    • Soluções
    • Projetos Patrocinados
    • Tutoriais para Iniciantes
    • Imprensa
  • OTServ
    • Notícias e Debates
    • OTServlist
    • Downloads
    • Recursos
    • Suporte
    • Pedidos
    • Cópia
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Categories

There are no results to display.


Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Sou

  1. Fala ai galera do xtibia estou aqui trazendo mais um module para o otClient. Esses dias atras estavo jogando pokestorm e me deparei com o autoloot e decidi fazer um parecido com o deles e então pensei porque não trazer para a comunidade? Afinal não vejo muitos modulos de autoloot para otClient o unico que vi foi o autoloot da DxP, porem não é muito intuitivo comparado com modulo da pokestorm, bom sem mais enrolação vamos lá. Feito o download do arquivo, coloque-o na pasta do seu otClient em /modules/ e pronto já é possível "utilizar-lo", porem com algumas exceções de algumas configurações básicas que temos que fazer para poder utilizar-lo com algumas eficiências. 1º Na pasta do seu otClient/data/ crie uma pasta chamada items e coloque o seus arquivos items.otb e items.xml. 2º Vai até a pasta do seu otClient/modules/game_things abre o arquivo things.lua e procure a função load(), e coloque o seguinte: g_things.loadOtb ('/items/items.otb') g_things.loadXml('/items/items.xml') Obs: Não se assustem quando entrarem no client para logar, no inicio vai dar uma travada, mas depois de esperar uns segundos ele normaliza, pois o único problema é que o carregamento dos arquivos dos items eles são demorados. Também é preciso fazer umas configurações rápida na parte do servidor para poder funcionar. Copie e cole esse script e coloque na pasta do servidor em mods/ e de o nome de autoloot.xml Ainda na pasta do seu servidor abre o arquivo /data/creaturescripts/scripts/login.lua e coloque o seguinte script dentro da função onLogin: local loot = '' for i = 1, #getPlayerStorageTable(cid, info.Storages[1]) do loot = loot..getItemInfo(getPlayerStorageTable(cid, info.Storages[1])[i]).clientId..'-'..getItemNameById(getPlayerStorageTable(cid, info.Storages[1])[i])..'@' end doSendPlayerExtendedOpcode(cid, 157, loot) Feito todos os passos corretamente, configurado certo, deve ficar assim no game: Bom espero que tenham entendido e gostado, não sou muito de ficar escrevendo tutorial, até uma próxima. Download Créditos
  2. Qm puder me dizer tambem se tem um macro de mensagem para otclient eu agradeçeria
  3. ESTOU COM O SEGUINTE ERRO AO UTILIZAR QUALQUER SPELL QUE TENHA SHOOT EFFECTS (DISTANCE EFFECTS). TANTO EU QUANTO OS MONSTROS QUE USAM DA ESTE SEGUINTE ERRO NO TERMINAL: ERROR: ProtocolGame parse message exception (56 bytes unread, last opcode is 0, prev opcode is 133): unhandled opcode 0 JA ADICIONEI OS FEATURES TODOS NECESSÁRIOS E MESMO ASSIM CONTINUO COM ESTE PROBLEMA. É SO NESTA PARTE QUE DA ESSE ERRO, E QUANDO ALGUM MONSTRO USAR UMA SPELL COM DISTANCE A SPELL NÃO DA DANO NO PLAYER. JA TAMBEM REINSTALEI O TFS 0.4 QUE JA VEM COM OS OPCODES E JA ADICIONEI NO CREATURE SCRIPT MAS NÃO FAÇO IDEIA DE COMO RESOLVER ISSO.
  4. Olá por acaso alguém sabe como eu deixo a tela do OTClient sempre no tamanho máximo? Tipo, fiz o esquema de aumentar os tiles da tela do OTClient mas quando eu logo no jogo eu preciso apertar (CTRL+.) duas vezes para a tela ficar estendida, gostaria de deixar sempre estendida sem precisar apertar o botão para ficar dessa forma. Como está: Como eu quero que fique: Creio que seja no mesmo lugar que mexe no zoom, até encontrei a opção currentViewMode para deixar sempre estendido mas até mesmo essa opção tem bordas pequenas nas laterais. Mandei tbm o arquivo para caso queiram ver como tá. gameinterface.lua
  5. Galera alguem pode min da uma forca com isso ? estou tentando colocar que o char apareça ali com todas as informações mais não estou conseguindo.
  6. Bom galera, eu to com esse erro ai... vou seguindo os parços e coloco cd c git clone https://github.com/microsoft/vcpkg.git cd vcpkg Porem quando uso esse ".\bootstrap-vcpkg.bat" da esse erro ai... Desculpas se coloquei na area errada, alguém poderia me ajudar? ? Grato pela atenção ❤️
  7. Mizakinha

    OTClient bugado

    Alguém me ajuda pelo amor de Deus. Depois de infinitas tentativas eu finalmente consegui compilar as sources do SERVIDOR, substitui o arquivo .exe que gerou e coloquei na pasta do server, liguei o server e tudo funcionou perfeitamente, mas quando eu entro no servidor o client tá todo bugado. Alguém sabe o que pode ser? Eu compilei as sources do servidor não a do client, não mexi nada no client. To usando como base o Pokemon HuatsonOT V2.0 (DXP).
  8. Base Pokemasterx, estou editando para um novo projeto, espero que gostem!
  9. helviio

    [OTC] Tema

    Olá estou convertendo um tema que ganhei do OtcV8 pra OTC ... porém estou tendo um trabalho enorme pra achar essa parte ... sei que é na pasta styles e tal ... porém ja deixei tudo igual nas pastas window/miniwindow/minimap ... se alguém puder me dar essa luz ficaria agradecido
  10. Eai galera do Xtibia hoje eu trago um module que desenvolvi para notificar o player caso ele esteja com o cliente desatualizado. Esse tutorial é para TFS 1.x, da pra usar em TFS 0.x mas terá que adaptar o código e ter OPCODES na sua source! Como instalar o module: 1 - Pegue a pasta do module e coloque na pasta mods do seu client. no arquivo module.lua você vai encontrar a seguinte linha: local VERSION = "1.0" nessa linha você define a versão atual do seu client, a cada novo client você modifica esse valor! 2 - Vá até a pasta creaturescripts/scripts do seu servidor e crie uma novo script chamado clientVersion.lua dentro desse script, cole o seguinte código: Em local VERSION = "1.0" você define a mesma versão que colocou no client, sempre que atualizar o client, deve alterar a variável VERSION desse script acima, do mesmo modo que altera no module do client. Em local MESSAGE = "..." você pode alterar a mensagem que será enviada ao player caso ele esteja com um cliente desatualizado. 3 - Em creaturescripts/creaturescripts.xml adicione a seguinte linha: <event type="extendedopcode" name="ClientVersion" script="clientVersion.lua" /> 4 - Agora no arquivo creaturescripts/login.lua registre esse evento antes de return true player:registerEvent("ClientVersion") Pronto, o module foi instalado! Print: Download
  11. KaboFlow

    OTClient Pra PDA

    alguem me ajude a adicionar o cliente a este banco de dados, por favor add OTCLIENT Pra base pda old
  12. Boa tarde galera, eu mostrei no meu showoff a tela do meu cliente, que pretendo liberar para a galera, porem, recebi mensagens de como fazer aquilo, e como eu vou postar o cliente com o module, resolvi fazer esse tutorial e liberar o module.. Esse module é para mudar a Game Window, para que não conhece, veja um print: Então, vou liberar o entergame já feito, e também vou ensinar como modificar. *Download no fim do topico*, vamos ao tutorial: Tenha em mente a imagem, e então, veja o tamanho dela, feito isso, va no entergame.lua e procure a linha que seta o IP do seu servidor, va está assim: EnterGame.setUniqueServer("127.0.0.1", 7877, 854, 361, 356) Vou explicar a linha toda para que entendam: 127.0.0.1 = IP do server 7877 = port do servidor, no meu caso ta 7877, porque é a porta Linnux. 854 = Versão do cliente/servidor. 361 = Tamanho da game window 356 = largura da game window em outras palavras, 361 e 356 é onde vamos modificar.. Você pega as dimensões da imagem, e coloca no lugar dos mesmos(361 e 356).. Feito isso, salve o entergame.lua e feche. Agora vamos editar a OTUI.. Abra o Entergame.otui e na primeira linha temos isso: EnterGameWindow < MainWindow !text: tr('Enter Game') size: 236 274 Bom, vamos modificar.. Retire essa linha: !text: tr('Enter Game') Nessa função modifique esse tamanho "236 274" para as dimensões da imagem *no caso seria (361 e 356): Antes: size: 236 274 Agora: size: 361 356 Adicione isto em baixo dessa função acima: image-source: enter.png *enter.png é a imagem que estamos usando para colocar no game window, a mesma que a gente pegou as dimensões e modificamos no entergame.lua*, *ela tem que está dentro da pasta onde se localiza o entergame.lua*. pronto, seu cliente já vai ler sua nova window com imagem. *Terá que mudar os lugares de onde coloca senha e conta* É bem simples, basta ir na OTUI e mudar os margin-top* DOWNLOAD ENTERGAME COM NOVA WINDOW: Download OBS: Deixei uns 3 Entergame dentro, se vocês quiserem usar como base, não me importo.. POR FAVOR, NÃO POSTE ESSE TUTORIAL EM OUTRO FÓRUM SEM OS DEVIDOS CRÉDITOS. FUNCIONA EM QUALQUER VERSÃO DO OTCLIENT. OBS: se vocês não souberem editar o entergame, irá bugar. É melhor baixar o que estou disponizilizando, e então mudar somente as dimensões..
  13. Olá a todos do xtibia gostaria da ajuda de alguem pra solucionar meu probleminha, estou editando um servidor de dragonball com src etc. So que tem um pequeno bug visual no meu otclient, quando eu solto um atk com effect distance fica esse bug agradeço desde já ?❤ PODEM FECHAR O TOPICO NÃO TEVE NEMHUMA RESPOSTA QUE PUDESE CORRIGIR O PROBLEMA ENTÃO EU RESOLVI DEIXAR OS EFFECTS EM UNIT8 PARA RESOLVER O PROBLEMA! OBRIGADO POR TENTAREM AJUDAR ❤️
  14. [OTClient] Health Player Info OTPokemon Eae galerinha do xtibia, hoje venho trazer mais uma contribuição para a comunidade, um módulo indêntico ao do OtPokemon. Mesmo que seja simples a instalação, tem sempre aquele que não sabe onde deve colocar o módulo, peço então que tenha paciência quanto a esse simples tutorial, aos demais aqueles que já sabem, peço que ao menos leia a Observações do módulo. 1º Faça o download do módulo. 2º Extraia o módulo para a pasta do seu otClient em /modules ficando assim: Feito o passo 1 e 2 creio que já estará funcionando, isto se você fez tudo certinho. •Observações do módulo• Demonstrativo do módulo no jogo.
  15. Estava fazendo esse modulo e decidi postar, para quem quiser é um modulo de banco igual do OTPokemon, segue o demostrativo. OBS: Download contém apenas o módulo e não está completo.
  16. Eu baixei a ultima versão do OTClient, e no entergame.lua não esta aparecendo a linha que tinha nos anteriores. "function EnterGame.setUniqueServer(host, port, protocol, windowWidth, windowHeight)". Como faz para por IPFixo no otclientv8-master? EnterGame = { } -- private variables local loadBox local enterGame local enterGameButton local clientBox local protocolLogin local server = nil local versionsFound = false local customServerSelectorPanel local serverSelectorPanel local serverSelector local clientVersionSelector local serverHostTextEdit local rememberPasswordBox local protos = {"740", "760", "772", "792", "800", "810", "854", "860", "870", "961", "1000", "1077", "1090", "1096", "1098", "1099", "1100", "1200", "1220"} local checkedByUpdater = {} -- private functions local function onProtocolError(protocol, message, errorCode) if errorCode then return EnterGame.onError(message) end return EnterGame.onLoginError(message) end local function onSessionKey(protocol, sessionKey) G.sessionKey = sessionKey end local function onCharacterList(protocol, characters, account, otui) if rememberPasswordBox:isChecked() then local account = g_crypt.encrypt(G.account) local password = g_crypt.encrypt(G.password) g_settings.set('account', account) g_settings.set('password', password) else EnterGame.clearAccountFields() end for _, characterInfo in pairs(characters) do if characterInfo.previewState and characterInfo.previewState ~= PreviewState.Default then characterInfo.worldName = characterInfo.worldName .. ', Preview' end end if loadBox then loadBox:destroy() loadBox = nil end CharacterList.create(characters, account, otui) CharacterList.show() g_settings.save() end local function onUpdateNeeded(protocol, signature) return EnterGame.onError(tr('Your client needs updating, try redownloading it.')) end local function onProxyList(protocol, proxies) for _, proxy in ipairs(proxies) do g_proxy.addProxy(proxy["host"], proxy["port"], proxy["priority"]) end end local function parseFeatures(features) for feature_id, value in pairs(features) do if value == "1" or value == "true" or value == true then g_game.enableFeature(feature_id) else g_game.disableFeature(feature_id) end end end local function validateThings(things) local incorrectThings = "" local missingFiles = false local versionForMissingFiles = 0 if things ~= nil then local thingsNode = {} for thingtype, thingdata in pairs(things) do thingsNode[thingtype] = thingdata[1] if not g_resources.fileExists("/things/" .. thingdata[1]) then incorrectThings = incorrectThings .. "Missing file: " .. thingdata[1] .. "\n" missingFiles = true versionForMissingFiles = thingdata[1]:split("/")[1] else local localChecksum = g_resources.fileChecksum("/things/" .. thingdata[1]):lower() if localChecksum ~= thingdata[2]:lower() and #thingdata[2] > 1 then if g_resources.isLoadedFromArchive() then -- ignore checksum if it's test/debug version incorrectThings = incorrectThings .. "Invalid checksum of file: " .. thingdata[1] .. " (is " .. localChecksum .. ", should be " .. thingdata[2]:lower() .. ")\n" end end end end g_settings.setNode("things", thingsNode) else g_settings.setNode("things", {}) end if missingFiles then incorrectThings = incorrectThings .. "\nYou should open data/things and create directory " .. versionForMissingFiles .. ".\nIn this directory (data/things/" .. versionForMissingFiles .. ") you should put missing\nfiles (Tibia.dat and Tibia.spr) " .. "from correct Tibia version." end return incorrectThings end local function onTibia12HTTPResult(session, playdata) local characters = {} local worlds = {} local account = { status = 0, subStatus = 0, premDays = 0 } if session["status"] ~= "active" then account.status = 1 end if session["ispremium"] then account.subStatus = 1 -- premium end if session["premiumuntil"] > g_clock.seconds() then account.subStatus = math.floor((session["premiumuntil"] - g_clock.seconds()) / 86400) end local things = { data = {G.clientVersion .. "/Tibia.dat", ""}, sprites = {G.clientVersion .. "/Tibia.spr", ""}, } local incorrectThings = validateThings(things) if #incorrectThings > 0 then g_logger.error(incorrectThings) if Updater and not checkedByUpdater[G.clientVersion] then checkedByUpdater[G.clientVersion] = true return Updater.check({ version = G.clientVersion, host = G.host }) else return EnterGame.onError(incorrectThings) end end onSessionKey(nil, session["sessionkey"]) for _, world in pairs(playdata["worlds"]) do worlds[world.id] = { name = world.name, port = world.externalportunprotected or world.externalportprotected or world.externaladdress, address = world.externaladdressunprotected or world.externaladdressprotected or world.externalport } end for _, character in pairs(playdata["characters"]) do local world = worlds[character.worldid] if world then table.insert(characters, { name = character.name, worldName = world.name, worldIp = world.address, worldPort = world.port }) end end -- proxies if g_proxy then g_proxy.clear() if playdata["proxies"] then for i, proxy in ipairs(playdata["proxies"]) do g_proxy.addProxy(proxy["host"], tonumber(proxy["port"]), tonumber(proxy["priority"])) end end end g_game.setCustomProtocolVersion(0) g_game.chooseRsa(G.host) g_game.setClientVersion(G.clientVersion) g_game.setProtocolVersion(g_game.getClientProtocolVersion(G.clientVersion)) g_game.setCustomOs(-1) -- disable if not g_game.getFeature(GameExtendedOpcode) then g_game.setCustomOs(5) -- set os to windows if opcodes are disabled end onCharacterList(nil, characters, account, nil) end local function onHTTPResult(data, err) if err then return EnterGame.onError(err) end if data['error'] and data['error']:len() > 0 then return EnterGame.onLoginError(data['error']) elseif data['errorMessage'] and data['errorMessage']:len() > 0 then return EnterGame.onLoginError(data['errorMessage']) end if type(data["session"]) == "table" and type(data["playdata"]) == "table" then return onTibia12HTTPResult(data["session"], data["playdata"]) end local characters = data["characters"] local account = data["account"] local session = data["session"] local version = data["version"] local things = data["things"] local customProtocol = data["customProtocol"] local features = data["features"] local settings = data["settings"] local rsa = data["rsa"] local proxies = data["proxies"] local incorrectThings = validateThings(things) if #incorrectThings > 0 then g_logger.info(incorrectThings) return EnterGame.onError(incorrectThings) end -- custom protocol g_game.setCustomProtocolVersion(0) if customProtocol ~= nil then customProtocol = tonumber(customProtocol) if customProtocol ~= nil and customProtocol > 0 then g_game.setCustomProtocolVersion(customProtocol) end end -- force player settings if settings ~= nil then for option, value in pairs(settings) do modules.client_options.setOption(option, value, true) end end -- version G.clientVersion = version g_game.setClientVersion(version) g_game.setProtocolVersion(g_game.getClientProtocolVersion(version)) g_game.setCustomOs(-1) -- disable if rsa ~= nil then g_game.setRsa(rsa) end if features ~= nil then parseFeatures(features) end if session ~= nil and session:len() > 0 then onSessionKey(nil, session) end -- proxies if g_proxy then g_proxy.clear() if proxies then for i, proxy in ipairs(proxies) do g_proxy.addProxy(proxy["host"], tonumber(proxy["port"]), tonumber(proxy["priority"])) end end end onCharacterList(nil, characters, account, nil) end -- public functions function EnterGame.init() if USE_NEW_ENERGAME then return end enterGame = g_ui.displayUI('entergame') serverSelectorPanel = enterGame:getChildById('serverSelectorPanel') customServerSelectorPanel = enterGame:getChildById('customServerSelectorPanel') serverSelector = serverSelectorPanel:getChildById('serverSelector') rememberPasswordBox = enterGame:getChildById('rememberPasswordBox') serverHostTextEdit = customServerSelectorPanel:getChildById('serverHostTextEdit') clientVersionSelector = customServerSelectorPanel:getChildById('clientVersionSelector') if Servers ~= nil then for name,server in pairs(Servers) do serverSelector:addOption(name) end end if serverSelector:getOptionsCount() == 0 or ALLOW_CUSTOM_SERVERS then serverSelector:addOption(tr("Another")) end for i,proto in pairs(protos) do clientVersionSelector:addOption(proto) end if serverSelector:getOptionsCount() == 1 then enterGame:setHeight(enterGame:getHeight() - serverSelectorPanel:getHeight()) serverSelectorPanel:setOn(false) end local account = g_crypt.decrypt(g_settings.get('account')) local password = g_crypt.decrypt(g_settings.get('password')) local server = g_settings.get('server') local host = g_settings.get('host') local clientVersion = g_settings.get('client-version') if serverSelector:isOption(server) then serverSelector:setCurrentOption(server, false) if Servers == nil or Servers[server] == nil then serverHostTextEdit:setText(host) end clientVersionSelector:setOption(clientVersion) else server = "" host = "" end enterGame:getChildById('accountPasswordTextEdit'):setText(password) enterGame:getChildById('accountNameTextEdit'):setText(account) rememberPasswordBox:setChecked(#account > 0) g_keyboard.bindKeyDown('Ctrl+G', EnterGame.openWindow) if g_game.isOnline() then return EnterGame.hide() end scheduleEvent(function() EnterGame.show() end, 100) end function EnterGame.terminate() if not enterGame then return end g_keyboard.unbindKeyDown('Ctrl+G') enterGame:destroy() if loadBox then loadBox:destroy() loadBox = nil end if protocolLogin then protocolLogin:cancelLogin() protocolLogin = nil end EnterGame = nil end function EnterGame.show() if not enterGame then return end enterGame:show() enterGame:raise() enterGame:focus() enterGame:getChildById('accountNameTextEdit'):focus() end function EnterGame.hide() if not enterGame then return end enterGame:hide() end function EnterGame.openWindow() if g_game.isOnline() then CharacterList.show() elseif not g_game.isLogging() and not CharacterList.isVisible() then EnterGame.show() end end function EnterGame.clearAccountFields() enterGame:getChildById('accountNameTextEdit'):clearText() enterGame:getChildById('accountPasswordTextEdit'):clearText() enterGame:getChildById('accountTokenTextEdit'):clearText() enterGame:getChildById('accountNameTextEdit'):focus() g_settings.remove('account') g_settings.remove('password') end function EnterGame.onServerChange() server = serverSelector:getText() if server == tr("Another") then if not customServerSelectorPanel:isOn() then serverHostTextEdit:setText("") customServerSelectorPanel:setOn(true) enterGame:setHeight(enterGame:getHeight() + customServerSelectorPanel:getHeight()) end elseif customServerSelectorPanel:isOn() then enterGame:setHeight(enterGame:getHeight() - customServerSelectorPanel:getHeight()) customServerSelectorPanel:setOn(false) end if Servers and Servers[server] ~= nil then serverHostTextEdit:setText(Servers[server]) end end function EnterGame.doLogin() if g_game.isOnline() then local errorBox = displayErrorBox(tr('Login Error'), tr('Cannot login while already in game.')) connect(errorBox, { onOk = EnterGame.show }) return end G.account = enterGame:getChildById('accountNameTextEdit'):getText() G.password = enterGame:getChildById('accountPasswordTextEdit'):getText() G.authenticatorToken = enterGame:getChildById('accountTokenTextEdit'):getText() G.stayLogged = true G.server = serverSelector:getText():trim() G.host = serverHostTextEdit:getText() G.clientVersion = tonumber(clientVersionSelector:getText()) if not rememberPasswordBox:isChecked() then g_settings.set('account', G.account) g_settings.set('password', G.password) end g_settings.set('host', G.host) g_settings.set('server', G.server) g_settings.set('client-version', G.clientVersion) g_settings.save() local server_params = G.host:split(":") if G.host:lower():find("http") ~= nil then if #server_params >= 4 then G.host = server_params[1] .. ":" .. server_params[2] .. ":" .. server_params[3] G.clientVersion = tonumber(server_params[4]) elseif #server_params >= 3 then if tostring(tonumber(server_params[3])) == server_params[3] then G.host = server_params[1] .. ":" .. server_params[2] G.clientVersion = tonumber(server_params[3]) end end return EnterGame.doLoginHttp() end local server_ip = server_params[1] local server_port = 7171 if #server_params >= 2 then server_port = tonumber(server_params[2]) end if #server_params >= 3 then G.clientVersion = tonumber(server_params[3]) end if type(server_ip) ~= 'string' or server_ip:len() <= 3 or not server_port or not G.clientVersion then return EnterGame.onError("Invalid server, it should be in format IP:PORT or it should be http url to login script") end local things = { data = {G.clientVersion .. "/Tibia.dat", ""}, sprites = {G.clientVersion .. "/Tibia.spr", ""}, } local incorrectThings = validateThings(things) if #incorrectThings > 0 then g_logger.error(incorrectThings) if Updater and not checkedByUpdater[G.clientVersion] then checkedByUpdater[G.clientVersion] = true return Updater.check({ version = G.clientVersion, host = G.host }) else return EnterGame.onError(incorrectThings) end end protocolLogin = ProtocolLogin.create() protocolLogin.onLoginError = onProtocolError protocolLogin.onSessionKey = onSessionKey protocolLogin.onCharacterList = onCharacterList protocolLogin.onUpdateNeeded = onUpdateNeeded protocolLogin.onProxyList = onProxyList EnterGame.hide() loadBox = displayCancelBox(tr('Please wait'), tr('Connecting to login server...')) connect(loadBox, { onCancel = function(msgbox) loadBox = nil protocolLogin:cancelLogin() EnterGame.show() end }) if G.clientVersion == 1000 then -- some people don't understand that tibia 10 uses 1100 protocol G.clientVersion = 1100 end -- if you have custom rsa or protocol edit it here g_game.setClientVersion(G.clientVersion) g_game.setProtocolVersion(g_game.getClientProtocolVersion(G.clientVersion)) g_game.setCustomProtocolVersion(0) g_game.setCustomOs(-1) -- disable g_game.chooseRsa(G.host) if #server_params <= 3 and not g_game.getFeature(GameExtendedOpcode) then g_game.setCustomOs(2) -- set os to windows if opcodes are disabled end -- extra features from init.lua for i = 4, #server_params do g_game.enableFeature(tonumber(server_params[i])) end -- proxies if g_proxy then g_proxy.clear() end if modules.game_things.isLoaded() then g_logger.info("Connecting to: " .. server_ip .. ":" .. server_port) protocolLogin:login(server_ip, server_port, G.account, G.password, G.authenticatorToken, G.stayLogged) else loadBox:destroy() loadBox = nil EnterGame.show() end end function EnterGame.doLoginHttp() if G.host == nil or G.host:len() < 10 then return EnterGame.onError("Invalid server url: " .. G.host) end loadBox = displayCancelBox(tr('Please wait'), tr('Connecting to login server...')) connect(loadBox, { onCancel = function(msgbox) loadBox = nil EnterGame.show() end }) local data = { type = "login", account = G.account, accountname = G.account, email = G.account, password = G.password, accountpassword = G.password, token = G.authenticatorToken, version = APP_VERSION, uid = G.UUID, stayloggedin = true } HTTP.postJSON(G.host, data, onHTTPResult) EnterGame.hide() end function EnterGame.onError(err) if loadBox then loadBox:destroy() loadBox = nil end local errorBox = displayErrorBox(tr('Login Error'), err) errorBox.onOk = EnterGame.show end function EnterGame.onLoginError(err) if loadBox then loadBox:destroy() loadBox = nil end local errorBox = displayErrorBox(tr('Login Error'), err) errorBox.onOk = EnterGame.show if err:lower():find("invalid") or err:lower():find("not correct") or err:lower():find("or password") then EnterGame.clearAccountFields() end end
  17. [OTClient] Sistema de Dialogo Otpokemon Venho através desse tópico contribuir para a comunidade, um simples modulo de dialogo no estilo do Otpokemon, não é um sistema de dialogo avançado é algo simples que deixa seu servidor intuitivo. 1) Faça o download do modulo no qual se encontra no final do tópico e abrindo a pasta do seu client, extraia e coloque o modulo na pasta modules. 2) O módulo utiliza uma função chamada switch que não é comum ter no otclient, porem podemos colocar sem muito esforço, na pasta do otclient abra o arquivo util.lua que se encontra em modules/corelib/ e no final do arquivo coloque o seguinte código: Feito o passo 1 e 2, vamos para a parte do servidor. 1) Crie um arquivo na pasta data/lib/ podendo ter o nome de npcdialog_lib.lua e coloque o seguinte código: 2) O arquivo que acabamos de criar utiliza uma função chamada table.serialize que não é comum ter nos servidores, para que funcione sem erros vamos adicionar, abra o arquivo 012-table.lua que fica na pasta do seu servidor em data/lib/ ou você pode criar o arquivo e adicionar o seguinte código: Feito todo esse procedimento, estarei disponibilizando um npc para que vocês possam ter uma noção de como utilizar esse sistema de dialogo. 1) Crie um arquivo na pasta do servidor em data/npc/ chamado Gengo.xml e adicione o seguinte código: 2) Crie um arquivo na pasta do servidor em data/npc/lib/ com o nome gengo.lua e adicione o seguinte código: O npc é algo simples, porem serve para que você possa ter uma noção de como utilizar as funções do npc. Demostrativo dentro do game: Arquivos para download e o scan:
  18. Olá xTibia Hoje Trago pra vocês um pack de Client Wodbo Explorer Descompilado atual ano 2019 ( Não tenho certeza disso, eu nao lembro mais. deixei que minha notebook guardava mais o clientes.) Espero que vocês gostam. https://www.mediafire.com/file/zqnt30azbuvi1wc/WODBOExplorer.zip/file Imagens Pack Client Wodbo Explorer Creditos: Mask Ghost ( Descompilador Client's Pack ) Scan: https://www.virustotal.com/gui/file/d6fa20a70c9e6578d55f0cccbda9888f6846fcf1faa4f8744d7d2089ed022cda/detection Não postem em outros fórum sem a minha permissão. é isto bom aprveito a todos. 2020 - Bom Dia.
  19. Essa modificação permite que ao passar o mouse sobre um item, apareça uma descrição do item. Não tem como causar lag no servidor nem no cliente, pois carrega as informações dentro do arquivo na TAG itemsList Vai em otclient/modules/game_interface/widgets e abra o arquivo uiitem.lua Procure por function UIItem:onHoverChange(hovered) UIWidget.onHoverChange(self, hovered) Salte uma linha e coloque o código abaixo
  20. Boa Noite Galera Blz? - Eu andei pesquisando sobre otclient na net e procurei uma novidade em outro forum que é um OTCLIENT para (ANDROID) !, Ele funciona 100% para celular agora nao sei se funciona para Tablet e etc... - Eu nao sei se voces ja sabem dessa Novidade! - Intao Galera e mesma coisa que o Proprio OTCLIENT que nos usamos se voce esta em duvida veja esse video: - Como Podem ver Realmente funciona no celular , eu nao tenhu um celular bom da ate vergonha de falar mais eu uso galaxy pokety , voltando ao assunto ja imaginou em criar um client exclusivo para seu Servidor ? ai vem as Perguntas , Sera que da pra criar Client de Derivados tambem? Nao Sei , mais vamos descobrir! - Eu testei em um servidor e realmente funcionou , eu ultilizei um programa para simular o android no meu pc chamado (BLUESTACKS) so que nao adianto mt pq eu nao tenhu placa de video e meu pc ta um lixo, intao vamo algumas imagens de eu entrando em um servidor ! obs: o Client que baixei ja foi compilado por um usuario de outro Forum , o client é 10.95: - A Imagem e so para ter uma noçao de como é intao eu estou compartilhando essa Novidade para nos mesmos começar a fazer client para Celular , eu sei que tem varios programadores bons e quem mexa com otclient e tals! - Source OTCLIENT PARA (ANDROID): https://github.com/edubart/otclient/tree/mobile_port - (TUTORIAL) Como Compilar um OTCLIENT Para ANDROID: https://github.com/edubart/otclient/wiki/Compiling-for-Android - (OTCLIENT QUE EU TESTEI NAS IMAGENS ACIMA) DOWNLOAD OTCLIENT 10.95.APK: https://mega.nz/#!sBtXFIQL!KqnAX7rFFcUBYDIRls6zJqZXZmymzOznn-4f-ZKDui4 - Galera se essa informação ja nao é NOVIDADE me avisem que eu altero no topico la , pois faz tempo que nao mexo com otservers! - Se estiver no Local Errado , Peço que movam para o Local Correto , OBG!
  21. Otclient Mobile 740,760,772,800,810,854,860,1090,1099 Server Testados carnage76.4vps.eu:7171 "760"?? Mdq.pl:7171 "772"?? Devlandot.eu:7171 "800"?? 854"Só achei derivado" Baiak-pelego24hrs.online:7171 "860"?? Realots.pl:7171 "1090"?? Oceraglobal.servegame.com:7171 "1099"?? Link: "Mega" https://mega.nz/file/a8wjiAwS#jHnSng73v5cARI1vI_ohBtn_7AZTHmGchB4LqOM_BO8 Arquivo: gen_signed.apk Tamanho: 190,02MB Instagram.com/deva.tenseisk8
  22. NÃO ESTOU CONSEGUINDO MUDAR MEU IP , PARA QUE O OTCLIENTE LOGO SOMENTE NO MEU OT , GOSTARIA QUE SUMISSE AS CAIXA DE ESCOLHA DE IP E VERSÃO E FICASSE SO PARA O PLAYER COLOCAR LOGIN E SENHA. +REP entergame.LUA EnterGame = { } -- private variables local loadBox local enterGame local motdWindow local motdButton local enterGameButton local clientBox local protocolLogin local motdEnabled = true -- private functions local function onError(protocol, message, errorCode) if loadBox then loadBox:destroy() loadBox = nil end if not errorCode then EnterGame.clearAccountFields() end local errorBox = displayErrorBox(tr('Login Error'), message) connect(errorBox, { onOk = EnterGame.show }) end local function onMotd(protocol, motd) G.motdNumber = tonumber(motd:sub(0, motd:find("\n"))) G.motdMessage = motd:sub(motd:find("\n") + 1, #motd) if motdEnabled then motdButton:show() end end local function onCharacterList(protocol, characters, account, otui) -- Try add server to the server list ServerList.add(G.host, G.port, g_game.getClientVersion()) if enterGame:getChildById('rememberPasswordBox'):isChecked() then local account = g_crypt.encrypt(G.account) local password = g_crypt.encrypt(G.password) g_settings.set('account', account) g_settings.set('password', password) ServerList.setServerAccount(G.host, account) ServerList.setServerPassword(G.host, password) g_settings.set('autologin', enterGame:getChildById('autoLoginBox'):isChecked()) else -- reset server list account/password ServerList.setServerAccount(G.host, '') ServerList.setServerPassword(G.host, '') EnterGame.clearAccountFields() end loadBox:destroy() loadBox = nil for _, characterInfo in pairs(characters) do if characterInfo.previewState and characterInfo.previewState ~= PreviewState.Default then characterInfo.worldName = characterInfo.worldName .. ', Preview' end end CharacterList.create(characters, account, otui) CharacterList.show() if motdEnabled then local lastMotdNumber = g_settings.getNumber("motd") if G.motdNumber and G.motdNumber ~= lastMotdNumber then g_settings.set("motd", motdNumber) motdWindow = displayInfoBox(tr('Message of the day'), G.motdMessage) connect(motdWindow, { onOk = function() CharacterList.show() motdWindow = nil end }) CharacterList.hide() end end end local function onUpdateNeeded(protocol, signature) loadBox:destroy() loadBox = nil if EnterGame.updateFunc then local continueFunc = EnterGame.show local cancelFunc = EnterGame.show EnterGame.updateFunc(signature, continueFunc, cancelFunc) else local errorBox = displayErrorBox(tr('Update needed'), tr('Your client needs updating, try redownloading it.')) connect(errorBox, { onOk = EnterGame.show }) end end -- public functions function EnterGame.init() enterGame = g_ui.displayUI('entergame') enterGameButton = modules.client_topmenu.addLeftButton('enterGameButton', tr('Login') .. ' (Ctrl + G)', '/images/topbuttons/login', EnterGame.openWindow) motdButton = modules.client_topmenu.addLeftButton('motdButton', tr('Message of the day'), '/images/topbuttons/motd', EnterGame.displayMotd) motdButton:hide() g_keyboard.bindKeyDown('Ctrl+G', EnterGame.openWindow) if motdEnabled and G.motdNumber then motdButton:show() end local account = g_settings.get('account') local password = g_settings.get('password') local host = g_settings.get('host') local port = g_settings.get('port') local autologin = g_settings.getBoolean('autologin') local clientVersion = g_settings.getInteger('client-version') if clientVersion == 0 then clientVersion = 1071 end if port == nil or port == 0 then port = 7171 end EnterGame.setAccountName(account) EnterGame.setPassword(password) enterGame:getChildById('serverHostTextEdit'):setText(host) enterGame:getChildById('serverPortTextEdit'):setText(port) enterGame:getChildById('autoLoginBox'):setChecked(autologin) clientBox = enterGame:getChildById('clientComboBox') for _, proto in pairs(g_game.getSupportedClients()) do clientBox:addOption(proto) end clientBox:setCurrentOption(clientVersion) enterGame:hide() if g_app.isRunning() and not g_game.isOnline() then enterGame:show() end end function EnterGame.firstShow() EnterGame.show() local account = g_crypt.decrypt(g_settings.get('account')) local password = g_crypt.decrypt(g_settings.get('password')) local host = g_settings.get('host') local autologin = g_settings.getBoolean('autologin') if #host > 0 and #password > 0 and #account > 0 and autologin then addEvent(function() if not g_settings.getBoolean('autologin') then return end EnterGame.doLogin() end) end end function EnterGame.terminate() g_keyboard.unbindKeyDown('Ctrl+G') enterGame:destroy() enterGame = nil enterGameButton:destroy() enterGameButton = nil clientBox = nil if motdWindow then motdWindow:destroy() motdWindow = nil end if motdButton then motdButton:destroy() motdButton = nil end if loadBox then loadBox:destroy() loadBox = nil end if protocolLogin then protocolLogin:cancelLogin() protocolLogin = nil end EnterGame = nil end function EnterGame.show() if loadBox then return end enterGame:show() enterGame:raise() enterGame:focus() end function EnterGame.hide() enterGame:hide() end function EnterGame.openWindow() if g_game.isOnline() then CharacterList.show() elseif not g_game.isLogging() and not CharacterList.isVisible() then EnterGame.show() end end function EnterGame.setAccountName(account) local account = g_crypt.decrypt(account) enterGame:getChildById('accountNameTextEdit'):setText(account) enterGame:getChildById('accountNameTextEdit'):setCursorPos(-1) enterGame:getChildById('rememberPasswordBox'):setChecked(#account > 0) end function EnterGame.setPassword(password) local password = g_crypt.decrypt(password) enterGame:getChildById('accountPasswordTextEdit'):setText(password) end function EnterGame.clearAccountFields() enterGame:getChildById('accountNameTextEdit'):clearText() enterGame:getChildById('accountPasswordTextEdit'):clearText() enterGame:getChildById('accountNameTextEdit'):focus() g_settings.remove('account') g_settings.remove('password') end function EnterGame.doLogin() G.account = enterGame:getChildById('accountNameTextEdit'):getText() G.password = enterGame:getChildById('accountPasswordTextEdit'):getText() G.host = enterGame:getChildById('serverHostTextEdit'):getText() G.port = tonumber(enterGame:getChildById('serverPortTextEdit'):getText()) local clientVersion = tonumber(clientBox:getText()) EnterGame.hide() if g_game.isOnline() then local errorBox = displayErrorBox(tr('Login Error'), tr('Cannot login while already in game.')) connect(errorBox, { onOk = EnterGame.show }) return end g_settings.set('host', G.host) g_settings.set('port', G.port) g_settings.set('client-version', clientVersion) protocolLogin = ProtocolLogin.create() protocolLogin.onLoginError = onError protocolLogin.onMotd = onMotd protocolLogin.onCharacterList = onCharacterList protocolLogin.onUpdateNeeded = onUpdateNeeded loadBox = displayCancelBox(tr('Please wait'), tr('Connecting to login server...')) connect(loadBox, { onCancel = function(msgbox) loadBox = nil protocolLogin:cancelLogin() EnterGame.show() end }) g_game.setClientVersion(clientVersion) g_game.setProtocolVersion(g_game.getClientProtocolVersion(clientVersion)) g_game.chooseRsa(G.host) if modules.game_things.isLoaded() then protocolLogin:login(G.host, G.port, G.account, G.password) else loadBox:destroy() loadBox = nil EnterGame.show() end end function EnterGame.displayMotd() if not motdWindow then motdWindow = displayInfoBox(tr('Message of the day'), G.motdMessage) motdWindow.onOk = function() motdWindow = nil end end end function EnterGame.setDefaultServer(host, port, protocol) local hostTextEdit = enterGame:getChildById('serverHostTextEdit') local portTextEdit = enterGame:getChildById('serverPortTextEdit') local clientLabel = enterGame:getChildById('clientLabel') local accountTextEdit = enterGame:getChildById('accountNameTextEdit') local passwordTextEdit = enterGame:getChildById('accountPasswordTextEdit') if hostTextEdit:getText() ~= host then hostTextEdit:setText(host) portTextEdit:setText(port) clientBox:setCurrentOption(protocol) accountTextEdit:setText('') passwordTextEdit:setText('') end end function EnterGame.setUniqueServer(host, port, protocol, windowWidth, windowHeight) local hostTextEdit = enterGame:getChildById('serverHostTextEdit') hostTextEdit:setText(host) hostTextEdit:setVisible(false) hostTextEdit:setHeight(0) local portTextEdit = enterGame:getChildById('serverPortTextEdit') portTextEdit:setText(port) portTextEdit:setVisible(false) portTextEdit:setHeight(0) clientBox:setCurrentOption(protocol) clientBox:setVisible(false) clientBox:setHeight(0) local serverLabel = enterGame:getChildById('serverLabel') serverLabel:setVisible(false) serverLabel:setHeight(0) local portLabel = enterGame:getChildById('portLabel') portLabel:setVisible(false) portLabel:setHeight(0) local clientLabel = enterGame:getChildById('clientLabel') clientLabel:setVisible(false) clientLabel:setHeight(0) local serverListButton = enterGame:getChildById('serverListButton') serverListButton:setVisible(false) serverListButton:setHeight(0) serverListButton:setWidth(0) local rememberPasswordBox = enterGame:getChildById('rememberPasswordBox') rememberPasswordBox:setMarginTop(-5) if not windowWidth then windowWidth = 236 end enterGame:setWidth(windowWidth) if not windowHeight then windowHeight = 200 end enterGame:setHeight(windowHeight) end function EnterGame.setServerInfo(message) local label = enterGame:getChildById('serverInfoLabel') label:setText(message) end function EnterGame.disableMotd() motdEnabled = false motdButton:hide() end
  23. Eai pessoal, beleza? Trago pra vcs um mod para otclient... Um simples botão que aparece no topo do client, clique e aparecerá uma lista de opções, cada uma com a função de executar uma talkaction [Tudo configurado por você] Vamos lá, para instalar é simples 1. Baixe o arquivo; 2. Extraia para a pasta de seu client; 3. Edite oque quiser; Bom, segue onde editar No arquivo mods/mod_topbutton/mod_topbutton.lua local config = { id = 'modTopButton', --Não pode conter espaços name = 'Top Button', --Nome que aparecerá quando passar o mouse por cima do botão img = 'button', --ícone do botão [no caso, pega a imagem button.png localizada na pasta do mod] options = { --opções que aparecem ao clicar no botão --[texto] = comando, ['Opcao 1'] = '!comando 1', ['Opcao 2'] = '!comando 2', } } Um exemplo de uso é o Checkpoint System v1.1 DOWNLOAD SCAN
  24. Eai galera, blz? Bom, vim trazer pra vcs a versão 1.0 do mod de pokedex que eu desenvolvi mês passado visando aprendizado no mundo de OTC, com o objetivo também de mostrar que o otclient é flexível suficiente para se fazer muitas coisas sem a necessidade das sources nem do servidor e nem do client... Para aqueles que não conhecem, vejam o Show Off desse trabalho. Atualizações: 1. Adicionado um pack com 276 imagens de pokemons (16,1MB); 2. Pokemons shiny tem a exibição da imagem de pokemons normais (para alterar, basta remover a linha 75 do arquivo game_pokedex.lua, na pasta modules/game_pokedex de seu client); 3. Pokedex fecha ao se deslogar do char com ela aberta [créditos a @@Soulviling pela ideia]; Bom, sem mais delongas; Instalação fácil: Passo 1. Faça o download do arquivo RAR (download no final do tópico); Passo 2. Copie a pasta modules pro seu client; Passo 3. "Deseja substituir?" [X]Sim [ ]Não Passo 4. Só vai até o passo 3; Bom, segue uma imagem ATUALIZADA Download e Scan
  25. Olá jovens, não sei se já existe algum tutorial sobre o assunto aqui no Ékz, mas hoje resolvi fazer esse pequeno tutorial no qual estarei ensinado como remover aquele pequeno quadradinho que costuma ficar no canto inferior direito do OT Client, segue abaixo uma imagem mostrando de qual quadradinho estou falando. Para remover é até que uma coisa que considerei simples depois que descobri, sem mais enrolação vamos começar o tutorial. Vá na pasta do seu OT Client, em seguida vá em modules>client_background, e abra o background.lua e remova as seguintes linhas clientVersionLabel = background:getChildById('clientVersionLabel') clientVersionLabel:setText(g_app.getName() .. ' ' .. g_app.getVersion() .. '\n' .. 'Rev ' .. g_app.getBuildRevision() .. ' ('.. g_app.getBuildCommit() .. ')\n' .. 'Built on ' .. g_app.getBuildDate()) if not g_game.isOnline() then addEvent(function() g_effects.fadeIn(clientVersionLabel, 1500) end) end Antes Depois Espero ter ajudado Abraços. OBS: Se ajudei REP+