Ir para conteúdo
  • Cadastre-se

L2JBrasil 3.0 Oficial


Tayran.JavaDev

Posts recomendados

  • L2JBr ADM
5 horas atrás, Grundor disse:

Eu poderia estar utilizando um hexid "mock" para essa tarefa? Ou então usar o hexId como uma variável do docker? ;)

Então, consegui, a configuração do docker estáno branch develop porém estou com erro (Não testei com mysql externo, mas deve funcionar)

https://github.com/L2jBrasil/L2jBrasil/issues/43

 

@KhayrusS @HangLooseE

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


Galera, boa tarde!
Consegui um VPS e em breve além do servidor teste, vamos ter um L2 OFF para estudos. Eu estava conversando com o Tayran e vimos que temos uma certa carência de informações oficiais em alguns pontos, então na duvida de ficar procurando o que um site diz e outro diz ao contrário, achamos melhor liberar um L2 Off para todo mundo testar e ver como funciona as coisas!

Em breve volto com novidades! 

Abrs. <3

  • Gostei 6
  • Amei 2
  • Obrigado 2

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

Versão 3.0.3 : https://github.com/L2jBrasil/L2jBrasil/releases/tag/3.0.3

Admin Commands Reworked, now all commands have separate configs. 698983d
Some quests Fixed d7f630e c87e846 b7c4d37
Some HTML Fixed 544f631 8b9c84d be9ef0b 4f63501
Some Skills Fixed #35 4a0358e ff11619
SkillSpellBooks Fixed a556c18
All Database connections in L2PcInstance to PlayerDao 56ec6af

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

 

 

Link para o comentário
Compartilhar em outros sites

Pois então, acabo de fazer o download do serverpack pra testar e brincar um pouco aqui com as crianças e surgiu uma situação.

Eu quero iniciar o servidor no Ubuntu, porém ao rodar a linha de comando para o login.sh e game.sh ocorre o erro:
 

Error: Could not find or load main class com.it.br.loginserver.L2LoginServer
 

Não é uma questão de permissão, já que rodei chmod 777 em ambas as pastas e chmod u+x em ambos os scripts, os quais estou rodando como root usando o sudo.

Tentei alterar o arquivo login.sh apontando diretamente para a pasta onde os libs estão mas deu na mesma.

Link para o comentário
Compartilhar em outros sites

  • L2JBr ADM
2 horas atrás, Fahise disse:

Pois então, acabo de fazer o download do serverpack pra testar e brincar um pouco aqui com as crianças e surgiu uma situação.

Eu quero iniciar o servidor no Ubuntu, porém ao rodar a linha de comando para o login.sh e game.sh ocorre o erro:
 

Error: Could not find or load main class com.it.br.loginserver.L2LoginServer
 

Não é uma questão de permissão, já que rodei chmod 777 em ambas as pastas e chmod u+x em ambos os scripts, os quais estou rodando como root usando o sudo.

Tentei alterar o arquivo login.sh apontando diretamente para a pasta onde os libs estão mas deu na mesma.

Ainda não testei usando o .sh...

Eu fiz aqui usando services do sytemd, acho que  o ubunto já tem.

 

Vc pode tentar, basta modificar:

[Unit]
Description=L2JBrasil Login Server
Requires=mysqld.service
#After=mysqld.service memcached.service

[Service]
WorkingDirectory=/l2jbr/Login/
User=root
Type=simple
TimeoutSec=0
PIDFile=/var/run/l2jbrlogin.pid
ExecStart=/usr/bin/java -Xmx32m -XX:+UseParallelGC -XX:+AggressiveOpts -XX:ParallelGCThreads=2 -cp "../Game/lib/*" com.it.br.loginserver.L2LoginServer 
#2>/dev/null
#ExecStop=/bin/kill -HUP $MAINPID
#ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

Restart=on-failure
RestartSec=42s

StandardOutput=null
StandardError=null

[Install]
WantedBy=default.target

 

[Unit]
Description=L2JBrasil Game Server
Requires=mysqld.service
After=l2jbrlogin.service

[Service]
WorkingDirectory=/l2jbr/Game/
User=root
Type=simple
TimeoutSec=0
PIDFile=/var/run/l2jbrlogin.pid
ExecStart=/usr/bin/java -Xmx1024m -XX:+AggressiveOpts -XX:+HeapDumpOnOutOfMemoryError -cp "./lib/*" com.it.br.gameserver.GameServer
# 2>/dev/null
#ExecStop=/bin/kill -HUP $MAINPID
#ExecReload=/bin/kill -HUP $MAINPID
KillMode=process

