Jump to content
Sign in to follow this  
Just4You

Quest Subclass e Nobless curtas (Sem Java)

Recommended Posts

Fala pessoal, tudo bem?

Depois de muitas tentativas e erros, consegui alterar as quests de Subclass e de Nobless para que sejam bem mais reduzidas, caso você não queria ela full mas tambem não queira ela Free.

Bom, a quest de Sublcass você ira apenas precisar matar os 04 Boss (Caabrio, Hallate, Kernon e Golkonda)

E a quest de Nobless, você ira precisar matar o Barakiel e ter 05 Lunargents e 01 Hellfire Oil.

 

Vale lembrar que os arquivos abaixo foram feitos baseados na minha rev Frozen (Interlude).

Entao vamos la...

 

Iremos criar o NPC Custom com a SQL abaixo

INSERT INTO `custom_npc` VALUES ('10121', '31002', 'Subclass Master', '1', 'FirsTBlooD', '1', 'NPC.e_smith_master_MDwarf', '8.00', '16.50', '70', 'male', 'L2Npc', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '0', '0', '1314', '470', '780', '382', '278', '0', '333', '0', '0', '0', '55', '132', null, '0', '1', '0', 'LAST_HIT');

Apos isso vamos alterar o arquivo questname-e.dat da pasta system (para deixar bem bacana o Alt + U)

Remova as linhas que se referem a quest 234 e substitua por essa:

1	234	1	a,Subclass\0	a,Gether the Items\0	a,The Subclass Master tells you to find him some items. Kill some Raid Boss and they will spawn a Chest, talk to the Chests and get the Items. Monsters to hunt: Shilen's Messenger Cabrio [Aden Cemitery], Death Lord Hallate [TOI 3rd Floor], Kernon [TOI 8th Floor] and Longhorn Golkonda [TOI 11th Floor].\\n \0	4	4666	4667	4668	4669											4	1	1	1	1											180986.00000000	11919.00000000	-2580.00000000	75	0	3	a,Shilen's Messenger Cabrio\0	1	1	1	31002	92743.00000000	55523.00000000	-3370.00000000	a,No Requirements\0	a,Many travelers looking for new hope follow the whispers of the lady of the wind!  Keep heart! You shall soon acquire the flame of purgatory!\0	0																																																																						0						0	0	0	67

Agora vamos para a parte da Quest em si....

Va na pasta: gameserver\data\scripts\quests\234_FatesWhisper e abra o arquivo __init__.py

 

# Alterado por Just4You

import sys
from com.l2jfrozen.gameserver.model.quest import State
from com.l2jfrozen.gameserver.model.quest import QuestState
from com.l2jfrozen.gameserver.model.quest.jython import QuestJython as JQuest

qn = "234_FatesWhisper"

REIRIAS_SOUL_ORB = 4666
KERMONS_INFERNIUM_SCEPTER = 4667
GOLCONDAS_INFERNIUM_SCEPTER = 4668
HALLATES_INFERNIUM_SCEPTER = 4669
STAR_OF_DESTINY = 5011
MIMIRS_ELIXIR = 6319

#Subclass, Kernon's Chest, Golkonda's Chest, Hallate's Chest, Cabrio's "Coffer of the Dead"
NPC=[10121,31028,31029,31030,31027]

CHEST_SPAWNS = {
  25035:31027, # Shilen's Messenger Cabrio
  25054:31028, # Demon Kernon
  25126:31029, # Golkonda, the Longhorn General
  25220:31030  # Death Lord Hallate
  }

