Ir para conteúdo
  • Cadastre-se

L2JBrasil 3.0 Oficial


Tayran.JavaDev

Posts recomendados

  • L2JBr ADM
Em 11/4/2017 at 07:51, Elfocrash disse:

Interesting. Let's see what you can do. Good luck guys!

Btw the license is wrong. AGLPv3 is for websites. You probably wanted to license it under GPLv3 (which is what l2j was all along)

 

Not exactly, AGPL include all GPL GNU but isn't exclusive for websites.

A GNU Affero General Public License is a license with text available in the original GPL (which is not a complete document to know the details, I am not a lawyer but @Kelvin is xD ) who tried to fix this gap. The license history is pretty complex but I would say that for an AGPL it does not matter if people are running a program on a local processor and using the systems through their keyboards and monitors or if they access a server through from Internet; It is not necessary to be running or self-running or using the hosting service, for example, on behalf of outrelle, if they can effectively use a program, they are considered users and as such they connect access to the source code.

In short lines, the players should accept that the game what they are playing is an open-source and a free code.

 

 

PT-BR:

Uma Licença Pública Geral GNU Affero é uma licença com texto disponível na GPL original (do que não é um documento completo para saber os detalhes, eu não sou advogado mas o @Kelvin é) que tentou consertar esta brecha. A história da licença é bem complexa mas diria que para uma AGPL não importa se como pessoas estão executando um programa em um processador local e usando os sistemas através dos seus teclados e monitores ou se acessam um servidor através da Internet; Não é necessário se estar em execução ou programa por conta própria ou se usam do serviço de hospedagem, por exemplo, por conta de outrelle, se puderem efetivamente usar um programa, são considerados usuários e, como tal, conectam o acesso ao código-fonte.

Em linhas curtas, os jogadores devem aceitar que o jogo que eles estão jogando é um código aberto e um código livre.

 

EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Link para o comentário
Compartilhar em outros sites


Desculpa pelo flood mas essa volta e a melhor noticia que recebi desde 2012 não sei explicar aqui o tamanho da minha felicidade! Obrigado de vdd que esse seja o melhor dos melhores.

Link para o comentário
Compartilhar em outros sites

Well i use LegalTLDR in general and it says "Since web sites and services are never distributed in the traditional sense, the AGPL is the GPL of the web."

Source: https://tldrlegal.com/license/gnu-affero-general-public-license-v3-(agpl-3.0)

It doesn't really matter though as the L2 community is known to ignore licenses. The license itself it made to force people to share any improvements they did in the software back to the original owner of the project. This is how L2jserver always was. Ofc this never happened because people just got the files and implemented them for their private servers. Every license there is basically covers the creator legally from liability. In my opinion the MIT license is the best for such things because it protects the owner but also lets the users do whatever they want with the source.

About the db stuff mentioned, technically the whole thing could go in a nosql db because l2j has absolutely no (or minimal) relationships between the tables.

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

  • L2JBr ADM
Em 11/6/2017 at 09:35, Elfocrash disse:

Well i use LegalTLDR in general and it says "Since web sites and services are never distributed in the traditional sense, the AGPL is the GPL of the web."

Source: https://tldrlegal.com/license/gnu-affero-general-public-license-v3-(agpl-3.0)

It doesn't really matter though as the L2 community is known to ignore licenses. The license itself it made to force people to share any improvements they did in the software back to the original owner of the project. This is how L2jserver always was. Ofc this never happened because people just got the files and implemented them for their private servers. Every license there is basically covers the creator legally from liability. In my opinion the MIT license is the best for such things because it protects the owner but also lets the users do whatever they want with the source.

About the db stuff mentioned, technically the whole thing could go in a nosql db because l2j has absolutely no (or minimal) relationships between the tables.

10

Sad but true.

So I think we made a confusion about these terms. Use of MIT is out of the question, original l2jserver use GPL GNU and we would like to keep it. We can't change it to MIT since the project is based on L2jServer and we desire to respect the mains project.

Regarding NoSQL stuff, it's a Proof of Concept, the database used in L2jServer is really outdated, with very old stuff. Tables like inventory and characters could be stored in NoSQL and document storage such MongoDB.  Our intention is to create a scalable L2j emulator able to handler more online players with fewer resources or run into cloud platforms to do it is necessary to remove in-memory storages, to techniques such as load balancing became possible.

 

EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Link para o comentário
Compartilhar em outros sites

