def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) # All of these are overridden in the subclasses self.NPC = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] self.Items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] self.Mob = [0, 1, 2] self.classid = 0 self.prevclass = 0 self.qn = "SagasSuperclass" self.X = [0, 1, 2] self.Y = [0, 1, 2] self.Z = [0, 1, 2] self.Text = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] self.Spawn_List = [] #todos estes não são sobrescritos pelas subclasses (porque são constantes ou usadas apenas para este script) self.CREATED = State('Start', self) self.STARTED = State('Started', self) self.COMPLETED = State('Completed', self)
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr) # All of these are overridden in the subclasses self.NPC = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] self.Items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] self.Mob = [0, 1, 2] self.classid = 0 self.prevclass = 0 self.qn = "SagasSuperclass" self.X = [0, 1, 2] self.Y = [0, 1, 2] self.Z = [0, 1, 2] self.Text = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] self.Spawn_List = [] #all these are not overridden by the subclasses (either cause they are constant or used only for this script) self.CREATED = State('Start', self) self.STARTED = State('Started', self) self.COMPLETED = State('Completed', self)
else: return "30598-6.htm" #you're not eligible to get a coupon (level caps, pkkills or didnt change class yet) elif event == "newbie_show_weapon": if 6 <= level <= 39 and not pkkills and occupation_level == 0: L2Multisell.getInstance().SeparateAndSend( WEAPON_MULTISELL, player, False, 0.0) else: return "30598-7.htm" #you're not eligible to use warehouse elif event == "newbie_show_armor": if 6 <= level <= 39 and not pkkills and occupation_level > 0: L2Multisell.getInstance().SeparateAndSend( ACCESORIES_MULTISELL, player, False, 0.0) else: return "30598-8.htm" #you're not eligible to use warehouse def onTalk(self, npc, player): st = player.getQuestState(qn) if not st: st = self.newQuestState(player) return "30598.htm" QUEST = Quest(-1, qn, "custom") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) for i in NPCs: QUEST.addStartNpc(i) QUEST.addTalkId(i)
if st.getRandom(100) < 50: st.giveItems(INPICIO_SAC_ID, 1) st.playSound("ItemSound.quest_middle") elif npcId == 20233: st.set("id", "0") if st.getInt("cond") and st.getQuestItemsCount( RING_OF_TESTIMONY2_ID ) == 1 and st.getQuestItemsCount(SPIDER_THORN_ID) < 10: if st.getRandom(100) < 50: st.giveItems(SPIDER_THORN_ID, 1) st.playSound("ItemSound.quest_middle") return QUEST = Quest(221, qn, "Testimony Of Prosperity") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30104) QUEST.addTalkId(30104) QUEST.addTalkId(30005) QUEST.addTalkId(30368) QUEST.addTalkId(30466) QUEST.addTalkId(30517) QUEST.addTalkId(30519) QUEST.addTalkId(30531)
class Quest(JQuest): def __init__(self, id, name, descr): JQuest.__init__(self, id, name, descr) def onTalk(Self, npc, player): st = player.getQuestState(qn) 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>" if player.isHero(): if st.getQuestItemsCount(6842): htmltext = "You can't have more than one circlet." else: st.giveItems(6842, 1) htmltext = "Enjoy your Wings of Destiny Circlet." st.exitQuest(1) else: html = "<html><body>Monument of Heroes:<br>You're not a Hero and aren't eligible to receive the Wings of Destiny Circlet. Better luck next time.<br><a action=\"bypass -h npc_%objectId%_Chat 0\">Return</a></body></html>" htmltext = html.replace("%objectId%", str(npc.getObjectId())) st.exitQuest(1) return htmltext QUEST = Quest(-1, qn, "custom") CREATED = State('Start', QUEST) QUEST.setInitialState(CREATED) for i in MONUMENTS: QUEST.addStartNpc(i) QUEST.addTalkId(i)
if not st: return if st.getState() != PROGRESS: return npcId = npc.getNpcId() drop = st.getRandom(100) cond = st.getInt("cond") dropcond = DROPLIST[npcId][0] if drop < DROP_RATE and cond == dropcond: if st.getQuestItemsCount(DROPLIST[npcId][1]) == 0: st.giveItems(DROPLIST[npcId][1], 1) st.playSound("ItemSound.quest_itemget") st.set("cond", str(cond + 1)) return # Quest class and state definition QUEST = Quest(QUEST_NUMBER, qn, QUEST_DESCRIPTION) CREATED = State('Start', QUEST) PROGRESS = State('Progress', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) # Quest NPC starter initialization QUEST.addStartNpc(LADD) # Quest initialization QUEST.addTalkId(LADD) QUEST.addTalkId(JOAN) for i in DROPLIST.keys(): QUEST.addKillId(i)
count = st.getQuestItemsCount(item) if st.getRandom(100) < chance: numItems += 1 if numItems: if count + numItems >= REQUIRED_SPIDER_LEGS: numItems = REQUIRED_SPIDER_LEGS - count st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") st.giveItems(item, int(numItems)) return # Quest class and state definition QUEST = Quest(419, qn, "Wolf Collar") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) SLAYED = State('Slayed', QUEST) TALKED = State('Talked', QUEST) COMPLETED = State('Completed', QUEST) # Quest initialization QUEST.setInitialState(CREATED) # Quest NPC starter initialization QUEST.addStartNpc(PET_MANAGER_MARTIN) # Quest Item Drop initialization for item in range(3417, 3428): STARTED.addQuestDrop(PET_MANAGER_MARTIN, item, 1) # Quest mob initialization
spawnedNpc=st.addSpawn(GREAT_DEMON_KING,npc,True,0) autochat(spawnedNpc,"Who dares to kill my fiendly minion?!") st.startQuestTimer("greatdemon_timer1",600000,spawnedNpc) else : st.giveItems(R4[st.getRandom(len(R4))],1) except: pass elif npcId == GREAT_DEMON_KING: try : st.getQuestTimer("greatdemon_timer1").cancel() st.giveItems(ADENA,1412965) st.playSound("ItemSound.quest_itemget") except: pass return QUEST = Quest(334,qn,"The Wishing Potion") CREATED = State('Start', QUEST) STARTED = State('started', QUEST) #Following states kept for backwards compatibility only. MIDDLE = State('middle', QUEST) END = State('end', QUEST) COMPLETED = State('completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(ALCHEMIST_MATILD) QUEST.addTalkId(ALCHEMIST_MATILD) QUEST.addTalkId(TORAI) QUEST.addTalkId(RUPINA) QUEST.addTalkId(WISDOM_CHEST)
npcId = str(npc.getNpcId()) id = st.getState() if id == CREATED: st.set("cond", "0") if st.getInt("cond") == 0: htmltext = npcId + "-01.htm" elif check(st): htmltext = npcId + "-03.htm" elif st.getQuestItemsCount( RED_SOUL_CRYSTAL0_ID) == st.getQuestItemsCount( GREEN_SOUL_CRYSTAL0_ID) == st.getQuestItemsCount( BLUE_SOUL_CRYSTAL0_ID) == 0: htmltext = npcId + "-21.htm" return htmltext QUEST = Quest(350, qn, "Enhance Your Weapon") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) for npcId in NPC: QUEST.addStartNpc(npcId) QUEST.addTalkId(npcId) STARTED.addQuestDrop(4629, RED_SOUL_CRYSTAL0_ID, 1) STARTED.addQuestDrop(4640, GREEN_SOUL_CRYSTAL0_ID, 1) STARTED.addQuestDrop(4651, BLUE_SOUL_CRYSTAL0_ID, 1)
item=DROP_LIST[npcId][0] random = st.getRandom(100) if item == KALDIS_COIN : if cond == 2 : if not st.getQuestItemsCount(item) and random < (chance - 10) : st.giveItems(item,1) st.playSound("ItemSound.quest_middle") st.set("cond","3") elif random < chance: st.giveItems(item,1) st.playSound("ItemSound.quest_itemget") return # Quest class and state definition QUEST = Quest(QUEST_NUMBER, str(QUEST_NUMBER)+"_"+QUEST_NAME, QUEST_DESCRIPTION) CREATED = State('Start', QUEST) SOLO = State('Solo', QUEST) PARTY = State('Party', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) # Quest NPC starter initialization QUEST.addStartNpc(SORINT) # Quest initialization for npc in [SORINT, BERNARD, PAGE, HAGGER, STAN, RALFORD, FERRIS, COLLOB, PANO, DUNING, LORAIN]: QUEST.addTalkId(npc) for mob in DROP_LIST.keys(): QUEST.addKillId(mob)
count = st.getQuestItemsCount(KASHA_WOLF_FANG) if count < 50: numItems, chance = divmod(125 * Config.RATE_DROP_QUEST, 100) if st.getRandom(100) <= chance: numItems += 1 numItems = int(numItems) if numItems != 0: if 50 <= (count + numItems): numItems = 50 - count st.playSound("ItemSound.quest_middle") st.set("cond", "2") else: st.playSound("ItemSound.quest_itemget") st.giveItems(KASHA_WOLF_FANG, numItems) return QUEST = Quest(271, qn, "Proof Of Valor") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) # kept just for backwards compatibility STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30577) QUEST.addTalkId(30577) QUEST.addKillId(20475) STARTED.addQuestDrop(20475, KASHA_WOLF_FANG, 1)
if count < maxcount: st.giveItems(item, 1) # spawns 5 new medusas around the dead queen *muha* if npcId == 27108: for i in range(5): st.addSpawn(20158) if count == maxcount - 1: st.playSound("ItemSound.quest_middle") st.set(var, str(isValue + 1)) else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(233, qn, "Test Of Warspirit") CREATED = State('Start', QUEST) PART1 = State('Part1', QUEST) PART2 = State('Part2', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30510) for npcId in NPC: QUEST.addTalkId(npcId) for mobId in PART1_MOBS: QUEST.addKillId(mobId) for mobId in PART2_MOBS: QUEST.addKillId(mobId)
st.takeItems(M_EGG, 1) st.giveItems(57, 71318) st.setState(COMPLETED) st.set("cond", "0") st.playSound("ItemSound.quest_finish") elif npcId == KARAKAWEI: if cond == 4: htmltext = "32117-01.htm" if id == MIDDLE: htmltext = "32117-02.htm" elif cond == 5: htmltext = "32117-04.htm" elif npcId == MANTARASA and cond == 5: htmltext = "32118-01.htm" return htmltext QUEST = Quest(124, qn, "Meeting The Elroki") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) MIDDLE = State('Middle', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(MARQUEZ) QUEST.addTalkId(MARQUEZ) QUEST.addTalkId(MUSHIKA) QUEST.addTalkId(ASAMAH) QUEST.addTalkId(KARAKAWEI) QUEST.addTalkId(MANTARASA)