Jump to content
Sign in to follow this  
Connect

Python написание квеста

Recommended Posts

Прошу помощи, начал с нуля писать кв, но столкнулся с проблемой.
Хочу в кв задействовать 2+ говорящих нпц и моба, который респавнится при разговоре с нпц, все вроде бы работает, разговариваю с нпц2 и ресается моб, убиваю, дает итем, но почему то, когда я иду сдавать этот итем нпц2, он реагирует так, как будто я не выбил итем( точнее нету этого итема). Тобишь встает в тупик. А мне нужно, что бы кв продолжался. Помогите)
Сам код:
 

# Made by Mr. Have fun! Version 0.2
# Fixed by Pela Version 0.3 - Enough credits, but DrLecter was here 
import sys 
from ru.catssoftware.gameserver.model.quest import State 
from ru.catssoftware.gameserver.model.quest import QuestState 
from ru.catssoftware.gameserver.model.quest.jython import QuestJython as JQuest 

qn = "155_test"
Mob_1 = 21564
ITEM1 = 57
ITEM2 = 58
ITEM3 = 59
Rafforty = 32020
Milisa = 32018

class Quest (JQuest) : 

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

 def onAdvEvent (self,event,npc, player) :
    st = player.getQuestState(qn)
    if not st: return
    htmltext = event
    if event == "32020-02.htm" :
       st.setState(State.STARTED)
       st.playSound("ItemSound.quest_accept")
       st.giveItems(ITEM1,1)
       st.set("cond","1")
    elif event == "32018-02.htm" :
       st.playSound("ItemSound.quest_accept")
       st.set("cond","1")
    elif event == "32018-04.htm" :
       st.playSound("ItemSound.quest_accept")
       st.set("cond","2")
       st.takeItems(ITEM2,1)
    return htmltext
	

 def onTalk (self,npc,player):
    htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"
    st = player.getQuestState(qn)
    if not st : return htmltext
    state = st.getState()
    npcId = npc.getNpcId()
    cond = st.getInt("cond")
    if state == State.COMPLETED :
       htmltext = "<html><body>This quest has already been completed.</body></html>"
    elif npcId == 32020 :
       if state == State.CREATED :
          htmltext = "32020-01.htm"
       elif cond == 1:
          htmltext = "32020-03.htm"
          st.playSound("ItemSound.quest_middle")
    elif npcId == 32018 :
       if cond == 1:
          if st.getQuestItemsCount(ITEM1) == 1:
             htmltext = "32018-03.htm"
             st.playSound("ItemSound.quest_middle")
             st.addSpawn(Mob_1,73074,142718,-3774,0,False,25000)
          else :
             htmltext = "32018-01.htm"
       elif cond == 2 and st.getQuestItemsCount(ITEM2) :
           htmltext = "32018-05.htm"
           st.giveItems(ITEM3,1)
    return htmltext

 def onKill(self,npc,player,isPet):
   st = player.getQuestState(qn)
   if not st : return 
   if st.getState() != State.STARTED : return 
   
   npcId = npc.getNpcId()
   if npcId == Mob_1 : 
      if st.getInt("cond") == 1 and st.getQuestItemsCount(ITEM1) < 1 :
         if st.getRandom(100) == 1 :
            st.giveItems(ITEM2,1)
            if st.getQuestItemsCount(ITEM2) == 1 :
               st.playSound("ItemSound.quest_middle")
               st.set("cond","1")
            else :
               st.playSound("ItemSound.quest_itemget")
   return 

QUEST       = Quest(155,qn,"test") 

QUEST.addStartNpc(32020)

QUEST.addTalkId(32020)
QUEST.addTalkId(32018)

QUEST.addKillId(Mob_1)

Share this post


Link to post
Share on other sites

При разговоре с НПС который проверяет итемы.. во втором cond
elif cond == 2 and st.getQuestItemsCount(ITEM2) :
...Какое количество итемов ему проверить?) этого не указано..



Так же хочу отдельно добавить.. в первом cond
if st.getQuestItemsCount(ITEM1) == 1:
тут у тебя тоже проверка на ITEM1 == 1 .. первый итем у тебя адена.. если у твоего персонажа будет больше адены он можно не поговорить. Тут спорный вопрос, смотря какая сборка.

 

Edited by nickerder

Share this post


Link to post
Share on other sites

 

Прошу помощи, начал с нуля писать кв, но столкнулся с проблемой.

Хочу в кв задействовать 2+ говорящих нпц и моба, который респавнится при разговоре с нпц, все вроде бы работает, разговариваю с нпц2 и ресается моб, убиваю, дает итем, но почему то, когда я иду сдавать этот итем нпц2, он реагирует так, как будто я не выбил итем( точнее нету этого итема). Тобишь встает в тупик. А мне нужно, что бы кв продолжался. Помогите)

