Ir para conteúdo
  • Cadastre-se

[ TUTORIAL ] Criando NPC Quest


Rüsty ~

Posts recomendados

BOM IREI AJUDAR VCS COM ALGUNS COMANDO DE QUEST

 

 

 

 

 

scripts Quest definir o fluxo de completa ou quase completa dos eventos que ocorrem a partir da

início ao fim de uma busca. Isso inclui, mas não é limitted, começando e aceitando

a busca, na sequência de diálogos complexos, atacando ou matando monstros, descobrindo itens quest, desova

mobs quest, completando uma quest, e recebendo prêmios.

 

A fim de scripts busca para funcionar correctamente, pelo menos, três aulas devem ser importados do Java:

from net.sf.l2j.gameserver.model.quest import State

from net.sf.l2j.gameserver.model.quest import QuestState

from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuestt

 

Além disso, a biblioteca jython "sys" é geralmente importado de conveniência. Mais classes pode

ser importado, conforme necessário, para ter acesso a outros componentes do núcleo e melhorar as habilidades

do script.

 

scripts busca Jython essencialmente herdam da classe Java net.sf.l2j.gameserver.model.quest.Quest

Desenvolvedores que estão confortáveis com o Java pode ler o código-fonte para esta classe, como previsto pela

projeto l2jserver (www.l2jserver.com) para obter mais detalhes e funções disponíveis. Alternativamente, um

pode ler em frente nesta documentação.

 

 

Funções disponíveis:

Existe um conjunto de funções que são predefinidos para quests e são desencadeadas a partir de várias ações.

Estas funções, seus gatilhos, e os parâmetros passados para o script estão definidas abaixo:

 

1) onEvent (self, evento r)

Essa função é chamada sempre que um jogador clica em um link em um diálogo de busca.

O parâmetro "r" contém uma referência para o QuestState do jogador que usou o link.

O parâmetro "event" contém uma seqüência de identificador para o evento. Geralmente, essa seqüência

é transmitida diretamente através do link. Por exemplo:

<a action="bypass -h Quest 626_ADarkTwilight 31517-1.htm"> Olá </ a>

O link acima define a variável de evento para "31517-1.htm" para a busca 626_ADarkTwilight

O parâmetro "auto" é uma referência para a busca em si. Você pode usar self.XXXX onde XXXX é

qualquer função definida na classe pai de sua busca.

 

 

2) onAttack (self, jogadores, NPC)

Essa função é chamada sempre que um jogador ataca um NPC que está registrado para a busca

O parâmetro "npc" contém uma referência à instância exata do NPC que fui atacado

O parâmetro "player" contém uma referência para a instância exata do jogador que atacou.

O parâmetro "auto" funciona da mesma forma em onEvent.

 

3) onKill (self, jogadores, NPC)

Esta função é chamada sempre que um jogador mata um NPC que está registrado para a busca

Todos os parâmetros são os mesmos que em onAttack

 

4) onTalk (self, jogadores, NPC)

Esta função é chamada sempre que um jogador clicar com o "Quest" link de um NPC que está registrado

para a busca.

Todos os parâmetros são os mesmos que em onAttack

 

5) onFirstTalk (self, jogadores, NPC)

Essa função é chamada sempre que um jogador conversa com um NPC que está registrado para a missão. Isto é,

ele é disparado a partir do primeiro clique sobre o NPC, não via outra janela.

NOTA: Cada NPC podem ser registrados para no máximo uma busca para desencadear esta função. Em outras palavras,

o mesmo um NPC não pode responder a um "onFirstTalk" pedido de duas missões diferentes.

Tentativa de registrar um NPC em duas missões diferentes para essa função irá resultar em uma das

duas registo a ser ignorado.

NOTA: Uma vez que um link Quest não for clicado, a fim de chegar a este, um estado de busca pode ser inválido dentro desta

função. O codificador do script pode precisar criar um estado de nova missão (se necessário), por meio de:

r = self.newQuestState (jogador)

Todos os parâmetros são os mesmos que em onAttack.

 

6) onDeath (self, personagem, NPC, r)

Essa função é chamada sempre que uma instância exata de um personagem que foi registrado anteriormente para este

evento morre. A inscrição para eventos onDeath não é feito através da busca em si, mas é tratado, em vez

pela QuestState de um jogador em particular.

O parâmetro "npc" contém uma referência à instância exata do NPC que matou o personagem.

O parâmetro "caráter" contém uma referência para a instância exata do caractere que foi morto.

O parâmetro "r" contém uma referência para o QuestState de quem estava interessado (em espera) para o matar

O parâmetro "auto" funciona da mesma forma em onEvent.

 

7) funções de registro:

As funções descritas abaixo têm uma única finalidade: Para registrar um NPC de evento dispara. Basta colocar,

um NPC deve ser registrado em busca de um determinado evento, para que o NPC para responder à ocorrência

de dessa hipótese.

Funções de registo não são chamados automaticamente. Em vez disso, eles devem ser adicionados na parte inferior do seu

busca script.

Descrições de todas as funções de registro a seguir:

 

a) addStartNpc (NPCID)

Registra um NPC para eventos onTalk. Estes NPCs são considerados NPCs começar. Portanto, o jogador

não necessita ter começado a quest para acessar a seção onTalk da busca.

Em vez disso, quando um jogador conversa com NPCs registrado por addStartNpc, então os jogadores obtém automaticamente

um estado criado para esta busca.

O parâmetro "NPCID" contém o ID do modelo para este NPC.

 

b) addTalkId (NPCID)

Registra um NPC para eventos onTalk. Esses NPCs não são considerados NPCs começar (a menos que eles também são

registada com addStartNpc). NPCs registrados usando addTalkId só responder ao jogador

clique de um "Quest" link se e somente se o jogador tem alredy começou a busca.

O parâmetro "NPCID" contém o ID do modelo para este NPC.

 

c) addAttackId (NPCID)

Registra um NPC para eventos onAttack. Os jogadores não precisam ser registrados para a busca, a fim

para desencadear uma resposta a um ataque contra este NPC.

O parâmetro "NPCID" contém o ID do modelo para este NPC.

 

d) addKillId (NPCID)

Registra um NPC para eventos onKill. Os jogadores não precisam ser registrados para a busca, a fim

para desencadear uma resposta a este NPC ser morto.

O parâmetro "NPCID" contém o ID do modelo para este NPC.

 

Quest:

Depois de escrever o script, a fim de iniciar sua busca e registrá-lo com o servidor do jogo, perto do

parte inferior do seu script, você deve usar:

QUEST Quest = (id, "12345_QuestName", "Descrição")

Por exemplo:

QUEST Quest = (626, "626_ADarkTwilight", "A Twilight das Trevas")

 

Muitas vezes, é útil para definir o nome da quest em uma variável no início do script (geralmente chamado de "qn").

Nesse caso, você pode registrar sua busca utilizando:

QUEST Quest = (626, qn ", um crepúsculo das Trevas")

 

QuestState:

A QuestState não é parte da definição de busca em si, mas contém a informação que acompanha o

progresso de um jogador em particular para esta missão. Dado um exemplo de jogador, a busca de estado de que o jogador de

esta missão pode ser encontrada por meio de:

r = player.getQuestState ("12345_questname")

Se o jogador não tem uma quest de estado para esta missão (ou seja, o jogador não está fazendo essa quest), então

r será nulo.

Além disso, o queststate de um membro do partido aleatória que tem uma determinada variável eo valor armazenado para esta missão,

podem ser descobertos por meio de:

self.getRandomPartyMember partyMember = (o jogador, "variável", "valor")

r = partyMember.getQuestState ("12345_questname")

Da mesma forma, o queststate de um membro do partido aleatória que atingiu um estado em particular para esta missão,

podem ser descobertos por meio de:

partyMember self.getRandomPartyMemberState = (o jogador, Estado)

r = partyMember.getQuestState ("12345_questname")

Por exemplo, em vez de "variável" e "valor" na primeira amostra, pode-se usar o "cond" e "1". Em vez de Estado

a segunda amostra, pode-se usar INICIADOS

Enquanto um QuestState podem ser descobertos a partir de um jogador, ele também pode acessar a instância do jogador de volta, quando necessário, usando

st.getPlayer ()

Todos os outros métodos de execução pública de QuestState são acessíveis a partir do Jython. Da mesma forma, os objetos

acessível a partir de r pode ser ainda utilizado para chegar mais fundo. Por exemplo, pode fazer algo como:

st.getPlayer (). getClan (). getLeader (). getPlayerInstance (). getPet ()

(Esse exemplo pode não ser totalmente exatos ou pode ficar obsoleto no futuro ... é apenas um meio para

demonstation pouco de como se pode chegar a mais em uma cadeia de objetos que são acessíveis. Neste

caso, desde o QuestState, obtemos o jogador cuja QuestState este é, então, fazer clã do jogador,

líder do clã, a instância dirigente do jogador real, e de lá, encontramos animais de estimação summonned do líder!)

 

 

