Ir para conteúdo
  • Cadastre-se

Rogiel

Membro
  • Total de itens

    19
  • Registro em

  • Última visita

Reputação

8 Normal

Sobre Rogiel

  • Rank
    ForeverAlone
  1. Rogiel

    L2J Rewrite - Buscando developers

    Git está sendo usado, git é muito mais robusto e rápido do que SVN. Procedimentos que podem levar horas no SVN levam frações de minutos no Git. Mas o link é exatamente esse. E agora também suporta Interlude, mas não há versão pré-compilada, você precisa ir e compilar da source mesmo. Basta ir na página do projeto no Github, fazer um fork da source e começar o trabalho. Vou importando as mudanças dos desevolvedores para o repositório principal assim que consigo fazer uma revisão das modificações. É recomendado criar um pull request para que qualquer problema no código possa ser notificado ali mesmo, num local centralizado. O site do github possui muitos artigos de ajuda: http://help.github.com/. Recomendo estes dois artigos: http://help.github.com/fork-a-repo/ http://help.github.com/send-pull-requests/
  2. Rogiel

    L2J Rewrite - Buscando developers

    Só um update: um cara fez um fork do projeto e implementou suporte ao Interlude. Para quem queria suporte ao interlude, ele já está lá! Basta que o servidor seja compilado novamente. https://github.com/l2jserver2/l2jserver2/commit/907495f623e15397a889fa2db326178f4c0d86b2
  3. Rogiel

    L2J Rewrite - Buscando developers

    Atualmente é freya, mas a idéia é desenvolver o servidor para todos os clientes ao mesmo tempo (mais detalhes no final do post). Ao invés de manter milhares de branches (segmentos de código) para cada versão, mantém-se um compatível com todos os clientes. A reestruturação do XML é pra ficar um XML de verdade, algo que seja possível LER sem precisar entender 105% do funcionamento interno do servidor. Quanto aos HTMLs, é pra unificar mesmo. O HTML pertence ao NPC, então nada mais lógico que ficar no seu arquivo, correto? Na verdade, é a reescrita do servidor que visa manter controle do uso de memória e processador, tentando evitar as gambiarras do l2j e, assim, possibilitando mais players online num mesmo hardware. Há ainda um recurso que adicionei algum tempo atrás que ao invés de ter milhares de arquivos XML (20 mil aproximadamente), ele os mantém dentro de um ZIP (data.zip) que é criado junto com a compilação do servidor. Ao iniciar o servidor ele lê apenas o ZIP e é muito rápido (uns 20 segundos em uma máquina lenta para carregar tudo). Como citei acima, vai ser fácil "voltar" paras outras versões, basta ativar e desativar os serviços de funções novas (que não existiam no Interlude, por exemplo - não me lembro de nenhum exemplo bom agora) e o servidor deve ser compatível. Além disso, semana passada implementei uma mudança que modulariza isso: numa mesma compilação, mais a frente, ele irá compilar um servidor para cada cliente. Atualmente só Freya mesmo. Assim, o trabalho que hoje a equipe do l2j tem pra portar a mesma modificação pra 2 ou 3 branches será automática na maioria dos casos. --- Quem quiser testar o servidor (compilado dia 20/jan) segue um link para download: l2jserver2-gameserver-0.0.2-20120121.030911-1-orientdb-bin.zip Lembrando: ele requer Java 7 (JRE é o suficiente) e um cliente versão FREYA! Para a felicidade geral, esta versão usa um banco de dados embutido, então é só extrair e rodar. Para o pessoal mais old-school, há a versão MySQL: l2jserver2-gameserver-0.0.2-20120121.030911-1-mysql5-bin.zip. Nela, basta configurar o banco de dados no arquivo services.xml e iniciar o servidor, as tabelas são criadas automaticamente. Recomendo o uso da versão com banco de dados embutido (OrientDB) para testes, é bem mais fácil!
  4. Rogiel

    L2J Rewrite - Buscando developers

    Para quem havia se interessado no projeto, gostaria de informar que criei um fórum para auxiliar no desenvolvimento do servidor: http://forum.l2jserver2.com/
  5. Rogiel

    L2J Rewrite - Buscando developers

    Um update da situação: agora já é possível atacar monstros. eles morrem quando o HP chega à zero. Cinco segundos após, o corpo desaparece. O respawn também já está funcionando.
  6. Rogiel

    L2J Rewrite - Buscando developers

    Cara Interlude é meio antigo, a principip não vou fazer para interlude. Mas talvez alguém faça um backport.
  7. Rogiel

    L2J Rewrite - Buscando developers

    Para dar reload, basta reiniciar o TemplateService que vai atualizar tudo (tudo que está no xml). Os HTMLs separados é confuso, precisa ficar caçando onde cada um fica. Tudo no XML fica tudo no mesmo lugar, o html pertence ao NPC, logo, fica no arquivo do NPC. Eu acho que a edição não é afetada pois poucos usam um editor visual para editar isso (até porque nem é possivel. porque a implementação de html do L2 é bem porca e não segue standards). Haverá, entretando, um arquivo de HTMLs globais, pois alguns chats são compartilhados com vários NPCs. Mas a idéia é fazer classmaster.xml (dentro da uma pasta html) e lá terá todos os htmls compartilhados entre classmasters. O objetivo disso é reduzir a quantidade de arquivos semelhantes e separar as coisas diferentes. Por exemplo, no L2J há vários items num XML só, é preciso ver o range de ID e então abrir o arquivo certo. Mesmsa coisa o html, para editar os chats precisa abrir vários arquivos pois eles estão separados, e contém apenas a ID do npc, dificultando e atrapalhando muito o trabalho. Estando junto do NPC, nada disso acontece. Manter os chats na memória consome um pouco de memória a mais, mas no futuro pretendo implementar spawn on-demand, assim quando não houverem players num determinado lugar, o NPC é removido do jogo, bem como seu template descarregado após um certo tempo de desuso (5 minutos, por exemplo). Quando um player se aproximar, o NPC volta a aparecer e o template é carregado novamente. --- SQLs do loginserver são as mesmas do l2j, achei que tinham ido junto com o zip, mas não foi, estranho... CREATE TABLE IF NOT EXISTS `account_data` ( `account_name` VARCHAR(45) NOT NULL DEFAULT '', `var` VARCHAR(20) NOT NULL DEFAULT '', `value` VARCHAR(255) , PRIMARY KEY (`account_name`,`var`) ); CREATE TABLE IF NOT EXISTS `gameservers` ( `server_id` int(11) NOT NULL default '0', `hexid` varchar(50) NOT NULL default '', `host` varchar(50) NOT NULL default '', PRIMARY KEY (`server_id`) ); CREATE TABLE IF NOT EXISTS `accounts` ( `login` VARCHAR(45) NOT NULL default '', `password` VARCHAR(45) , `lastactive` bigint(13) unsigned NOT NULL DEFAULT '0', `accessLevel` TINYINT NOT NULL DEFAULT 0, `lastIP` CHAR(15) NULL DEFAULT NULL, `lastServer` TINYINT DEFAULT 1, `userIP` char(15) DEFAULT NULL, `pcIp` char(15) DEFAULT NULL, `hop1` char(15) DEFAULT NULL, `hop2` char(15) DEFAULT NULL, `hop3` char(15) DEFAULT NULL, `hop4` char(15) DEFAULT NULL, PRIMARY KEY (`login`) );
  8. Rogiel

    L2J Rewrite - Buscando developers

    O ProxyConfigurationService não estava buscando na hierarquia das classes uma @annotation @ConfigurationName("database"), dai ele nunca encontrava um arquivo de configurações. Fix um hotfix: http://www.megaupload.com/?d=6PJ6DACE, é apenas o .jar. Só substituir e pronto. Outra coisa que esqueci de comentar que a versão do protocolo usada atualmente é Freya. /** * Freya(216) */ FREYA(216, RELEASE)
  9. Rogiel

    L2J Rewrite - Buscando developers

    Fiz uma compilação, ainda não fiz loginserver, então estou usando uma versão patcheada do L2J, ela desativa a verificação de autenticação com o GS. Os arquivos que configuração não estão completos, mas o que precisa está ali: database.properties. jdbc.mysql.url = jdbc:mysql://localhost/l2jserver2 jdbc.mysql.driver = com.mysql.jdbc.Driver jdbc.mysql.username = l2j jdbc.mysql.password = changeme Não precisa muita explicação eu acho. As SQL para criar as tabelas estão em "sql". São poucas de momento. Já possui alguns dados, só lembrem-se de editar o nome da conta à qual o character pertence. Apenas tem um script de inicialização para Linux (eu uso linux), mas nem ele foi implementado ainda. Nota: uma série de warnings aparece dizendo que um template de NPC não foi encontrado, isso acontece pois o conversor está dando erro na hora de converter esse único NPC. Por enquanto é normal e não causa muito problema, o NPC é "Fairy Pixy" -- inútil! com.l2jserver.db.dao.mysql5.MySQL5NPCDAO:109 - No template found for NPCTemplateID [id=31845] GameServer -> http://www.megaupload.com/?d=S4212E91 LoginServer -> http://www.megaupload.com/?d=DVMBU9I3
  10. Rogiel

    L2J Rewrite - Buscando developers

    Ainda não vale a pena compilar, ainda falta muita coisa. Mas assim que o servidor ficar mais utilizável, faço uma compilação sim. De momento estou usando bastante conversão dos dados do L2J (link abaixo), mas uma equipe para ajudar nisso seria ótimo. Ainda não fiz conversor para os items (eles são bem complexos). Characters e NPCs já tem um conversor bem desenvolvido. https://github.com/Rogiel/l2jserver2-gs/blob/master/data/templates/npc/kamaelvillagemaster/32146-Valpor.xml -- esse é um exemplo de um NPC convertido a partir de vários arquivos do L2J.
  11. Rogiel

    L2J Rewrite - Buscando developers

    Open source... projeto desse porte closed-source não vai pra frente. Todo código fonte já está no Git para qualquer um acessar. Um update: reverti o conceito dos templates em Java, havia um problema que eu não previ -- o uso de memória duplicava. Criei um modelo de XML melhor que o do L2J. Dentro do XML também estão os HTMLs da conversa, assim tudo relacionado ao NPC fica dentro do arquivo do NPC. no futuro será também adicionada a lista de items que o NPC pode vender. Conversar com NPCs já está funcionando, teleporte pelas gatekeepers também. As demais ações (multisell, buy, sell, atacar, etc...) ainda mostram uma mensagem de erro.
  12. Rogiel

    L2J Rewrite - Buscando developers

    Aos eventos, são apenas no lado do servidor, inclusive o sistema de broadcast é feito usando os eventos, no momento que o servidor despacha CharacterMoveEvent, um listener, que filtra apenas os objetos dentro do range do character, envia a mensagem de brodascast para o cliente. Ele apenas envia esse pacote caso o player esteja vendo (dentro do range). Veja esse serviço aqui apartir da linha 169: https://github.com/Rogiel/l2jserver2-gs/blob/master/src/main/java/com/l2jserver/service/game/character/CharacterServiceImpl.java Esse sistema de broadcast ainda é temporário e vai ser movido de lugar, provavelmente para um novo serviço especializado em broadcast. Minha intenção com os templates em Java foi focar nos comportamentos (de npcs, items e skills principalmente) ao invés de focar na acessibilidade externa, assim simplifica o "core" do servidor. Embora perca a acessibilidade fora do servidor, o ganho em flexibilidade é muito mais valioso: é possível criar um novo NPC de forma muito fácil. Na template em java os valores são definidos diretamente na classe e compilados na inicialização, isso gera um tempo de inicialização um pouco maior, mas acredito que ainda ficará mais rápido que usando SQL ou XML. No momento, com todos templates de NPC, o tempo de inicialização está em certa de 20-25 segundos. É possível ainda usar os templatates de forma pré-compilada, nesse módo o tempo de inicialização deve cair para menos de 6 segundos. Aos statements do L2J eu me referi junto ao business, não estavam centralizados e eram repetidos em vários lugares. Eu usei DAO, assim é simples trocar de banco de dados.
  13. Rogiel

    L2J Rewrite - Buscando developers

    Salve pessoal! Estive no último mes trabalhando numa reescrita do L2J. É notório para qualquer desenvolvedor Java que o L2J não teve um bom projeto: Statements por todo código ou alto consumo de memória, só para exemplificar. Sem nem entrar no quesito de uso de memória que é extremamente alto, eu acredito que é possível fazer melhor! Estou reescrevendo esse emulador do zero, não estou usando uma linha sequer do L2JServer. Porque? Porque consertar os erros do servidor é muito mais difícil do que recriar! Vou citar algumas das características que fiz para o emulator: Baseado em serviços: de logs e rede à AI é tudo um serviço. Serviços podem ser substituidos facilmente e comunicarem entre si. Mundo baseado em eventos: cada ação de um player ou NPC, gera um evento que pode ser escutado por outro serviço! A aplicação principal disso são as knwonlists, não é preciso fazer o "broadcast" manual dos pacotes, é tudo feito pelos eventos! final WorldListener l = new WorldListener() { @Override protected boolean dispatch(WorldEvent e) { if(e instanceof CharacterEnterWorldEvent) { System.out.println("Character "+e.getCharacter()+" has logged-in."); } // keep listener alive return true; } }; // este é um evento global eventDispatcher.addListener(l); // é possivel também adicionar listeners para apenas um objeto final L2Character character = ...; eventDispatcher.addListener(character, l); Sem singleton: singleton é simples, mas gera problemas. É quase impossivel alterar, temporariamente, uma implementação. Estou usando Google Guice. Sem XML: é tudo Java. Templates de items, characters, NPC, Monstros, são uma classe em Java. Dessa maneira um determinado monstro ou item pode ter seu comportamento mudado sem precisar usar "hard-coded" ids no código! Além disso, os templates são compilados na inicialização do servidor e podem ser recarregados quando for necessário. Infelizmente esse conceito não funcionou muito bem e foi criado um novo formato de XML (bem diferente do L2J) para armazenar esses dados estáticos. DAO-Aware IDs: é possível usar os objetos de ID para obter instâncias dos objetos no banco de dados! final CharacterID id = provider.createID(268437456); final L2Character character = id.getObject(); Chat baseado em canais: você adiciona um listener no canal é recebe notificações sempre que uma nova mensagem for enviada no canal (existem canais privados: player->player, ou públicos: player->vários players) ChatChannelListener l = new ChatChannelListener() { @Override public void onMessage(ChatChannel channel, CharacterID source, String message) { System.out.println(source.getObject().getName()+": "+message); } }; chatService.getTradeChannel().addChatChannelListener(l); // sending a message final L2Character sender = ...; chatService.getTradeChannel().send(sender, "Hello world!"); Capacidade de filtrar objetos no mundo: basta adicionar filtros e você apenas "verá" o que o filtro aceitar. // neste exemplo todos os NPCs que o character pode ver são enviados para o cliente final L2Character character = ...; final Lineage2Connection conn = ...; for (final NPC npc : worldService.iterable(new AndFilter<NPC>(new InstanceFilter<NPC>(NPC.class), new KnownListFilter(character)))) { conn.write(new NPCInformationPacket(npc)); } Vejam o código fonte no repositório abaixo para verem todos os detalhes! O estágio atual do servidor é bem inicial, é possível criar characters, entrar no mundo e caminhar. Entretando ainda não é possivel equipar ou desequipar armas nem atacar. Existe um NPC fixo (dando spawn junto ao spawn inicial dos humandos fighter) como teste. Ao clicar nele, uma mensagem de erro aparece. Como login server possuo uma versão patcheada do login server do l2j, pretendo substituir mais a frente. Tenho toda a source sincronizada no meu repositório no GitHub. GitHub: https://github.com/l2jserver2/l2jserver2 Fórum: http://forum.l2jserver2.com/ Temporariamente estou usando o nome l2jserver2, pois quando iniciei o desenvolvimento apresentei aos desenvolvedores do l2j: fui ignorado. Ainda não tive a chance de alterar o nome. Depois de apresentado o projeto, gostaria de saber se tem alguém interessado em se juntar ao projeto, seja para desenvolver ou para ajudar com as templates (a linguagem é simples). Pessoas interessadas em ajudar no desenvolvimento podem entrar em contato comigo por MP ou por email ([email protected]). É isso ai pessoal!
  14. Rogiel

    Painel de administração de servidores

    Quais métodos permitem criar uma crojob então? create_cronjob? não.. isso Não existe. Vc precisa receber um request e somente então executar algo.
  15. Rogiel

    Painel de administração de servidores

    Cronjob é um quase hack, vc precisa fazer uma imagem ou um pedido em ajax no site, se ninguem acessar esse arquivo, a cron nunca é executada. Agendador de tarefas do windows nào conta, pq nao é do php... Adodb não é DAO, é uma camada de abstração, como o JDBC em Java. Java é muito bem documentado amigo, e toda essa documentação se tem pela IDE, e não precisa acessar sites externos. Ambientes Java são caros, pq são pouco usados... assim como os ambientes com PHP eram a alguns anos atrás, quando só se usava HTML e JavaScript.
  • Atualizações Recentes de Status

    • tuliokiller  »  fabaol2jbrasil

      Boa tarde Fabio, estou a procura de Cloack's top para o meu servidor, uso a versão Jsurinse 2019. e estava querendo capas personalizadas, poderia me ajudar?
      · 1 resposta
    • GnomoVL  »  Reign

      Boa tarde! como eu não posso comentar um tópico eu vim aqui te dizer sobra a ajuda que você está prestando no tópico L2JBlueHeart.. o magnus chant ele não é enchantavel, por isso está ocorrendo esse erro com o colega, por favor avise a ele.
      · 1 resposta
    • Gabriel Melo

      Boa tarde pessoal. É minha primeira vez postando aqui, desculpa se estiver no lugar errado. Estou precisando de ajuda com meu L2 OFF. Quando eu entro no jogo eu consigo pegar o target de qualquer guarda que tem no jogo, porem, se eu clicar em qualquer Mob ou NPC dentro do jogo, não vou conseguir pegar o target para atacar (no caso dos mobs) e para conversar (no caso dos NPCs). Poderiam me ajudar a resolver esse problema?
      · 1 resposta
×