class Quest (JQuest) :

  def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
  
  def onEvent (self,event,st) :
    htmltext = event
    #accept quest
    if event == "1" :
      st.set("cond","1")
      st.setState(STARTED)
    # open Kernon's Chest
    elif event == "31028_01" :
      htmltext = "31028-02.htm"
      st.giveItems(KERMONS_INFERNIUM_SCEPTER,1)
      st.playSound("Itemsound.quest_itemget")
    # open Hallate's Chest
    elif event == "31029_01" :
      htmltext = "31029-02.htm"
      st.giveItems(GOLCONDAS_INFERNIUM_SCEPTER,1)
      st.playSound("Itemsound.quest_itemget")
    # open Golkonda's Chest
    elif event == "31030_01" :
      htmltext = "31030-02.htm"
      st.giveItems(HALLATES_INFERNIUM_SCEPTER,1)
      st.playSound("Itemsound.quest_itemget")
 
    return htmltext

  def onTalk (self,npc,player):
    htmltext = "<html><body>You are either not carrying out your quest or don't meet the criteria.</body></html>"
    st = player.getQuestState(qn)
    if not st : return htmltext

    npcId = npc.getNpcId()
    id = st.getState()
    
    # first time when a player join the quest
    if id == CREATED :
      if player.getLevel() >= 75:
        htmltext = "10121-02.htm"
      else:
        htmltext = "10121-01.htm"
        st.exitQuest(1)
      return htmltext
    # if quest is already completed
    elif id == COMPLETED:
      return "<html><body>This quest has already been completed.</body></html>"
    # if quest is accepted and in progress
    elif id == STARTED:
      cond =st.getInt("cond")
      if npcId == NPC[0] :
        if cond == 1 and (st.getQuestItemsCount(REIRIAS_SOUL_ORB)+st.getQuestItemsCount(KERMONS_INFERNIUM_SCEPTER)+st.getQuestItemsCount(GOLCONDAS_INFERNIUM_SCEPTER)+st.getQuestItemsCount(HALLATES_INFERNIUM_SCEPTER) < 4):  # waiting for the orb
          htmltext = "10121-03.htm"
        elif cond == 1 : 
          st.takeItems(REIRIAS_SOUL_ORB,1)
          st.takeItems(KERMONS_INFERNIUM_SCEPTER,1)
          st.takeItems(GOLCONDAS_INFERNIUM_SCEPTER,1)
          st.takeItems(HALLATES_INFERNIUM_SCEPTER,1)
          htmltext = "10121-04.htm"
          st.giveItems(STAR_OF_DESTINY,1)
          st.giveItems(MIMIRS_ELIXIR,1)
          st.setState(COMPLETED)
          st.unset("cond")

      ## CHESTS FROM RAIDBOSSES
      elif cond==1 :
        if npcId ==NPC[4] and st.getQuestItemsCount(REIRIAS_SOUL_ORB)==0 :
          htmltext = "31027-01.htm"
          st.giveItems(REIRIAS_SOUL_ORB,1)
          st.playSound("Itemsound.quest_itemget")
        elif npcId == NPC[1] and st.getQuestItemsCount(KERMONS_INFERNIUM_SCEPTER)==0 :
          htmltext = "31028-01.htm"
        elif npcId == NPC[1] :
          htmltext = "<html><body>This chest looks empty</body></html>"
        # Golkonda's Chest
        elif npcId == NPC[2] and st.getQuestItemsCount(GOLCONDAS_INFERNIUM_SCEPTER)==0 :
          htmltext = "31029-01.htm"
        elif npcId == NPC[2] :
          htmltext = "<html><body>This chest looks empty</body></html>"
        # Hallate's Chest 
        elif npcId == NPC[3] and st.getQuestItemsCount(HALLATES_INFERNIUM_SCEPTER)==0 :
          htmltext = "31030-01.htm"
        elif npcId == NPC[3] :
          htmltext = "<html><body>This chest looks empty</body></html>"
    return htmltext    

  def onKill(self,npc,player,isPet):
    npcId=npc.getNpcId()
    # the chests always spawn, even if the RB is killed with nobody nearby doing the quest.
    if npcId in CHEST_SPAWNS.keys() :
      self.addSpawn(CHEST_SPAWNS[npcId], npc.getX(), npc.getY(), npc.getZ(),npc.getHeading(), True, 60000)
    else :
      st = player.getQuestState(qn)
      if not st : return 
      if st.getState() != STARTED : return
    return    


QUEST    = Quest(234,qn,"Fate's Whisper")
CREATED    = State('Start', QUEST)
STARTED    = State('Started', QUEST)
COMPLETED  = State('Completed', QUEST)

QUEST.setInitialState(CREATED)
QUEST.addStartNpc(NPC[0])

for npcId in NPC:
  QUEST.addTalkId(npcId)

