Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Bom galera, estou voltando a trabalhar com tibia após alguns anos apenas nas Sombras =P
Estou com um projeto de reviver o Pokémon SvkE, exatamente como ele era nos primordios de 2010, e para isso estou utilizando o old client, mas como vocês sabem para customizar o old dá um trabalho bem pesado, já faz algumas semanas que estou estudando injeção de dependencia no old e venho aqui mostrar o meu trabalho com o moduo de Auto Updater, segue abaixo o gif: 

 spacer.png



Bom como eu trabalho o dia todo e ainda estou pegado no svke nos tempos livres, acaba que fico com pouco tempo de tentar postar algum tutorial do assunto, mas para quem tiver interesse nessa area de dll injecion, criação de janelas customizadas e etc.. Recomendo dar uma olhada no projeto do tibianic-dll vocês encontram fácil no github, ele é para 772 mas já é uma base para vocês verem como que funcionam as coisas em uma dll.

Sobre o updater em sí o que eu fiz foram os seguintes passos:
No cliente eu tenho um arquivo chamado version, nele vai ficar salvo a versão do cliente do jogador.
Quando eu abro o cliente pego a versão dele e envio para uma API rest.
Na API rest eu checo se a versão que foi informada pelo cliente está na mais atual ou não, se não estiver eu envio de volta pra ele a lista de arquivos que precisam ser baixados e a nova versão.
No cliente eu recebo essas informações da API e começo o processo de download dos arquivos e só sucessos.

OBS1: A API rest eu fiz em .net core mas pode ser em qualquer tecnologia, php, lua, um simples xml em uma pasta do seu site, vocês que vão decidir, eu optei dessa forma pois na minha concepção é a forma ideal, eu pretendo criar um programinha desktop ou até mesmo no meu site, uma integração com a api, onde eu seleciono os arquivos coloco a versão e subo essas coisas para a api salvar no banco e por sua vez repassar as informações novas para os clientes S2.

OBS2: Quem tiver ficado interessado no projeto do svke só entrar no discord para jogar ou acompanhar o desenvolvimento, atualmente estamos em beta: https://discord.gg/8XZc64yN9G

Editado por MUNlZ
Update images (veja o histórico de edições)

Desenvolvedor sênior e arquiteto full stack em tecnologias .NET.

Formação em análise e desenvolvimento de sistemas.
Especialização em desenvolvimento para dispositivos moveis.

Desenvolvedor de games nos tempos livres S2


Pokémon Svke: http://www.pokesvke.com/
Github: http://www.github.com/mun1z

Canal Pessoal: https://www.youtube.com/channel/UCrDwhl7ekp8R_yKa-o15URw

Link para o post
Compartilhar em outros sites

Update1: Agora também está atualizando dlls e exes:
 spacer.png

Desenvolvedor sênior e arquiteto full stack em tecnologias .NET.

Formação em análise e desenvolvimento de sistemas.
Especialização em desenvolvimento para dispositivos moveis.

Desenvolvedor de games nos tempos livres S2


Pokémon Svke: http://www.pokesvke.com/
Github: http://www.github.com/mun1z

Canal Pessoal: https://www.youtube.com/channel/UCrDwhl7ekp8R_yKa-o15URw

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

Achei muito massa, faz tempo que eu não vejo ninguém citando o OLD cliente na comunidade.
Parabéns ^^

Já pensou em fazer isso para o OTCLIENT ?

eu sei que tem e tals mas não igual o seu aparenta estar completinho

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
On 2/17/2021 at 2:18 PM, Happy Always said:

Achei muito massa, faz tempo que eu não vejo ninguém citando o OLD cliente na comunidade.
Parabéns ^^

Já pensou em fazer isso para o OTCLIENT ?

eu sei que tem e tals mas não igual o seu aparenta estar completinho

Obrigado man, em breve posto mais novidades, no otc já cheguei a fazer há alguns anos atrás, acho que proximo mês vou por o otc nesse projeto então eu posto como vai ficar lá tbm o/

Desenvolvedor sênior e arquiteto full stack em tecnologias .NET.

Formação em análise e desenvolvimento de sistemas.
Especialização em desenvolvimento para dispositivos moveis.

Desenvolvedor de games nos tempos livres S2


Pokémon Svke: http://www.pokesvke.com/
Github: http://www.github.com/mun1z

Canal Pessoal: https://www.youtube.com/channel/UCrDwhl7ekp8R_yKa-o15URw

Link para o post
Compartilhar em outros sites
27 minutos atrás, MUNlZ disse:

Obrigado man, em breve posto mais novidades, no otc já cheguei a fazer há alguns anos atrás, acho que proximo mês vou por o otc nesse projeto então eu posto como vai ficar lá tbm o/

muito bom, ansioso para ver como ficará.

Link para o post
Compartilhar em outros sites
  • 1 year later...
Em 07/02/2021 em 12:24, MUNlZ disse:

Bom galera, estou voltando a trabalhar com tibia após alguns anos apenas nas Sombras =P
Estou com um projeto de reviver o Pokémon SvkE, exatamente como ele era nos primordios de 2010, e para isso estou utilizando o old client, mas como vocês sabem para customizar o old dá um trabalho bem pesado, já faz algumas semanas que estou estudando injeção de dependencia no old e venho aqui mostrar o meu trabalho com o moduo de Auto Updater, segue abaixo o gif: 

 spacer.png



Bom como eu trabalho o dia todo e ainda estou pegado no svke nos tempos livres, acaba que fico com pouco tempo de tentar postar algum tutorial do assunto, mas para quem tiver interesse nessa area de dll injecion, criação de janelas customizadas e etc.. Recomendo dar uma olhada no projeto do tibianic-dll vocês encontram fácil no github, ele é para 772 mas já é uma base para vocês verem como que funcionam as coisas em uma dll.

Sobre o updater em sí o que eu fiz foram os seguintes passos:
No cliente eu tenho um arquivo chamado version, nele vai ficar salvo a versão do cliente do jogador.
Quando eu abro o cliente pego a versão dele e envio para uma API rest.
Na API rest eu checo se a versão que foi informada pelo cliente está na mais atual ou não, se não estiver eu envio de volta pra ele a lista de arquivos que precisam ser baixados e a nova versão.
No cliente eu recebo essas informações da API e começo o processo de download dos arquivos e só sucessos.

OBS1: A API rest eu fiz em .net core mas pode ser em qualquer tecnologia, php, lua, um simples xml em uma pasta do seu site, vocês que vão decidir, eu optei dessa forma pois na minha concepção é a forma ideal, eu pretendo criar um programinha desktop ou até mesmo no meu site, uma integração com a api, onde eu seleciono os arquivos coloco a versão e subo essas coisas para a api salvar no banco e por sua vez repassar as informações novas para os clientes S2.

OBS2: Quem tiver ficado interessado no projeto do svke só entrar no discord para jogar ou acompanhar o desenvolvimento, atualmente estamos em beta: https://discord.gg/8XZc64yN9G

Vc cobra quanto para fazer auto update?