2 minutes ago, Grundor said:

Sad but true.

So I think we made a confusion about these terms. Use of MIT is out of the question, original l2jserver use GPL GNU and we would like to keep it. We can't change it to MIT since the project is based into L2jServer and we desire to respect the mains project.

Regarding NoSQL stuff, it's a Proof of Concept, the database used in L2jServer is really outdated, with very old stuff. Tables like inventory and characters could be stored into NoSQL and document storage such MongoDB.  Our intention is to create a scalable L2j emulator able to handler more online players with fewer resources or run into cloud platforms to do it is necessary to remove in-memory storages, to techniques such as load balancing became possible.

 

Then you have to go from monolith to microservices. The problem is that l2j is so tightly coupled that you can't loosen it up easily.
I have done an implementation of acis using mongo instead of mysql and the performance is not so much faster.

Link para o comentário
Compartilhar em outros sites

  • L2JBr ADM
14 minutos atrás, Elfocrash disse:

Then you have to go from monolith to microservices. The problem is that l2j is so tightly coupled that you can't loosen it up easily.
I have done an implementation of acis using mongo instead of mysql and the performance is not so much faster.

Yes, that's the point the monolith architectural design is a big wall that blocks any possibility of include "mods as a service". A concept that we are developing to enable Plug-in-play server modifications such as complex events, custom NPCs, environmental behaviors, dynamic rates, etc without the necessity to recompile the core. For now, remove in-memory data are primordial to evolve L2j into something more scalable. 

It's not an easy task, but we need the main objective to north our actions and improvements.  We will focus to implement all missing features and turn it more stable and retail-complete, bot above it we'll work in ways to become more customizable and scalable.

And it's why this project is so exciting ;)

EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Link para o comentário
Compartilhar em outros sites

1 minute ago, Grundor said:

Yes, that's the point the monolith architectural design is a big wall that blocks any possibility of include "mods as a service". A concept that we are developing to enable Plug-in-play server modifications such as complex events, custom NPCs, environmental behaviors, dynamic rates, etc without the necessity to recompile the core. For now, remove in-memory data are primordial to evolve L2j into something more scalable. 

It's not an easy task, but we need the main objective to north our actions and improvements.  We will focus to implement all missing features and turn it more stable and retail-complete, bot above it we'll work in ways to become more customizable and scalable.

And it's why this project is so exciting ;)

You can always use Redis to act as a centralised cache service. Essentially all those Singletons will stop being singletons and they will start being data access layers to the Redis cache. That way, many instances of the service can use the same data.

Could work. I'm more than happy to give you a hand if I see this going in an interesting direction.

Link para o comentário
Compartilhar em outros sites

  • L2JBr ADM
59 minutos atrás, Elfocrash disse:

You can always use Redis to act as a centralised cache service. Essentially all those Singletons will stop being singletons and they will start being data access layers to the Redis cache. That way, many instances of the service can use the same data.

Could work. I'm more than happy to give you a hand if I see this going in an interesting direction.

I already worked with Redis, Memcached, and MongoDB to build this kind of architecture and I believe that will work at l2j. 

At this very first moment, I'll migrate the database to InnoDB and create some index to improve current db queries. After this refactoring, I'll start a new branch to study this model and will be a pleasure a hand or two to bring it to life.

EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Link para o comentário
Compartilhar em outros sites

99vou baixar e ajudar.

 

Sera q vao por online pra testes?

imagina se fizerem um servidor proprio do forum (retail), eu jogaria certo.

como vai ser feito o banco de dados??? nao entendi

 

Em breve novidades...

Link para o comentário
Compartilhar em outros sites

Ola a todos tenho algumas perguntas a fazer, com relação ao servidor ele vai ter a mesma pegada da antiga L2jBrasil ou esse e indiferente, e outra coisa essa fonte sera disponível para todos os desenvolvedores  para correções e outros fins ou mais tarda ela sera privada apenas disponibilizando algumas versões compiladas, vou dar uma ajuda com esse projeto já que a muitos anos tenho aguardado algo assim boa sorte a todos

600_462997319.jpeg

Link para o comentário
Compartilhar em outros sites

59 minutos atrás, Walker-L2 disse:

Ola a todos tenho algumas perguntas a fazer, com relação ao servidor ele vai ter a mesma pegada da antiga L2jBrasil ou esse e indiferente, e outra coisa essa fonte sera disponível para todos os desenvolvedores  para correções e outros fins ou mais tarda ela sera privada apenas disponibilizando algumas versões compiladas, vou dar uma ajuda com esse projeto já que a muitos anos tenho aguardado algo assim boa sorte a todos

 

1. A revisão continua a mesma de antes, só estamos dando continuamento, Base L2JServer que iniciamos o desenvolvimento em 2011.
 

2. A fonte é, está e será sempre disponível, inclusive estamos usando GitHub e qualquer melhoria ou correção que você tiver, você pode fazer um pull request e analisaremos seu pull e se estiver de acordo ele será aceito como commit e estará ajudando não só a testar como também a melhorar nosso código.
 

3. A revisão inicialmente será focada só em correções de Bugs e melhoria de performance, nossa rev já era uma rev com performance ótima em questão de leveza, removendo a Javolution ja melhorou mais ainda a velocidade que essa rev liga.

Aguardo você para contribuir, o Bug no L2World foi fixado e o fake death também, mais tarde arrumarei os Bugs de skill que ainda faltam e solto a versão 3.0.3.

 

Thanks Elfocrash for help us in project.

Editado por Tayran.JavaDev
  • Gostei 4
  • Amei 1

"Tente ser uma pessoa de valor , não de sucesso" - Albert Einstein

 

 

Link para o comentário
Compartilhar em outros sites

2 horas atrás, Sr.Felipe disse:

Já está compatível com mysql 5.7 ?

 

Isso estará disponível na versão 4.0.0
 

2 minutos atrás, Williamss disse:

Opa até que fim o projeto voltou , vi que precisa de muita coisa para ser utilizável ainda precisar de ajuda só me mandar um mp que no meu tempo livre irei ajudar ??

Sim tem muita coisa a ser feita, mas ai que está a parte divertida, continuar com o projeto que participei do início dele em 2011 que a Base é L2JServer e não estamos pegando source de nenhuma outra rev com trabalhos já adiantados, e você pode ajudar fazendo testes e se tiver alguma correção você pode fazer um pull request, já fiz até tutorial de como é feito para facilitar os membros a ajudarem.

"Tente ser uma pessoa de valor , não de sucesso" - Albert Einstein

 

 

Link para o comentário
Compartilhar em outros sites

Parabéns pela iniciativa papangus, gostaria de me colocar a disposição para ajudá-los no que for necessário.
Se precisarem adaptar alguma tabela para XML posso programar algo que faça isto já formatando os dados de modo que não haja necessidade de perder tempo com intervenções manuais.
Um Exemplo prático seria transformar a tabela armor em xml e mesclar os dados com os xml das armaduras.
Enfim, desejo uma boa sorte neste projeto e volto a dizer, se precisarem de mim estou aqui.

  • Gostei 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

  • L2JBr ADM
8 horas atrás, Sr.Felipe disse:

Já está compatível com mysql 5.7 ?

 

 

Se vc compilar do branch "develop" já vai conseguir usar o mysql 5.7 ou maria db.

EJoOSOj.gif

Sua pergunta foi respondida? Certifique-se de marcar a resposta como a solução aceita.
Se existe mais de uma resposta, utilize o "vote up" para destacá-la.
Se você achar uma resposta útil, diga obrigado clicando no botão "Gostei".

Link para o comentário
Compartilhar em outros sites

Tem vários dados que podem ser passado para XML, tipo, não vejo o porquê uma tabela weapons, armor e skills ficar em SQL!

 

Você sabia que a L2JBrasil tem uma empresa de Hosting Oficial?
Conheça a L2JCenter.com

L2JBRASIL - 15 anos vendendo SS e flechas em Giran! (Trade / Adena)

Link para o comentário
Compartilhar em outros sites

18 minutos atrás, Nattan Felipe disse:

Tem vários dados que podem ser passado para XML, tipo, não vejo o porquê uma tabela weapons, armor e skills ficar em SQL!

 

Nem npcs, raidboss_spawnlist, grandboss_data, char_templates e muitas outras tabelas. =)

Todas as tabelas que só servem de leitura são inuteis.

 

 

 

Link para o comentário
Compartilhar em outros sites

@Grundor se quiser passar algumas tabelas para XML (não sei o quanto melhoraria ou pioraria a performance), interação com paineis administrativos não será um problema, eu já desenvolvi uma função (utilizando uma Lib) no Laravel 5.4 para fazer upload de items da L2jSunrise para tabelas (para usar em um shop online); 

