fanfcsd 1 Опубликовано 28 июня, 2013 (изменено) Приветствую, добавил в сборку квест на крылья вот такой ## квест на крылья для Lucera 1.7 от 1d3x. import sys from ru.catssoftware import Config 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 = "q902_WingsQuest" ## нпц NPC = 77777 ## Мобы MOBS = [22132,22130,22131,22135] ##Ид мобов (сейчас на 2 этаже моса) #босс BOSS = 29021 ## Дроп #id перьев с мобов в мос FEATHER = 2129 #сколько нужно? FEATHER_NEED = 336 #шанс дропа, % FEATHER_CHANCE = 80 #id итема с босса BOSS_ITEM = 2125 ##Награда #id крыльев WINGS = 75000 class Quest (JQuest) : def __init__(self,id,name,descr) : JQuest.__init__(self,id,name,descr) def onEvent (self,event,st) : htmltext = event if event == "accept.htm": st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") st.set("cond","1") elif event == "finish.htm": if st.getQuestItemsCount(FEATHER) >= FEATHER_NEED and st.getQuestItemsCount(BOSS_ITEM) >= 1: st.takeItems(FEATHER, -1) st.takeItems(BOSS_ITEM, -1) st.giveItems(WINGS, 1) st.set("cond","0") st.playSound("ItemSound.quest_finish") st.setState(State.COMPLETED) else: htmltext = "mobs.htm" return htmltext def onTalk (self,npc,player): st = player.getQuestState(qn) if not st: return "You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements." npcId = npc.getNpcId() idd = st.getState() cond = st.getInt("cond") if npcId == NPC: if idd == State.COMPLETED : htmltext = "completed.htm" if idd == State.CREATED : htmltext = "hello1.htm" elif cond == 1: if st.getQuestItemsCount(FEATHER) >= FEATHER_NEED and st.getQuestItemsCount(BOSS_ITEM) >= 1: htmltext = "mobs2.htm" else: htmltext = "mobs.htm" return htmltext def onKill(self,npc,player,isPet): st = player.getQuestState(qn) if not st or st.getInt("cond") != 1: return npcId = npc.getNpcId() reward = 0 limit = 1 chance = 100 if npcId in MOBS: reward = FEATHER limit = FEATHER_NEED chance = FEATHER_CHANCE if npcId == BOSS: reward = BOSS_ITEM limit = 1 if reward > 0: party = player.getParty() if party: for member in party.getPartyMembers(): if not member.isAlikeDead(): st = member.getQuestState("q902_WingsQuest") if st and st.getQuestItemsCount(reward) < limit and st.getRandom(100) <= chance: st.giveItems(reward, 1) st.playSound("ItemSound.quest_itemget") if st.getQuestItemsCount(reward) >= limit: st.playSound("ItemSound.quest_middle") else: if st.getQuestItemsCount(reward) < limit and st.getRandom(100) <= chance: st.giveItems(reward, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(902, qn, "Wings Quest") QUEST.addStartNpc(NPC) QUEST.addTalkId(NPC) QUEST.addKillId(BOSS) for m in MOBS: QUEST.addKillId(m) и хотел его переделать на квест под броню, вот так ## квест на крылья для Lucera 1.7 от 1d3x. import sys from ru.catssoftware import Config 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 = "q903_WingsQuest" ## нпц NPC = 77778 ## Мобы MOBS = 21386 #босс BOSS = 555777 ## Дроп #id перьев с мобов в мос FEATHER = 17874 #сколько нужно? FEATHER_NEED = 200 #шанс дропа, % FEATHER_CHANCE = 100 #id итема с босса BOSS_ITEM = 17875 ##Награда #id крыльев WINGS = 17876 class Quest (JQuest) : def __init__(self,id,name,descr) : JQuest.__init__(self,id,name,descr) def onEvent (self,event,st) : htmltext = event if event == "accept.htm": st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") st.set("cond","1") elif event == "finish.htm": if st.getQuestItemsCount(FEATHER) >= FEATHER_NEED and st.getQuestItemsCount(BOSS_ITEM) >= 1: st.takeItems(FEATHER, -1) st.takeItems(BOSS_ITEM, -1) st.giveItems(WINGS, 1) st.set("cond","0") st.playSound("ItemSound.quest_finish") st.setState(State.COMPLETED) else: htmltext = "mobs.htm" return htmltext def onTalk (self,npc,player): st = player.getQuestState(qn) if not st: return "<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>" npcId = npc.getNpcId() idd = st.getState() cond = st.getInt("cond") if npcId == NPC: if idd == State.COMPLETED : htmltext = "completed.htm" if idd == State.CREATED : htmltext = "hello1.htm" elif cond == 1: if st.getQuestItemsCount(FEATHER) >= FEATHER_NEED and st.getQuestItemsCount(BOSS_ITEM) >= 1: htmltext = "mobs2.htm" else: htmltext = "mobs.htm" return htmltext def onKill(self,npc,player,isPet): st = player.getQuestState(qn) if not st or st.getInt("cond") != 1: return npcId = npc.getNpcId() reward = 0 limit = 1 chance = 100 if npcId in MOBS: reward = FEATHER limit = FEATHER_NEED chance = FEATHER_CHANCE if npcId == BOSS: reward = BOSS_ITEM limit = 1 if reward > 0: party = player.getParty() if party: for member in party.getPartyMembers(): if not member.isAlikeDead(): st = member.getQuestState("q903_WingsQuest") if st and st.getQuestItemsCount(reward) < limit and st.getRandom(100) <= chance: st.giveItems(reward, 1) st.playSound("ItemSound.quest_itemget") if st.getQuestItemsCount(reward) >= limit: st.playSound("ItemSound.quest_middle") else: if st.getQuestItemsCount(reward) < limit and st.getRandom(100) <= chance: st.giveItems(reward, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(903, qn, "Wings Quest") QUEST.addStartNpc(NPC) QUEST.addTalkId(NPC) QUEST.addKillId(BOSS) for m in MOBS: QUEST.addKillId(m) Поменял везде только 902 на 903 + поменял id мобов, боса итп... но пре этом первый грузится нормально а второй пишет ошибку: Line: -1 - Column: -1 Traceback (innermost last): File "__init__.py", line 111, in ? TypeError: iteration over non-sequence 111 for m in MOBS: 112 QUEST.addKillId(m) Пробовал поменять вот так: for n in MOBS: QUEST.addKillId(n) но результат не поменлся. В чом трабла ? Ведь 2 скрипта эдентичные но второй не работает. Изменено 28 июня, 2013 пользователем fanfcsd Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
4zh 8 Опубликовано 28 июня, 2013 Приветствую, добавил в сборку квест на крылья вот такой ## квест на крылья для Lucera 1.7 от 1d3x. import sys from ru.catssoftware import Config 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 = "q902_WingsQuest" ## нпц NPC = 77777 ## Мобы MOBS = [22132,22130,22131,22135] ##Ид мобов (сейчас на 2 этаже моса) #босс BOSS = 29021 ## Дроп #id перьев с мобов в мос FEATHER = 2129 #сколько нужно? FEATHER_NEED = 336 #шанс дропа, % FEATHER_CHANCE = 80 #id итема с босса BOSS_ITEM = 2125 ##Награда #id крыльев WINGS = 75000 class Quest (JQuest) : def __init__(self,id,name,descr) : JQuest.__init__(self,id,name,descr) def onEvent (self,event,st) : htmltext = event if event == "accept.htm": st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") st.set("cond","1") elif event == "finish.htm": if st.getQuestItemsCount(FEATHER) >= FEATHER_NEED and st.getQuestItemsCount(BOSS_ITEM) >= 1: st.takeItems(FEATHER, -1) st.takeItems(BOSS_ITEM, -1) st.giveItems(WINGS, 1) st.set("cond","0") st.playSound("ItemSound.quest_finish") st.setState(State.COMPLETED) else: htmltext = "mobs.htm" return htmltext def onTalk (self,npc,player): st = player.getQuestState(qn) if not st: return "You are either not on a quest that involves this NPC, or you don't meet this NPC's minimum quest requirements." npcId = npc.getNpcId() idd = st.getState() cond = st.getInt("cond") if npcId == NPC: if idd == State.COMPLETED : htmltext = "completed.htm" if idd == State.CREATED : htmltext = "hello1.htm" elif cond == 1: if st.getQuestItemsCount(FEATHER) >= FEATHER_NEED and st.getQuestItemsCount(BOSS_ITEM) >= 1: htmltext = "mobs2.htm" else: htmltext = "mobs.htm" return htmltext def onKill(self,npc,player,isPet): st = player.getQuestState(qn) if not st or st.getInt("cond") != 1: return npcId = npc.getNpcId() reward = 0 limit = 1 chance = 100 if npcId in MOBS: reward = FEATHER limit = FEATHER_NEED chance = FEATHER_CHANCE if npcId == BOSS: reward = BOSS_ITEM limit = 1 if reward > 0: party = player.getParty() if party: for member in party.getPartyMembers(): if not member.isAlikeDead(): st = member.getQuestState("q902_WingsQuest") if st and st.getQuestItemsCount(reward) < limit and st.getRandom(100) <= chance: st.giveItems(reward, 1) st.playSound("ItemSound.quest_itemget") if st.getQuestItemsCount(reward) >= limit: st.playSound("ItemSound.quest_middle") else: if st.getQuestItemsCount(reward) < limit and st.getRandom(100) <= chance: st.giveItems(reward, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(902, qn, "Wings Quest") QUEST.addStartNpc(NPC) QUEST.addTalkId(NPC) QUEST.addKillId(BOSS) for m in MOBS: QUEST.addKillId(m) и хотел его переделать на квест под броню, вот так ## квест на крылья для Lucera 1.7 от 1d3x. import sys from ru.catssoftware import Config 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 = "q903_WingsQuest" ## нпц NPC = 77778 ## Мобы MOBS = 21386 #босс BOSS = 555777 ## Дроп #id перьев с мобов в мос FEATHER = 17874 #сколько нужно? FEATHER_NEED = 200 #шанс дропа, % FEATHER_CHANCE = 100 #id итема с босса BOSS_ITEM = 17875 ##Награда #id крыльев WINGS = 17876 class Quest (JQuest) : def __init__(self,id,name,descr) : JQuest.__init__(self,id,name,descr) def onEvent (self,event,st) : htmltext = event if event == "accept.htm": st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") st.set("cond","1") elif event == "finish.htm": if st.getQuestItemsCount(FEATHER) >= FEATHER_NEED and st.getQuestItemsCount(BOSS_ITEM) >= 1: st.takeItems(FEATHER, -1) st.takeItems(BOSS_ITEM, -1) st.giveItems(WINGS, 1) st.set("cond","0") st.playSound("ItemSound.quest_finish") st.setState(State.COMPLETED) else: htmltext = "mobs.htm" return htmltext def onTalk (self,npc,player): st = player.getQuestState(qn) if not st: return "<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>" npcId = npc.getNpcId() idd = st.getState() cond = st.getInt("cond") if npcId == NPC: if idd == State.COMPLETED : htmltext = "completed.htm" if idd == State.CREATED : htmltext = "hello1.htm" elif cond == 1: if st.getQuestItemsCount(FEATHER) >= FEATHER_NEED and st.getQuestItemsCount(BOSS_ITEM) >= 1: htmltext = "mobs2.htm" else: htmltext = "mobs.htm" return htmltext def onKill(self,npc,player,isPet): st = player.getQuestState(qn) if not st or st.getInt("cond") != 1: return npcId = npc.getNpcId() reward = 0 limit = 1 chance = 100 if npcId in MOBS: reward = FEATHER limit = FEATHER_NEED chance = FEATHER_CHANCE if npcId == BOSS: reward = BOSS_ITEM limit = 1 if reward > 0: party = player.getParty() if party: for member in party.getPartyMembers(): if not member.isAlikeDead(): st = member.getQuestState("q903_WingsQuest") if st and st.getQuestItemsCount(reward) < limit and st.getRandom(100) <= chance: st.giveItems(reward, 1) st.playSound("ItemSound.quest_itemget") if st.getQuestItemsCount(reward) >= limit: st.playSound("ItemSound.quest_middle") else: if st.getQuestItemsCount(reward) < limit and st.getRandom(100) <= chance: st.giveItems(reward, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(903, qn, "Wings Quest") QUEST.addStartNpc(NPC) QUEST.addTalkId(NPC) QUEST.addKillId(BOSS) for m in MOBS: QUEST.addKillId(m) Поменял везде только 902 на 903 + поменял id мобов, боса итп... но пре этом первый грузится нормально а второй пишет ошибку: Line: -1 - Column: -1 Traceback (innermost last): File "__init__.py", line 111, in ? TypeError: iteration over non-sequence 111 for m in MOBS: 112 QUEST.addKillId(m) Пробовал поменять вот так: for n in MOBS: QUEST.addKillId(n) но результат не поменлся. В чом трабла ? Ведь 2 скрипта эдентичные но второй не работает. Может нужно ид моба в квадратных скобках написать? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
fanfcsd 1 Опубликовано 28 июня, 2013 Может нужно ид моба в квадратных скобках написать? точняк, + дал =)))) Спасибо) 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты