Ir para conteúdo
  • Cadastre-se

L2J Rewrite - Buscando developers


Rogiel

Posts recomendados

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!
    O conteúdo está oculto, favor efetuar login ou se cadastrar!


  • 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!
    O conteúdo está oculto, favor efetuar login ou se cadastrar!


  • 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)
    O conteúdo está oculto, favor efetuar login ou se cadastrar!


  • Capacidade de filtrar objetos no mundo: basta adicionar filtros e você apenas "verá" o que o filtro aceitar.
    O conteúdo está oculto, favor efetuar login ou se cadastrar!


 

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:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Fórum:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

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!

Link para o comentário
Compartilhar em outros sites


E - X - C - E - L - E - N - T - E

 

Muito bom cara, muito bom mesmo. Maaaaas, tem alguns pontos que ainda precisam ser vistos

 

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!

Quanto à troca de packets server->client/client->server, isso geraria muito tráfego de packet inválido ou mesmo desnecessário, uma vez que nem sempre é preciso fazer o broadcast dos mesmos.

 

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.

Isso sim é bom, uma vez que aplicações que dependem de arquivos XML em tamanho semelhante ao L2J perder 300% de performance. Mas, fazer via java seria ainda pior, porque diminuiria a acessibilidade aos dados requeridos. O melhor método ainda é o uso de banco de dados.

Aí, alguém vai me falar "mas vai aumentar o uso do banco de dados"

O uso do banco de dados é muito mais viável do que uso de XML (como mencionada a questão da performance) ou qualquer outra fonte física, pois aumenta a acessibilidade e comodidade em relação à edição de registros, tanto pelo source quanto pelo usuário.

 

E quanto aos milhares de Statementes, tu fez o que? Usou Hibernate ?

 

Por hora, só isso. Apenas algumas dicas e sugestões. Parabéns pela iniciativa.

 

Por mim, daria FIX nesse tópico, pq isso sim é projeto.

 

Abraços.

8cp1z10.png
Link para o comentário
Compartilhar em outros sites

Como disse o mend3, isso sim que é projeto, so essa alteração dos pacotes ja torna o servidor bem seguro por um bom tempo.

Infelizmente sou leigo em java, adoraria contribuir.

A honra nunca se ofende impunemente: nunca existe por metade; inteira é forte, ferida está morta.

Link para o comentário
Compartilhar em outros sites

Caraca, a quanto tempo estava esperando alguém tomar essa iniciativa tão "maravilhosamente incrível". Isso será uma inovação, sair fora da rotina do L2JServer, todos os servidores L2J são baseados nela e muitos pensam que os bugs estão presentes nas modificações, claro, que por parte sim, mais os grandes erros podem estar lá por muito mais tempo antes de ter modificado.

Eu queria poder ajudar, mais o conhecimento que tenho não é vasto, mais se precisar, pode contar comigo.

 

Boa sorte, ótima iniciativa!

mSw8ymV.gif

Link para o comentário
Compartilhar em outros sites

E - X - C - E - L - E - N - T - E

 

Muito bom cara, muito bom mesmo. Maaaaas, tem alguns pontos que ainda precisam ser vistos

 

 

Quanto à troca de packets server->client/client->server, isso geraria muito tráfego de packet inválido ou mesmo desnecessário, uma vez que nem sempre é preciso fazer o broadcast dos mesmos.

 

 

Isso sim é bom, uma vez que aplicações que dependem de arquivos XML em tamanho semelhante ao L2J perder 300% de performance. Mas, fazer via java seria ainda pior, porque diminuiria a acessibilidade aos dados requeridos. O melhor método ainda é o uso de banco de dados.

Aí, alguém vai me falar "mas vai aumentar o uso do banco de dados"

O uso do banco de dados é muito mais viável do que uso de XML (como mencionada a questão da performance) ou qualquer outra fonte física, pois aumenta a acessibilidade e comodidade em relação à edição de registros, tanto pelo source quanto pelo usuário.

 

E quanto aos milhares de Statementes, tu fez o que? Usou Hibernate ?

 

Por hora, só isso. Apenas algumas dicas e sugestões. Parabéns pela iniciativa.

 

Por mim, daria FIX nesse tópico, pq isso sim é projeto.

 

Abraços.

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:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

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.

Link para o comentário
Compartilhar em outros sites

Nossa achei que ja tinha visto de tudo,mas isso sim é um projeto,parabéms mesmo!

 

Se isso for adiante concerteza irá revolucionar o Lineage II Java!

 

Incrivelmente maravilhoso[2]

 

 

Precisando de algo chama ai!

HYWuN.png

 

Quer algo bem feito?Faça você mesmo!

Link para o comentário
Compartilhar em outros sites

Muito bomwink.gif, o trabalho que terá vai ser recompensado com um código limpo e fácil de entender.

 

Se eu não tivesse tão ocupado com certeza ia entrar nessa com você, mas alguns projetos da faculdade não me deixa blush.gif

 

Parabéns pela iniciativa e boa sorte wink.gif

Link para o comentário
Compartilhar em outros sites

isso sim é 1 projeto de verdade !

 

tbm sinto muito nao poder contribuir meus conhecimentos em java sao muito limitados :S

cyCrFTF.jpg

Obrigado pelo presente Mickaelll

Corintiano Fanático;

Estudante de T.I e l2jbrasileiro nas horas vagas.

Link para o comentário
Compartilhar em outros sites

Dá pra notar que vai pra frente mesmo, inciando pelo português do administrador.

Parabéns, boa sorte.

Este é um dos únicos projetos que eu vi aqui nesta área que vai pra frente.

Sucesso!

Sou um usuário aposentado há anos do L2JBrasil, por gentileza, não me contate para suporte, pois não entendo mais nada de L2J. Fiquei no tempo.
Link para o comentário
Compartilhar em outros sites

Enquanto ao Projeto , Vai ser Free ou Privado ? Posso ajudar em Muita coisa oq for possivel ao meu alcanse .

 

Abraços.

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.

Link para o comentário
Compartilhar em outros sites

Havia parado um tempo com L2J pelo desempenho,mas com esse projeto,vou ficar atento sobre ele.

Logo mais estarei compilando para testes.

Parabéns mano,você tem futuro :happy:

class L2JBrasil {
   protected function L2JBr() {
if($user->logon = 'FALSE'){
return "Leecher-> ALT+F5";}}}

Link para o comentário
Compartilhar em outros sites

Ai galera vamos fazer um multirão pra criar as XMLS dos items sei la...

 

Reparte uma parte pra cada ai!O kara ja fez muito de postar o projeto aqui!

Eu acho que se montar uma equipe,ele vai ficar pronto mais rapido ;D

HYWuN.png

 

Quer algo bem feito?Faça você mesmo!

Link para o comentário
Compartilhar em outros sites

Poderia disponibilizar a mesma já compilada?

É por que estou sem eclipse neste computador. :/

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.

 

Ai galera vamos fazer um multirão pra criar as XMLS dos items sei la...

 

Reparte uma parte pra cada ai!O kara ja fez muito de postar o projeto aqui!

Eu acho que se montar uma equipe,ele vai ficar pronto mais rapido ;D

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.

O conteúdo está oculto, favor efetuar login ou se cadastrar!
-- esse é um exemplo de um NPC convertido a partir de vários arquivos do L2J.

Link para o comentário
Compartilhar em outros sites

Se quiser ajuda nas .xml's é só falar, estou disponível agora. (:

Eu falo, compilar para ver como está o andamento do projeto. Adoraria testar aqui em casa, mesmo não estando completo.

mSw8ymV.gif

Link para o comentário
Compartilhar em outros sites

Se quiser ajuda nas .xml's é só falar, estou disponível agora. (:

Eu falo, compilar para ver como está o andamento do projeto. Adoraria testar aqui em casa, mesmo não estando completo.

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.

O conteúdo está oculto, favor efetuar login ou se cadastrar!

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!

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

GameServer ->

O conteúdo está oculto, favor efetuar login ou se cadastrar!

LoginServer ->

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Link para o comentário
Compartilhar em outros sites

Olá, bom dia.

Como você disse, tem o arquivo database.properties para configurar, até aí tudo bem. Mas, eu modifico o mesmo e ainda continua a mesma senha e o mesmo login de usuário.

Então me fez pensar que está configuração não está funcionando, se for erro meu, por favor me corriga.

 

Olha o log:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Agora veja o arquivo configurado:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Olhe no log acima, e veja que mesmo eu mundando o username para o default que é root, continua acusando que está l2j e o mesmo acontece com a senha e o banco de dados.

Fui procurar o erro através dos arquivos e creio eu que tenha algo a ver com está pedição de configuração:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Caso eu esteja errado, repido, por favor me corrija.

 

Obrigado.

mSw8ymV.gif

Link para o comentário
Compartilhar em outros sites

Olá, bom dia.

Como você disse, tem o arquivo database.properties para configurar, até aí tudo bem. Mas, eu modifico o mesmo e ainda continua a mesma senha e o mesmo login de usuário.

Então me fez pensar que está configuração não está funcionando, se for erro meu, por favor me corriga.

 

Olha o log:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Agora veja o arquivo configurado:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Olhe no log acima, e veja que mesmo eu mundando o username para o default que é root, continua acusando que está l2j e o mesmo acontece com a senha e o banco de dados.

Fui procurar o erro através dos arquivos e creio eu que tenha algo a ver com está pedição de configuração:

O conteúdo está oculto, favor efetuar login ou se cadastrar!

 

Caso eu esteja errado, repido, por favor me corrija.

 

Obrigado.

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:

O conteúdo está oculto, favor efetuar login ou se cadastrar!
é apenas o .jar. Só substituir e pronto.

 

Outra coisa que esqueci de comentar que a versão do protocolo usada atualmente é Freya.

O conteúdo está oculto, favor efetuar login ou se cadastrar!

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • Registre-se

    Faça parte da maior e  mais antigas comunidades sobre Lineage2 da América Latina.





×
×
  • Criar Novo...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.