Tenho algumas idéias para complementar o projeto para a JBr, mas isso ainda vai demorar um pouco (tempo, relacionamento, facul, trabalho...), mas vai dar tudo certo :)

Edit: Quando adaptar o sistema para a JBr, items em XML não serão um problema.

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

29 minutos atrás, vert disse:

@Grundor se quiser passar algumas tabelas para XML (não sei o quanto melhoraria ou pioraria a performance), interação com paineis administrativos não será um problema, eu já desenvolvi uma função (utilizando uma Lib) no Laravel 5.4 para fazer upload de items da L2jSunrise para tabelas (para usar em um shop online); 

Tenho algumas idéias para complementar o projeto para a JBr, mas isso ainda vai demorar um pouco (tempo, relacionamento, facul, trabalho...), mas vai dar tudo certo :)

Edit: Quando adaptar o sistema para a JBr, items em XML não serão um problema.

Existem outros métodos de se fazer leitura de arquivos XML para um sistema web sem ter que usar um framework, parâmetros php e seus artifícios facilitando nossas vidas na hora da criação de um excelente website. Não sou o melhor programador web, mas estou ansioso para criar algo legal para L2JBRASIL novamente. E se precisar de ajuda VERT só chamar. Bora desenvolver algo da hora. Abraço!

R2d3uef.png

Link para o comentário
Compartilhar em outros sites

4 horas atrás, NalDinHuU disse:

Parabéns pela iniciativa papangus, gostaria de me colocar a disposição para ajudá-los no que for necessário.
Se precisarem adaptar alguma tabela para XML posso programar algo que faça isto já formatando os dados de modo que não haja necessidade de perder tempo com intervenções manuais.
Um Exemplo prático seria transformar a tabela armor em xml e mesclar os dados com os xml das armaduras.
Enfim, desejo uma boa sorte neste projeto e volto a dizer, se precisarem de mim estou aqui.

Isso está nos planos de modificação sim, toda ajuda é bem vinda.
 

1 hora atrás, Nattan Felipe disse:

Tem vários dados que podem ser passado para XML, tipo, não vejo o porquê uma tabela weapons, armor e skills ficar em SQL!

 

Isso já estava nos planos, tem muito arquivo de banco que não precisa está no banco.

"Tente ser uma pessoa de valor , não de sucesso" - Albert Einstein

 

 

Link para o comentário
Compartilhar em outros sites

3 horas atrás, Grundor disse:

Se vc compilar do branch "develop" já vai conseguir usar o mysql 5.7 ou maria db.

 

9 horas atrás, Tayran.JavaDev disse:

Isso estará disponível na versão 4.0.0

Qual a versão recomendada, estarei ativando o servidor em produção, assim podemos conseguir reportes mais rapido. 

Tudo que os player reclamar estarei verificando e reportando no git. 

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

Link para o comentário
Compartilhar em outros sites

Agora, Sr.Felipe disse:

 

Qual a versão recomendada, estarei ativando o servidor em produção, assim podemos conseguir reportes mais rapido. 

Tudo que os player reclamar estarei verificando e reportando no git. 

 

Olha eu ainda recomendo a rev para testes locais, para produção iria ser ótimo a velocidade de report de bugs, mas tem consciência que tem muita coisa para resolver e seu server pode ser prejudicado ?

"Tente ser uma pessoa de valor , não de sucesso" - Albert Einstein

 

 

Link para o comentário
Compartilhar em outros sites

8 minutos atrás, Tayran.JavaDev disse:

 

Olha eu ainda recomendo a rev para testes locais, para produção iria ser ótimo a velocidade de report de bugs, mas tem consciência que tem muita coisa para resolver e seu server pode ser prejudicado ?

Sim, sei dos riscos, o servidor não será para lucro mas apenas voltar aos primórdios do l2. 

Por isso não estou preocupado se der problema, quero colocar em produção para ser identificado os problemas mais rapido e consequentemente corrigido mais rapido. Fora o fato que também vou sair ganhando pois terei no final uma ótima revisão para desenvolver um servidor cada vez melhor. 

E sobre a minha pergunta anteriormente, qual a versão recomendada? 

Editado por Sr.Felipe

"Tudo o que um sonho precisa para ser realizado é alguém que acredite que ele possa ser realizado"

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
  • 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.