Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''otclient''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • 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
    • Show-Off
    • Tutoriais
  • OFF-Topic
    • Barzinho do Éks
    • Design
    • Informática

Encontrar resultados em...

Encontrar resultados que contenham...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Sou

  1. 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
  2. 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!
  3. Devatensei

    OTClient

    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
  4. 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
  5. 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
  6. 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+
  7. mastof

    PokeVerse

    Link da imagem em melhor qualidade: https://i.imgur.com/gLm23Bo.png PokeVerse vem com a proposta de não ser só mais um servidor que nasce e morre na mesma semana, estamos dedicados a torna-lo um dos maiores servidores, e para isso precisamos da ajuda de vocês, estamos trabalhando para fazer uma ClosedBeta ainda nesse mes, com previa de lançamento em Abril, nos acompanhe pelo: Facebook, iremos disponibilizar informações e atualizações por lá Facebook: https://www.facebook.com/PokeVerseOnline
  8. BlazerX

    [OTC] Trainer Card

    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:
  9. Não sei por que mas no meu client a funçao de usar um item da Hotkey no pokemon não pega..... Se eu colocar pra usar a potion no poke automaticamente ele abre o MultUse e eu tenho que clikar no poke para usar a pot, não está usando automaticamente mesmo com a função ativa Alguém pode me ajudar a resolver Obrigado desde já hotkeys_manager.lua
  10. Boa noite, rapaziada. Alguém saberia resolver esse problema que aparece no terminal do meu otclient? /game_topslot/topslot.lua:79 attempt to index a nill value in function game_topslot/topslot.lua:52 game_topslot.rar Esse erro ocorre quando tento dar Dex em algum pokemon... A vara de pesca funciona normalmente
  11. sirvitor4

    OldClient

    Alguém sabe resolver esse erro? WARNING: message in channel id 10 which is unknown, this is a server bug, relogin if you want to see messages in this channel WARNING: message in channel id 12 which is unknown, this is a server bug, relogin if you want to see messages in this channel WARNING: message in channel id 10 which is unknown, this is a server bug, relogin if you want to see messages in this channel WARNING: message in channel id 10 which is unknown, this is a server bug, relogin if you want to see messages in this channel WARNING: message in channel id 10 which is unknown, this is a server bug, relogin if you want to see messages in this channel console.lua --> Desculpa o post, Resolvi trocando por esse script https://github.com/edubart/otclient/blob/master/modules/game_console/console.lua espero que ajude + gnt
  12. Por favor, qual arquivo e qual linha é necessário editar para que eu possa alterar a posição inicial do console/chat no meu cliente? atualmente ele abre num position desagradável. Dou Rep+
  13. 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
  14. 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.
  15. 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?
  16. 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?
  17. COMO MUDA O NOME DO OTCLIENT DA BARRA. JÁ FIZ OS TUTORIAL TUDINHO E DA SEMPRE ESSE ERRO ! +REP
  18. alguém sabe como faz para aparecer a outfit aqui , to usando tibia clássico , não pokemon ! da uma luz ae ! +rep
  19. 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)
  20. 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.
  21. 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
  22. 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
  23. 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
  24. 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!
  25. 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 .-.
×
×
  • Criar Novo...