Saintly 19 Опубликовано 16 октября, 2013 Добрый день, устал я от этого нубла... Хотел сделать так чтобы без квеста сразу можно было с Нубл рб выбить итем и пойти сдать для получения нубла, не получилось переделать квест который дали... потом мне сказали что лучше листенер сделать на нубл рб так будет проще, тоже не смог... теперь решил укоротить просто квест В чем заключается краткость квеста, квест начинается с 3 части и проходится стандартно, по ходу квеста нужно выбить 2 предмета с мобов потом идти на нубл РБ, дабы не выбивать с мобов добавил эти 2 предмета в магазин... Но при покупке квест дальше не идет.. вот сам квест, в квесте убран предмет который нужен для начала квеста... # Made by disKret 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 = "246_PossessorOfAPreciousSoul_3" #NPC LADD = 30721 CARADINE = 31740 OSSIAN = 31741 #QUEST ITEM CARADINE_LETTER = 7678 CARADINE_LETTER_LAST = 7679 WATERBINDER = 7591 EVERGREEN = 7592 RAIN_SONG = 7593 RELIC_BOX = 7594 #MOBS PILGRIM_OF_SPLENDOR = 21541 JUDGE_OF_SPLENDOR = 21544 BARAKIEL = 25325 #CHANCE FOR DROP CHANCE_FOR_DROP = 5 class Quest (JQuest) : def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) self.questItemIds = [WATERBINDER, EVERGREEN, RAIN_SONG, RELIC_BOX] def onEvent (self,event,st) : htmltext = event cond = st.getInt("cond") if event == "31740-4.htm" : if cond == 0 : st.setState(State.STARTED) st.set("cond","1") st.playSound("ItemSound.quest_accept") elif event == "31741-2.htm" : if cond == 1 : st.set("cond","2") st.set("awaitsWaterbinder","1") st.set("awaitsEvergreen","1") st.playSound("ItemSound.quest_middle") elif event == "31741-5.htm" : if cond == 3 : st.set("cond","4") st.takeItems(WATERBINDER,1) st.takeItems(EVERGREEN,1) st.playSound("ItemSound.quest_middle") elif event == "31741-9.htm" : if cond == 5 : st.set("cond","6") st.takeItems(RAIN_SONG,1) st.giveItems(RELIC_BOX,1) st.playSound("ItemSound.quest_middle") elif event == "30721-2.htm" : if cond == 6 : st.set("cond","0") st.takeItems(RELIC_BOX,1) st.giveItems(CARADINE_LETTER_LAST,1) st.addExpAndSp(719843,0) st.playSound("ItemSound.quest_finish") st.exitQuest(False) return htmltext def onTalk (self,npc,player): htmltext = "You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements." st = player.getQuestState(qn) if not st : return htmltext npcId = npc.getNpcId() id = st.getState() if npcId != CARADINE and id != State.STARTED : return htmltext cond=st.getInt("cond") if player.isSubClassActive() : if npcId == CARADINE : if cond == 0 : if id == State.COMPLETED : htmltext = "This quest has already been completed." elif player.getLevel() < 65 : htmltext = "31740-2.htm" st.exitQuest(1) elif player.getLevel() >= 65 : htmltext = "31740-1.htm" elif cond == 1 : htmltext = "31740-5.htm" elif npcId == OSSIAN: if cond == 1 : htmltext = "31741-1.htm" elif cond == 2 : htmltext = "31741-4.htm" elif cond == 3 and st.getQuestItemsCount(WATERBINDER) == 1 and st.getQuestItemsCount(EVERGREEN) == 1 : htmltext = "31741-3.htm" elif cond == 4 : htmltext = "31741-8.htm" elif cond == 5 and st.getQuestItemsCount(RAIN_SONG) == 1 : htmltext = "31741-7.htm" elif cond == 6 and st.getQuestItemsCount(RELIC_BOX) == 1 : htmltext = "31741-11.htm" elif npcId == LADD and cond == 6 : htmltext = "30721-1.htm" else : htmltext = "This quest may only be undertaken by sub-class characters of level 50 or above." return htmltext def onKill(self,npc,player,isPet): npcId = npc.getNpcId() if npcId == PILGRIM_OF_SPLENDOR : #get a random party member who is doing this quest and needs this drop partyMember = self.getRandomPartyMember(player,"awaitsWaterbinder","1") if partyMember : st = partyMember.getQuestState(qn) chance = st.getRandom(100) cond = st.getInt("cond") if st.getQuestItemsCount(WATERBINDER) < 1 : if chance < CHANCE_FOR_DROP : st.giveItems(WATERBINDER,1) st.unset("awaitsWaterbinder") if st.getQuestItemsCount(EVERGREEN) < 1 : st.playSound("ItemSound.quest_itemget") else: st.playSound("ItemSound.quest_middle") st.set("cond","3") elif npcId == JUDGE_OF_SPLENDOR : #get a random party member who is doing this quest and needs this drop partyMember = self.getRandomPartyMember(player,"awaitsEvergreen","1") if partyMember : st = partyMember.getQuestState(qn) chance = st.getRandom(100) cond = st.getInt("cond") if cond == 2 and st.getQuestItemsCount(EVERGREEN) < 1 : if chance < CHANCE_FOR_DROP : st.giveItems(EVERGREEN,1) st.unset("awaitsEvergreen") if st.getQuestItemsCount(WATERBINDER) < 1 : st.playSound("ItemSound.quest_itemget") else: st.playSound("ItemSound.quest_middle") st.set("cond","3") elif 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") == 4 and pst.getQuestItemsCount(RAIN_SONG) < 1 : pst.giveItems(RAIN_SONG,1) pst.playSound("ItemSound.quest_middle") pst.set("cond","5") else : pst = player.getQuestState(qn) if pst : if pst.getInt("cond") == 4 and pst.getQuestItemsCount(RAIN_SONG) < 1 : pst.giveItems(RAIN_SONG,1) pst.playSound("ItemSound.quest_middle") pst.set("cond","5") return QUEST = Quest(246,qn,"Possessor of a Precious Soul - 3") QUEST.addStartNpc(CARADINE) QUEST.addTalkId(CARADINE) QUEST.addTalkId(OSSIAN) QUEST.addTalkId(LADD) QUEST.addKillId(PILGRIM_OF_SPLENDOR) QUEST.addKillId(JUDGE_OF_SPLENDOR) QUEST.addKillId(BARAKIEL) почему же квест не идет дальше спросил я себя, а всё потому что: после разговора с нпцон дает мне задание выбить 2 предмета.. эти 2 предмета помещаются в "wait list" st.set("awaitsWaterbinder","1") st.set("awaitsEvergreen","1") и снимается этот статус при убийстве мобов st.unset("awaitsWaterbinder") st.unset("awaitsEvergreen") так вот не могу сделать так чтобы этот статус снимался при наличии предмета или вообще его убрать тоже не получается... всё равно в статус wait помещается.... поэтому даже с наличием этих 2 предметов квест дальше не идет.. кто реализует сей скрипт?) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Saintly 19 Опубликовано 17 октября, 2013 ап Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
LifeGame32 312 Опубликовано 19 октября, 2013 (изменено) Заменить в onTalk elif cond == 2 : htmltext = "31741-4.htm" на elif cond == 2 : if cond == 2 and st.getQuestItemsCount(WATERBINDER) == 1 and st.getQuestItemsCount(EVERGREEN) == 1 : st.unset("awaitsWaterbinder") st.unset("awaitsEvergreen") st.set("cond","3") htmltext = "31741-3.htm" elif cond == 2 : htmltext = "31741-4.htm" что-то косо все отображается, думаю, с синтаксисом разберётесь!!! Изменено 19 октября, 2013 пользователем LifeGame32 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Saintly 19 Опубликовано 20 октября, 2013 Заменить в onTalk elif cond == 2 : htmltext = "31741-4.htm" на elif cond == 2 : if cond == 2 and st.getQuestItemsCount(WATERBINDER) == 1 and st.getQuestItemsCount(EVERGREEN) == 1 : st.unset("awaitsWaterbinder") st.unset("awaitsEvergreen") st.set("cond","3") htmltext = "31741-3.htm" elif cond == 2 : htmltext = "31741-4.htm" что-то косо все отображается, думаю, с синтаксисом разберётесь!!! пробовал чтото похожее но не работало, попробую ваш пример Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты