Jump to content
Sign in to follow this  
vert

Autopilot Engine

Recommended Posts

PT-Br

Hey jovens!

Estou tendo Java na faculdade e como eu sou apaixonado por L2, estou desenvolvendo uma engine inspirado pelo projeto do @Elfocrash L2JRoboto e por uns videos que ele disponibilizou na descrição do repositório; o projeto em si vai um pouco mais além de apenas um fake players, a ideia é trabalhar com funções pequenas e o mais genérico possível para poder usa-las nos personagens e eles farmarem sozinhos (tipo um bot, mas "legalizado" pelo servidor, por assim dizer...);

 

Vale mencionar que esse trabalho também valerá nota em 2 disciplinas que tenho na faculdade esse semestre hahaha;

 

A Autopilot Engine é para HighFive; comecei a desenvolver ela estudando o código do @Elfocrash.

Atualmente estou terminando a classe Sagittarius e logo logo começo as outras, eu sou bem rigoroso em questão de perfeccionismo e os fake players precisam fazer as escolhas de target, skills e movimentações o mais parecido possível com players;

 

Google Translator:

Hey guys!

I'm having Java in college and as I'm in love with L2, I'm developing an engine inspired by the project @Elfocrash L2JRoboto and some videos that he made available in the description of the repository; the project itself goes a little further than just a fake players, the idea is to work with small functions and as generic as possible to be able to use them in the characters and they do it alone (like a bot but "legalized" by the server, so to speak ...);


It is worth mentioning that this work will also count in 2 subjects that I have in college this semester hahaha;

The Autopilot Engine is for HighFive; I started to develop it by studying the @Elfocrash code.

I am currently finishing the Sagittarius class and soon I start the others, I am very strict about perfectionism and players need to make the target, skills and movements choices as close as possible to players;

Below is a ScreenShot of the test and things noted to be made sequentially.

 

 

 

https://youtu.be/UEoT2T9Z5pI

 

 

spacer.png

 

 

spacer.png

 

Edited by vert
  • Like 5
  • I love it 3

Share this post


Link to post
Share on other sites

Interessante, algo que mais ou menos nos cliente atuais, com aqueles macros...
Mas teve um jogo que teve esse "bot legalizado" se nao me engano foi o Perfect World, aonde o bot rodava infinitamente em x lugar, mas cobrava um preco de 30% se nao me engano... =D

  • Like 1

XD

Share this post


Link to post
Share on other sites
1 minuto atrás, Dwbryel disse:

Interessante, algo que mais ou menos nos cliente atuais, com aqueles macros...
Mas teve um jogo que teve esse "bot legalizado" se nao me engano foi o Perfect World, aonde o bot rodava infinitamente em x lugar, mas cobrava um preco de 30% se nao me engano... =D

Saquei,

A ideia é que ele seja muito configurável, então o dono do servidor poderá colocar os requisitos para os comandos de farm funcionarem; por exemplo: ao usar consome 1 moeda donator... Ou precisa ser vip para usar (assim pode ser cobrado mensal)... Ou por um item de evento (TvT dá um coin ou adena e a cada vez ou cada dia consome um pouco...);

Entre várias ideias que tenho anotado pra essa engine, a principal é simular o um player de forma fiel (seja fazendo loja, vendendo buff, indo farmar, morrer e voltar a farmar, se buffar.... etc...); assim ao abrir um servidor, já vai ser possível instanciar 1k de players e animar os novos players que entrarem; também tenho pensado na questão de os players serem progressivos: instancia um fake player lvl 1 lá nas áreas que nasce, ele vai farmando e upando por conta  indo para determinadas zonas que irei programar e ao decorrer do Up irá trocando de equipamentos quando for na cidade (grade D, C, B, ....);

Já fiz toda a função de definir os equips pela grade do char, mas hoje não é progressivo... Se eu criar um char 65, ele recebe os equips grade A que eu defini, 76... grade S, 80... e assim vai.

Share this post


Link to post
Share on other sites

É bacana o fato de você querer desenvolver algo pra L2J e ainda mais, algo que é da sua faculdade, que vai te proporcionar nota, cada um pensa de um jeito, mas , se fosse eu... eu focaria em desenvolver quem sabe uma engine de eventos, onde todos os eventos são de forma unica e de preferencia, melhorados, já ouviu falar da Nexus Engine? Então, algo daquele nível, mas melhor, eu não perderia muito meu tempo desenvolvendo algo que está "matando" os servidores privados de lineage. Mas claro, cada um com sua opinião, boa sorte com seu desenvolvimento. 

  • Thanks 2

Em breve novo servidor Classic PvP

www.l2prime.co

Private Classic 150x

Share this post


Link to post
Share on other sites

Saquei fera, o que você diz faz sentido; mas eu particularmente não gosto de eventos custom;

Vou explicar o porque: acho que o servidor (ao menos no HighFive que é a versão que estou usando) já existem vários eventos retail, instancias e coisas para se fazer (fortress, siege, hellbound é um trabalhão pra subir o nível de forma retail... Fantasy isle); o que falta é donos de servidores que sabem usar isso corretamente e de forma consciente; O único evento que acho válido ter (dependendo do estilo do servidor) é TvT e ainda assim os donos de servidores privados acabam por não saber montar o estilo de jogo com a premiação do TvT... Aí o player tem que escolher entre 10 a 20 min de TvT pra ganhar 1 coin ou farmar, pra qualquer item especial precisa de 50 coins.... Entende ? Ai a galera não vai no TvT porque não vale a pena, os players acham que n tem ninguém no servidor e saem. Porque player br hoje é assim infelizmente, qualquer coisinha ta saindo do servidor.

 

Então por isso estou fazendo a autopilot engine ao invés de uma de eventos, pois se os players logarem e virem o servidor cheio e os fake players forem tão bem feitos a ponto do player não saber distinguir se é fake ou não, ele vai querer jogar (tipo maria vai com as outras - se tem player, é porque é bom...);

 

Lembrando que essa é apenas a minha opinião pessoal, não quer dizer que estou certo xD

 

Mas de toda forma, pelo menos eu vou receber as notas na facul e estou aprendendo um pouco de Java com algo que eu gosto hahaha

  • Like 2
  • I love it 1

Share this post


Link to post
Share on other sites

Eu discordo totalmente de tudo que você falou ? Mas respeito sua opinião (y) espero que você consiga e principalmente, que ganhe uma boa nota na facul, só vai ?

 


Em breve novo servidor Classic PvP

www.l2prime.co

Private Classic 150x

Share this post


Link to post
Share on other sites

Meu sonho que era que meus professores aceitassem projetos do L2 como material para os trabalhos hahahah

No cliente mais recente existe o sistema de macros que fica executando repetições de ações. 
Você ainda pode configurar o "target next" de acordo com as necessidades, por exemplo só atracar mobs, permitir atacar personagens flag/caóticos .

 

Acho que uma das funções cruciais é poder limitar a área do farm, mas talvez vc precisaria de uma técnica de "geo-fancing" para o L2 , que de fato tem um sistema de coordenada próprio em x,y,z , embora uma limitação de x,y + raio já resolveria, sempre que o personagem atingisse esse local ele retornaria para o centro.


Boa sorte @vert

 

  • Like 1
  • Thanks 1

EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Share this post


Link to post
Share on other sites

@Grundor sim sim!

Na real eu já implementei, mas ao gravar os videos percebi um detalhe que preciso melhorar...

O target pertence a uma respectiva zona no L2 (o L2World é formado por L2WorldZones), então hoje a lógica do fake é pesquisar pelos alvos nas zonas dentro de uma range de 2k a partir do ponto em que ele deu spawn, depois dar um sort e vê qual é o alvo mais próximo do personagem. Qual o problema hoje ? 2k se mostrou uma range muito grande e se ele estiver na borda da range, ele só ataca os mobs próximos e que estão dentro da range... 

