Você não é registrado, por favor registre-se para ter acesso ao conteúdo completo.
Caso seja registrado, efetue login.
Esqueceu sua senha? Clique aqui
Recomendamos o uso do Mozilla Firefox para uma melhor visualização.    


Início Postados Hoje Marcar Fóruns Como Lidos Álbums Banidos SE Team Medalhas
Voltar   Secret Experience > Área L2J > [L2J] Tutoriais
Registrar Loteria VIPStaff SERegras do fórum Comunidade Arcade Postados Hoje Pesquisar Experience
   

Secret Experience.NET   Secret Experience Corporation - Welcome To The Real World
     Anúncios SE

Resposta
 
Ferramentas do Tópico Modos de Exibição
Antigo 04-04-2011, 11:51 PM   #1
Criando Quest
allanalcantara allanalcantara está offline 04-04-2011, 11:51 PM

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 ...

A primeira coisa a fazer é adicionar as classes Java necessárias na busca. ex:(com.l2jdemonniac.gameserver.model.quest).


Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
# 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.


Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
KELTIR_NPC_ID = 12082
FANGS_ITEM_ID = 1859 
DROP_RATE = 500000
WORLD_MAP_ITEM_ID = 1665

Em seguida, declarar uma função auxiliar.
Função do número de itens de quest (keltir presas) jogador. (St deve ser QuestState):

Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
getCount def (r):
  st.getQuestItemsCount return (FANGS_ITEM_ID)
Citação:
--> Função para completar a quest (r deve ser QuestState):

Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
def COMPLETED (r):
  st.setState (COMPLETED)
  st.clearQuestDrops ()
  st.takeItems (FANGS_ITEM_ID, -1)
  st.giveItems (WORLD_MAP_ITEM_ID, 1)
  st.exitQuest (False)
  return

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):


Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
check def (r):
  se 4 = getCount (r)>:
    COMPLETED (r)
  return
]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.

Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
classe Quest (JQuest):

  def __init__ (self, id, name descr): (descr self, name, id) JQuest.__init__

  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: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
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.



Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
QUEST.setInitialState (created)
QUEST.addStartNpc (7056)
Aviso: no inicio do htm ao NPC tem que ser uma referência para a busca:


Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
<a action="bypass npc_%objectId%_Quest"> -h
Agora você precisa adicionar um goto(ir) para esta busca por estado STARTED, por que iria ficar nas coisas necessárias.

Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
STARTED.addQuestDrop (KELTIR_NPC_ID, FANGS_ITEM_ID, DROP_RATE)
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: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
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

KELTIR_NPC_ID = 12082
FANGS_ITEM_ID = 1859 
DROP_RATE = 500000
WORLD_MAP_ITEM_ID = 1665 


getCount def (r):
  st.getQuestItemsCount retur (FANGS_ITEM_ID)

def completed (r):
  st.setState (completed)
  st.clearQuestDrops ()
  st.takeItems (FANGS_ITEM_ID, -1)
  st.giveItems (WORLD_MAP_ITEM_ID, 1)
  st.exitQuest (false)
  return

check def (r):
  se 4 = getCount (r)>:
    completed (r)
  return

class Quest (JQuest):

  def __init__ (self, id, name descr): (descr self, name, id) JQuest.__init__

  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)

QUEST.setInitialState (created)
QUEST.addStartNpc (7056)

STARTED.addQuestDrop (KELTIR_NPC_ID, FANGS_ITEM_ID, DROP_RATE)

Agora olha como ele funciona.
Spoiler
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: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
STARTED.addKillId (KELTIR_NPC_ID)
e do método na classe onKill Quest:
Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
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: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
return "Chat4.htm"

pode ser fornecido:

Código: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
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: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
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: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
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

KELTIR_NPC_ID = 12082
FANGS_ITEM_ID = 1859 
DROP_RATE = 500000
WORLD_MAP_ITEM_ID = 1665 


def __init__ (self, id, name descr): JQuest.__init__(descr, self, name, id) 

getCount def (r):
  st.getQuestItemsCount retur (FANGS_ITEM_ID)

def completed (r):
  st.setState (completed)
  st.clearQuestDrops ()
  st.takeItems (FANGS_ITEM_ID, -1)
  st.giveItems (WORLD_MAP_ITEM_ID, 1)
  st.exitQuest (false)
  return

check def (r):
  se 4 = getCount (r)>:
    completed (r)
  return