for mobId in CHEST_SPAWNS.keys() :
  QUEST.addKillId(mobId)

E nos arquivos htm da pasta, delete todos e coloque esses abaixo:

HTM da Quest Subclass

A ultima parte é criar o arquivo htm e por na pasta gameserver\data\html\default e colocar o nome de 10121.htm e por estas infos abaixo:

<html><body>Subclass Master:<br>
Hello adventure!!<br>
I have a proposition for you... If you accept, you can have your Subclass!!<br>
<a action="bypass -h npc_%objectId%_Quest">I Accept! </a><br>
</body></html>

Agora so summonar o NPC 10121 e pronto.

Caso queira mudar o ID do NPC, não se esqueça de mudar em todos os arquivos HTM assim como no arquivo __INIT__

 

Agora vamos para o Nobless, onde o pensamento é o mesmo que a Subclass.

 

Iremos criar o NPC Custom com a SQL abaixo

INSERT INTO `custom_npc` VALUES ('10119', '31739', 'Nobless Master', '1', 'FirsTBLooD', '1', 'NPC.a_common_peopleB_MHuman', '8.00', '22.00', '70', 'male', 'L2Npc', '40', '3862', '1493', '11.85', '2.78', '40', '43', '30', '21', '20', '10', '0', '0', '1314', '470', '780', '382', '278', '0', '333', '4202', '0', '0', '55', '132', null, '0', '1', '0', 'LAST_HIT');

Apos isso vamos alterar o arquivo questname-e.dat da pasta system (para deixar bem bacana o Alt + U)

Remova as linhas que se referem a quest 246 e substitua por essa:

1	246	1	a,Nobless Quest Master\0	a,Rain Song - Hellfire Oil - Lunargent\0	a,Go to the Valley of Saints and confront Barakiel, the Flame of Splendor. Slay him and recover the Rain Song, Staff of the Goddess. Also find me Hellfire Oil [1] and Lunargent [5]\\n\0	3	7593	6033	6029												3	1	1	5												91532.00000000	-86872.00000000	-2800.00000000	65	75	3	a,Flame of Splendor, Barakiel\0	1	1	0	31740	150144.00000000	-57920.00000000	-2979.00000000	a,This quest can only be fulfilled while a character is in a sub-class.  In addition, a character must have also completed  "Possessor of a Precious Soul - 2."\0	a,Caradine asks you to help the Lady of the Lake recover her lost strength...\0	0																																																																						0						0	242	0	180

Agora vamos para a parte da Quest em si....

Va na pasta: gameserver\data\scripts\quests\246_PossessorOfAPreciousSoul_3 e abra o arquivo __init__.py

 
#Ajustado por Just4You
import sys
from com.l2jfrozen.gameserver.model.quest import State
from com.l2jfrozen.gameserver.model.quest import QuestState
from com.l2jfrozen.gameserver.model.quest.jython import QuestJython as JQuest

qn = "246_PossessorOfAPreciousSoul_3"

#NPC
NPC_NOBLESS = 10119
BARAKIEL = 25325

#QUEST ITEM
NOBLESS_TIARA = 7694
RAIN_SONG = 7593
LUNARGENT = 6029
HELLFIRE_OIL = 6033

class Quest (JQuest) :

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

 def onEvent (self,event,st) :
   htmltext = event
   cond = st.getInt("cond")
   if event == "1" :
     if cond == 0 :
       st.setState(STARTED)
       st.set("cond","1")
       st.playSound("ItemSound.quest_accept")
   if event == "2" :
     if cond == 1 :
       st.set("cond","0")
       st.takeItems(RAIN_SONG,1)
       st.takeItems(LUNARGENT,5)
       st.takeItems(HELLFIRE_OIL,1)
       st.giveItems(NOBLESS_TIARA,1)
       st.getPlayer().setNoble(True)
       st.playSound("ItemSound.quest_finish")
       st.setState(COMPLETED)
   return htmltext

 def onTalk (self,npc,player):
   htmltext = "<html><body>You are either not carrying out your quest or don't meet the criteria.</body></html>"
   st = player.getQuestState(qn)
   if not st : return htmltext

   npcId = npc.getNpcId()
   id = st.getState()
   if npcId != NPC_NOBLESS and id != STARTED : return htmltext

   cond=st.getInt("cond")
   if player.isSubClassActive() :
     if npcId == NPC_NOBLESS :
       if id == COMPLETED :
         htmltext = "<html><body>This quest has already been completed.</body></html>"
       elif player.getLevel() < 75 : 
         htmltext = "10119-2.htm"
         st.exitQuest(1)
       elif player.getLevel() >= 75 :
         htmltext = "10119-1.htm"
       
       if npcId == NPC_NOBLESS and cond == 1 and (st.getQuestItemsCount(RAIN_SONG) < 1 or st.getQuestItemsCount(LUNARGENT) < 5 or st.getQuestItemsCount(HELLFIRE_OIL) < 1) :
         htmltext = "10119-3.htm"
       
       if npcId == NPC_NOBLESS and cond == 1 and st.getQuestItemsCount(RAIN_SONG) >= 1 and st.getQuestItemsCount(LUNARGENT) >= 5 and st.getQuestItemsCount(HELLFIRE_OIL) >= 1 :
         htmltext = "10119-4.htm"
   return htmltext

 def onKill(self,npc,player,isPet):
   npcId = npc.getNpcId()
   if npcId == BARAKIEL :
     #give the quest item and update variables for ALL PARTY MEMBERS who are doing the quest,
     #so long as they each qualify for the drop (cond == 4 and item not in inventory)
     #note: the killer WILL participate in the loop as a party member (no need to handle separately)
     party = player.getParty()
     if party :
        for partyMember in party.getPartyMembers().toArray() :
            pst = partyMember.getQuestState(qn)
            if pst :
                if pst.getInt("cond") == 1 and pst.getQuestItemsCount(RAIN_SONG) < 1 :
                    pst.giveItems(RAIN_SONG,1)
                    pst.playSound("ItemSound.quest_middle")
     else :
        pst = player.getQuestState(qn)
        if pst :
            if pst.getInt("cond") == 1 and pst.getQuestItemsCount(RAIN_SONG) < 1 :
                pst.giveItems(RAIN_SONG,1)
                pst.playSound("ItemSound.quest_middle")
   return 

QUEST       = Quest(246,qn,"Possessor Of A Precious Soul - 3")
CREATED     = State('Start', QUEST)
STARTED     = State('Started', QUEST)
COMPLETED   = State('Completed', QUEST)

QUEST.setInitialState(CREATED)
QUEST.addStartNpc(NPC_NOBLESS)
QUEST.addTalkId(NPC_NOBLESS)

QUEST.addKillId(BARAKIEL)

STARTED.addQuestDrop(NPC_NOBLESS,RAIN_SONG,1)

E nos arquivos htm da pasta, delete todos e coloque esses abaixo:

HTM para Quest Nobless

Depois va no arquivo scripts.cfg e coloque um # em frente as quests abaixo, ficando apenas a 3 em aberto:

#quests/241_PossessorOfAPreciousSoul_1/__init__.py

#quests/242_PossessorOfAPreciousSoul_2/__init__.py

quests/246_PossessorOfAPreciousSoul_3/__init__.py

#quests/247_PossessorOfAPreciousSoul_4/__init__.py

A ultima parte é criar o arquivo htm e por na pasta gameserver\data\html\default e colocar o nome de 10119.htm e por estas infos abaixo:

<html><body>Nobless Quest Master:<br>
Hello adventure!!<br>
I have a proposition for you... If you accept, you can became Nobless!!<br>
<a action="bypass -h npc_%objectId%_Quest">I Accept! </a><br>
</body></html>

Agora so summonar o NPC 10121 e pronto.

Caso queira mudar o ID do NPC, não se esqueça de mudar em todos os arquivos HTM assim como no arquivo __INIT__

 

E prontinho, voces deixando desta maneira terão ambas as quests reduzidas e funcionando.

Fiz e refiz os testes aqui e deu tudo certo.

Caso tenham alguma duvida ou surja algum problema com vocês, me fala que vou ajustando e/ou tentando ajudar.

Edited by Just4You
  • Like 2
  • I love it 1

A Vida é uma eterna lição...

Estamos sempre aprendendo...

Share this post


Link to post
Share on other sites

 

boa contribuição! +


       Facebook friend: https://www.facebook.com/serious.development
         Facebook page: https://www.facebook.com/DevelopmentLineage2/

 

Desenvolvimento e venda de servidores privados, designs, banners, botões, logotipos, planos de fundo html, npcs, criptografia de arquivos, sites. Contate-me!

 

123.png

Share this post


Link to post
Share on other sites
13 horas atrás, Just4You disse:

Va na pasta: gameserver\data\scripts\quests\246_PossessorOfAPreciousSoul_3 e abra o arquivo __init__.py

no init_py devo substituir por isto? eu fiz isso porem deu erro no gameserver script load failed.

 

\gameserver\data\scripts\quests\246_PossessorOfAPreciousSoul_3\__init__.py.error.log
Line: 93 - Column: -1

TypeError: net.sf.l2j.gameserver.model.quest.State(): expected 0 args; got 2 in __init__.py at line number 93

estou tentando pra versão c4, creio que não reconhece essas linhas:

CREATED     = State('Start', QUEST)
STARTED     = State('Started', QUEST)
COMPLETED   = State('Completed', QUEST)

Edited by CryCryCry

Share this post


Link to post
Share on other sites
3 horas atrás, CryCryCry disse:

no init_py devo substituir por isto? eu fiz isso porem deu erro no gameserver script load failed.

 

\gameserver\data\scripts\quests\246_PossessorOfAPreciousSoul_3\__init__.py.error.log
Line: 93 - Column: -1

TypeError: net.sf.l2j.gameserver.model.quest.State(): expected 0 args; got 2 in __init__.py at line number 93

estou tentando pra versão c4, creio que não reconhece essas linhas:

CREATED     = State('Start', QUEST)
STARTED     = State('Started', QUEST)
COMPLETED   = State('Completed', QUEST)

O que esta escrito na sua linha 93?

Pega a sua quest original no C4, e veja o que esta escrito na parte final e troca.

Pelo visto, a linha errada é esta parte de CREATED.


A Vida é uma eterna lição...

Estamos sempre aprendendo...

Share this post


Link to post
Share on other sites
1 hora atrás, Just4You disse:

O que esta escrito na sua linha 93?

Pega a sua quest original no C4, e veja o que esta escrito na parte final e troca.

Pelo visto, a linha errada é esta parte de CREATED.

CREATED     = State('Start', QUEST) linha 93 <-
STARTED     = State('Started', QUEST)
COMPLETED   = State('Completed', QUEST)

 

parte final da quest c4

#QUEST ITEM
CARADINE_LETTER_LAST = 7679
NOBLESS_TIARA = 7694

class Quest (JQuest) :

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

 def onEvent (self,event,st) :
   htmltext = event
   cond = st.getInt("cond") 
   if event == "8740-3.htm" :
     if cond == 0 :
       st.set("cond","1")
       st.setState(State.STARTED)
       st.playSound("ItemSound.quest_accept")
   elif event == "8740-5.htm" :
     if cond == 1 :
       st.set("cond","2")
       st.takeItems(CARADINE_LETTER_LAST,1)
       st.getPlayer().teleToLocation(143209,43968,-3038)
   elif event == "8745-5.htm" :
     if cond == 2 :
       st.set("cond","0")
       st.getPlayer().setNoble(True)
       st.giveItems(NOBLESS_TIARA,1)
       st.playSound("ItemSound.quest_finish")
       st.setState(State.COMPLETED)
   return htmltext

 def onTalk (self,npc,st):
   htmltext = JQuest.getNoQuestMsg()
   npcId = npc.getNpcId()
   id = st.getState()
   if npcId != CARADINE and id != State.STARTED :
     return htmltext
   cond = st.getInt("cond")
   if id == State.CREATED :
     st.set("cond","0")
   if st.getPlayer().isSubClassActive() :
     if npcId == CARADINE :
         if st.getQuestItemsCount(CARADINE_LETTER_LAST) == 1 :
           if cond in [0,1] :
             if id == State.COMPLETED :
               htmltext = JQuest.getAlreadyCompletedMsg()
             elif st.getPlayer().getLevel() < 75 : 
               htmltext = "8740-2.htm"
               st.exitQuest(1)
             elif st.getPlayer().getLevel() >= 75 :
               htmltext = "8740-1.htm"
         elif cond == 2 :
             htmltext = "8740-6.htm"
     elif npcId == LADY_OF_LAKE and cond == 2 :
         htmltext = "8745-1.htm"
   else :
     htmltext = "<html><body>This quest may only be undertaken by sub-class characters of level 75 or above.</body></html>