Link para o post
Compartilhar em outros sites
  • 6 months later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por Doria Louro
      Olá senhores.
       
      Gostaria de uma ajuda com um script de summon que venho trabalhando no momento, gostaria que o summon andasse do lado do jogador, entretanto o mesmo sempre fica para trás ou a frente do jogador.
      Efetuei a alteração na source creature.cpp:
       
      void Creature::getPathSearchParams(const Creature* creature, FindPathParams& fpp) const { fpp.fullPathSearch = !hasFollowPath; fpp.clearSight = true; if(creature->isPlayerSummon()) { if(creature->getName() == "Summon Name") fpp.clearSight = false; } fpp.maxSearchDist = 12; fpp.minTargetDist = fpp.maxTargetDist = 1; }  
      fpp.maxTargetDist = 1;
      Porém ele sempre mantem 1 de distancia do jogador, alterando para zero o "Zero" summon nem segue o jogador.
      Resultado:

       
      Agradeço desde já.
    • Por Imperius
      O propósito é criar uma nova função em creaturescripts que será acionada toda vez que um novo report (CTRL + R) for aberto.
       
      Eu implementei para enviar uma notificação no grupo do Telegram, contendo os dados do report.
       
      Isso garantirá que os GMs tenham acesso aos reports dos jogadores mesmo quando não estiverem logados, e também evitará que algum report seja perdido caso o jogador saia do servidor.
      A parte do Telegram é apenas um exemplo. Você pode ajustar o script para executar outras ações desejadas.
       
      creatureevent.cpp:
      Dentro deste arquivo, localize a função:
       
      uint32_t CreatureEvent::executeChannelLeave(Player* player, uint16_t channelId, UsersMap usersMap)  
      abaixo dela, adicione:
       
      uint32_t CreatureEvent::executeOpenRuleViolation(Player* player, std::string message) { if (!m_interface->reserveEnv()) { std::clog << "[Error - CreatureEvent::executeOpenRuleViolation] Call stack overflow." << std::endl; return 0; } ScriptEnviroment* env = m_interface->getEnv(); env->setScriptId(m_scriptId, m_interface); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushstring(L, message.c_str()); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; }  
      Após, procure por:
       
      std::string CreatureEvent::getScriptEventName() const  
      abaixo de:
       
      case CREATURE_EVENT_CHANNEL_LEAVE: return "onLeaveChannel";  
      adicione:
       
      case CREATURE_EVENT_OPEN_RULE_VIOLATION: return "onOpenRuleViolation";  
      Agora, procure por:
       
      std::string CreatureEvent::getScriptEventParams() const  
      abaixo de:
       
      case CREATURE_EVENT_CHANNEL_LEAVE: return "cid, channel, users";  
      adicione:
       
      case CREATURE_EVENT_OPEN_RULE_VIOLATION: return "cid, message";  
      Procure por:
       
      bool CreatureEvent::configureEvent(xmlNodePtr p)  
      abaixo de:
       
      else if(tmpStr == "leavechannel") m_type = CREATURE_EVENT_CHANNEL_LEAVE;  
      adicione:
       
      else if(tmpStr == "openruleviolation") m_type = CREATURE_EVENT_OPEN_RULE_VIOLATION;  
       
      creatureevent.h:
      Dentro deste arquivo, localize:
       
      enum CreatureEventType_t  
      adicione "CREATURE_EVENT_OPEN_RULE_VIOLATION" como o último item de enum CreatureEventType_t
       
      Exemplo:
       
      enum CreatureEventType_t { // ... CREATURE_EVENT_OPEN_RULE_VIOLATION };  
      Agora, procure por:
       
      uint32_t executeChannelLeave(Player* player, uint16_t channelId, UsersMap usersMap);  
      abaixo dela, adicione:
       
      uint32_t executeOpenRuleViolation(Player* player, std::string message);  
      game.cpp:
      Dentro deste arquivo, localize:
       
      bool Game::playerReportRuleViolation(Player* player, const std::string& text)  
      e substitua por:
       
      bool Game::playerReportRuleViolation(Player* player, const std::string& text) { //Do not allow reports on multiclones worlds since reports are name-based if(g_config.getNumber(ConfigManager::ALLOW_CLONES)) { player->sendTextMessage(MSG_INFO_DESCR, "Rule violation reports are disabled."); return false; } cancelRuleViolation(player); boost::shared_ptr<RuleViolation> rvr(new RuleViolation(player, text, time(NULL))); ruleViolations[player->getID()] = rvr; ChatChannel* channel = g_chat.getChannelById(CHANNEL_RVR); if(!channel) return false; for(UsersMap::const_iterator it = channel->getUsers().begin(); it != channel->getUsers().end(); ++it) it->second->sendToChannel(player, SPEAK_RVR_CHANNEL, text, CHANNEL_RVR, rvr->time); CreatureEventList joinEvents = player->getCreatureEvents(CREATURE_EVENT_OPEN_RULE_VIOLATION); for(CreatureEventList::iterator it = joinEvents.begin(); it != joinEvents.end(); ++it) (*it)->executeOpenRuleViolation(player, text); return true; }  
      Agora é só compilar a source.
       
      depois em "data > creaturescripts > creaturescripts.xml", adicione:
       
      <event type="login" name="loginNotifyRuleViolation" script="notifyRuleViolation.lua"/> <event type="openruleviolation" name="openNotifyRuleViolation" script="notifyRuleViolation.lua"/>  
      em "data > creaturescripts > scripts", crie um arquivo notifyRuleViolation.lua e adicione:
       
      function onOpenRuleViolation(cid, message) local config = { token = "", -- Token do seu BOT no Telegram chatId = "" -- ID do chat do Telegram que será enviado a notificação. } local message = "Player: "..getCreatureName(cid).."\n\nReport:\n"..message.."" message = string.gsub(message, "\n", "%%0A") local url = "https://api.telegram.org/bot"..config.token.."/sendMessage" local data = "chat_id="..config.chatId.."&text="..message.."" local curl = io.popen('curl -d "'..data..'" "'..url..'"'):read("*a") return true end function onLogin(cid) registerCreatureEvent(cid, "openNotifyRuleViolation") return true end  
       
      Demonstração:
      1. Jogador abre um novo report (CTRL + R)

      2. notifyRuleViolation.lua, definido em creaturescripts.xml, é acionado para enviar uma notificação ao grupo do Telegram.
       

       
    • Por sirmagna
      Procuro equipe interessada em desenvolver um projeto de "Tibia HunterxHunter"
      Tenho um projeto pré-montado que estou criando sozinho
      estarei disponibilizando uma previa 
      das minhas sprites 
      preciso de uma equipe com boas ideias e criativa
      para concluir o ot e deixar online para todos desfrutarem dessa obra prima
       
      *******ate o momento o projeto contem sprites do Killua Zoldyck/Hisoka Morow/Gon Freecss/Chrollo Lucilfer/Kurapika
      >>>Previa:



      OTClient_2024-02-09_19-29-45.mp4
    • Por cloudrun2023
      CloudRun - Sua Melhor Escolha para Hospedagem de OTServer!
      Você está procurando a solução definitiva para hospedar seu OTServer com desempenho imbatível e segurança inigualável? Não procure mais! Apresentamos a CloudRun, sua parceira confiável em serviços de hospedagem na nuvem.
       
      Recursos Exclusivos - Proteção DDoS Avançada:
      Mantenha seu OTServer online e seguro com nossa robusta proteção DDoS, garantindo uma experiência de jogo ininterrupta para seus jogadores.
       
      Servidores Ryzen 7 Poderosos: Desfrute do poder de processamento superior dos servidores Ryzen 7 para garantir um desempenho excepcional do seu OTServer. Velocidade e estabilidade garantidas!
       
      Armazenamento NVMe de Alta Velocidade:
      Reduza o tempo de carregamento do jogo com nosso armazenamento NVMe ultrarrápido. Seus jogadores vão adorar a rapidez com que podem explorar o mundo do seu OTServer.
       
      Uplink de até 1GB:
      Oferecemos uma conexão de alta velocidade com até 1GB de largura de banda, garantindo uma experiência de jogo suave e livre de lag para todos os seus jogadores, mesmo nos momentos de pico.
       
      Suporte 24 Horas:
      Estamos sempre aqui para você! Nossa equipe de suporte está disponível 24 horas por dia, 7 dias por semana, para resolver qualquer problema ou responder a qualquer pergunta que você possa ter. Sua satisfação é a nossa prioridade.
       
      Fácil e Rápido de Começar:
      Configurar seu OTServer na CloudRun é simples e rápido. Concentre-se no desenvolvimento do seu jogo enquanto cuidamos da hospedagem.
       
      Entre em Contato Agora!
      Website: https://central.cloudrun.com.br/index.php?rp=/store/cloud-ryzen-brasil
      Email: [email protected]
      Telefone: (47) 99902-5147

      Não comprometa a qualidade da hospedagem do seu OTServer. Escolha a CloudRun e ofereça aos seus jogadores a melhor experiência de jogo possível. Visite nosso site hoje mesmo para conhecer nossos planos e começar!
       
      https://central.cloudrun.com.br/index.php?rp=/store/cloud-ryzen-brasil
       
      CloudRun - Onde a Velocidade Encontra a Confiabilidade!
       

    • Por luanluciano93
      Olá galera, em 02/12/23 o projeto Canary atualizou seu release para a versão 3.1.2 e como estou desenvolvendo um servidor usando esta base decidi divulga-la, pois a cada dia ela melhor muito, é um projeto promissor.

      Para quem não conhece, Canary é um projeto desenvolvido no github de um servidor completo na versão 13.21 (atualmente) com todas as features do tibia global. Ele tem duas opções de datapack que seriam o global e um custom.

      Aqui está o link do projeto para quem quiser conhecer melhor: https://github.com/opentibiabr/canary
      Aqui está o link do lançamento do release para a versão 3.1.2 e suas mudanças e melhorias: https://github.com/opentibiabr/canary/compare/v3.1.1...v3.1.2
      Aqui está o link do discord do projeto para dúvidas e etc: https://discord.com/invite/gvTj5sh9Mp
      Aqui está o link de tutoriais e a documentação do projeto: https://docs.opentibiabr.com/home/welcome

      Algumas das features existentes no projeto:

      BOOSTED CREATURE:

       
      EVENT SCHEDULE:

       
      CYCLOPEDIA:

       
      CHARMS:

       
      DAILY REWARD: 

       
      PREY:

       
      IMBUEMENTS:

       
      MARKET:

       
      STORE:

       
      CUSTOM CHARACTERS:


       
      DENTRE MUITOS OUTROS!
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo