Ir para conteúdo
  • Cadastre-se

vaneves

Membro
  • Total de itens

    13
  • Registro em

  • Última visita

  • Prêmios recebidos

    1

vaneves last won the day on Setembro 20

vaneves had the most liked content!

Reputação

10 Normal

Sobre vaneves

Profile Information

  • Gênero:
    Masculino
  • Localização:
    Palmas - TO

Contact Methods

  • Facebook:
    vaneves
  • Site:
    https://vaneves.com/

Últimos Visitantes

128 visualizações
  1. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Saquei. Não joguei classic ainda. Bom, como eu havia falado, coloquei no GitHub uma lib que comecei a fazer para trabalhar com banco de dados: https://github.com/vaneves/java-query-builder
  2. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Como disse em vários textos do tópico, estou aberto a sugestão. Poderia em indicar um projeto do interlude bom (open source)? Pode ser qual linguagem, desde que seja completo, não apenas cheio de mods PvP mas com poucas quests funcionando. O classic (C1, C2... C6) está tão em alta (e sempre esteve) que o oficial está voltando classic.lineage2.com. Não confunda projeto com servidor. O projeto é o código (de preferência aberto), o servidor é quando alguém pega o projeto (caga ele mais ainda) e coloca no ar. Se olhar o que foi debatido no tópico, vai ver sobre a organização do código, melhoria extraordinária de desempenho (que faz suportar 10x, 20x, 50x mais players).
  3. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Eu, particularmente, amo o Interlude. Estou aqui simplesmente para ajudar, para retribuir as vezes que joguei em servidores emulados. Dinheiro ganho no trabalho e somente nas horas vagas irei me dedicar ao projeto. Não é algo que quero fazer a curto prazo, para ontem, mas é algo que eu me orgulhe ao final do projeto. Atualmente existem trocentos servidores privados de L2 Interlude, mas infelizmente eles abrem e fecham em uma velocidade incrível. Eu te digo porque passei por uns 20 esse ano, tentando encontrar ali um legal. Infelizmente não encontrei e atualmente só estou jogando no oficial (Salvation). Mas não curto muito, tem tanta novidade que você pula muitas etapas, já ganha os itens e "copiaram" muitas ideias de servidores emulados, inclusive. Só estou lá porque sei não vai fechar amanhã, já os atuais emuladores eu não tenho certeza. Eu, como disse, amo o Interlude, MAS não sei se jogaria ele nele exatamente como no oficial, com 1x, spellbooks para aprender skills, mata o mobi e senta para recuperar HP e MP, passa mais tempo sentado do que jogando. Muita gente que conheço também não o jogaria assim. Ao mesmo tempo EU não gosto de servidores acima de 10x. Quando eu chamei meus amigos para jogar o oficial (Salvation) recentemente eles falaram "tu tá é louco?". Outro fator é que muitas pessoas não gostam de servidores gringos, gostam do BR, conversar em português, TS na veia e tal. Sobre o investimento de dinheiro, bem, é isso que quero reduzir. Meu tempo vale muito, felizmente, então esse será o investimento. Mas quando for montar um servidor, por ser otimizado, irei gastar muito pouco. Pelo fato dos emuladores atuais serem pesados o investimento é alto, o dono só pensa no retorno investido, vende itens, todo mundo fica full no mesmo dia, depois de 1 mês perde a graça. A maioria não funciona a Quest Nobless, ai só comprar no site ou matar o Barakiel. Eu já quis modificar um emulador para ficar um jogo solo, para rodar e jogar na própria máquina offline (tipo Dragon Quest, Final Fantasy) por não encontrar servidores bacanas. Só lembrando que Dota surgiu como mod de Warcraft (fãs do Warcraft achando que faltava algo) e LoL como mod de Dota (fãs do Dota achando que faltava algo). Hoje são um dos os jogos mais rentáveis para os donos e jogadores. Eles sentiram uma dor, fizeram uma solução para aquela dor e somente depois criaram o jogo e pensaram na rentabilidade. Pensar no inverso é muito provável que não dê certo.
  4. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Tenho interesse sim. O projeto é esse do GitHub? https://github.com/L2jBrasil/Server-Interlude/ já gostei do que vi (issues e commits).
  5. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    É um projeto, não um repositório (é tipo kanban) rsrs ainda não criei os repositórios porquê, como eu disse, ainda há o que debater antes de começar a por a mão na massa. Inclusive, eu estava olhando, tem o projeto https://github.com/L2jBrasil/Server-Interlude/. Dependendo de como ele estiver, vou olhar melhor, é mais viável ajudá-lo do que limpar o frozen. É muito parecido com o frozen em alguns aspectos e tem gente trabalhando nele (e precisando de ajuda). @Tayran.JavaDev sabe nos dizer como está esse projeto? É só otimização ou está incompleto? Eu havia olhado o L2jServer, mas o Interlude está parado e incompleto.
  6. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Hoje cedo fiz uns testes (fora do projeto) com ArrayList, HashSet, HashMap e as classes do javolution FastMap e FastList. Sendo que destas citadas somente a HashMap e FastMap (javolution) trabalham com índices não sequenciais. Já a ArrayList, HashSet e FastList (javolution) trabalham apenas com índices sequenciais. Rapaz, a diferença foi gritante. Os testes foram o seguinte, percorrer de 3 à 199.999 (200 mil), preencher uma lista com uma instância de um objeto. O objeto possuía 2 propriedades: id e name. A id era o índice a name era " Texto do exemplo A "+ i ou "B" no outro exemplo. Depois percorria novamente essa lista e coloca o objeto em uma variável utilizando o .get(id). -------------------------------- | HashMap | 0,062 segundos | | FastMap | 0,094 segundos | |--------------------------------| | HashMap | 0,067 segundos | | FastMap | 0,098 segundos | |--------------------------------| | HashMap | 0,043 segundos | | FastMap | 0,062 segundos | |--------------------------------| | HashMap | 0,017 segundos | | FastMap | 0,025 segundos | |--------------------------------| | HashMap | 0,052 segundos | | FastMap | 0,061 segundos | |--------------------------------| | HashMap | 0,019 segundos | | FastMap | 0,056 segundos | |--------------------------------| | HashMap | 0,036 segundos | | FastMap | 0,085 segundos | |--------------------------------| | HashMap | 0,017 segundos | | FastMap | 0,042 segundos | |--------------------------------| | HashMap | 0,017 segundos | | FastMap | 0,040 segundos | |--------------------------------| | HashMap | 0,017 segundos | | FastMap | 0,044 segundos | -------------------------------- Repeti o teste várias vezes, claro. O resultado foi esse ai, onde o HashMap (nativo o do java) é muito mais rápido. Depois refiz os testes, só que dessa vez com classes sequenciais e percorrendo de 0 à 19.999 (20 mil). Esse me surpreendeu mais, tanto que repeti várias vezes: -------------------------------- | ArrayList | 0,015 segundos | | HashSet | 0,015 segundos | | FastList | 1,325 segundos | |--------------------------------| | ArrayList | 0,002 segundos | | HashSet | 0,016 segundos | | FastList | 1,275 segundos | |--------------------------------| | ArrayList | 0,002 segundos | | HashSet | 0,000 segundos | | FastList | 0,686 segundos | |--------------------------------| | ArrayList | 0,002 segundos | | HashSet | 0,005 segundos | | FastList | 0,607 segundos | |--------------------------------| | ArrayList | 0,002 segundos | | HashSet | 0,000 segundos | | FastList | 0,622 segundos | |--------------------------------| | ArrayList | 0,001 segundos | | HashSet | 0,003 segundos | | FastList | 0,597 segundos | |--------------------------------| | ArrayList | 0,000 segundos | | HashSet | 0,000 segundos | | FastList | 0,621 segundos | |--------------------------------| | ArrayList | 0,000 segundos | | HashSet | 0,000 segundos | | FastList | 0,625 segundos | |--------------------------------| | ArrayList | 0,000 segundos | | HashSet | 0,001 segundos | | FastList | 0,612 segundos | |--------------------------------| | ArrayList | 0,001 segundos | | HashSet | 0,004 segundos | | FastList | 0,595 segundos | -------------------------------- Com certeza isso é uma das primeiras coisas que trabalharemos. Mas, será feito por partes. Quando necessário buscar um item pelo Id e ele não for sequencial, utilizar a HashMap. Mas quando for apenas listar (sem busca posterior pelo), utilizar o ArrayList ou HashSet. Detalhe que o HashSet não tem .get(), então nos testes usei um foreach para cada vez que eu percorria (20 mil). Os testes foram feito em um computador Intel i7-4800MQ, 2.7GHx, 16GiB de RAM, Windows 10 x64, utilizando a versão 5.5.1 do Javolution (que vem no Frozen) e JDK 8u144.
  7. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Acabei de criar um time no GitHub e um projeto. Primeira iremos trabalhar nas ideias (o que será feito, como será feito, qual a prioridade e por quem será feito). O projeto tem as seguintes colunas: Planejamento: aqui serão sugestões, debate e definições. A Fazer: depois de definido o que fazer vem para essa coluna, onde ficará na fila até alguém "pegar" Fazendo: ao pegar e enquanto estiver fazendo, vai estar aqui Feito: quando estiver finalizado Essas 4 colunas são mínimas, mas pode ter mais, mas vai depender da quantidade de pessoas envolvidas. Tipo, uma coluna onde tu que for feito é revisado por outra pessoa. O tempo de dedicação ao projeto vai de cada um, pode ser uma vez por semana, uma vez por mês ou até mesmo uma contribuição única. Só não é bom pegar algo para fazer e enrolar. Se não tiver tempo, pode "voltar" o cartão e comunicar a galera. Iremos abrir um canal de comunicação (Slack ou Gitter), assim não ficamos floodando o fórum aqui. Por enquanto não é flood porque está havendo debates e divulgação, para mais pessoas possam ajudar. Mesmo que a pessoa não participe diretamente no código, vai poder participar desse canal, a opinião da comunidade é importante. https://github.com/orgs/l2dife/projects/1
  8. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    A idéia é pensar também em quem quer ajudar o projeto, não somente usá-lo. O código organizado facilita a manutenção. Toda IDE indenda, mas não faz isso sozinho, alguém tem que fazer. Eu mesmo criei um script que faz isso e mais, com menos de 50 linhas. E toda IDE tem o Ctrl F para procurar dentro das configs. É ai que entra a ajuda colaborativa. Um faz 10%, outro faz 20% e por ai vai. Só definir bem os padrões (e documentá-los). Eu mesmo não pretendo trabalhar em 100% do projeto, acho quenem consigo. As vezes esbarro em algo que tenho que pesquisar muito, mas isso que me dá tesão, algo novo, algo desafiador. Valeu. Eu havia trabalhado o ano passado em várias correções e melhorias de um projeto L2j ai. É código fechado, mesmo sem ter acesso ao código eu fiz instalador, corrigi informações no sql, criei site php e diversos NPCs. Mas os administradores do fórum do projeto moveram meus tópicos com os códigos/downloads para a area VIP (somente para pagos). Desanimei com o mercenarismo. Ai depois fui atrás de outros projetos (livres) e até agora o miozim é frozen. Mas estou aberto à sugestões. Mas apesar de trabalhar no frozen, irei postar muita coisa genérica de L2 e que, as vezes, vai servir para outras coisas (como o QueryBuilder).
  9. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Inicialmente a ideia é organizar o L2jFrozen e limpá-lo, deixando somente com o Interlude, sem mods. Ai criar algum mecanismo de adicionar mods facilmente (ao código-fonte antes de compilar). Estava até dando uma olhada no O Frozen vem até com NPC de GMShop dentro dele. Totalmente desnecessário, pois uma das coisas mais fácil é criar um NPC Multisell, usando apenas HTML e XML. No futuro iremos criar eventos (mas não no core do projeto), NPCs, iremos criar um configurador, painel de administração, site... mas tudo a parte. Excelente. Mas primeiro a remoção e organização dos configs. Porque não adianta criar uma interface, pois irá mudar. Atualmente a gente abre um config, vai vendo, ai dentro dele muda o assunto do config. Abre outro arquivo e tem relacionado. Por exemplo: O arquivo gameserver/config/frozen/frozen.properties tem config permissão de GM e o arquivo gameserver/config/functions/access.properties também.
  10. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Opa, toda ajuda será bem-vinda. Mas não necessariamente precisa saber de Java. Se souber bem lógica de programação, independe da linguagem, vai ser fácil, ainda mais para você que já trabalha com C#. Também tem partes em Python (quests), XML, HTML, SQL, Shell, Batch e até CSV no data pack. Coisas como organizar o código HTML (indentação, quebra de linha), padronização dos nomes dos arquivos, das pastas (nesses casos tem que atualizar no código, mas é muito fácil, é mais reconhecimento de onde encontrar). Por enquanto estou analisando o código, vendo que terá que ser retirado, fazendo algumas anotações, testes e tal. Uma coisa que estava analisando são as consultas ao banco de dados. É muito código para fazer uma coisa simples, e, quando não dá certo, tem que gerar log disso verificando a configuração ENABLE_ALL_EXCEPTIONS, mas em alguns lugares não é verificado ou não gera log. Então estou criando uma classe para facilitar isso. Ao invés de fazer assim: public class Post { public void insertindb(final CPost cp) { Connection con = null; try { con = L2DatabaseFactory.getInstance().getConnection(false); PreparedStatement statement = con.prepareStatement("INSERT INTO posts (post_id,post_owner_name,post_ownerid,post_date,post_topic_id,post_forum_id,post_txt) values (?,?,?,?,?,?,?)"); statement.setInt(1, cp.postId); statement.setString(2, cp.postOwner); statement.setInt(3, cp.postOwnerId); statement.setLong(4, cp.postDate); statement.setInt(5, cp.postTopicId); statement.setInt(6, cp.postForumId); statement.setString(7, cp.postTxt); statement.execute(); DatabaseUtils.close(statement); statement = null; } catch (final Exception e) { if (Config.ENABLE_ALL_EXCEPTIONS) e.printStackTrace(); LOGGER.warn("error while saving new Post to db " + e); } finally { CloseUtil.close(con); } } } Faria somente assim: public class Post { public boolean save() { return QueryBuilder.insert("post") .columns("id", "topic_id", "owner_id", "owner_name", "date", "text") .execute(this.id, this.topic_id, this.owner_id, this.owner_name, this.date, this.text); } } Para excluir: public class Post { public boolean delete() { return QueryBuilder.delete("post").whereSafe("id").execute(this.id); } } Eu já criei essa classe (fora do projeto por enquanto), está funcionando perfeitamente, mas estou testando o desempenho. Por baixo está o JDBC. Logo postarei o source aqui. Mas como disse, ainda estou estudado técnica e metologias para utilizarmos. Estou pensando em utilizar o Trello e criar cartões para debater coisas que serão alteradas/removidas e controlar as tarefas.
  11. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Boa pergunta. Inicialmente seria interessante trabalhar apenas com testes de unidade, depois de pronto, poderia trabalhar numa ferramenta para fazer teste de carga e estresse. Na hora de compilar o código é testado apenas a sintaxe, ou seja, se a estrutura Java está correta. Já o teste de unidade é para analisar a lógica está correta. O teste de carga e estresse é para testar o volume de dados e os acessos simultâneos. Nesse aqui poderia fazer ferramentas que populam a base de dados (até arquivo .sql mesmo) e criar uma ferramenta que simula acessos (com uma config para habilitar desabilitar) enviando e recebendo informações Opcode. Com isso é possível verificar o quanto o servidor suporta com determinada configuração. Mas, como disse, isso seria numa segunda etapa. No teste de unidade, que seria feito primeiro, consiste basicamente em criar (programar em Java) testes, na qual as classes e métodos do servidor são testadas. Você cria a instância da classe, chama o método passando parâmetros e analista o retorno. Por exemplo, você tem a seguinte classe: public class Player implements ICharacter { private double hp = 1000; public boolean doAttack(ICharacter target) { if (target == null) { return false; } if (target.isDead()) { return false; } // do attack } public void doKill() { this.hp = 0; } public boolean isDead() { return this.hp == 0; } } Então você tem que testá-la. Para isso você cria outra classe (vai estar no projeto, mas em diretório específico para isso): public class PlayerTest { @Test public void whenTargetIsValid() throws Exception { Player player = new Player(); Player target = new Player(); boolean attacked = player.doAttack(target); assertEquals(true, attacked); } @Test public void whenTargetIsNullThenReturnFalse() throws Exception { Player player = new Player(); Player target = null; boolean attacked = player.doAttack(target); assertEquals(false, attacked); } @Test public void whenTarhetIsDeadThenReturnFalse() throws Exception { Player player = new Player(); Player target = new Player(); target.doKill(); boolean attacked = player.doAttack(target); assertEquals(false, attacked); } } No exemplo acima eu verifico se a lógica do método doAttack() está agindo de acordo com o esperado. Assim, qualquer alteração que eu fizer, adicionar um módulo, esses testes já vão estar implementados, então eu apenas executo e vejo se ainda comporta como esperado. Mas esse teste acima é do game server. Poria testar também o data pack, por exemplo os arquivos HTML dos NPCs, na qual poderia percorrer todos e verificar se a sintaxe está correta (já que não compila) e compactado (removendo espaços, quebra de linha e etc, não ultrapassa o limite. Verificar os XMLs também. Esses testes são até mais fáceis do que os de unidade, que são muitos.
  12. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Entendi, mas é estranho ser GPLv3 (software livre/opensource) e venderem. Teoricamente GPLv3 teria um repositório com o código. Freemium é software proprietário que você libera o compilado gratuito e cobra por módulos adicionais. O L2jServer é código aberto: https://bitbucket.org/l2jserver/ Cara, gostei muito do seu trabalho. É mais ou menos disso que estou falando, só que mais alem. Uma das coisas principais é ir para uma plataforma de gerenciamento de código melhor, como Git (GitHub, GitLab ou Bitbucket), assim seria mais fácil reportar bugs, é mais fácil de acompanhar as alterações, branchs, merge e etc. Seria mais fácil integrar com outras ferramentas, como Slack, HipChat, Jira e/ou Trello, ferramenta de testes automatizados, como Travis. Mas está fantástico o projeto. Irei acompanhá-lo enquanto vou pensando mais sobre esse projeto.
  13. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Vi muitos tópicos perguntando qual a melhor rev, nenhum deles havia uma resposta concreta, por isso de criar esse projeto. Em muitos citavam o aCis, mas no fórum deles não é claro e não o repositório oficial (pelo menos não encontrei). O único que encontrei (SVN) está na revisão 6, sendo que no fórum diz estar na revisão 374. O link do repositório que encontrei: https://xp-dev.com/svn/aCis_public/ Ainda encontrei esse, mas está fora do ar (erro 404): https://xp-dev.com/svn/aCis_community/ Saberia me dizer qual o repositório oficial e sob qual licença está?
  14. vaneves

    Otimizar o L2jFrozen criando um novo projeto

    Senhores, bom dia, estou começando a otimizar o L2jFrozen, melhorando o código e deixando-o mais organizado. Há muitos projetos L2j, mas a maioria deles são a junção de vários módulos feitos por pessoas distintas, módulos muito bons, mas a maioria das vezes sem código otimizado ou padronizado. Sou formado em Sistemas de Informação há 5 anos, trabalho com desenvolvimento há mais 15 anos, trabalho principalmente com desenvolvimento web, com PHP, MySQL/PostgreSQL, Laravel, Angular... mas trabalho muito bem com Java, C#, Python, SQL Server e gosto de brincar com NodeJS e MongoDB. Dentro do desenvolvimento gosto de trabalhar com as melhores práticas, de acordo com o definido pela comunidade da linguagem. Desafios Gostaria de convidar, quem tiver interesse e conhecimento, para criarmos um projeto bem organizado de L2j Interlude, tendo como base o L2jFrozen (aberto a sugestões de outro projeto). Como exemplo de coisas a serem feitas, seriam: 1) Revisar as estruturas da tabelas do banco de dados, melhorando a nomenclatura das tabelas e colunas, deixando-as padronizadas. Por exemplo, a tabela characters está no plural, enquanto a castle está no singular. Dentro da tabela characters temos as colunas char_name, maxHp e pvpkills, poderiam seguir um padrão de name, max_hp e pvp_kills (padrão snake case). 2) Revisão, organização e otimização dos códigos Java. 3) Revisão, organização e otimização das Quests, até mesmo a criação de Quests novas. 4) Revisão, organização e otimização dos HTMLs. Por exemplo, todo HTML que vejo é sem indentação, sem aspas nas propriedades. Isso não é nem de longe uma boa prática. Sei que o HTML deve ter um limite de caracteres, mas no Java a gente remove comentários, espaços duplos, quebra de linha e até aspas. 5) Criação de testes automatizados. 6) Revisão e otimização das consultas SQL e a utilização de ferramentas como Memcached (opcional) para otimizar as buscas ao banco de dados. 7) Ao final, criação de um painel de administração e site. Vantagens Por que fazer isso? Você deve está se perguntando. 1) Mais segurança: o código organizado é mais fácil de entender a lógica e ver se ela está correta ou não. Sem falar dos testes automatizados. 2) Facilidade de alteração/contribuição: se é mais fácil de entender, é mais fácil de contribuir. 3) Mais leve, que roda mais player: se é mais leve, roda mais players simultaneamente. 4) Experiência: a experiência de passar por um desafio desses é demais, força você a aprender mais, buscar seu melhor. Sem falar que pode estar ajudando o futuro melhor emulador de L2 Interlude da história. 6) Teste em um servidor real: ao final colocaremos o projeto em teste real, com servidor para milhares de players e com muita diversão. 7) Venda de pacote: já compilado, com instalador, com site, painel de administração, manual, suporte e etc. A proposta está aceita, quem tiver interesse, comentar descrevendo suas habilidades, deixando o link para o seu GitHub. Deixo aqui o link do meu GitHub, para analisarem projetos que já criei e contribui: https://github.com/vaneves/
  • Atualizações Recentes de Status

    • n1LS0nxD

      Boa noite galera algum servidor novo ai 100x? avisa ai galera qualquer coisa. ☺️
      · 0 respostas
    • mirirlaynegata  »  *-*InSaNo*-*

      BOA  NOITE VC NAO TEM NEM UM SERVIDOR INTERLUDE  PERDIDO AI QUE DER PRA POR ONLINE E EDITA  
       
      · 1 resposta
    • WendersonTSantos  »  tuningxtreme

      Salve.
      Cara seria possível enviar a system da rev no link : 
      ?
      · 0 respostas
    • Grundor

      Durante a era Lula, principalmente por conta da ascensão da China, o preço das commodities (petróleo, soja, minério, etc) cresceu mais de 700%.

      Com a inflação finalmente sob controle, o Brasil tinha a oportunidade de abandonar de vez o terceiro mundo. Mas não foi isso que aconteceu. Naquele período, nós crescemos menos que América Latina, menos que os países em desenvolvimento, menos que o mundo.

      Enriquecemos empreiteiras, acumulamos dívidas e colecionamos maus investimentos. Bombas implantadas por Lula que estouraram no governo Dilma. O molusco liderou os dois maiores esquemas de corrupção de que se há notícia: primeiro o mensalão, depois o Petrolão.

      Já são 5 anos de crise. Os próximos podem ser ainda piores. Diga não aos amigos do Lula. Haddad, Ciro e Boulos, jamais.

      #NOVO30
      · 0 respostas
×