Por sorte trabalho em uma empresa de telemetria como dev a 1 ano, então já tenho uma ideia de como resolver, só preciso aplicar hahaha

E sim, você tem razão Leon, vou usar geofences e bouding box ? 

Obrigado o/

  • Like 1

Share this post


Link to post
Share on other sites

muito bom pra H5 ficaria perfeito.

gostei muito da lista ainda não consegui fazer a minha me manda o seu hahaha

a lista de escolha de class se possível hahaha

vou deixar uma contribuição aqui peço que teste em seu projeto

 

 

	import net.sf.l2j.commons.concurrent.ThreadPool;
	Comandos do AdminFakePlayer
	+        if (command.startsWith("admin_fakegiran")) {
+            activeChar.sendMessage("Giran Walker Fake Player");
+            ThreadPool.schedule(new Runnable()
+            {
+              @Override
+            public void run()
+              {
             +   AdminFakePlayers.WhileLoopExample1.spawn(activeChar.getX(), activeChar.getY(), activeChar.getZ());
          +      FakePlayer fakePlayer = FakePlayerManager.spawnPlayer(activeChar.getX(),activeChar.getY(),activeChar.getZ());
     +           fakePlayer.setFakeAi(new GiranWalkerAI(fakePlayer));
+              }
  +          }, 1L);
+          }
	 
	+            static class WhileLoopExample1
      {
+        public static void spawn(int x, int y, int z)
+        {
+          int i = 10;
+          while (i > 0)
+          {
        +    FakePlayer fakePlayer = FakePlayerManager.spawnPlayer(x, y, z);
  +          fakePlayer.setFakeAi(new GiranWalkerAI(fakePlayer));
      
  +          try
+            {
 +             Thread.sleep(1100L);
+            }
    +        catch (InterruptedException localInterruptedException) {}
+            i--;
+          }
+        }
+      }
	

        _walkNodes.add(new WalkNode(82248, 148600, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82072, 147560, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82792, 147832, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82248, 148600, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82072, 147560, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81752, 147592, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82760, 148600, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82840, 148776, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82808, 149064, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82216, 147688, -3464, Rnd.get(1, 20)));
        _walkNodes.add(new WalkNode(82568, 147656, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82792, 147816, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83080, 147912, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81864, 149416, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82856, 149368, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82216, 149464, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81640, 149624, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81512, 149192, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81208, 149224, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81032, 148680, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81400, 148632, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82440, 149240, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82136, 149240, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81336, 149208, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81368, 148952, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83320, 147976, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83592, 148392, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83688, 148472, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83432, 148568, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83576, 148888, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83400, 149144, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83752, 149512, -3400, Rnd.get(1, 40)));

Edited by Ban

3rQnuhn.gif

Mensagens Pedindo Ajuda serão ignoradas
Caixa de PM não e central de Duvidas ou Pedidos

Meu Pastebin

Share this post


Link to post
Share on other sites
22 horas atrás, Ban disse:

muito bom pra H5 ficaria perfeito.

gostei muito da lista ainda não consegui fazer a minha me manda o seu hahaha

a lista de escolha de class se possível hahaha