Сам код:

 

# Made by Mr. Have fun! Version 0.2
# Fixed by Pela Version 0.3 - Enough credits, but DrLecter was here 
import sys 
from ru.catssoftware.gameserver.model.quest import State 
from ru.catssoftware.gameserver.model.quest import QuestState 
from ru.catssoftware.gameserver.model.quest.jython import QuestJython as JQuest 

qn = "155_test"
Mob_1 = 21564
ITEM1 = 57
ITEM2 = 58
ITEM3 = 59
Rafforty = 32020
Milisa = 32018

class Quest (JQuest) : 

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

 def onAdvEvent (self,event,npc, player) :
    st = player.getQuestState(qn)
    if not st: return
    htmltext = event
    if event == "32020-02.htm" :
       st.setState(State.STARTED)
       st.playSound("ItemSound.quest_accept")
       st.giveItems(ITEM1,1)
       st.set("cond","1")
    elif event == "32018-02.htm" :
       st.playSound("ItemSound.quest_accept")
       st.set("cond","1")
    elif event == "32018-04.htm" :
       st.playSound("ItemSound.quest_accept")
       st.set("cond","2")
       st.takeItems(ITEM2,1)
    return htmltext
	

 def onTalk (self,npc,player):
    htmltext = "<html><body>You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements.</body></html>"
    st = player.getQuestState(qn)
    if not st : return htmltext
    state = st.getState()
    npcId = npc.getNpcId()
    cond = st.getInt("cond")
    if state == State.COMPLETED :
       htmltext = "<html><body>This quest has already been completed.</body></html>"
    elif npcId == 32020 :
       if state == State.CREATED :
          htmltext = "32020-01.htm"
       elif cond == 1:
          htmltext = "32020-03.htm"
          st.playSound("ItemSound.quest_middle")
    elif npcId == 32018 :
       if cond == 1:
          if st.getQuestItemsCount(ITEM1) == 1:
             htmltext = "32018-03.htm"
             st.playSound("ItemSound.quest_middle")
             st.addSpawn(Mob_1,73074,142718,-3774,0,False,25000)
          else :
             htmltext = "32018-01.htm"
       elif cond == 2 and st.getQuestItemsCount(ITEM2) :
           htmltext = "32018-05.htm"
           st.giveItems(ITEM3,1)
    return htmltext

 def onKill(self,npc,player,isPet):
   st = player.getQuestState(qn)
   if not st : return 
   if st.getState() != State.STARTED : return 
   
   npcId = npc.getNpcId()
   if npcId == Mob_1 : 
      if st.getInt("cond") == 1 and st.getQuestItemsCount(ITEM1) < 1 :
         if st.getRandom(100) == 1 :
            st.giveItems(ITEM2,1)
            if st.getQuestItemsCount(ITEM2) == 1 :
               st.playSound("ItemSound.quest_middle")
               st.set("cond","1")
            else :
               st.playSound("ItemSound.quest_itemget")
   return 

QUEST       = Quest(155,qn,"test") 

QUEST.addStartNpc(32020)

QUEST.addTalkId(32020)
QUEST.addTalkId(32018)

QUEST.addKillId(Mob_1)

Ну скажу так, на счет итема вы далеко полезли! Если твой квест начинается то он принимает 

st.set("cond","1")

Но выходит что после убийства моба тебе дает итем, но зачем ты туда поставил

st.set("cond","1")

Тебя же возвращает к началу квеста! OnKill должен переходить в cond 2! В свою очередь cond 2 это и есть диалог в котором NPC должен забрать у тебя итем!

  • Upvote 1

Share this post


Link to post
Share on other sites

Ну скажу так, на счет итема вы далеко полезли! Если твой квест начинается то он принимает 

st.set("cond","1")

Но выходит что после убийства моба тебе дает итем, но зачем ты туда поставил

st.set("cond","1")

Тебя же возвращает к началу квеста! OnKill должен переходить в cond 2! В свою очередь cond 2 это и есть диалог в котором NPC должен забрать у тебя итем!

 

Спасибо, я понял суть) Правда там ещё кое что надо было подправить) Все получилось.

Share this post


Link to post
Share on other sites

Прошу помощи) Возможно ли это реализовать в квесте? Суть в том, что на определенном этапе, у игрока, который умрет, отменялся вест. Возможно ли это?) Что можно взять за основу? Или дайте подсказку)

Share this post


Link to post
Share on other sites

Прошу помощи) Возможно ли это реализовать в квесте? Суть в том, что на определенном этапе, у игрока, который умрет, отменялся вест. Возможно ли это?) Что можно взять за основу? Или дайте подсказку)

Конечно возможно в том случае если есть исходный код или в сборке реализовано данное событие.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...