Ir para conteúdo
  • Cadastre-se

[TUTORIAL] Criando um Servidor de Lineage 2 no Ubuntu Server


NvN

Posts recomendados

Introdução:

Lineage II é um MMORPG desenvolvido pela NCsoft. L2J é um emulador para Lineage II escrito em Java, que permite que qualquer pessoa para hospedar sua / seu próprio servidor privado legalmente. Este how-to indica os passos necessários para configurar o servidor de L2J própria em um servidor remoto rodando Ubuntu Server. Outras distribuições de trabalho de forma semelhante, por isso é perfeitamente possível que isso basta guia para inúmeras outras distribuições.


Conteúdo do Tutorial:

1 Primeiros os arquivos
2 Pré-condições Servidor
3 Configuração do Servidor
4 Conexão com o servidor
5 Dicas
6 Avisos
7 Coisas que você precisa
8 Fontes e Citações


1 Primeiros os arquivos:


Servidor: L2jServer
Sistema Operacional: Ubuntu Server 13.04/12.04 LTS
FTP: FileZilla


2 Pré-condições Servidor:

Certifique-se que JRE, JDK, MySQL e phpMyAdmin estão instalados na sua máquina servidor. Na maioria dos casos, elas serão, mas se não forem, digite os seguintes comandos e siga as instruções na tela para instalá-los.
Para verificar o JAVA instalado, digite:
java -version

Caso apareça OpenJDK siga esses comandos:
Desinstalando o OpenJDK:
sudo apt-get purge openjdk*

Um comando que talvez funcione, caso não funcione instale pelo Repositório:
sudo apt-get install software-properties-common

Instalando o MySQL Client, MySQL Server e PHPMyAdmin
sudo apt-get install mysql-client mysql-server
sudo apt-get install phpmyadmin

Adicionando o Repositório no Sistema (caso ele não funcione avise por PM para alterar).
sudo add-apt-repository ppa:webupd8team/java

Atualizando os Repositórios
sudo apt-get update

Para instalar o Java 7:
sudo apt-get install oracle-java7-installer

Para instalar o Java 6:
sudo apt-get install oracle-java6-installer

Quando ambos MySQL e phpMyAdmin estão instalados (não se esqueça JRE e JDK!), Você pode gerenciar seu banco de dados SQL através do phpMyAdmin. O login e criar 2 bases de dados chamado l2jdb e l2jcb.
Copiar todos os arquivos localizados em ~/dp/gameserver/data para ~/server/gameserver/data. "~" Indica o caminho para home, que você pode acessar digitando cd. Se você usar um cliente de FTP, fazer upload de todos os arquivos localizados em /dp/gameserver/data em sua máquina local para o /server/gameserver/data na máquina remota (o servidor que irá hospedar o seu servidor L2J).
Seu anfitrião fornece-lhe com um terminal no qual você pode digitar vários comandos. Digite os seguintes comandos, seguindo a ordem abaixo:

cd ~/dp/tools
chmod +x database_installer.sh
./database_installer.sh

Siga as instruções na tela e adicione todas as tabelas que são necessárias para o seu servidor para o banco de dados SQL.
Uma vez que as tabelas foram adicionados, digite os seguintes comandos:

cd ~/server/login
chmod +x startLoginServer.sh LoginServer_loop.sh
nano LoginServer_loop.sh

Um arquivo de texto deve ter aberto.