vou deixar uma contribuição aqui peço que teste em seu projeto

 


 

 

	import net.sf.l2j.commons.concurrent.ThreadPool;
	Comandos do AdminFakePlayer
	+        if (command.startsWith("admin_fakegiran")) {
+            activeChar.sendMessage("Giran Walker Fake Player");
+            ThreadPool.schedule(new Runnable()
+            {
+              @Override
+            public void run()
+              {
             +   AdminFakePlayers.WhileLoopExample1.spawn(activeChar.getX(), activeChar.getY(), activeChar.getZ());
          +      FakePlayer fakePlayer = FakePlayerManager.spawnPlayer(activeChar.getX(),activeChar.getY(),activeChar.getZ());
     +           fakePlayer.setFakeAi(new GiranWalkerAI(fakePlayer));
+              }
  +          }, 1L);
+          }
	 
	+            static class WhileLoopExample1
      {
+        public static void spawn(int x, int y, int z)
+        {
+          int i = 10;
+          while (i > 0)
+          {
        +    FakePlayer fakePlayer = FakePlayerManager.spawnPlayer(x, y, z);
  +          fakePlayer.setFakeAi(new GiranWalkerAI(fakePlayer));
      
  +          try
+            {
 +             Thread.sleep(1100L);
+            }
    +        catch (InterruptedException localInterruptedException) {}
+            i--;
+          }
+        }
+      }
	

 

 

  Mostrar conteúdo oculto

 

        _walkNodes.add(new WalkNode(82248, 148600, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82072, 147560, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82792, 147832, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82248, 148600, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82072, 147560, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81752, 147592, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82760, 148600, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82840, 148776, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82808, 149064, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82216, 147688, -3464, Rnd.get(1, 20)));
        _walkNodes.add(new WalkNode(82568, 147656, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82792, 147816, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83080, 147912, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81864, 149416, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82856, 149368, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82216, 149464, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81640, 149624, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81512, 149192, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81208, 149224, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81032, 148680, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81400, 148632, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82440, 149240, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(82136, 149240, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81336, 149208, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(81368, 148952, -3464, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83320, 147976, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83592, 148392, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83688, 148472, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83432, 148568, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83576, 148888, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83400, 149144, -3400, Rnd.get(1, 40)));
        _walkNodes.add(new WalkNode(83752, 149512, -3400, Rnd.get(1, 40)));

 

 

Eu ainda não cheguei nos walkers, estou fazendo as funções básicas primeiro...

 

A lista das classes é só ver uns exemplos, não tem como eu te passar o código todo porque eu não terminei ainda; a minha engine é pra highfive, para qual é a sua ? está usando a l2jroboto ?

No html você coloca um botão assim:

<combobox width=130 var=fakeclass list="Sagittarius;MoonlightSent;" />

Lembrando que a opção no list pode ter no máximo 16 caracteres, por isso não escrevi "Moonlight Sentinel"; ai no botão vc passa o valor da lista como parametro:

<button value="Spawn Fake" action="bypass admin_fakespawn $fakeclass htm" width=80 height=30 />

pra ver como pegar vc tem que dar um split lá no comando de adm:

        if (command.startsWith("admin_fakespawn")) {
            if(command.contains(" ")) {
                String args[] = command.split(" ");

                String occupation = args[1];
                String htm = args[2];

                spawnFakePlayer(occupation, activeChar);

                if(htm.equalsIgnoreCase("htm")) {
                    showFakeDashboard(activeChar);
                }
            }
            return true;
        }

Eu entendi como o //gmshop e o //admin funciona passando os parametros e fiz esse; é só vc dar uma olhada neles com calma que dá pra replicar xD

  • I love it 1

Share this post


Link to post
Share on other sites
8 horas atrás, vert disse:

Eu ainda não cheguei nos walkers, estou fazendo as funções básicas primeiro...

 

A lista das classes é só ver uns exemplos, não tem como eu te passar o código todo porque eu não terminei ainda; a minha engine é pra highfive, para qual é a sua ? está usando a l2jroboto ?

No html você coloca um botão assim:

<combobox width=130 var=fakeclass list="Sagittarius;MoonlightSent;" />

Lembrando que a opção no list pode ter no máximo 16 caracteres, por isso não escrevi "Moonlight Sentinel"; ai no botão vc passa o valor da lista como parametro:

<button value="Spawn Fake" action="bypass admin_fakespawn $fakeclass htm" width=80 height=30 />

pra ver como pegar vc tem que dar um split lá no comando de adm:

        if (command.startsWith("admin_fakespawn")) {
            if(command.contains(" ")) {
                String args[] = command.split(" ");

                String occupation = args[1];
                String htm = args[2];

                spawnFakePlayer(occupation, activeChar);

                if(htm.equalsIgnoreCase("htm")) {
                    showFakeDashboard(activeChar);
                }
            }
            return true;
        }

Eu entendi como o //gmshop e o //admin funciona passando os parametros e fiz esse; é só vc dar uma olhada neles com calma que dá pra replicar xD

Rapaz eu fico muito grato.

o meu e Interlude e sim e o mesmo sistema mais ja estou com o meu a 6 messes e bom acho que vai ter trabalho com a Geodata com os walker em fim você pega o loc mais eles travão se forem RAMDOM na linha agente traça um roda sem obstáculos ate que vai os RAMDOM as vezes a geodata leva ele e ele realmente da uma bugada bom não entendi muito bem como configurar aquela geodata que ele informa na engine em essa que te mandei teste ela essas todas estão funcionando ja testei deixar mais semana eles continuaram fazendo seu trabalho...

obrigado pela ajuda irei tentar replicar xD

  • Like 1

3rQnuhn.gif

Mensagens Pedindo Ajuda serão ignoradas
Caixa de PM não e central de Duvidas ou Pedidos

Meu Pastebin

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  


⭐ Links Úteis




⚔️ Server Patrocinador



🎁 Ofertas







  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • BOM DIA , BOA TARDE , BOA NOITE - 'Sr's  Olá meus caros amigos da l2jbrasil  venho aqui no forum em busca de um parceiro para entrar na sociedade em meu servidor o servidor é um Hi5 50x já está em fase final apenas falta mudar algumas coisas e ja está pronto para coloca-lo online preciso de uma pessoa responsavel que queira colocar o servidor online comigo.. Precisa ser maior de 18 e que tenha condições de ajudar com os custos do DEDICADO SITE E DEMAIS GASTOS COM DIVULGAÇÃO Caso alguem tenha o real interesse por favor , deixar os dados abaixo aqui '   Nome: Idade: Cidade :   Conte me um pouco sobre sua pessoa , e sua personalidade:                                                                                                    Preciso tambem de pessoas para ajudar com as divulgação do servidor interessadas enviar MP      
    • Bom dia senhores. Nome: Henrique Versão do Servidor: Interlude/Freya,H5/Classic Procuro vaga ou alguém para montar um servidor free to play. Pretendo ser ADM/GM (Evento) ou GM (Divulgador) Tenho experiência com  datapack/custom/texturas do cliente , meu foco sempre foi mexer com essa parte ❤️ Quero entrar em uma equipe para ajudar na montagem e supervisão do servidor. Se alguém tiver interesse, entrar em contato comigo via PM ou discord.
    • do Rise of Darkness ate Valiance
    • edita h5 tbm ou só interlude?
    • Att, apenas com o top da l2jbrasil está acontecendo.
    • https://www.mediafire.com/file/533stb9mi5zjrs7/buffer_Schemer_L2JDream.rar/file
    • Estranho  vou dar uma olhada e depois posto aqui
    • Fiz isso agora e deu certo, configurei mas agora diz não ter votado em todas as opções, deixei apenas o top da l2jbrasil.. Msg: Você não votou em todos os links. Todos os links devem ser votados para receber o premio!
    • Eu já tentei de tudo, desativando o overenchant, o safeadmin e ele continua dando critical error, tentei provar seu system recomendado e também o que você deixou nos comentários, mesmo assim para os caras que eu paso system continua dando critical error ou kickando do serve... em gameserver e loginserver nao da error... aqui meus configuracaos do seu pack... system do serve ta on no meu pc pra testa >https://mega.nz/file/Ok0k2AaI#YRkALtA165Nb8gYoUG9wltOPIKlYX344ZIlCFfK2Qq8< https://mega.nz/file/bs020ADS#-Q9VcUAIuUbIaPL8BTNMkBrxq1kF--5DytzEuEuClkI  
    • Grave um video e poste aqui
×
×
  • Create New...