class Quest (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 "1.htm"

QUEST       = Quest(201, "Tutorial" , "Busca Tutorial")
CREATED     = State('Start', QUEST)

QUEST.setInitialState(CREATED)

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: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
ATENÇÃO: Caso alguem poste em outro Fórum não remova os créditos ... são totalmente meus. Exclusivamente para Equipe Secret Experience

 
Avatar de allanalcantara
allanalcantara
Banido
Registrado em: Nov 2009
Localização: Fortaleza-ce
Posts: 325
Nome Real: Allan Alcântara de Alencar
Visitas: 857
Links Patrocinados
Antigo 05-04-2011, 04:13 PM   #2
Mazokista
Membro - Veterano
 
Avatar de Mazokista
 
Registrado em: Dec 2009
Posts: 1,335
Agradeceu: 490
Agradecido 803 Vezes em 427 Posts
Achei Ruim:
Acharam ruim Vezes em Posts
Meu Sistema
Rate Designer: Iniciante
Meu Estado:
Enviar mensagem via Windows Live Messenger para Mazokista
Nome Real: Roberto

Inventório de Mazokista

Padrão

[ATTENTION]Movido para area de Tutorial[/ATTENTION]

Mazokista está offline   Responder com Citação
O seguinte membro ao lado disse Obrigado(a) a : Mazokista por gostar deste Post :
Nakashimi (12-07-2011)
Antigo 24-08-2011, 11:54 AM   #3
razor999
Membro - General
 
Avatar de razor999
 
Registrado em: Sep 2010
Localização: USA\EU\Bagdá
Posts: 228
Agradeceu: 45
Agradecido 31 Vezes em 14 Posts
Achei Ruim:
Acharam ruim Vezes em Posts
Meu Sistema
Meu Estado:
Pontos: 4,515, Nível: 42
Pontos: 4,515, Nível: 42 Pontos: 4,515, Nível: 42 Pontos: 4,515, Nível: 42
Atividade: 16%
Atividade: 16% Atividade: 16% Atividade: 16%

Nome Real: FehFilgueiras

Inventório de razor999

Padrão

[SIZE="3"]deveria ganhar fixo
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 [/SIZE]

razor999 está offline   Responder com Citação
O seguinte membro ao lado disse Obrigado(a) a : razor999 por gostar deste Post :
allanalcantara (24-08-2011)
Antigo 25-08-2011, 03:31 PM   #4
allanalcantara
Banido
 
Avatar de allanalcantara
 
Registrado em: Nov 2009
Localização: Fortaleza-ce
Posts: 325
Agradeceu: 125
Agradecido 203 Vezes em 82 Posts
Achei Ruim:
Acharam ruim Vezes em Posts
Enviar mensagem via Windows Live Messenger para allanalcantara Enviar mensagem via Skype para allanalcantara
Nome Real: Allan Alcântara de Alencar

Inventório de allanalcantara

Padrão

obrigado meu amigo, vendo esse tutorial da pra criar uma ótima quest, custom.
isso fica ao critério do criador né.
rsrsrs :D

allanalcantara está offline   Responder com Citação
Antigo 05-01-2012, 12:05 PM   #5
sheah
Membro - Coronel
 
Avatar de sheah
 
Registrado em: Jul 2010
Localização: Recife-Pe
Posts: 188
Agradeceu: 42
Agradecido 47 Vezes em 30 Posts
Achei Ruim:
Acharam ruim Vezes em Posts
Meu Estado:
Enviar mensagem via Windows Live Messenger para sheah
Pontos: 2,140, Nível: 27
Pontos: 2,140, Nível: 27 Pontos: 2,140, Nível: 27 Pontos: 2,140, Nível: 27
Atividade: 5%
Atividade: 5% Atividade: 5% Atividade: 5%

Nome Real: Giovanni de Moura

Inventório de sheah

Padrão

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

sheah está offline   Responder com Citação
Antigo 05-01-2012, 01:21 PM   #6
OliverSykes
www.l2jlive-project.com
 
Avatar de OliverSykes
 
Registrado em: May 2011
Localização: Italia - Florença
Posts: 1,222
Agradeceu: 175
Agradecido 393 Vezes em 249 Posts
Achei Ruim:
Acharam ruim Vezes em Posts
Meu Estado:
Enviar mensagem via Windows Live Messenger para OliverSykes Enviar mensagem via Skype para OliverSykes
Nome Real: Fábio Costa da Silva

Inventório de OliverSykes

Padrão

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 !

OliverSykes está offline   Responder com Citação
Resposta


Regras para Posts
Você não pode postar novos tópicos
Você não pode postar respostas
Você não pode postar anexos
Você não pode editar seus posts

Código [IMG] Sim
Código HTML Não

Ir para...


Horários baseados na GMT -3. Agora são 12:29 AM.