Ir para conteúdo
  • Cadastre-se

Projetos ao longo dos anos


WilliamFS

Posts recomendados

Não sei se esse tópico vai ter respostas, mas de qualquer forma, essa é uma dúvida tenho já a alguns anos e nunca me atrevi a pesquisar no google ou tentar entender melhor porque provavelmente não encontraria uma resposta definitiva, sendo assim gostaria de ouvir o pensamento de vocês sobre isso.

Veja bem, eu não sou programador, me registrei nesse fórum a mais de 10 anos e nunca tive interesse no server side, recentemente tive vontade de aprender mas deixei pra lá, sequer vi uma aula de java. Então é uma pergunta de um leigo no assunto.

Vou tentar não citar diretamente projetos porque o objetivo não é alfinetar ou que isso vire "uma coisa", mas a pergunta é:

Não acaba nunca?

Temos projetos High Five com desenvolvedores competentes, agora esses projetos tem uns 7 anos, eu não tenho noção de dimensão (e sei que isso é culpa minha), mas um emulador High Five é tão vasto assim? 

Recentemente me deparei com uma situação que aparentemente não tem nada demais, é normal o desenvolvedor atualizar um método e quebrar outras coisas, mas estava usando uma revisão de um certo projeto, tudo funcionando, daí eles atualizaram e nem as hair potions funcionavam mais. Novamente, estou aqui porque sou leigo no assunto, quero ouvir o pensamento de vocês.

Citei High Five, mas isso se aplica a qualquer projeto, temos projetos Interlude em que o desenvolvedor já refez tudo umas 3 vezes, esse deve ter uns 9 anos de desenvolvimento ativo.

Todos os projetos, que estou tentando não citar, têm seus desenvolvimentos ativos, principalmente o High Five. 

Essa dúvida começou a falar mais alto na minha cabeça quando um um certo projeto C4 começou a ficar interessante em pouco tempo, não levou anos, hoje esse projeto não está tão ativo, mas nos 2 primeiros anos ele já era uma base interessante para se trabalhar em cima e melhorar.

A essa altura, vocês já entenderam o que quero perguntar certo?

Eu sei que donos de projetos podem responder esse tópico e me explicar melhor isso, e sei que pode haver pessoas mais diretas, se houverem respostas, estou contando com esses dois tipos..

 

 

Link para o comentário
Compartilhar em outros sites


Quando se trata de um projeto tão grande como um emulador de um jogo tão grande como Lineage II, dificilmente irá se chegar a um momento em que poderíamos dizer que não tem mais nada a fazer.

Veja, a maioria dos projetos é um trabalho basicamente de um homem só. Os mantenedores fazem seu trabalho basicamente sozinho, com algumas poucas pessoas fazendo contribuições esporádicas de código, e a outra parte sendo reporte de bugs. E por mais que ele se esforce muito para resolver esses problemas, o ritmo em que eles surgem é muito maior do que uma única pessoa é capaz de resolver.

A NCSoft deve ter uma equipe gigante de programadores trabalhando nesses projetos, e mesmo assim tenho quase certeza que nem ela mesmo acredita que seu jogo está pronto.
E quando há mudança de uma versão/capítulo para outro, não é porque o atual está finalizado, é porque a pressão por lucro dentro de estúdios de jogos é muito grande, então eles precisam ficar continuar lançando novas versões.

Você provavelmente já viu que dentro do Interlude há coisas que estão dentro do cliente mas não são utilizadas, e isso provavelmente é parte dessa corrida por parte dos diretores da empresa de querer acumular lançamentos, mesmo que não estejam maduros o suficiente. Mas por mais que essa possa ser uma imagem ruim deles, esse comportamento se explica porque se você for consultar os desenvolvedores sobre o momento em que o jogo pode ser lançado, eles vão informar prazos muito longos porque sabem que ainda há muito o que se fazer. Então essa quebra de braço no final é bastante importante para encontrar um meio termo.

E um outro ponto importante de projetos pessoais, como são os servidores de Lineage, é que trabalhar num projeto tão grande assim é muito cansativo. Haverá momentos em que o individuo irá se afastar por um tempo, passar a trabalhar somente em partes menos complicadas do código, apenas manter o funcionamento, atualizar dependências ou até desistir de vez.

A parte financeira com certeza não poderia deixar de ser citada aqui também. Em projetos de código aberto isso sempre acaba sendo um problema em algum momento.
Como é necessário muito tempo para manter um jogo desse tamanho, então somente o tempo livre de uma pessoa pode não ser suficiente, então é exigido dele um pouco mais do que isso.
Dentre as revs principais atualmente, me parece que nenhuma tem algum desenvolvedor trabalhando exclusivamente nela. O que acontece é que eles conseguem obter algum lucro a partir do que ele cobra para as pessoas terem acesso ao projeto, então surge uma renda a partir disso. Mas ainda assim, esse valor provavelmente é bem menos do que o equivalente ao trabalho.