Restart=on-failure
RestartSec=42s

StandardOutput=null
StandardError=null

[Install]
WantedBy=default.target

 

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

  • L2JBr ADM

Faça um teste por favor:

Dentro da pasta do login rode:

java -Xmx32m -XX:+UseParallelGC -XX:+AggressiveOpts -XX:ParallelGCThreads=2 -cp "../Game/lib/*" com.it.br.loginserver.L2LoginServer

 

Dentro da pasta do game rode:

java -Xmx1024m -XX:+AggressiveOpts -XX:+HeapDumpOnOutOfMemoryError -cp "./lib/*" com.it.br.gameserver.GameServer

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 hora atrás, Grundor disse:

Faça um teste por favor:

Dentro da pasta do login rode:


java -Xmx32m -XX:+UseParallelGC -XX:+AggressiveOpts -XX:ParallelGCThreads=2 -cp "../Game/lib/*" com.it.br.loginserver.L2LoginServer

 

Dentro da pasta do game rode:


java -Xmx1024m -XX:+AggressiveOpts -XX:+HeapDumpOnOutOfMemoryError -cp "./lib/*" com.it.br.gameserver.GameServer
 

Eu substituí essas linhas nos .sh e funcionou perfeitamente, obrigado @grundor . 

 

Porém ficam aparecendo logs como o abaixo floodando no prompt. Como remover isso?

[HikariPool-1 housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Pool stats (total=10, active=0, idle=10, waiting=0)


Complementando: tem de alterar o comando pra ele colocar um nohup e o resultado em um arquivo de LOG senão o console fica preso e quando se fecha o SSH o servidor cai.

login.sh

Citar

nohup java -Xmx64m -XX:+UseParallelGC -XX:+AggressiveOpts -XX:ParallelGCThreads=2 -cp "../Game/lib/*" com.it.br.loginserver.L2LoginServer > log/stdout.log 2>&1 &

 

game.sh

Citar

nohup java -Xmx4G -XX:+AggressiveOpts -XX:+HeapDumpOnOutOfMemoryError -cp "./lib/*" com.it.br.gameserver.GameServer > log/stdout.log 2>&1 &

 

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Fahise disse:

Eu substituí essas linhas nos .sh e funcionou perfeitamente, obrigado @grundor . 

 

Porém ficam aparecendo logs como o abaixo floodando no prompt. Como remover isso?


[HikariPool-1 housekeeper] DEBUG com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Pool stats (total=10, active=0, idle=10, waiting=0)


Complementando: tem de alterar o comando pra ele colocar o resultado em um arquivo de LOG senão o console fica preso e quando se fecha o SSH o servidor cai.

Exemplo:

 

 

Eu estarei atualizando tudo que é usado para Linux, desde o database.sh até os inicializadores. estão muito desatualizados.

Eu fiz passo a passo em um Ubuntu toda a compilação e instalação do server, o database.sh estava com problemas e arrumei ele todo, e o login.sh e game.sh não teve nada para arrumar.

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

 

 

Link para o comentário
Compartilhar em outros sites

Em 19/11/2017 at 14:49, Grundor disse:

Eu poderia estar utilizando um hexid "mock" para essa tarefa? Ou então usar o hexId como uma variável do docker? ;)

Sim, existe essa opção. Eu só acho "trabalhoso" ter que adicionar um hexid no banco pra cada Gameserver que seja conectado. :) 

@Fahise Eu não tive problemas em usar os '.sh' existentes. O que pode ter acontecido é a troca de final de linha, vale à pena olhar esse link: @Tayran.JavaDev @Grundor

Dealing with line endings

Citar

Porém ficam aparecendo logs como o abaixo floodando no prompt. Como remover isso?

O HikariCP utiliza slf4j como API de log e a implementação que escolheram foi o logback, o problema é que o logback não foi configurado, então os logs são tudo jogados pro console. Outro problema é que agora existem duas API's de implementação de logs, logback e o commons-logging, esse último já é bem antigo, que deverá ser trocado em breve.

As soluções a curto prazo:

  • Configurar o logback;
  • Trocar o logback por um API que utilize o slf4j, o commons-logging é uma alternativa, outra alternativa é o log4j 2.

A longo prazo:

  • Definir qual API deverá ser usada, para manter um padrão e provavelmente refazer o sistema de logs.

 

Citar

Complementando: tem de alterar o comando pra ele colocar um nohup e o resultado em um arquivo de LOG senão o console fica preso e quando se fecha o SSH o servidor cai.

Eu particulamente não gosto da ideia de redirecionar a saída do console desse jeito, quem deveria se preocupar com isso é o sistema de logs, só uma opinião pessoal. Sem dúvidas o 'nohup' é importante para utilizar, seria interessante também avaliar a necessidade de utilizar o 'nice' na inicialização do gameserver.

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

@KhayrusS eu não tive problemas com os sh de inicialização, nem de registro de gameserver, só com o de instalar a DB.

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

 

 

Link para o comentário
Compartilhar em outros sites

11 horas atrás, Tayran.JavaDev disse:

@KhayrusS eu não tive problemas com os sh de inicialização, nem de registro de gameserver, só com o de instalar a DB.

Os problemas que tive foi em um servidor Ubuntu 16.

13 horas atrás, KhayrusS disse:

Eu particulamente não gosto da ideia de redirecionar a saída do console desse jeito, quem deveria se preocupar com isso é o sistema de logs, só uma opinião pessoal.

Pois então, eu testei no mesmo servidor há um tempo atrás um serverpack da L2jDream que não tinha essa necessidade, e realmente é muito melhor.

Link para o comentário
Compartilhar em outros sites

  • L2JBr ADM

Não é necessário nohup, vc pode criar serviços nativos do linux (se este tiver sytemd) criando os arquivos de serviço conforme descrevi aqui 

 

 

xdFjUGy.png

 

 

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 hora atrás, Fahise disse:

Os problemas que tive foi em um servidor Ubuntu 16.

Pois então amigo, esses testes que mencionei foi no ubuntu, tanto é que atualizei o DB Installer por que não estava funcionando.

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

 

 

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...
1 minuto atrás, l2triedge disse:

da pra por isso online? l2jbrasil 3.0.3?

 

Para um server em produção não é indicado ainda não, tem muitos erros para corrigir, mas tem gente que está com ele online e ajudando muito nos reports de correção de bugs, hoje estarei com um pouco de tempo inclusive para colocar em dia as correções.

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

 

 

Link para o comentário
Compartilhar em outros sites

Não sei se já tem, mas alguém poderia explicar ou indicar um tutorial para ligar ele no linux? estou utilizando o linux mint a um tempo, tentei instalar algumas vezes mas, sem sucesso.

Desde já Obrigado.

Editado por Jugger

Positividade Sempre.

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Jugger disse:

Não sei se já tem, mas alguém poderia explicar ou indicar um tutorial para ligar ele no linux? estou utilizando o linux mint a um tempo, tentei instalar algumas vezes mas, sem sucesso.

Desde já Obrigado.

 

De um linux para outra quase nada muda para ligar o servidor, qual parte está com dificuldades ?

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

 

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, srfausto disse:

Os fight não iniciam com HP full

 

bom eu olhei a soucer e acontece por esse motivo

L2PcInstance newChar = null;
L2PcTemplate template = null;

 

Na classe CharacterCreate os 2 objetos são null  tanto como player e template ( raça)

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

Em 11/12/2017 at 03:34, Tayran.JavaDev disse:

 

De um linux para outra quase nada muda para ligar o servidor, qual parte está com dificuldades ?

To com dúvidas na parte de executar o login e game ta dando comando invalido, vi uns tutorias aqui no fórum, mas não consegui.

Positividade Sempre.

Link para o comentário
Compartilhar em outros sites

Em 23/12/2017 at 17:03, Jugger disse:

To com dúvidas na parte de executar o login e game ta dando comando invalido, vi uns tutorias aqui no fórum, mas não consegui.

Você está executando em linux ? Qual distro ? Mande prints.

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

 

 

Link para o comentário
Compartilhar em outros sites

Em 27/12/2017 at 12:44, l2triedge disse:

@Tayran.JavaDev como faço pra adicionar o npc buffer os custom npc naota dando certo.....  no l2jbrasil 3.0.3

Estou viajando. Da uma olhada nesse tópico que vou deixar aqui. Adaptei para o projeto um npc rank. Segue a mesma logica de trocar os imports e vai conseguir.

 

 

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

 

 

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.