Bom ... resolvi postar um tutorial de como criar quest, já está na hora de ajudar as pessoas que me ajudaram... E acho que vai ser bastante útil para todos aqueles que começam a fazer servidores e mecher em java, já que fiz exclusivamente para o SE.
IMPORTANTE: também freqüento outros fóruns, mas a que me tratou melhor foi a da equipe da Secret... por isso fiz esse tutorial especialmente e exclusivamente para vocês que adoram o fórum e gostam de Lineage II Java!
Meus Parabéns ao Equipe da Secret!
então ... chega de falar então vamos ao tutorial ... :1a:
A primeira coisa a fazer é adicionar as classes Java necessárias na busca. ex:(com.l2jdemonniac.gameserver.model.quest).
Código:
# Quest Search Created Mr. by allanalcantarA
import sys
from com.l2jdemonniac.gameserver.model.quest import State
from com.l2jdemonniac.gameserver.model.quest import QuestState
from com.l2jdemonniac.gameserver.model.quest.jython import QuestJython as JQuest
Citação:
Class QuestJython --> (importado sob o nome JQuest) contém informações sobre as buscas.
Class State --> usou isso para descrever o estado da quest.
Class QuestState --> aplicado diretamente para controlar o status de um jogador na missão ou quest.
Em seguida, adicione algumas constantes que vai fazer a busca mais fácil de ler. Se não, pode haver dificuldades com a edição a busca no futuro.
Constantes de nossa busca - NPC ID e itens.
Em seguida,ao declarar COMPLETED, tiramos todos os itens que ele juntou do jogador e dar-lhe uma recompensa. Em seguida, informa o servidor que a busca está concluída e não serão repetidas. (St.exitQuest (False))
Finalmente, a função auxiliar para verificar o número de itens no jogador para completar a quest. (St deve ser QuestState):
]Em seguida, declarar-se a própria busca class. Quest - a classe do python, que estende a classe java no com.l2jdemonniac.gameserver.model.quest.jython.Que stJyth Então, nós declaramos um onEvent, o método que é chamado java, se alguém começou a busca.
onEvent def (event, self, r):
st.getState id = ()
se id == created: st.setState (started)
elif id == COMPLETED: pass
elif id == STARTED: check (r)
return
Citação:
O método init - para este construtor da classe Jython que chama a classe Java. Tem os seguintes parâmetros:
Spoiler
• self - uma referência a si mesmo.
• ID - um identificador numérico da busca para o cliente.
• name - O nome da quest, que será emitida diretamente do próprio servidor.
• descr - o nome da descrição de busca que é exibida para o jogador quando a busca tem um NPC, para que possamos tomar, mas essa busca, e ainda outra.
Citação:
OnEvent o método é chamado de Java. Executa início a busca. Tem os seguintes parâmetros:
Spoiler
• self - link diretamente para a Quest Tutorial
• event - a seqüência de caracteres para identificar o evento de abertura para Java.
• ST - uma referência ao QuestState, para acompanhar o estado atual do jogador.
Citação:
A primeira linha é uma verificação sobre o estado atual da busca diretamente para o jogador eo estado de lavada em 'id' uma variável.
Se a busca só é tomada, então anuncia o início da busca (se id == created em: st.setState (started)).
Se a busca é feita, então faça nada elif id == COMPLETED: pass)
Se a quest já começou (started), então chama a função check (check (), definido acima) dos itens que têm caráter para completar a quest. Nós não verificamos "evento" a variável, porque No nosso exemplo (quest Tutorial) são para todos os eventos que ocorrem. O Método é chamado de (OnEvent).
E finalmente, quando o esqueleto é determinada na quest, estamos a criar a busca em si (e defini-lo no servidor) e declará-lo.
Código:
QUEST = Quest (201, "Tutorial", "Search Tutorial")
CREATED = State ("Start" QUEST)
STARTED = State ('Introduction', QUEST)
COMPLETED State = ('Completed' Quest)
Citação:
Quest vai ter um ID de cliente - 201 ID «Tutorial» e descrição «busca Tutorial».
Também terá três estados: created, started, completed. Os nomes dos estados pode ser usado para localizar automaticamente o necessário. HTM.
Por exemplo, para CRIADOR vai corresponder "Start.htm", por PASSOS - "Started.htm e será mostrado 'Completed.htm" CONCLUÍDO. Os nomes dos estados usado da mesma forma para armazenar o estado da busca no banco de dados, quando um jogador sai do jogo, para que os nomes não devem ser repetidos na mesma busca.
Precisamos também determinar o estado inicial da busca, quando um jogador levou apenas, e só a partir do NPC.
Esta quest terá nada mais. Tudo que você necessita para funcionar correctamente a busca já foi adicionado. Aqui está o texto integral da busca:
Código:
import sys
from com.l2jdemonniac.gameserver.model.quest State
from com.l2jdemonniac.gameserver.model.quest QuestState
from com.l2jdemonniac.gameserver.model.quest.jython QuestJython as JQuest
onEvent def (event, self, r):
st.getState id = ()
se id == created: st.setState (started)
elif id == COMPLETED: pass
elif id == STARTED: check (r)
return
QUEST = Quest (201, "Tutorial", "busca Tutorial")
CREATED = State ("Start" QUEST)
STARTED = State ('Introduction', QUEST)
COMPLETED State = ('Completed' Quest)
O jogador vem para o NPC inicial (neste caso, 7056), clique em "Quest". Quest será criado e do estado da quest irá prosseguir para criado eo jogador será apresentado ao Start.htm página com uma descrição da quest. Em seguida, o método onEvent, a caixa Start.htm abrira uma página de abertura traduzida em busca de status e INICIADOS, o jogador será apresentado com uma pagina Started.htm, onde será optado a como encontrar e keltirs. Etc.
Se o estado STARTED será registado as «presas», keltirs cair matando. O jogador pode voltar para o NPC de partida e perguntar sobre a quest - onEvent método será chamado novamente. Se um jogador não tem o número necessário de itens, o método de seleção () não traduz a busca para o próximo estado e Started.htm será mostrada novamente. Mas se um jogador tiver o número necessário de indivíduos (neste caso, 4 itens), a verificação do método () chama a conclusão () vai traduzir a busca de um novo estado preenchido, tirar todos os caninos, dará o mapa do mundo, porque uma recompensa para a busca, vai Completed.htm e completar a quest.
Agora vamos fazer a nossa busca mais parecido com o que deveria, por si só fornecer.
Primeiro de tudo, temos 3 métodos para declará-las em Java - onKill onTalk e onEvent. Se os métodos e onKill onTalk não declarados, em seguida, todos eles vão fazer o onEvent método, ou seja, identificar monstros busca e desencadear conversas NPC. Há uma nota, os métodos e onKill onTalk fará apenas com diálogos NPC, dependendo do estado atual da busca. OnKill método será invocado apenas quando matar um monstro quest.
Vamos ver como o método que é chamado com o keltir onKill assassinato capaz de buscar INICIADOS:
Código:
STARTED.addKillId (KELTIR_NPC_ID)
e do método na classe onKill Quest:
Código:
class Quest (JQuest):
onKill def (self, r, NPCID):
se NPCID == KELTIR_NPC_ID:
n = getCount (r)
se n == 0:
return "Chat0.htm"
elif n == 1:
return "Chat1.htm"
elif n> = 4:
return "Chat4.htm"
return "Collected" + str (n) + "de 4 dentes"
return
Citação:
Método onKill (assim como um método onTalk) tem as seguintes opções:
Spoiler
• self - a busca
• NPCID - ID NPC, que nós temos que matar (se ele é um método onTalk, então o ID do NPC, com quem devemos falar).
• ST - o estado atual do jogador.
Neste método, verificar e observar se os mortos keltir'om NPC. Basicamente, este teste não é necessária porque Temos apenas KELTIR_NPC_ID.
Em seguida, verifique o número de objetos (neste caso, o número de caninos) e, se não o fizerem, em seguida, retornar a string "Chat0.htm", se apenas um item, em seguida, retornar a string "Chat1.htm", se os mesmos itens 4 ou mais ", Chat4.htm ". Se a string retornada dos métodos onEvent onKill ou onTalk, em seguida, o servidor htm será relevantes. Em Chat0.htm pode ter o seguinte texto: "Você não tem uma única presa, volte mais tarde, quando coletar 4 partes e blá, blá, blá ..." no Chat1.htm pode ser o seguinte texto: "Você tem apenas uma presa em recolher essa ainda .... " Em Chat4.htm - "Você tem o número necessário de itens, volte ao seu treinador que iria completar a quest ..."
Nota: Se uma linha começa com o return ", ele irá mostrar a página html com o texto que vale mais. Então, em vez de:
Código:
return "Chat4.htm"
pode ser fornecido:
Código:
return "<html> <body> Volte para o seu treinador para completar a quest </ body> </ html>"
Citação:
Além disso, se a string termina sem Htm. Ou no começo lá, o texto será exibido como um sistema de mensagem na janela de chat. No nosso caso, vamos fazê-lo, isso seria para cada assassinato keltik mensagens do sistema: "N coletados a partir dos 4 dentes".
Nosso código para onKill tem uma desvantagem. Ele vai mostrar constantemente Chat0.htm, Chat1.htm e Chat4.htm, também precisamos que Chat0.htm e Chat1.htm aparecer apenas uma vez. Como vamos fazer? Com a ajuda de variáveis.
Em cada linha de busca podem ser armazenados usando variáveis. Essas variáveis ?? são armazenadas no seu banco de dados. Em cada método, podemos definir, ler e excluir variáveis. Vamos mudar método do onKill , para que o diálogo seja chamado apenas uma vez.
Código:
onKill def (self, r, NPCID):
if NPCID == KELTIR_NPC_ID:
n = getCount (r)
if n == 0:
None if st.get == ("chat0 '):
st.set ("chat0", "true")
return "Chat0.htm"
elif n == 1:
None if st.get == ("chat1 '):
st.set ("chat1", "true")
return "Chat1.htm"
elif n> = 4:
return "Chat4.htm"
return "Collected" + str (n) + "de 4 dentes"
return
Citação:
Se o jogador não tem dentes (n = 0), então nós começamos com variável 'chat0. Quando o método onKill é chamado pela primeira vez, ainda não é o que as variáveis ?? não estão disponíveis e nenhum retorno python. Neste caso, declarar uma variável e mostra diálogo de uma (Chat0.htm) . Quando matamos keltir, mas não saia sua presa, o st.get função ('chat0') retorna a seqüência True, mas não if. E o segundo tempo da janela Chat0.htm não aparece, mas na janela do chat irá linha «Collected 0 de 4 dentes». Seguindo o mesmo princípio é feito com Chat1.htm.
Aqui está a versão final do trabalho da busca:
Código:
import sys
from com.l2jdemonniac.gameserver.model.quest import State
from com.l2jdemonniac.gameserver.model.quest import QuestState
from com.l2jdemonniac.gameserver.model.quest.jython import QuestJython as JQuest
for npc in NPCS:
QUEST.addStartNpc(npc)
QUEST.addTalkId(npc)
PRONTO!
então é isso ...
Acho que fiz tudo certo ...
então se tiver faltando algo, e quem poder me corriga!
Abraço forte.
em breve mais tutoriais, e mais mods.
Citação:
AVISO: Teste feito como Base no meu Projeto na Quest e Na criação do tutorial..
credits allanalcantarA
Código:
ATENÇÃO: Caso alguem poste em outro Fórum não remova os créditos ...
são totalmente meus.
Exclusivamente para Equipe Secret Experience
Mazokista
05-04-2011 04:13 PM
[ATTENTION]Movido para area de Tutorial[/ATTENTION]
razor999
24-08-2011 11:54 AM
[SIZE="3"]deveria ganhar fixo :1a:
tem muita gente que não sabe fazer quest ;/
eu mesmo fui aprender um dias desses ;D
e ainda erro muito ainda passo horas revendo aonde errei ^^
com tuto desse ai concerteza meu problema e doz outros Já eram sobre criação de
quest parabéns allan :policeman:[/SIZE]
allanalcantara
25-08-2011 03:31 PM
obrigado meu amigo, vendo esse tutorial da pra criar uma ótima quest, custom.
isso fica ao critério do criador né.
rsrsrs :D
sheah
05-01-2012 12:05 PM
Poderia ter um volume 2 ai explicando com iimgs,A primeira coisa a fazer é adicionar as classes Java necessárias na busca. ex:(com.l2jdemonniac.gameserver.model.quest).
isso eu não entendir onde fazer,é com eclipse? como onde coloco isso? :S
OliverSykes
05-01-2012 01:21 PM
Na pasta java você vai proucurar a pasta com e seguindo a pasta com se vai achar um arquivo com.l2jdemonniac.gameserver.model.quest porem o nome l2jdemonniac é apenas exemplo no lugar dele vai ta nome da revisão que você usa é como se tive se alterando import de um buffer to apenas pondo um exemplo vocÊ so vai alterar nome !