Meu último ponto pra quem ainda tá lendo até aqui, é que a falta de colaboração fragmentou a comunidade. Já cheguei a ser mais crítico nessa parte, mas a maioria das pessoas que eu vi em fóruns tem problemas sérios de convivência com outras pessoas. Elas não conseguem manter uma conversa com o mínimo de respeito a outra pessoa, demonstram uma falta muito grande maturidade e são pouco acolhedoras para novos contribuidores.
Por causa disso as pessoas decidem se afastar completamente desse "mundo" ou começam seu próprio projeto.

Não posso encerrar esse longo texto sem deixar de lembrar da diferença entre o retail e os servidores modificados. No retail podemos algum dia chegar bem perto, já que o objetivo é claro; mas nesse outro caso, não. Cada um tem sua ideia do que gostaria de ter de diferente no seu projeto, então por mais que alguém faça uma super rev cheia de mods, ainda haverá alguém que não se sentirá completo com aquilo. Eu tenho um projeto pessoal que no momento mantenho apenas para mim, mas mesmo que ele esteja com as coisas que eu planejei funcionando, ainda vejo espaço para melhorar elas. Um exemplo disso é que recentemente eu refiz todo o sistema VIP, e isso não mudou nada dentro do jogo, mas tornou o código muito mais fácil de ser mantido e estendido, mas alguma outra pessoa pode ver o que eu fiz e dizer que eu deveria ter dedicado meus esforços em algo que não tá pronto, ao invés de tentar melhorar algo que tá funcionando.

Enfim, mesmo que todos esses problemas que eu citei não existissem, provavelmente não estaríamos dizendo aqui que o projeto X tá pronto, mas poderíamos estar utilizando ele dizendo que está muito bom mesmo.

Link para o comentário
Compartilhar em outros sites

@coldplay Entendo que existem muitas circunstâncias atenuantes, mas existem projetos que possuem contribuidores ativos muito experientes, minha pergunta foi: qual a chance dos desenvolvedores estarem propositalmente evitando "comitar" coisas definitivas?

Link para o comentário
Compartilhar em outros sites

2 horas atrás, WilliamFS disse:

@coldplay Entendo que existem muitas circunstâncias atenuantes, mas existem projetos que possuem contribuidores ativos muito experientes, minha pergunta foi: qual a chance dos desenvolvedores estarem propositalmente evitando "comitar" coisas definitivas?

isso e o que mais tem por anos que venho acompanhando, sua luta e no Hing Five a minha e no Interlude. e sim posso dizer que tudo que realmente acontece e uma organização de class e mudança de nome de class, ou ate mesmo pegar um class com 1500 linhas e quebrar o codigo em 3 novas class dando mais trabalho e mais coisas erradas futuramente se voce ver a primeira l2jserver que saiu voce ve que sao bem poucos arquivos pra fazer todo o jogo funcionar

Link para o comentário
Compartilhar em outros sites

3 horas atrás, BAN - L2JDev disse:

isso e o que mais tem por anos que venho acompanhando, sua luta e no Hing Five a minha e no Interlude. e sim posso dizer que tudo que realmente acontece e uma organização de class e mudança de nome de class, ou ate mesmo pegar um class com 1500 linhas e quebrar o codigo em 3 novas class dando mais trabalho e mais coisas erradas futuramente se voce ver a primeira l2jserver que saiu voce ve que sao bem poucos arquivos pra fazer todo o jogo funcionar

É isso que eu sentia mas não sabia dizer, eu não sou programador, mas a essa altura seria muito estranho acreditar que projetos ativos, com desenvolvimento de aproximadamente 7 anos continuam tão quebrados... então realmente tem esse tipo de manobra..

Outra coisa que não faz sentido algum para mim: quando vaza um projeto privado, o dono vem babando desmerecer os arquivos, dizer que estão incompletos e bugados, wtf??? "São os arquivos que você vendeu!!!!!"

Então essa é outra coisa que vejo, o cara vende acesso à uma rev interlude, mas é um produto incompleto que nunca acaba, que nunca fica pronto, ele tornou isso uma fonte de renda com tempo indefinido, quando ele percebe que os colaboradores estão questionando demais ele vai lá e refaz tudo, tem um projeto aí q já passou por umas 2 ou 3 reestruturações quando deveria estar recebendo correções, é como começar de novo.

Novamente: esse é o pensamento de alguém que não entende de códigos, convido vocês para me mostrar uma ótica diferente..

Link para o comentário
Compartilhar em outros sites

2 horas atrás, WilliamFS disse:

É isso que eu sentia mas não sabia dizer, eu não sou programador, mas a essa altura seria muito estranho acreditar que projetos ativos, com desenvolvimento de aproximadamente 7 anos continuam tão quebrados... então realmente tem esse tipo de manobra..

Outra coisa que não faz sentido algum para mim: quando vaza um projeto privado, o dono vem babando desmerecer os arquivos, dizer que estão incompletos e bugados, wtf??? "São os arquivos que você vendeu!!!!!"

Então essa é outra coisa que vejo, o cara vende acesso à uma rev interlude, mas é um produto incompleto que nunca acaba, que nunca fica pronto, ele tornou isso uma fonte de renda com tempo indefinido, quando ele percebe que os colaboradores estão questionando demais ele vai lá e refaz tudo, tem um projeto aí q já passou por umas 2 ou 3 reestruturações quando deveria estar recebendo correções, é como começar de novo.

Novamente: esse é o pensamento de alguém que não entende de códigos, convido vocês para me mostrar uma ótica diferente..

aqui pra te ter uma ideia

vamos no mais novo que a galerinha aqui gosta de usar
vamos ver a formula de hit em damage voce pode verificar aqui a versao da RusaCis
https://pastebin.com/faXt2KVS

Agora vou te mostrar de um aCis 350

agora compare com antigamente quando seguia padrao jserver

https://pastebin.com/svq3M6yn
Agora vamos mais longe ainda
vou te mostrar de uma aCis 243
https://pastebin.com/8agsi30D

fica claro que quanto mais vai atualizando mais vai removendo partes de cálculos para hits
fazendo assim o equilíbrio muito estranho ai voce compara todos os xml e são tudo o mesmo nada modificado, sistema de raid boss da acis por exemplo nunca teve um scripts se quer recriado e apenas o mesmo padrao que fica mudando formato de chamada de skill diferente mais todas elas apos o primeiro boss ser morto vem os problemas de spawn time boss nao nace e por ai vai.
e sim eles desmerece o próprio pacote dizendo que nao presta e ta bugado pelo simples fato pra quem não tem achar que quando comprar vai pegar corrigido e ta longe disso

e sim isso e valido 
tornou isso uma fonte de renda com tempo indefinido.

so eu sei como foi dificil escrever a mão todos raid boss e recriar todos os 188 bosses de mapa alem de refazer todos os scripts para epic bosses 
fica ai a dica aCis so funciona pra quem ta disposto a recriar todo o core mais pra isso precisa de conhecimento alto em java coisa que muito não tem 

quero dizer voce da um diff para um leigo ele ainda não sabe o que fazer não entende "Logica de programação", não intende "algoritmo" muito menos "orientação a objeto" 
fazendo assim mesmo que voce poste tudo completo eles não vao saber como usar e os que consegue ainda não entende porque que cada coisa vai nos lugares que estão no diff

fica ai meu fedback

 

Link para o comentário
Compartilhar em outros sites

13 horas atrás, WilliamFS disse:

@coldplay Entendo que existem muitas circunstâncias atenuantes, mas existem projetos que possuem contribuidores ativos muito experientes, minha pergunta foi: qual a chance dos desenvolvedores estarem propositalmente evitando "comitar" coisas definitivas?

Sinceramente, acho que são bastante pequenas a chance disso.

11 horas atrás, BAN - L2JDev disse:

ou ate mesmo pegar um class com 1500 linhas e quebrar o codigo em 3 novas class

Refatoração.

4 horas atrás, BAN - L2JDev disse:

vamos ver a formula de hit em damage voce pode verificar aqui a versao da RusaCis

A formula de cálculo do damage da aCis foi refeita não faz muito tempo para seguir o padrão do l2off. A intenção não foi refazer por refazer, mas sim porque o mantenedor tem essa intenção de seguir o padrão retail. Eu acho um exagero o que ele faz em alguns momentos, querendo copiar até os bugs que existiam no original, mas o projeto é praticamente aberto então temos a liberdade de corrigir conforme nossa vontade.

5 horas atrás, BAN - L2JDev disse:

tornou isso uma fonte de renda com tempo indefinido.

Qual o problema em cobrar por seu trabalho? Você mesmo vende uma rev e ganha dinheiro com isso, por que os outros não podem?

Link para o comentário
Compartilhar em outros sites

3 horas atrás, coldplay disse:

Qual o problema em cobrar por seu trabalho? Você mesmo vende uma rev e ganha dinheiro com isso, por que os outros não podem?

Problema não  é esse mano, problema em si, que desenvolvedor da aCis enreda de mais, ele refaz algo que ele mesmo fez, ele quebra métodos que ele mesmo cria uma ou duas versões anteriores da atual, e quando posta uma nova commits, cara muda formula, jeito da class de algo que ele ja tinha feito, não lembro quantas veses ele já  troco o sistema de spawn dessa aCis.

E Pior de tudo, que ele ta demorando muito pra mandar novas atualizações, da 405 a 406 foram data totalmente distante, a 405 foi 8 Dezembro de 2021 e a 406 foi 27 de Agosto 2022.

Ai se você ta com servidor ativo, encontra problemas graves, ate resolver já se passou 6 a 9 meses, e seu servidor vai por buraco, quando sai uma nova atualização eu testo, e incrível que apareça, aparece novos problemas.

Quem não entende de programação, e e ta com servidor ativo, pode da tchauzinho, eu encontrei tanto problema na 405 que larguei de mão, e fora que tem risco dele mudar uma class por completo, eai se você tem mod aplicado na aquela class determinada, vai te que deletar ele e adicionar em locais diferente, já faz tempo que não mexo na 405 mas aqui ta um dos problemas que me lembrei recentemente kkk,  o pickup do personagem aumenta velocidade conforme vai pegando quantidade de items no chão.

Acabei trabalhando numa versão um pouco mais antiga mas que não vai da problema de skill,class,siege etc,  o básico para um servidor mid pvp ou full pvp.

Problema real, é tempo que ta levando para atualização, e ninguém quer esperar 20 anos pra usar algo, e a maioria vai usar mid pvp ou full pvp mesmo, mas pra retail falta muitas correções

Editado por Sarada
Link para o comentário
Compartilhar em outros sites

Eu queria saber quais as melhores revs pra abrir um server Interlude hoje e conseguir dar manutenção. Também sou DEV, peguei agora pra brincar com a Acis que a Sarada comentou, ainda não testei muita coisa, to mais configurando o servidor como forma de aprendizado no momento e fazendo algumas pequenas alterações no código, como icones no schema buffer, coisas bestas... A questão é: Não sei até onde vale a pena eu investir meu tempo nisso, se é uma rev que presta ( pelo comentario parece que não kkkkkk). Mas enfim, existe algum concenso sobre qual projeto está performando bem? Acho que uma ideia boa pra dev seria pegar uma rev que hoje ta boa, pagar pelo source e ir tocando o barco conforme a necessidade, caso não queira pagar por suporte do produtor.

Acho que algumas correções eles devem segurar sim mano, como a maioria que abre um server não é dev, imagino que os fornecedores ficam postergando algumas correções, eu vejo mesmo que nunca tem fim e quando vai ficando bom a galera parece que muda de projeto (de Interlude pra H5, por exemplo) e descontinua o suporte. Aí é complicado...
Deve ter alguma logica por trás disso tudo, mas só quem distribui que pode (ou não) explicar pra nós a razão de ficar refazendo o mesmo trabalho 10x ao invés de seguir com as correções.

Vesper - Lineager

Link para o comentário
Compartilhar em outros sites

6 horas atrás, Sarada disse:

Problema não  é esse mano, problema em si, que desenvolvedor da aCis enreda de mais, ele refaz algo que ele mesmo fez, ele quebra métodos que ele mesmo cria uma ou duas versões anteriores da atual, e quando posta uma nova commits, cara muda formula, jeito da class de algo que ele ja tinha feito, não lembro quantas veses ele já  troco o sistema de spawn dessa aCis.

E Pior de tudo, que ele ta demorando muito pra mandar novas atualizações, da 405 a 406 foram data totalmente distante, a 405 foi 8 Dezembro de 2021 e a 406 foi 27 de Agosto 2022.

Ai se você ta com servidor ativo, encontra problemas graves, ate resolver já se passou 6 a 9 meses, e seu servidor vai por buraco, quando sai uma nova atualização eu testo, e incrível que apareça, aparece novos problemas.

Quem não entende de programação, e e ta com servidor ativo, pode da tchauzinho, eu encontrei tanto problema na 405 que larguei de mão, e fora que tem risco dele mudar uma class por completo, eai se você tem mod aplicado na aquela class determinada, vai te que deletar ele e adicionar em locais diferente, já faz tempo que não mexo na 405 mas aqui ta um dos problemas que me lembrei recentemente kkk,  o pickup do personagem aumenta velocidade conforme vai pegando quantidade de items no chão.

Acabei trabalhando numa versão um pouco mais antiga mas que não vai da problema de skill,class,siege etc,  o básico para um servidor mid pvp ou full pvp.

Problema real, é tempo que ta levando para atualização, e ninguém quer esperar 20 anos pra usar algo, e a maioria vai usar mid pvp ou full pvp mesmo, mas pra retail falta muitas correções

Esse é o loop infinito da aCi$ !

Um projeto tem que ser temporário, tem que ter começo e fim. Não é o caso da aCi$.

Ele nunca entrega o produto final, muita gente paga e usa na espectativa de obter o produto funcional e finalizado, mas na verdade, resumindo daqui uns dias ele muda para Java 20 ou próxima LTS e vai reescrever o código e segue o baile com a boiada atrás.

Link para o comentário
Compartilhar em outros sites

12 horas atrás, coldplay disse:

Qual o problema em cobrar por seu trabalho? Você mesmo vende uma rev e ganha dinheiro com isso, por que os outros não podem?

Então, acho que nesse caso, o problema não está relacionado a cobrar pelo trabalho, a questão mesmo é a entrega do produto. Você disse que é bem difícil ocorrer decisões tendenciosas por parte dos gestores desses projetos, se analisarmos por outra ótica, você está dizendo que desonestidade por parte dos desenvolvedores é muito difícil de ocorrer, acho que pessoas desonestas existem em qualquer lugar/segmento e desenvolvedores l2j não tem nada especial que os diferencie. 

Então diria que tem tanta chance quanto em qualquer outro segmento.

8 horas atrás, Sarada disse:

Problema não  é esse mano, problema em si, que desenvolvedor da aCis enreda de mais, ele refaz algo que ele mesmo fez, ele quebra métodos que ele mesmo cria uma ou duas versões anteriores da atual, e quando posta uma nova commits, cara muda formula, jeito da class de algo que ele ja tinha feito, não lembro quantas veses ele já  troco o sistema de spawn dessa aCis.

E Pior de tudo, que ele ta demorando muito pra mandar novas atualizações, da 405 a 406 foram data totalmente distante, a 405 foi 8 Dezembro de 2021 e a 406 foi 27 de Agosto 2022.

Ai se você ta com servidor ativo, encontra problemas graves, ate resolver já se passou 6 a 9 meses, e seu servidor vai por buraco, quando sai uma nova atualização eu testo, e incrível que apareça, aparece novos problemas.

Quem não entende de programação, e e ta com servidor ativo, pode da tchauzinho, eu encontrei tanto problema na 405 que larguei de mão, e fora que tem risco dele mudar uma class por completo, eai se você tem mod aplicado na aquela class determinada, vai te que deletar ele e adicionar em locais diferente, já faz tempo que não mexo na 405 mas aqui ta um dos problemas que me lembrei recentemente kkk,  o pickup do personagem aumenta velocidade conforme vai pegando quantidade de items no chão.

Acabei trabalhando numa versão um pouco mais antiga mas que não vai da problema de skill,class,siege etc,  o básico para um servidor mid pvp ou full pvp.

Problema real, é tempo que ta levando para atualização, e ninguém quer esperar 20 anos pra usar algo, e a maioria vai usar mid pvp ou full pvp mesmo, mas pra retail falta muitas correções

Resultado do projeto passa por diversas desconstruções?

8 horas atrás, VesPer disse:

Acho que algumas correções eles devem segurar sim mano, como a maioria que abre um server não é dev, imagino que os fornecedores ficam postergando algumas correções, eu vejo mesmo que nunca tem fim e quando vai ficando bom a galera parece que muda de projeto (de Interlude pra H5, por exemplo) e descontinua o suporte. Aí é complicado...
Deve ter alguma logica por trás disso tudo, mas só quem distribui que pode (ou não) explicar pra nós a razão de ficar refazendo o mesmo trabalho 10x ao invés de seguir com as correções.

Acho que a questão é essa mesmo, continuar recebendo ajuda financeira 

1 hora atrás, Thanos disse:

Esse é o loop infinito da aCi$ !

Um projeto tem que ser temporário, tem que ter começo e fim. Não é o caso da aCi$.

Ele nunca entrega o produto final, muita gente paga e usa na espectativa de obter o produto funcional e finalizado, mas na verdade, resumindo daqui uns dias ele muda para Java 20 ou próxima LTS e vai reescrever o código e segue o baile com a boiada atrás.

Realmente um problema, enquanto houver pessoas dispostas a pagar ele jamais vai parar. Agora já faz por anos..

Link para o comentário
Compartilhar em outros 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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  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.

Processando...
  • Registre-se

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





  • Patrocinadores

  • Quem Está Navegando

    • Nenhum usuário registrado visualizando esta página.
  • Posts

    • Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?     Teria como fazer do dusk shield e do zombie shield dessa maneira?    
    • muchas gracias muy lindos NPC 🙂
    • relaxa jovem gafanhoto, testa as quests. e posTa os erros indesejaveis.  
    • Se alguém pudesse me ensinar como codificar as missões, eu ficaria feliz em fazer isso sozinho ou pelo menos ajudar. Eu realmente quero jogar em um servidor onde todas as quests funcionem bem e melhor ainda se você puder fazer quests customizadas!
    • mas no interlude, nem todas as quests de class,  vai mostrar onde tem que ir, ate o reborn nao mostrava quando era interlude, só mostrou depois que eles colocaram client classic pra rodar, e ficou melhor ainda quando virou hellbound em diante, mas ha sim alguma chance de modificar isso direto no script para fazer igualmente, só basta te um pouco de paciencia e persistencia exato
    • 408_PathToElvenwizard dá Orion eu tive que mexer tbm, até modifiquei e consegui deixar ela igual do Classic, com a seta e a marcação no mapa. (não retail IL) Dá pra importar py de várias revs, o foda é que não da regular as quest py através do debug em tempo real, pelo menos eu não consegui rsrs
    • Hasta el momento todas las QUESTS son completables si te guias con un tutorial de youtube. El problema es que tienen bugs de locacion y de subquests que no avanzan o no te marcan correctamente a donde ir en el mapa, cosa que en Retail si se ve como corresponde.
    • estranho, mas pelo menos a galera nunca reclamo das quests quando tinha aberto 5x, geral fez class primeira e segunda job, poucos que compraram a class
    • en RUSaCis-3.5 data pack, las Quests estan en formato .java y son diferentes a como estan redactadas en jOrion y jFrozen 1.5 (ProyectX) package net.sf.l2j.gameserver.scripting.quest; import net.sf.l2j.commons.random.Rnd; import net.sf.l2j.gameserver.enums.Paperdoll; import net.sf.l2j.gameserver.enums.QuestStatus; import net.sf.l2j.gameserver.enums.actors.ClassId; import net.sf.l2j.gameserver.model.actor.Creature; import net.sf.l2j.gameserver.model.actor.Npc; import net.sf.l2j.gameserver.model.actor.Player; import net.sf.l2j.gameserver.network.serverpackets.SocialAction; import net.sf.l2j.gameserver.scripting.QuestState; public class Q224_TestOfSagittarius extends SecondClassQuest { private static final String QUEST_NAME = "Q224_TestOfSagittarius"; // Items private static final int BERNARD_INTRODUCTION = 3294; private static final int HAMIL_LETTER_1 = 3295; private static final int HAMIL_LETTER_2 = 3296; private static final int HAMIL_LETTER_3 = 3297; private static final int HUNTER_RUNE_1 = 3298; private static final int HUNTER_RUNE_2 = 3299; private static final int TALISMAN_OF_KADESH = 3300; private static final int TALISMAN_OF_SNAKE = 3301; private static final int MITHRIL_CLIP = 3302; private static final int STAKATO_CHITIN = 3303; private static final int REINFORCED_BOWSTRING = 3304; private static final int MANASHEN_HORN = 3305; private static final int BLOOD_OF_LIZARDMAN = 3306; private static final int CRESCENT_MOON_BOW = 3028; private static final int WOODEN_ARROW = 17; // Rewards private static final int MARK_OF_SAGITTARIUS = 3293; // NPCs private static final int BERNARD = 30702; private static final int HAMIL = 30626; private static final int SIR_ARON_TANFORD = 30653; private static final int VOKIAN = 30514; private static final int GAUEN = 30717; // Monsters private static final int ANT = 20079; private static final int ANT_CAPTAIN = 20080; private static final int ANT_OVERSEER = 20081; private static final int ANT_RECRUIT = 20082; private static final int ANT_PATROL = 20084; private static final int ANT_GUARD = 20086; private static final int NOBLE_ANT = 20089; private static final int NOBLE_ANT_LEADER = 20090; private static final int BREKA_ORC_SHAMAN = 20269; private static final int BREKA_ORC_OVERLORD = 20270; private static final int MARSH_STAKATO_WORKER = 20230; private static final int MARSH_STAKATO_SOLDIER = 20232; private static final int MARSH_STAKATO_DRONE = 20234; private static final int MARSH_SPIDER = 20233; private static final int ROAD_SCAVENGER = 20551; private static final int MANASHEN_GARGOYLE = 20563; private static final int LETO_LIZARDMAN = 20577; private static final int LETO_LIZARDMAN_ARCHER = 20578; private static final int LETO_LIZARDMAN_SOLDIER = 20579; private static final int LETO_LIZARDMAN_WARRIOR = 20580; private static final int LETO_LIZARDMAN_SHAMAN = 20581; private static final int LETO_LIZARDMAN_OVERLORD = 20582; private static final int SERPENT_DEMON_KADESH = 27090; public Q224_TestOfSagittarius() { super(224, "Test Of Sagittarius"); setItemsIds(BERNARD_INTRODUCTION, HAMIL_LETTER_1, HAMIL_LETTER_2, HAMIL_LETTER_3, HUNTER_RUNE_1, HUNTER_RUNE_2, TALISMAN_OF_KADESH, TALISMAN_OF_SNAKE, MITHRIL_CLIP, STAKATO_CHITIN, REINFORCED_BOWSTRING, MANASHEN_HORN, BLOOD_OF_LIZARDMAN, CRESCENT_MOON_BOW); addQuestStart(BERNARD); addTalkId(BERNARD, HAMIL, SIR_ARON_TANFORD, VOKIAN, GAUEN); addMyDying(ANT, ANT_CAPTAIN, ANT_OVERSEER, ANT_RECRUIT, ANT_PATROL, ANT_GUARD, NOBLE_ANT, NOBLE_ANT_LEADER, BREKA_ORC_SHAMAN, BREKA_ORC_OVERLORD, MARSH_STAKATO_WORKER, MARSH_STAKATO_SOLDIER, MARSH_STAKATO_DRONE, MARSH_SPIDER, ROAD_SCAVENGER, MANASHEN_GARGOYLE, LETO_LIZARDMAN, LETO_LIZARDMAN_ARCHER, LETO_LIZARDMAN_SOLDIER, LETO_LIZARDMAN_WARRIOR, LETO_LIZARDMAN_SHAMAN, LETO_LIZARDMAN_OVERLORD, SERPENT_DEMON_KADESH); } @Override public String onAdvEvent(String event, Npc npc, Player player) { String htmltext = event; QuestState st = player.getQuestList().getQuestState(QUEST_NAME); if (st == null) return htmltext; // BERNARD if (event.equalsIgnoreCase("30702-04.htm")) { st.setState(QuestStatus.STARTED); st.setCond(1); playSound(player, SOUND_ACCEPT); giveItems(player, BERNARD_INTRODUCTION, 1); if (giveDimensionalDiamonds39(player)) htmltext = "30702-04a.htm"; } // HAMIL else if (event.equalsIgnoreCase("30626-03.htm")) { st.setCond(2); playSound(player, SOUND_MIDDLE); takeItems(player, BERNARD_INTRODUCTION, 1); giveItems(player, HAMIL_LETTER_1, 1); } else if (event.equalsIgnoreCase("30626-07.htm")) { st.setCond(5); playSound(player, SOUND_MIDDLE); takeItems(player, HUNTER_RUNE_1, 10); giveItems(player, HAMIL_LETTER_2, 1); } // SIR_ARON_TANFORD else if (event.equalsIgnoreCase("30653-02.htm")) { st.setCond(3); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_1, 1); } // VOKIAN else if (event.equalsIgnoreCase("30514-02.htm")) { st.setCond(6); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_2, 1); } return htmltext; } @Override public String onTalk(Npc npc, Player player) { String htmltext = getNoQuestMsg(); QuestState st = player.getQuestList().getQuestState(QUEST_NAME); if (st == null) return htmltext; switch (st.getState()) { case CREATED: if (player.getClassId() != ClassId.ROGUE && player.getClassId() != ClassId.ELVEN_SCOUT && player.getClassId() != ClassId.ASSASSIN) htmltext = "30702-02.htm"; else if (player.getStatus().getLevel() < 39) htmltext = "30702-01.htm"; else htmltext = "30702-03.htm"; break; case STARTED: int cond = st.getCond(); switch (npc.getNpcId()) { case BERNARD: htmltext = "30702-05.htm"; break; case HAMIL: if (cond == 1) htmltext = "30626-01.htm"; else if (cond == 2 || cond == 3) htmltext = "30626-04.htm"; else if (cond == 4) htmltext = "30626-05.htm"; else if (cond > 4 && cond < 8) htmltext = "30626-08.htm"; else if (cond == 8) { htmltext = "30626-09.htm"; st.setCond(9); playSound(player, SOUND_MIDDLE); takeItems(player, HUNTER_RUNE_2, 10); giveItems(player, HAMIL_LETTER_3, 1); } else if (cond > 8 && cond < 12) htmltext = "30626-10.htm"; else if (cond == 12) { htmltext = "30626-11.htm"; st.setCond(13); playSound(player, SOUND_MIDDLE); } else if (cond == 13) htmltext = "30626-12.htm"; else if (cond == 14) { htmltext = "30626-13.htm"; takeItems(player, BLOOD_OF_LIZARDMAN, -1); takeItems(player, CRESCENT_MOON_BOW, 1); takeItems(player, TALISMAN_OF_KADESH, 1); giveItems(player, MARK_OF_SAGITTARIUS, 1); rewardExpAndSp(player, 54726, 20250); player.broadcastPacket(new SocialAction(player, 3)); playSound(player, SOUND_FINISH); st.exitQuest(false); } break; case SIR_ARON_TANFORD: if (cond == 2) htmltext = "30653-01.htm"; else if (cond > 2) htmltext = "30653-03.htm"; break; case VOKIAN: if (cond == 5) htmltext = "30514-01.htm"; else if (cond == 6) htmltext = "30514-03.htm"; else if (cond == 7) { htmltext = "30514-04.htm"; st.setCond(8); playSound(player, SOUND_MIDDLE); takeItems(player, TALISMAN_OF_SNAKE, 1); } else if (cond > 7) htmltext = "30514-05.htm"; break; case GAUEN: if (cond == 9) { htmltext = "30717-01.htm"; st.setCond(10); playSound(player, SOUND_MIDDLE); takeItems(player, HAMIL_LETTER_3, 1); } else if (cond == 10) htmltext = "30717-03.htm"; else if (cond == 11) { htmltext = "30717-02.htm"; st.setCond(12); playSound(player, SOUND_MIDDLE); takeItems(player, MANASHEN_HORN, 1); takeItems(player, MITHRIL_CLIP, 1); takeItems(player, REINFORCED_BOWSTRING, 1); takeItems(player, STAKATO_CHITIN, 1); giveItems(player, CRESCENT_MOON_BOW, 1); giveItems(player, WOODEN_ARROW, 10); } else if (cond > 11) htmltext = "30717-04.htm"; break; } break; case COMPLETED: htmltext = getAlreadyCompletedMsg(); break; } return htmltext; } @Override public void onMyDying(Npc npc, Creature killer) { final Player player = killer.getActingPlayer(); final QuestState st = checkPlayerState(player, npc, QuestStatus.STARTED); if (st == null) return; switch (npc.getNpcId()) { case ANT: case ANT_CAPTAIN: case ANT_OVERSEER: case ANT_RECRUIT: case ANT_PATROL: case ANT_GUARD: case NOBLE_ANT: case NOBLE_ANT_LEADER: if (st.getCond() == 3 && dropItems(player, HUNTER_RUNE_1, 1, 10, 500000)) st.setCond(4); break; case BREKA_ORC_SHAMAN: case BREKA_ORC_OVERLORD: if (st.getCond() == 6 && dropItems(player, HUNTER_RUNE_2, 1, 10, 500000)) { st.setCond(7); giveItems(player, TALISMAN_OF_SNAKE, 1); } break; case MARSH_STAKATO_WORKER: case MARSH_STAKATO_SOLDIER: case MARSH_STAKATO_DRONE: if (st.getCond() == 10 && dropItems(player, STAKATO_CHITIN, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, MITHRIL_CLIP, REINFORCED_BOWSTRING)) st.setCond(11); break; case MARSH_SPIDER: if (st.getCond() == 10 && dropItems(player, REINFORCED_BOWSTRING, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, MITHRIL_CLIP, STAKATO_CHITIN)) st.setCond(11); break; case ROAD_SCAVENGER: if (st.getCond() == 10 && dropItems(player, MITHRIL_CLIP, 1, 1, 100000) && player.getInventory().hasItems(MANASHEN_HORN, REINFORCED_BOWSTRING, STAKATO_CHITIN)) st.setCond(11); break; case MANASHEN_GARGOYLE: if (st.getCond() == 10 && dropItems(player, MANASHEN_HORN, 1, 1, 100000) && player.getInventory().hasItems(REINFORCED_BOWSTRING, MITHRIL_CLIP, STAKATO_CHITIN)) st.setCond(11); break; case LETO_LIZARDMAN: case LETO_LIZARDMAN_ARCHER: case LETO_LIZARDMAN_SOLDIER: case LETO_LIZARDMAN_WARRIOR: case LETO_LIZARDMAN_SHAMAN: case LETO_LIZARDMAN_OVERLORD: if (st.getCond() == 13) { if (((player.getInventory().getItemCount(BLOOD_OF_LIZARDMAN) - 120) * 5) > Rnd.get(100)) { playSound(player, SOUND_BEFORE_BATTLE); takeItems(player, BLOOD_OF_LIZARDMAN, -1); addSpawn(SERPENT_DEMON_KADESH, player, false, 300000, true); } else dropItemsAlways(player, BLOOD_OF_LIZARDMAN, 1, 0); } break; case SERPENT_DEMON_KADESH: if (st.getCond() == 13) { if (player.getInventory().getItemIdFrom(Paperdoll.RHAND) == CRESCENT_MOON_BOW) { st.setCond(14); playSound(player, SOUND_MIDDLE); giveItems(player, TALISMAN_OF_KADESH, 1); } else addSpawn(SERPENT_DEMON_KADESH, player, false, 300000, true); } break; } } }  
×
×
  • 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.