Connect 4 Опубликовано 17 марта, 2016 Прошу помощи, начал с нуля писать кв, но столкнулся с проблемой.Хочу в кв задействовать 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) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
nickerder 21 Опубликовано 17 марта, 2016 (изменено) При разговоре с НПС который проверяет итемы.. во втором condelif cond == 2 and st.getQuestItemsCount(ITEM2) :...Какое количество итемов ему проверить?) этого не указано..Так же хочу отдельно добавить.. в первом condif st.getQuestItemsCount(ITEM1) == 1:тут у тебя тоже проверка на ITEM1 == 1 .. первый итем у тебя адена.. если у твоего персонажа будет больше адены он можно не поговорить. Тут спорный вопрос, смотря какая сборка. Изменено 17 марта, 2016 пользователем nickerder Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
l2inplay 29 Опубликовано 17 марта, 2016 Прошу помощи, начал с нуля писать кв, но столкнулся с проблемой. Хочу в кв задействовать 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 должен забрать у тебя итем! 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Connect 4 Опубликовано 17 марта, 2016 Ну скажу так, на счет итема вы далеко полезли! Если твой квест начинается то он принимает st.set("cond","1") Но выходит что после убийства моба тебе дает итем, но зачем ты туда поставил st.set("cond","1") Тебя же возвращает к началу квеста! OnKill должен переходить в cond 2! В свою очередь cond 2 это и есть диалог в котором NPC должен забрать у тебя итем! Спасибо, я понял суть) Правда там ещё кое что надо было подправить) Все получилось. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Connect 4 Опубликовано 6 апреля, 2016 Прошу помощи) Возможно ли это реализовать в квесте? Суть в том, что на определенном этапе, у игрока, который умрет, отменялся вест. Возможно ли это?) Что можно взять за основу? Или дайте подсказку) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LifeGame32 312 Опубликовано 6 апреля, 2016 Прошу помощи) Возможно ли это реализовать в квесте? Суть в том, что на определенном этапе, у игрока, который умрет, отменялся вест. Возможно ли это?) Что можно взять за основу? Или дайте подсказку) Конечно возможно в том случае если есть исходный код или в сборке реализовано данное событие. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты