Ir para conteúdo
  • Cadastre-se

vaneves

Membro
  • Total de itens

    17
  • Registro em

  • Última visita

  • Prêmios recebidos

    2

vaneves last won the day on Outubro 18

vaneves had the most liked content!

Reputação

13 Normal

Sobre vaneves

  • Rank
    ForeverAlone
  • Data de Nascimento 17-02-1989

Profile Information

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

Contact Methods

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

Últimos Visitantes

163 visualizações
  1. Obrigado. Estamos aqui para contribuir.
  2. No Lineage II Classic a maior parte do XP é matando mobs. Então vou ensinar um macete de como ganhar mais XP. Você vai matar os mesmos mobs que você já mata e vai utilizar as mesmas skills que você já utiliza. Você vai apenas inverter a ordem de ataque. Normalmente começamos o ataque com uma skill mais forte e continuamos atacando com skills mais fracas ou ataque normal (sem skills). Por exemplo, você usa uma skill que tira 60% do HP e depois usa mais duas skills que tiram uns 20% cada. Mas se fizer o contrário, usar as duas de 20% e finalizar com a 60%, você vai matar o mob com OverHit, dessa forma você vai ganhar mais XP. O ataque foi o mesmo, só mudou a ordem. Fiz um vídeo para demonstrar isso: Eu chego a ganhar 50% a mais de XP. Matando 500 mobs, é como se eu tivesse matado 750.
  3. Galera, bom dia, estava participando do Discord do ImperialKnight (muito bom e super recomendo), mas o Discord deles é voltado para membros do clan. Eu, particularmente, não quero e nem posso participar de coisas fixas, com horários para entrar no jogo e tal. Então criei um Discord mais livre, sem definição de clan e, praticamente, sem regras. As vezes você está com uma dúvida de uma quest, quer montar uma party temporária e etc. https://discord.gg/qtV2WJ2 Regras: 🚫 PROIBIDO ofender outros membros; 🚫 NÃO USE palavrões; 🚫 NÃO mande spam; ✅ Não temos clan, fique a vontade criar e convidar pessoas aqui, inclusive convidar para outros canais de TS e Discord; ✅ Não precisa ficar online constantemente, jogue e entre no Discord quando quiser; Tem salas para os servidores Talking Islande, Giran e Aden, mas não fique preso à sala do servidor que estiver jogando.
  4. A mão do up chega a tremer!
  5. 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
  6. 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).
  7. 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.
  8. 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).
  9. 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.
  10. 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.
  11. 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
  12. 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).
  13. 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.
  14. 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.
  15. 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.
×