Alterar:
nice -n -2 java -Xms128m -Xmx128m -cp ./../libs/*:l2jlogin.jar com.l2jserver.loginserver.L2LoginServer > log/stdout.log 2>&1
para:
nice -n 2 java -Xms128m -Xmx128m -cp ./../libs/*:l2jlogin.jar com.l2jserver.loginserver.L2LoginServer > log/stdout.log 2>&1.
(Remover o traço na frente de "2")

Olhe-Xms128m-Xmx128m (em GameServer_loop.sh, "128" é substituído por "1024"). "128" indica a quantidade máxima de RAM que está alocado para loginserver ou gameserver. Infelizmente, este artigo não pode indicar um número exato para colocar lá, consulte o seu host para determinar a quantidade de RAM disponível para você. É certo, porém, que ambos os 128 e 1024 são demasiado baixas para o seu login e servidores do jogo.
Pressione Ctrl + X. Agora pressione y para salvar o arquivo e pressione Return (também conhecido como o botão "Enter").


3 Configuração do Servidor:

Mais uma vez, digite os seguintes comandos:

chmod +x RegisterGameServer.sh
./RegisterGameServer.sh

Siga as instruções na tela. Você já registrou um servidor do jogo.
Outra rodada de comandos!

cp hexid.txt ../gameserver/config/hexid.txt
cd ..
chmod +x startGameServer.sh
chmod +x GameServer_loop.sh

Seu servidor está quase pronto. Agora você precisa configurar alguns arquivos para se conectar corretamente. Visite esta página e siga as instruções em "editar os arquivos de configuração".
Depois que os arquivos são editados, é hora de iniciar o servidor! tipo:

cd ../login
./startLoginServer.sh
cd ../gameserver
./startGameServer.sh

É isso! O login e os servidores de jogos são lançados! É aconselhável digite os seguintes comandos antes de iniciar o gameserver, a fim de garantir que o servidor de login é realmente instalado e funcionando. Se você fizer tipo os comandos, você precisará digitar cd ../../gameserver, em vez de cd ../gameserver:

cd log
cat stdout.log

Você pode digitar os mesmos comandos para garantir que o seu gameserver está instalado e funcionando também (cd log e stdout.log gato), enquanto você está no diretório gameserver.


4 Conexão com o servidor:

Para se conectar, você precisa alterar o seu arquivo hosts localizado (geralmente) em C:\Windows\system32\drivers\etc Abri-lo com um editor de texto e adicione as seguintes linhas (xxx.xxx.xxx.xxx indica o IP do seu host):

xxx.xxx.xxx.xxx L2authd.lineage2.com
216.107.250.194 nProtect.lineage2.com

Download http://forum.ragezon...-152-a-681657/. O arquivo que você vai precisar dela é dsetup.dll desde a versão 152 não é suportado pelos arquivos L2J atual. Você pode copiar dsetup.dll em seu desktop e descartar o resto do conteúdo.

Cópia dsetup.dll para a pasta de sistema Lineage II, substituindo a dll outros.
Apague a pasta GameGuard localizada dentro da sua pasta de sistema do Lineage II.
Cópia L2.bin para o seu desktop.
Renomeie o L2.bin em seu desktop para l2.exe.
Recortar e Colar l2.exe para sua pasta de sistema de L2.
Executar l2.exe. Se o servidor seu login e gameserver estão em alta, você deve ser capaz de se conectar ao seu servidor.

Se você quer que os outros para ser capaz de se conectar ao servidor, você deve correr e fazer upload de sua pasta de sistema de L2 para que outros possam baixá-lo e substituir o seu próprio sistema L2 pasta com o seu. O arquivo hosts que pertencem a qualquer um que queira se juntar também devem ser alterados.


5 Dicas:

CSDB, LSDB e GSDB referem-se ao banco de dados da comunidade de servidores, banco de dados do servidor de banco de dados de login e gameserver, respectivamente.
Seja extremamente cuidadoso quando você está digitando os comandos mostrados aqui, pois eles são sensíveis ao caso;. / StartLoginServer.sh irá funcionar, enquanto o / startloginserver.sh não..
Para encontrar o seu número de revisão L2 facilmente, siga estes passos:

Criar um novo arquivo de texto em seu desktop e nomeie-protocol.bat.
Botão direito do mouse no arquivo e clique em Editar.
Adicione esta linha: l2.exe L2ProtocolVersion.
Salve o arquivo.
Recortar e Colar o bastão para sua pasta de sistema de Lineage II e executá-lo.

Você pode digitar log cd e stdout.log gato para garantir que o seu gameserver está instalado e funcionando também (cd log e stdout.log gato), enquanto você está no diretório gameserver (ou apenas stdout.log gato enquanto você está no gameserver / log directory).
Sempre garantir que seu servidor de login está instalado e funcionando antes de iniciar o gameserver, como o seu gameserver não pode operar sem o servidor de login.
Se desejar cancelar o seu servidor, digite ps-A. Você verá a lista dos processos que estão actualmente em execução. Localize LoginServer_loop.sh, GameServer_loop.sh e Java. Rescindir todos os 3 deles digitando matar xxxx, onde "xxxx" é o ID do processo.
Lineage II requer que as portas TCP 2106 e 7777 são totalmente acessíveis


6 Avisos:

Garantir que a sua versão L2J corresponde à sua versão Lineage II, caso contrário, seu servidor avaria e alguns recursos não irá funcionar corretamente. Seu cliente L2 devem coincidir com os arquivos L2J também, os arquivos do servidor que são projetados para Gracia Epilogue não vai funcionar se o seu cliente é Freya!
Se você usar uma senha para seu banco de dados MySQL (que é altamente recomendado), não se esqueça de editar server.properties e loginserver.properties para incluir a senha, caso contrário você não será capaz de se conectar, como o servidor não será capaz de acessar seu banco de dados.
LEMBRE-SE: Cliente modding é um ato ilegal e um grande não.


7 Coisas que você precisa:

Um cliente de FTP, como Filezilla
Conexão com a Internet
Um host que suporta banco de dados MySQL, phpMyAdmin e JRE / JDK


8 Fontes e Citações:



Mais mastigado que isso, somente papinha de nenem =)

Editado por NvN

Atenciosamente,

Bruno Cesar Gomes Cardoso
Gestor em Tecnologia da Informação
NvN Group Inc.
https://www.nvngroup.com.br/

Link para o comentário
Compartilhar em outros sites


sem dúvida um ótimo tutorial bem organizado! Pena que tem uma galera não gosta de ler , se ler ainda não entende ¬¬ mais tai pra quem quiser aprender :)

Editado por Bluur

Full Stack Developer


Link para o comentário
Compartilhar em outros sites

Muiito Boom , Esse Tutorial pra iniciantes, :sleep:

Bate muito cabeça quando nao sabia , agora q eu sei Conhecimento passo a diante ! :cool:

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

  • 3 months later...
  • 1 year later...
  • 3 weeks later...

Amigo arruma o título por favor, o correto seria: "Criando um Servidor de Lineage 2 no Ubunto"

Porque este tutorial apesar de bacana não funciona em Debian, CentOS e outras distribuições usadas em dedicados e vps principalmente.

 

Parabéns pela iniciativa e no próximo tente deixar mais fácil a leitura (eu achei confuso)

Obrigado por compartilhar seu conhecimento.

 

Aquele abraço!

prja.png
Current Chronic: The Shadowy Nightmare (SDE-V7 Currently Under Construction)☜═㋡

Link para o comentário
Compartilhar em outros sites

Mas funfa em qualquer outra versão baseada na distro Ubuntu, Lubuntun,Kubuntu entre outras versões não-oficiais do Ubuntu gente ! Irei tentar fazer um tutorial de como fazer um servidor só que em vídeo .

Tô voltando, neeegada \o/

Link para o comentário
Compartilhar em outros sites

Parabéns pelo o post e bela organização ! Testado e aprovado no sistema operacional " Librix " , Desenvolvido pela a empressa Itautec ! Librix = Linux !

Com crueldade transformo o complexo em óbvio

pois nenhum lutador nocauteia sem ódio.

Link para o comentário
Compartilhar em outros sites

  • 1 month later...

Desculpe por ter abandonado por tanto tempo esse post.

Vou responder algumas questões levantadas aqui.

 

sudo add-apt-repository ppa:ferramroberto/java

comando inexistente.

Henrique Sacramento: Por se tratar de quando esse tutorial foi feito com o Ubuntu 11.10, pode ser que as funções podem ter mudados, logo tem que buscar onde o JRE ou o JDK da Oracle estão hospedados, pois os mesmos são necessários para o uso do servidor, lembrando que o OpenJDK como é instalado não funciona com os Servidores.

 

Amigo arruma o título por favor, o correto seria: "Criando um Servidor de Lineage 2 no Ubunto"

Porque este tutorial apesar de bacana não funciona em Debian, CentOS e outras distribuições usadas em dedicados e vps principalmente.

Parabéns pela iniciativa e no próximo tente deixar mais fácil a leitura (eu achei confuso)

Obrigado por compartilhar seu conhecimento.

Aquele abraço!

Esse tutorial foi escrito em cima do Ubuntu 11.10 sim, mas ele funciona em qualquer distribuição baseado em Debian, por isso se usa APT-GET.

CentOS é Red Hat usando pacotes YUM, logo não irá funcionar com esses comandos, não é difícil achar os dados exatos para CentOS, Red Hat ou Fedora. Me baseio pelo Ubuntu pois é o Sistema Operacional mais fácil de utilização e produção, por se tratar de um Debian.

 

Parabéns pelo o post e bela organização ! Testado e aprovado no sistema operacional " Librix " , Desenvolvido pela a empressa Itautec ! Librix = Linux !

Não conheço o Librix, mas de acordo com o que falou deve ser uma distribuição Debian, esse é o motivo para funcionar.

 

Aos que me elogiaram, muito obrigado, pretendo atualizar em breve com o Ubuntu 13.04 ou criar com algum Sistema da Distribuição Red Hat.

Atenciosamente,

Bruno Cesar Gomes Cardoso
Gestor em Tecnologia da Informação
NvN Group Inc.
https://www.nvngroup.com.br/

Link para o comentário
Compartilhar em outros sites

Belo tutorial , uma pergunta Linux e Ubuntu é a msm coisa ? o.o ?

 

E outra coisa você se emportaria de fazer um video >< ?

 

Seu tuto é bom mas tem gente como eu que só aprende mesmo vendo nao lendo >< obrg curti ;D

Um mundo de diversão no Lineage 2

https://www.primeworld.com.br

Discord: Em breve

Comunidade brasileira de Lineage. Interlude Remastered / High Five / Essence 

Classes remasterizadas, sistemas únicos, diversão garantida.

Link para o comentário
Compartilhar em outros sites

 

Belo tutorial , uma pergunta Linux e Ubuntu é a msm coisa ? o.o ?

Ubuntu é um sistema operacional de código aberto, construído a partir do núcleo Linux, baseado no Debian.

 

E outra coisa você se emportaria de fazer um video >< ?

 

Seu tuto é bom mas tem gente como eu que só aprende mesmo vendo nao lendo >< obrg curti ;D

No momento não tem como eu criar um vídeo sobre o assunto por motivo de tempo, mas com tantos detalhes não tem como errar a instalação.

Atenciosamente,

Bruno Cesar Gomes Cardoso
Gestor em Tecnologia da Informação
NvN Group Inc.
https://www.nvngroup.com.br/

Link para o comentário
Compartilhar em outros sites

Ubuntu é um sistema operacional de código aberto, construído a partir do núcleo Linux, baseado no Debian.

 

 

No momento não tem como eu criar um vídeo sobre o assunto por motivo de tempo, mas com tantos detalhes não tem como errar a instalação.

 

Certo irei tentar agradeço muito seu comentário =]'

Um mundo de diversão no Lineage 2

https://www.primeworld.com.br

Discord: Em breve

Comunidade brasileira de Lineage. Interlude Remastered / High Five / Essence 

Classes remasterizadas, sistemas únicos, diversão garantida.

Link para o comentário
Compartilhar em outros sites

com esses erros quando executo o startLoginServer.sh

 

 

xrodox@?????????:~/Documentos/login$ ./startLoginServer.sh

/log folder already exists, starting loginserver...

./startLoginServer.sh: ./LoginServer_loop.sh: /bin/bash^M: interpretador inválido: Arquivo ou diretório não encontrado

xrodox@????????:~/Documentos/login$

Link para o comentário
Compartilhar em outros sites

com esses erros quando executo o startLoginServer.sh

 

 

xrodox@?????????:~/Documentos/login$ ./startLoginServer.sh

/log folder already exists, starting loginserver...

./startLoginServer.sh: ./LoginServer_loop.sh: /bin/bash^M: interpretador inválido: Arquivo ou diretório não encontrado

xrodox@????????:~/Documentos/login$

Dá o comando: "$mkdir log" e depois tenta executar novamente. Editado por NvN

Atenciosamente,

Bruno Cesar Gomes Cardoso
Gestor em Tecnologia da Informação
NvN Group Inc.
https://www.nvngroup.com.br/

Link para o comentário
Compartilhar em outros sites

  • 1 year later...
  • 1 month later...
  • L2JBr ADM

Dando um up no tutorial. É um ótimo guia.

 

Dica para quem tiver dificuldades em executar o console usem o app unix2dos as vezes os desenvolvedores editam o .sh em windows e diversas vezes o Ctrl + V por exemplo fica agregado e causa erro na execução.

Link para o comentário
Compartilhar em outros sites

  • 1 month later...

no linux não tem como se conectar pelo L2.INI é ?

 

Aquele que aprendeu e reviveu aqui na l2jbrasil

Faço muitos trabalhos para esta comunidade, assim como tambem ajudo aos que precisão.

A VIDA E UMA CAIXINHA DE SUPRESAS, NAO DEIXE PARA DEPOIS O QUE PODES FAZER AGORA!

 

Link para o comentário
Compartilhar em outros sites

  • 2 months later...

Kelvin, esse tutorial foi criado em 2011, porém os repositórios da Web8Team pode ter mudado, vou procurar o repositório correto para atualizar o post.

Atenciosamente,

Bruno Cesar Gomes Cardoso
Gestor em Tecnologia da Informação
NvN Group Inc.
https://www.nvngroup.com.br/

Link para o comentário
Compartilhar em outros sites

  • 1 month later...

sudo add-apt-repository ppa:webupd8team/java não pegou ...

Se estiver instalando no Debian ou Ubuntu os comandos estão corretos.

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

# Java 8:
sudo apt-get install oracle-java8-installer

#Java 7:
sudo apt-get install oracle-java7-installer

#Java 6:
sudo apt-get install oracle-java6-installer

QdeQ9Kp.png

Link para o comentário
Compartilhar em outros sites

 

Se estiver instalando no Debian ou Ubuntu os comandos estão corretos.

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

# Java 8:
sudo apt-get install oracle-java8-installer

#Java 7:
sudo apt-get install oracle-java7-installer

#Java 6:
sudo apt-get install oracle-java6-installer

 

Você pode trocar uma ideia cmg no pm ?

Link para o comentário
Compartilhar em outros sites

  • 5 months later...
  • 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.