Перейти к содержанию
Авторизация  
Connect

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

Рекомендуемые сообщения

Прошу помощи, начал с нуля писать кв, но столкнулся с проблемой.
Хочу в кв задействовать 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)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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



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

 

Изменено пользователем nickerder

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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

Хочу в кв задействовать 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...