Share this post


Link to post
Share on other sites

nao tem nada abaixo desta ultima linha?

posta o arquivo completo aqui


A Vida é uma eterna lição...

Estamos sempre aprendendo...

Share this post


Link to post
Share on other sites
7 minutos atrás, Just4You disse:

nao tem nada abaixo desta ultima linha?

posta o arquivo completo aqui

qual linha? 

CREATED     = State('Start', QUEST) linha 93 <-
STARTED     = State('Started', QUEST)
COMPLETED   = State('Completed', QUEST)

esse dai é o seu que está no tópico só fiz colocar lá dentro int_py

 
18 horas atrás, Just4You disse:

nao tem nada abaixo desta ultima linha?

posta o arquivo completo aqui

 

 

postei a init_py do c4 no post acima

Edited by CryCryCry

Share this post


Link to post
Share on other sites
Sign in to follow this  


⭐ Links Úteis




⚔️ Server Patrocinador



🎁 Ofertas







  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • BOM DIA , BOA TARDE , BOA NOITE - 'Sr's  Olá meus caros amigos da l2jbrasil  venho aqui no forum em busca de um parceiro para entrar na sociedade em meu servidor o servidor é um Hi5 50x já está em fase final apenas falta mudar algumas coisas e ja está pronto para coloca-lo online preciso de uma pessoa responsavel que queira colocar o servidor online comigo.. Precisa ser maior de 18 e que tenha condições de ajudar com os custos do DEDICADO SITE E DEMAIS GASTOS COM DIVULGAÇÃO Caso alguem tenha o real interesse por favor , deixar os dados abaixo aqui '   Nome: Idade: Cidade :   Conte me um pouco sobre sua pessoa , e sua personalidade:                                                                                                    Preciso tambem de pessoas para ajudar com as divulgação do servidor interessadas enviar MP      
    • Bom dia senhores. Nome: Henrique Versão do Servidor: Interlude/Freya,H5/Classic Procuro vaga ou alguém para montar um servidor free to play. Pretendo ser ADM/GM (Evento) ou GM (Divulgador) Tenho experiência com  datapack/custom/texturas do cliente , meu foco sempre foi mexer com essa parte ❤️ Quero entrar em uma equipe para ajudar na montagem e supervisão do servidor. Se alguém tiver interesse, entrar em contato comigo via PM ou discord.
    • do Rise of Darkness ate Valiance
    • edita h5 tbm ou só interlude?
    • Att, apenas com o top da l2jbrasil está acontecendo.
    • https://www.mediafire.com/file/533stb9mi5zjrs7/buffer_Schemer_L2JDream.rar/file
    • Estranho  vou dar uma olhada e depois posto aqui
    • Fiz isso agora e deu certo, configurei mas agora diz não ter votado em todas as opções, deixei apenas o top da l2jbrasil.. Msg: Você não votou em todos os links. Todos os links devem ser votados para receber o premio!
    • Eu já tentei de tudo, desativando o overenchant, o safeadmin e ele continua dando critical error, tentei provar seu system recomendado e também o que você deixou nos comentários, mesmo assim para os caras que eu paso system continua dando critical error ou kickando do serve... em gameserver e loginserver nao da error... aqui meus configuracaos do seu pack... system do serve ta on no meu pc pra testa >https://mega.nz/file/Ok0k2AaI#YRkALtA165Nb8gYoUG9wltOPIKlYX344ZIlCFfK2Qq8< https://mega.nz/file/bs020ADS#-Q9VcUAIuUbIaPL8BTNMkBrxq1kF--5DytzEuEuClkI  
    • Grave um video e poste aqui
×
×
  • Create New...