Jump to content

Olá Tibiano! Notamos que você está com um adblocker ligado... 

Nós promovemos servidores dentro da comunidade, para que eles tenham visibilidade.

Por favor, nos ajude a continuar promovendo esses servidores. Adicione nosso domínio na whitelist de seu adblocker, ok? :)

Search the Community

Showing results for tags 'otclient'.



More search options

  • 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
    • Recursos
    • Suporte
    • Pedidos
    • Downloads
  • OFF-Topic

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

Found 67 results

  1. Alguém me ajuda, eu tava tentando estender a tela do cliente faz tempo já né, e me falaram que era em protocolgame.cpp e map.h eu segui um tutorial aqui do fórum umas 50x em sources diferentes kkkk mas não funciona essa poha kk e agora peguei um executável de um cliente extendido já eu só preciso extender a tela na source sabe e eu não consigo de jeito nem um então por favor, seja uma alma caridosa e me ajude kkkkkk pelo amor de cristo eu uso tfs 0.3.6, tenho um projeto de poketibia base lenda pra sourcer do server ficar compatível com a do cliente o map.h precisa estar com esta configuração static const int32_t maxViewportX = 15;//11; //min value: maxClientViewportX + 1 static const int32_t maxViewportY = 15;//11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 14;//8; static const int32_t maxClientViewportY = 8;//6; fora isso pode fazer oq vcs quiserrem kkkkkk eu peguei a source desse post aqui ó https://www.xtibia.com/forum/topic/248662-pokézr-base-otpokemoncom-2018-serversourcesitenewold-clientlaucher-servidor-completo/ se alguém puder me ajudar pelo cristo pra quem não entendeu eu quero fazer isso aqui ó https://tibiaking.com/forums/topic/95399-aumentando-tela-de-visão-otcliente-em-rev3884-860-04/ em tfs 0.3.6 com aquilo ali no map.h
  2. Trainer Card Fala galera do Xtibia, vim trazer mais uma contribuição para a comunidade, é um módulo para otclient básico porém legal. Como funciona? O Trainer Card vai mostrar digamos algumas informações do seu personagem, você pode adicionar mais informações a esse card, vai da criatividade de cada um deixar bem funcional. Script do servidor:Crique um arquivo na pasta do seu servidor em data/creaturescript/ e coloque o nome de trainercard.lua Coloque a seguinte tag no arquivo do creaturescripts.xml: <event type="extendedopcode" name="TrainerCard" event="script" value="trainercard.lua"/> Registre o evento no arquivo onLogin.lua onde se encontra na mesma pasta: registerCreatureEvent(cid, "TrainerCard") Módulo otClient: Coloque o módulo na pasta do seu otClient em modules/ Para abrir o módulo pressione a tecla Ctrl+Shift+Q Imagem do módulo: A base que foi utilizada do servidor foi a DarkXPoke. O meu módulo tem mais informações do que o da imagem, porém eu dei uma mexida, o módulo que o Gengo me passou do Trainer Card que eu utilizo está em um nivel totalmente diferente do apresentado nesse tutorial, eu só modifiquei para compartilhar com a galera. Espero que tenham gostado e faça um bom proveito do módulo, use sua criatividade para fazer de um belo sistema funcional. Créditos:
  3. 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..
  4. 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
  5. 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
  6. Ola prezados, estou com um projeto de otserver old school 7.4, estou usando um old cliente 7.72 porem não estamos satisfeitos com ele, gostaria de um novo cliente proprio pro meu projeto, estou disposto a pagar pelo serviço, interessados favor entrar em contato, segue a lista do que preciso. -Cliente começar com o MAPA FULL aberto. -Cliente obter a opção de caminhar pelas teclas WASD. -Cliente com ABA LATERAL EXTRA, muito limitado para abrir bps, battle, vip,etc. -Opção de sumir players do battle e npcs para facilitar na hora de hunt. -Colocar opção para o player ver seu FPS/PING. -Desenvolver sistema de CAST no cliente. -Colocar o acess acc do cliente direto pro site oficial do ot. -Adicionar o sistema de addons e outfits 8.6 ao cliente.
  7. Olá, comecei meus estudos em Otclient, porem tenho muitas duvidas!. Oque ser isso? variaveis? porque todas nil? @onLoad: init() ? @onUnload: terminate() ? Variaveis com local sem o nil? oque isso muda? porque g_game? g_game.IsOnine ? isso é uma função do otclient? como posso tirar essa função da sourcer? Como se inicia um modulo? com local Nome ou Local Nome = nil? ou só a variavel = nil? todas ela tem que tem function init()? function onGameConnectionError(message, code) ? de onde saiu onGameConnection? sourcer? function CharacterList.terminate() ? if charactersWindow then -- se for charactersWindow entao characterList = nil -- lista de char = nil? charactersWindow:destroy() -- :destroy a lista de char ok! charactersWindow = nil -- nil novamente? end function CharacterList.doLogin() ? de onde tira isso? das funçoes da sourcer?
  8. Boa noite, ainda estou aprendendo a trabalhar com o OTC e gostaria de saber como fazer um certo UIWidget ser visível apenas quando o player entrar no jogo através do .otui. A principio queria fazer algo como: @onGameStart: self:setVisible(true) Fiz um teste com onClick e o widget some ao colocar setVisible(false), porém não sei qual função usar no lugar de onClick para que isso aconteça ao entrar no jogo (onGameStart não funcionou). Como posso fazer isso através do .otui? Ou teria que fazer por lua mesmo?
  9. [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.
  10. Bom, vou mostrar a vocês como editar o andar diagonal no otclient da maneira que vocês preferirem... Atualmente, creio que quando você anda diagonalmente, tem um delay até que você possa andar novamente. Vou ensinar tirar esse delay, e deixar a velocidade ao gosto de vocês. Em creature.cpp do server, procure pela linha: if(std::abs(newPos.x - oldPos.x) >= 1 && std::abs(newPos.y - oldPos.y) >= 1) lastStepCost = 3; Esse lastStepCost será a velocidade que o player terá ao andar diagonalmente, em relação a velocidade de quando ele anda em uma direção reta, por exemplo, um player que demora 1 segundo para andar 1 sqm, demoraria 3 segundos para andar diagonalmente. Edite esse valor ao seu gosto! Em creature.cpp do client, procure as linhas que tem isso: getStepDuration(true) E deixe assim: getStepDuration() Agora procure por: float factor = 3; if(g_game.getClientVersion() <= 810) factor = 2; Apague essa parte Logo mais abaixo tem: if(!ignoreDiagonal && (m_lastStepDirection == Otc::NorthWest || m_lastStepDirection == Otc::NorthEast || m_lastStepDirection == Otc::SouthWest || m_lastStepDirection == Otc::SouthEast)) interval *= factor; Em factor, deixe o mesmo valor que você deixou em lastStepCost no servidor. Agora em localplayer.cpp no client, novamente procure por: getStepDuration(true) E troque por: getStepDuration() Pronto, seu personagem andará diagonalmente mais suave, e com a velocidade que você escolheu.
  11. 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
  12. Xtibianoo01

    ERRO OT CLIENT

    COMO MUDA O NOME DO OTCLIENT DA BARRA. JÁ FIZ OS TUTORIAL TUDINHO E DA SEMPRE ESSE ERRO ! +REP
  13. alguém sabe como faz para aparecer a outfit aqui , to usando tibia clássico , não pokemon ! da uma luz ae ! +rep
  14. The Forgotten Tibia Server The Forgotten Tibia Server é um emulador de server MMORPG grátis de código aberto escrito em C++. É uma ramificação do projeto The Forgotten Server 1.3. Para se conectar ao server você precisará do The Forgotten Tibia Client (um cliente customizado feito do OTClient por mim - vc_redist.x86.exe é necessário) que você pode baixar no final dessa página. Traduzirei o resto da página em breve. What makes it different from The Forgotten Server 1.3? (you can see the diff analysis here) There are no vocations: Everyone starts as a normal human being with some points to be distributed among the skills. There is no skill training: It uses a system to advance skills by distributing points. All clubs, swords and axes damage are based on strenght. Distance weapons damage are based on strenght and/or dexterity. Two-handed melee weapons gives critical hit chance and critical hit damage. The more levels you get, less points you receive. Skills (some stats may be working a little different, check images) Magic (+ spell power, + rune power, + mana) Vitality (+ health) Strenght (+ physical damage) Dexterity (+ distance damage, + walk speed, + attack speed) Faith (+ support spells, + rod max damage, + mana) Intelligence (+ attack spells, + wand max damage, + mana) Defence (+ physical defence) Endurance (+ capacity, + health) Custom Systems (values may be different) Dual Wield: The player can use 2 weapons (for example: club and sword, axe and spear, sword and throwing knife). The attack speed will be fixed in 200% but the damage will drop to 75%. Each combat turn the player will use one hand to defend and the other to attack. Two Handed Melee Weapons: All two-handed melee weapons give +25% of critical hit chance and +100% of critical hit amount. Also, they have a chance of giving a bleeding effect to the target. Auto Loot Gold: The money dropped from monsters goes directly to the player. Quiver: Distance weapons are loading ammo from container item in the arrow slot and there is a new container item called "quiver". Wands and Rods varying with skills: Intelligence and faith raises the wands/rods maximum damage. Spells based on Faith and Intelligence: There is no level and vocation requirement for spells. The more you raise faith and intelligence, more spells you get. Screen with one more tile: It was added one more square meter to the screen. Title: After you reach a certain minimum value of magic, strenght or dexterity, you can choose a title to display when people look at your character. Spacebar Attack: When you use that feature from the client with autoloot gold and addons you can almost hunt without your mouse. Things You Need To Know I stopped working on this server suddenly, 4 months ago, to focus on my graduation and study other things like making games on Unity or penetration tests with Linux, also because I think you need a lot of passion and money to spend on publicity to make players enter and stay. The last thing I remember I was developing was a War System that should work integrated with the normal server, so people would play a for-fun server or a serious-rpg-server. You may want to disable the system in data files. I don't remember which files are used for this. I've made a correction recommended by Mark Saman on monster's AI system (this solves the laggy movement from fast monsters), but that change can make the server lag if there is too much players online interacting with monsters). Same as Capture The Flag system, I don't know if it's working perfectly. You may want to disable it in data files and I don't remember which files are used. I don't know if the schema.sql file available in my repository works for this server. I still have to remove passwords and accounts from the one I was using to make it available for public. The map is a mix of Svargrond, Yalahar, YurOTS, The Forgotten Server's official map and many hunting places and quests from global map. There are NPCs for tasks, blessings, bank and mount systems. The OTClient version used for this project is much more outdated then the The Forgotten Server version, one of the known bugs is the non-smoothly-walk-system. I disabled many features from OTClient's interface. Client and server compiled with Microsoft Visual Studio, I don't remember which version but I think client was with 2013 and server with 2015. There is a project folder to open the projects on Microsoft Visual Studio. You will have a lot of work to do if you want to change the spells values, in the client you need to change in 2 files and in the server you need to change in 1 I think. In some places its written "resistance" but in the clients interface its "defence". They are the same thing. Useful Links GitHub Official Repository (with data folder and schema): GustavoContreiras/TheForgottenTibiaServer (https://github.com/GustavoContreiras/TheForgottenTibiaServer) DLLs, .exe, sources: GustavoContreiras/TheForgottenTibiaServer (https://github.com/GustavoContreiras/TheForgottenTibiaServer/releases) Differences TFS 1.3 / TFTS 0.8: The Forgotten Tibia Server. · GustavoContreiras/[email protected] (https://github.com/GustavoContreiras/TheForgottenTibiaServer/commit/ce89322c08799231f9704e65572a2ffa11fc4d2f) GitHub Official Repository of the client: GustavoContreiras/TheForgottenTibiaClient (https://github.com/GustavoContreiras/TheForgottenTibiaClient) Images Interesting Things data/actions/scripts/other/ctf.lua (when click on the flag of capture the flag arena) data/actions/scripts/other/yurez_ship.lua (when click on the wheel of the ship teleports) data/actions/scripts/other/send_cancel.lua (when click, send cancel message) data/actions/scripts/other/fulloutfits.lua (when click, give full outfits) data/creaturescripts/scripts/arena.lua data/creaturescripts/scripts/skillpoints.lua data/creaturescripts/scripts/killtasks.lua data/creaturescripts/scripts/ctf.lua data/globalevents/scripts/ctf.lua data/globalevents/scripts/dailyserversave.lua data/globalevents/scripts/raids.lua data/lib/core/ctf.lua (many lua functions used by ctf system) data/lib/core/skillpoints.lua (many lua functions used by skillpoints systems) data/lib/core/player.lua (many new lua functions) data/movements/scripts/dual_wield.lua (changes players stats when move second weapon to hand) data/movements/scripts/arena.lua (configure enter and exit teleports and set storage for arena) data/spells/spells.xml (intelligence and faith values - changes must be applied on otclient files too) data/talkactions/scripts/skillpoints.lua data/talkactions/scripts/title.lua data/weapons/scripts/bleeding_effect.lua.lua data/npc/scripts/guide.lua data/npc/scripts/bless.lua data/npc/scripts/bank.lua data/npc/scripts/tasks.lua data/npc/scripts/The Oracle.lua Fibula(client+minimap)260918.zip TheForgottenTibiaServer-0.8.zip TheForgottenTibiaServer-x64.exe DLLs.zip DLLs.zip Fibula(client+minimap)260918.zip TheForgottenTibiaServer-0.8.zip TheForgottenTibiaServer-x64.zip
  15. Olá pessoal, vi esse tutorial em um site gringo sobre a parte básica dos módulos de um otclient, que pode auxiliar muita gente que quiser explorar ainda mais o Otclient, já que essa área eu não vejo tanto conteúdo no Tibia Br, como sempre os créditos estarão ao final do tópico... Então, para começar as coisas que eu vou estar cobrindo: - a criação de módulos. - repassar alguns dos fundamentos para trabalhar no ambiente otclients lua. como testar eficientemente seus módulos e scripts. Para este tutorial você vai precisar: - Um editor de texto de algum tipo (eu gosto de usar o Notepad + +) também seria bom ter conhecimentos básicos de lua e habilidades de programação (mas isso é algo que você pode pegar rapidamente praticando). Agora que já temos tudo o que precisamos, podemos começar ! CRIANDO O NOVO MÓDULO Otclient front-end funciona fora o que chamamos de ' módulos '. Os módulos são uma forma de implementar eficazmente os recursos do cliente separados uns dos outros. Se você está considerando a criação de um novo módulo, é aconselhável que você pense sobre o que o recurso pode ser e se ele iria caber em um módulo já existente (provavelmente um módulo game_xxx), os módulos são encontrados no diretório/modules do otclient. Seus são atualmente dois módulo ' ambientes ': jogo e cliente. Os módulos de jogo usam o prefixo game_ e devem estar refletindo recursos que se relacionam especificamente com os recursos do ambiente do jogador ou do jogo por exemplo game_outfit ou game_mounts são ambos os recursos que são usados no ambiente de jogo. Os módulos de cliente usam o prefixo client_ e devem estar refletindo recursos que se relacionam especificamente com o cliente e o cliente somente. Ele não tem nada a ver com o ambiente de jogo de jogadores, por exemplo, client_options e client_skins estão diretamente relacionados com a funcionalidade de clientes. Isso pode ser um pouco difícil de Visualizar para agora, mas você vai pegar isso mais tarde. Então, agora que você tem uma compreensão do que é um módulo e um pouco como eles funcionam, vamos em frente e começar a criar um novo. COMEÇANDO DO ZERO Nós estamos indo para criar um novo módulo a partir do zero, a primeira coisa que você precisa fazer é criar o diretório modules. O nome do diretório deve refletir o recurso global em si, por isso vamos chamar o nosso game_spells para começar a criar um novo módulo que irá listar todos os players spells com suas informações apropriadas. Nós não estaremos criando este módulo inteiro, mas podemos começar a ver como tudo funciona. Crie um novo diretório chamado game_spells dentro do diretório/Modules clientes. Dentro de game_spells precisamos começar adicionando 3 novos arquivos base: Spells. lua, feitiços. otmod e Spells. otui para a lógica de módulos, registro e design de interface. Criar 3 novos arquivos base spells.lua, spells.otmod e spells.otui dentro/modules/game_spells Você já deve saber o que o arquivo. lua representa, mas quais são essas novas extensões. otmod e. otui? .otmod .otmod é o arquivo que é usado para inicializar o módulo dentro do otclient, é como um registro em que ele irá registrar o módulo para uso dentro do cliente. Este arquivo geralmente tem uma estrutura como esta (eu adicionei comentários, se você copiar este código não se esqueça de remover o--comments): Module nome: game_spells -- nome do módulo (geralmente o mesmo nome que o diretório modules. descrição: Exibir a player spell com sua informação apropriada--descrição do módulo que explica o que é. autor: Sammy -- nomes dos criadores e colaboradores do módulo. website: www.otclient.info -- Se você tem um site externo que você pode ligá-lo aqui. sandboxed: true--sandbox é uma maneira de conter a variável modules e funções para que você não tenha conflitos entre outros módulos. scripts: [ spells.lua ] -- Os scripts são a lógica por trás do módulo onde todas as funções estão contidas. @onLoad: init() -- Este é o lugar onde você define a função de inicialização do módulo (nós vamos cobrir isso mais tarde). @onUnload: terminate() -- Este é o lugar onde você define a função de término do módulo (vamos cobrir isso mais tarde) Copie o código .otmod acima em seu arquivo spells.otmod e remova os comentários. .otui .otui é o arquivo que é usado para criar a interface de usuário modules. Esta é uma linguagem de estilo feito encomenda projetado especificamente para otclient chamado OTML, ele se sente muito como a formatação CSS para aqueles de vocês que têm experiência em webdesign. A estrutura típica de um arquivo .otui se parece com isso (este é o arquivo base iniciar, não concluído): MainWindow !text: tr('Spells') size: 160 450 @onEnter: modules.game_spells.destroy() @onEscape: modules.game_spells.destroy() Label id: spellsLabel !text: tr('Player Spells') width: 130 anchors.top: prev.top anchors.left: prev.left margin-top: 5 margin-left: 5 MainWindow: Esta é a janela que estaremos usando para a interface da Spell List, é uma classe de janela padrão derivado de/client_skins/default/styles/windows.otui styling file estende janela que estende UIWindow. UIWindow é uma classe base dessa inicialização, ele controla a funcionalidade widgets e comportamentos. !text: Este é o texto que é exibido na seção de cabeçalho MainWindow size: isso é usado para definir a largura/altura da mainwindow. @onEnter: configura o retorno de chamada de widgets de MainWindow OnEnter (função que será chamada quando você pressiona a tecla Enter). @onEscape: configura os widgets de retorno de chamada de MainWindow (função que será chamado quando você pressiona a tecla de escape). Label: Este é um widget de etiquetas que é usado para exibir texto na maioria dos casos. É um derivado da classe UILabel. id: Este é o ID que esta mais comum será alias-se com para referenciar usando funções como widget: getChildById ( "spellsLabel ") !text: Este é o texto que será exibido pelo widget UILabel. width: Este é o tamanho da largura do Label anchors. top/bottom/left/right: São onde a parte superior/inferior/esquerda/direita do Label devem ser posicionada. margin-top/bottom/left/right: São deslocamentos para as anchors, eles permitirão que você afinar o posicionamento dos componentes da interface do usuário. Esta é apenas a superfície de .otui formatação e styling, há muito mais que pode ser feito, mas a ideia principal é que você obter uma compreensão sobre como a hierarquia dos componentes da interface do usuário para exibir corretamente, etc as convenções de styling OTML forçá-lo a manter o projeto de um interface separado para o código lógico, por exemplo, o .lua Copie o código otui acima e coloque em spells.otui Agora que entendemos qual arquivo é usado para registrar o módulo e que arquivo (s) são usados para construir os módulos da interface do usuário, podemos aprofundar o código de lógica de módulos e tentar entender como tudo funciona em conjunto. O arquivo spells.lua é o arquivo que contém o código de lógica de módulos. É aqui que os spells serão preenchidos e o manuseio da seleção ortográfica e do display ortográfico serão controlados. Abra o arquivo spells.lua e copie o seguinte código base para começar. Nós estaremos escolhendo aparte este código para ajudar a entendê-lo melhor. Eu fui em frente e comecei o código base para você, aqui está: Spells = {} spellWindow = nil selectedSpell = nil spells = {} function init() connect(g_game, { onOpenSpellWindow = Spells.create, onGameEnd = Spells.destroy }) end function terminate() disconnect(g_game, { onOpenSpellWindow = Spells.create, onGameEnd = Spells.destroy }) Spells.destroy() Spells = nil end function Spells.create(spellList) spells = spellList Spells.destroy() spellWindow = g_ui.displayUI('spells.otui') end function Spells.destroy() if spellWindow then spellWindow:destroy() spellWindow = nil selectedSpell = nil spells = {} end end function Spells.selectSpell() if table.empty(spells) then return end -- TODO end As principais coisas que eu quero focar aqui são: as variáveis (spellWindow, selectedSpell e spells). e as funções (armazenamento de funções e discutir o que init e Terminate são necessários). O VARIÁVEL Variáveis dentro de um módulo em modo seguro não precisam ser localizadas com a palavra-chave local como elas estão dentro de seu próprio ambiente de módulo. Se o módulo estiver em modo seguro: false, então você precisará certificar-se de que você localize a variável e redefini-los dentro da função Terminate (que vamos discutir mais tarde). Dentro deste módulo de feitiço precisamos ter uma maneira de armazenar o objeto janela módulos, fazemos isso definindo a variável spellWindow que temos inicializado como nulo, mas que vamos configurar em breve. Nós também precisamos de uma maneira de conter o que o jogador selecionou o que significa que devemos armazenar uma referência para o spell de alguma forma usando a variável selectedSpell. Por último, mas não menos importante e provavelmente não duram tanto! Precisamos armazenar a lista de spells e fazer isso com a variável Spells. AS FUNÇÕES Funções muito como variáveis estão contidas em módulos de área restrita para que a localização pode variar dependendo de suas preferências. Se você não estiver usando um module sandboxed: true, em seguida, você precisará certificar-se de que você está localizando e armazenar funções corretamente. Eu pessoalmente gosto de usar uma tabela para armazenar minhas funções dentro para manter as coisas organizadas mais este é o lugar onde você vê spells = {}. Spells é uma tabela que eu estarei usando para armazenar todas as funções públicas de um módulo. Funções de módulo privado serão localizadas mesmo que não seja inteiramente necessário dentro de um módulo em modo seguro, eu prefiro declarar quando a função é privada através da palavra-chave local. Então, quais são as funções init () e Terminate () usado para? Como você já deve ter notado dentro dos feitiços .otmod código que você vai ver: @onLoad: init() @onUnLoad: terminate() init() A função init é uma função que é chamada quando otclient tenta carregar o módulo registrado usando chamada de sinal OnLoad. Dentro desta função você deve estar inicializando todos os componentes que são exigidos pelo seu módulo. Como você pode ver dentro de spells.lua estamos chamando uma função dentro de init (): connect(g_game, { onOpenSpellWindow = Spells.create, onGameEnd = Spells.destroy }) terminate() A função Terminate é uma função que é chamada quando otclient tenta descarregar o módulo registrado usando a chamada de sinal OnUnload. Dentro desta função você deve estar destruindo e redefinir variáveis que precisam ser desmarcadas na terminação do módulo. Lembre-se de que nem todas as variáveis precisarão ser redefinidas, mas as referências de widget e a tabela de spells são todas necessárias para serem redefinidas. Como você pode ver dentro de feitiços. lua estamos chamando e definindo uma série de coisas dentro de terminate(): disconnect(g_game, { onOpenSpellWindow = Spells.create, onGameEnd = Spells.destroy }) Spells.destroy() Spells = nil Afirmei anteriormente que chamamos a função Connect dentro init (). Agora que estamos encerrando o módulo precisamos desconectar os retornos de chamada do conjunto de chamadas de sinal. Isto é feito através da função de desconexão (...). Com estas principais coisas cobertas você pode muito bem fazer o que você gosta dentro do módulo. Você pode com cuidado construir e craft o para inserir o que você precisa. Siga através do tutorial para estender o seu conhecimento de criação de módulos e também trabalhar dentro do ambiente do módulo otclients. COMO TESTAR EFICAZMENTE OS SEUS MÓDULOS Testar seus módulos será uma parte importante de fazê-los trabalhar da maneira que você precisa. Módulos de teste pode, por vezes, ser um pouco de um desafio para que haja algumas coisas que você precisa saber, a fim de torná-lo mais fácil para você. RECARREGANDO OS SEUS MÓDULOS Você pode recarregar seus módulos no cliente usando o Gerenciador módulo módulo Gerenciador módulo selecione seu módulo e clique em recarregar. Esteja ciente de que o seu init () e terminate (), funções serão chamados em recarregar por isso, se você não está inicializando e destruindo coisas particulares corretamente, então você pode obter erros no recarregamento. Nota importante: existem algumas alterações raras que podem não ser recarregadas corretamente com o gestor de módulos, coisas como .otui @ alterações (por exemplo, @onClick: edits). Pode haver algumas outras mudanças que não recarregam corretamente, mas para a maior parte ele funciona bem. Se você se encontrar com erros estranhos tentou fazer um reinício completo do cliente para garantir a sua não uma emissão de recarga. COMANDOS DE TESTE ÚTEIS Há uma seleção de comandos úteis que podem ser úteis para testes encontrados no arquivo de script/modules/client_terminal/Commands.lua. Aqui está uma lista dos comandos atuais que você pode inserir no terminal do cliente: dumpWidgets(widget, level) drawDebugBoxes(enable) hideMap() showMap() debugContainersItems() debugPosition(enable) autoReloadModule(name) Você pode adicionar novos comandos ao seu diretório/mod, a fim de evitar fazer alterações no arquivo de comando modules. Você deve sempre assegurar-se de que seus módulos estejam testados completamente antes de criar solicitações da tração ao repositório principal do git. Estas dicas podem ser muito úteis nas fases de teste! ALGUMAS ORIENTAÇÕES ÚTEIS Ao desenvolver seu módulo seja certo dar-lhe lotes do pensamento sobre como está indo trabalhar e mesmo se você pode fundir a característica a um módulo já existente. Também funções globais e variáveis constantes podem ser encontradas nos diretórios modules/corelib e modules/gamelib. Por favor, dê uma cuidadosa consideração para o que você colocar nesses arquivos e se possível tentar evitá-lo. Siga a regra "manter tudo para sua própria causa, e apenas essa causa ". FIM DO TÓPICO =] CRÉDITOS: edubart BeniS Eu(pela tradução e adaptação para o português)
  16. Olá galera tudo bem? Vi um usuário perguntando no fórum sobre Opcodes, como no começo eu tive bastante dificuldade de entender, estou fazendo este tutorial básico para que fique claro! Opcodes são a comunicação entre o cliente e o servidor sem fazer alterações na source.. Na source você poderia usar sockets, que são pacotes de informação, diretamente sem usar funcionalidades do jogo como meio de transmissão, já o opCode utiliza recursos in game para fazer essa comunicação, entendeu? Exemplo: No módulo game_skills, no arquivo skills.lua, você pode notar a utilização do seguinte código: Essa linha, serve para registrar o uso do opCode número 102, estamos dizendo ali, que quando recebermos uma solicitação por opCode, sentido Servidor > Cliente, sendo essa de número 102, deverá ser acionada a função onPokemonSkillChange. em outra parte do mesmo skills.lua, temos o seguinte código: Repare que a parte destaca: g_game.getProtocolGame():sendExtendedOpcode(102, 'refresh'), faz o envio de uma solicitação de sentido Cliente > Servidor, com o número 102 que é o id de identificação da opCode e na frente a string 'refresh', ou seja, um valor para o servidor conseguir enxergar o que deve ser feito.. Para entender melhor vamos ao Servidor e olhar onde é tratada essa chamada do Cliente. No Servidor, em data/creaturescripts/scripts/opcodes/opcode.lua, temos o seguinte código: Repare nas partes que eu destaquei, irei explica-las abaixo: Vamos ver o que essa função faz? em data/lib/106-main functions.lua, temos a definição daquela função, que é: Basicamente, está função preenche uma tabela com as informações sobre insígneas, coins, qtd capturas do player e envia de volta ao Cliente através do comando: return doSendPlayerExtendedOpcode(cid, opcodes.OPCODE_SKILL_BAR, table.concat(str)) lembrando que o opcodes.OPCODE_SKILL_BAR nada mais que que o número 102 e o table.concat(str) é o buffer, ou seja, um parâmetro da função doSendPlayerExtendedOpcode com os dados que serão enviados ao Cliente. Espero que todos tenham entendido, qualquer dúvida deixe nos comentários e se for preciso estarei arrumando qualquer erro que reportem no tutorial.
  17. The Forgotten Tibia <Test Server está acontecendo!> http://fibulaworld.servegame.com:8090/ Por que esse nome? É baseado no The Forgotten Server (e no OTClient) Parece que muita gente esqueceu que o Tibia podia ser assim Assim como? Avanço de skills por distribuição de pontos Como funciona? - Vocações: Não existirão. Todo mundo será um simples humano. - Skills: Magic: + Spell Power, + Rune Power, + 15 Mana (costs 3 points) Vitality: +15 Health Strenght: + Melee Damage, + Distance Damage, + 5 Capacity Resistance: + Shield Defence, +5 Health Dexterity: + Distance Damage, +0.25 Walk Speed, +0.25% Attack Speed Intelligence: +1% Wand's Maximum Damage, + Attack Spells, +10 Mana Faith: +2% Rod's Maximum Damage, + Support and Healing Spells, +10 Mana Endurance: +15 Capacity, +5 Health - Ganho de skill points: Do level 1 ao 8 - a cada level ganha 2 pontos Do level 8 ao 40 - a cada level ganha 4 pontos Do level 40 ao 60 - a cada level ganha 3 pontos Do level 60 ao 80 - a cada level ganha 2 pontos Do level 80 ao 100 - a cada level ganha 1 pontos Do level 100 em diante - a cada 2 levels ganha 1 ponto - New config.lua options: -- Skill Gain magicManaGain = 15 vitalityHealthGain = 15 strenghtHealthGain = 0 strenghtCapGain = 5 * 100 resistanceHealthGain = 5 resistanceCapGain = 0 * 100 intelligenceManaGain = 10 faithManaGain = 10 enduranceCapGain = 15 * 100 enduranceHealthGain = 5 -- DUAL WIELDING (75 = 75% of single weapon damage) allowDualWielding = true dualWieldingDamageRate = 70 -- SHIELDS (default: 100 resistance, 0 dexterity) -- Shield formula: defenseSkill = (RESISTANCE * shieldResistanceFactor / 100) + (DEXTERITY * shieldDexterityFactor / 100); shieldResistanceFactor = 100 shieldDexterityFactor = 0 -- DISTANCE WEAPONS (default: 100 dexterity, 0 strenght) -- Spear formula: attackSkill = (STRENGHT * spearStrenghtFactor / 100) + (DEXTERITY * spearDexterityFactor / 100); -- Bow formula: attackSkill = (STRENGHT * bowStrenghtFactor / 100) + (DEXTERITY * bowDexterityFactor / 100); spearDexterityFactor = 100 spearStrenghtFactor = 0 bowDexterityFactor = 75 bowStrenghtFactor = 50 -- WANDS and RODS (default: 0 int, 0 faith, 0 magic) -- Rod formula: maxDamage = maxDamage + (maxDamage * (FAITH - 8 / 100) * (rodFaithFactor / 100) + (MAGIC * magicWandRodFactor / 100); -- Wand formula: maxDamage = maxDamage + (maxDamage * (INTTELIGENCE - 8 / 100) * (wandIntFactor / 100) + (MAGIC * magicWandRodFactor / 100); rodFaithFactor = 200 wandIntelligenceFactor = 100 magicWandRodFactor = 0
  18. Sejam todos Bem Vindos ao RealSoft!! Experience: Stages! 100x Inicial; Loots: 3x, modo hard; Skills: 3x, modo hard; Novos Sistemas, como: Dungeon System; Talentos; VIP No lugar de Premium ( Sem apelação ); Itens VIP totalmente simples! Sem dano extra; Itens VIP No Game! Faça as quests! Milhares de Hunts; Muitas Houses; Todas as Classes Equilibradas Novo sistema!! SONS! Isso mesmo, agora você vai poder sentir a vibe de estar em batalha no próprio Tibia!! Baixe nosso Cliente Oficial e faça parte agora! É de graça, e pode ser encontrado na Seção de Downloads. Nos vemos em breve, Administrador
  19. Boa noite, estou com um problema no otclient que ele fica congelando a imagagem ( ai só fechando e abrindo de novo pra voltar ao normal) estou usando magic e shoot, effect unit16_t e no otclient coloquei assim function load() local version = g_game.getClientVersion() g_game.enableFeature(GameMagicEffectU16) g_game.enableFeature(GameShootEffectU16) g_game.enableFeature(GameSpritesAlphaChannel) g_game.enableFeature(GameSpritesU32) Obs: nessa config ta minha spr extend, porém a mesma não estava assim e fiz isso somente pra testar e não resolveu =S se perceber meu char sumiu o fps cai entre 40 a 1 também =S
  20. OLÁ ! Meu nome é Henrique, tenho 19 anos, atualmente estudo Análise e Desenvolvimento de Sistemas na Uniritter/POA, sou Freelancer à algum tempo e já desenvolvi diversos tipos de sistemas e estou aqui hoje para oferecer meus serviços de consultoria em otserver para aqueles que estiverem interessados. Segue abaixo uma lista dos serviços que presto junto dos meus contatos: SERVIÇOS - WEB DESIGN; - DESIGN DE OTCLIENT's; - CRIAÇÃO DE SITES; - PROGRAMAÇÃO (scripter, mapper); - CAPTURA DE SPRITES (busca por novas sprites para o ot relacionado, muitas vezes sprites conseguidas através do crack de rom's originais dos jogos); - MONTAGEM DE INFRAESTRUTURA (colocar server, site, banco no ar e fazer a manutenção da infra dos mesmos). CONTATOS - http://henriquegranatto.com.br - 51 9 9528 6988 (WhatsApp) * somente estas duas formas de contato, não forneço skype ou facebook. ÀQUELES QUE TIVEREM INTERESSE, MUITO PRAZER E SUCESSO NOS SEUS PROJETOS!
  21. Meu Client Não tem as barras laterais, mas mesmo assim quando eu começo a andar ALguns Npcs somem ou ate mesmo pokemons mas quando eu volto eles aparecem e tbm toda vez quando eu ando fica aparecendo um negosso preto, como se tivesse carregando as partes do mapa.. queria tira isso pq toda vez que ando fica aparecendo esses negosso preto .-.
  22. Boa noite galera, venho aqui pedir uma ajuda sobre como deixar a tela de login "o window do entergame" travado para que não possa ficar se movendo.
  23. Venho pedir para vocês um grande favor. Porfavor, alguém compile esse client para mim! https://github.com/edubart/otclient Eu já tentei de tudo, meu computador realmente não consegue compilar. Porfavor!! Rep++
  24. Uma forma distinta de troca/Visualização dos status do seu Pokémon. Eu utilizei os próprios slots do Tibia, isso anula 100% da lag que ocorre nas barras de troca de Pokémon existentes em alguns servidores. No painel existem 6 espaços, onde você poderá colocar a Pokéball e usa-la em qualquer um deles, sem a necessidade de arrastar da bolsa. Então, seria útil pra você como jogador? Ou é algo desnecessário e você prefere do modo habitual? Espero opiniões, thanks. v2:
  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+
×
×
  • Create New...