ESTADO:

Estados são usados para controlar os segmentos da procura. Cada estado tem sua própria lista de itens de busca que pode ser encontrada.

Após a conclusão ou aborto de uma quest, ou a mudança de um estado para outro, ESTADOS cuidar da limpeza

o excesso de itens de quest do inventário de um jogador. Para definir um estado, deve-se usar:

STATEVARIABLE Estado = ('StateName, QUEST)

por exemplo:

INICIADOS = Estado ('Introdução', QUEST)

O Estado criou é obrigatório! Todas as quests deve tê-lo. Ele é definido como:

CRIADA = Estado ("Iniciar" QUEST)

O estado PREENCHER é obrigatória para quests não repetível. Ele é definido como:

CONCLUÍDO Estado = ('Concluído' Quest)

Outros estados podem ser criados de forma arbitrária. estados mais comumente usadas são "Iniciando", "Introdução", "progresso" ou

Estados como "PartXXXX" (Part1, Part2, etc)

 

 

 

Creditos : Rusty

2qlsrrc.png
Link para o comentário
Compartilhar em outros sites


Sempre quis edita uma Quest propia, mas esse Tutorial ae e meio suspeito. :dry:

 

Mesmo assim irei testalo. Por mais que seja meio Fodin de faser hehe. :wink:

 

 

Basta Saber Mexer Em NPC's de Quest que vc consegue facim ;D

 

Supeito? Oo Pq?

2qlsrrc.png
Link para o comentário
Compartilhar em outros sites

Ao inves de estar encinando a Fazer um NPC para quest vooc esta ensinando a Modificar a quest para um Item CUSTOM

 

Deveria trocar o Nome do Topico [ TUTORIAL ] Editando Quest Para item Custom

kVyUp.png

Entre em nosso forum para saber mais a respeito do projeto!

Link para o comentário
Compartilhar em outros sites

  • 1 year later...

ai mano tem como me explica porq quando eu baixo um npc ex: npc rank pvp pk aparece PRa fazer quest ? si souber faz um toturial pra revisão l2jfrozen bgdo

 

Aqui não é o local correto para pedir esses tipos de ajuda, que não se refere ao tutorial do mesmo .

''Junte-se a nós para recuperarmos os Links Offline''

Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

ai mano tem como me explica porq quando eu baixo um npc ex: npc rank pvp pk aparece PRa fazer quest ? si souber faz um toturial pra revisão l2jfrozen bgdo

 

Edite os imports, por exemplo:

 

Se o NPC que vc quer colocar, for de server l2j e o seu server for l2emu (numa suposição) basta mudar onde está em vermelho.

 

ANTES

 

import sys

from java.util import Iterator

from l2jserver.gameserver.model.quest import State

from l2jserver.gameserver.model.quest import QuestState

from l2jserver.gameserver.model.quest.jython import QuestJython as JQuest

 

 

DEPOIS

 

import sys

from java.util import Iterator

from emu.gameserver.model.quest import State

from emu.gameserver.model.quest import QuestState

from emu.gameserver.model.quest.jython import QuestJython as JQuest

 

 

Obs.: Se não sabe qual é o import de seu servidor, uma idéia seria, abrir o arquivo de algum npc existente, por exemplo dentro de ---> gameserver\data\scripts\custom procure algum arquivo com final ---> __init__.py abra-o com bloco de notas e observe qual a extenção que está la. Depois é so fazer como descrito acima.

 

Lembre-se de colocar td que veio no npc nos seus devidos locais. (com server desligado) após ter colocado tudo, ligue seu servidor e de spawn no npc.

 

Comando: //spawn xxxxxx <--- coloque o ID do npc no lugar dos xxxx. por exemplo: //spawn 12345 (e dps enter)

 

Boa sorte.

 

Créditos: ADM-DarkAngel

Link para o comentário
Compartilhar em outros sites

  • 1 month later...
  • 3 years later...

Bom como o Anonimo falou o tutorial ensina a editar um npc de uma quest para outra, eu também procuro um tutorial para criação de um npc quest !

 

Se alguém achar favor me contate! :rolleyes:

tbm tenho a mesma duvida!!

j9NKAW1.gif

"A Vontade de se Preparar Transforma Heróis"

"A Dor física é só um mero Sentimento"

🦸🏽‍♂️

rogeriomorais.gif

Link para o comentário
Compartilhar em outros sites

  • 1 year 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.