st = partyMember.getQuestState(qn) if st: count = st.getQuestItemsCount(TARLK_EYE) if st.getInt("cond") == 1 and count < 100: chance = 33 * Config.RATE_DROP_QUEST numItems, chance = divmod(chance, 100) if st.getRandom(100) < chance: numItems += 1 if numItems: if count + numItems >= 100: numItems = 100 - count st.playSound("ItemSound.quest_middle") st.set("cond", "2") else: st.playSound("ItemSound.quest_itemget") st.giveItems(TARLK_EYE, 1) return QUEST = Quest(52, qn, "Willie's Special Bait") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(WILLIE) QUEST.addTalkId(WILLIE) QUEST.addKillId(TARLK_BASILISK) STARTED.addQuestDrop(TARLK_BASILISK, TARLK_EYE, 1)
if npcId == 30533 and st.getInt("cond")==1 : htmltext = "30533-04.htm" elif npcId == 30520 and st.getInt("cond") == 3 : htmltext = "30520-04.htm" st.set("cond","4") elif npcId == 30520 and st.getInt("cond") : if st.getQuestItemsCount(VERY_EXPENSIVE_NECKLACE) == 0 : htmltext = "30520-01.htm" else : htmltext = "30520-03.htm" elif npcId == 30650 and st.getInt("cond")==2 : if st.getQuestItemsCount(VERY_EXPENSIVE_NECKLACE) : htmltext = "30650-01.htm" elif npcId == 30533 and st.getInt("cond")==4 : htmltext = "30533-05.htm" return htmltext QUEST = Quest(10,qn,"Into The World") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30533) QUEST.addTalkId(30533) QUEST.addTalkId(30520) QUEST.addTalkId(30650) STARTED.addQuestDrop(30520,VERY_EXPENSIVE_NECKLACE,1)
partyMember = self.getRandomPartyMemberState(player, STARTED) if not partyMember : return st = partyMember.getQuestState(qn) chance = CHANCE[npc.getNpcId()]*Config.RATE_DROP_QUEST numItems, chance = divmod(chance,MAX) if st.getRandom(MAX)<chance : numItems = numItems + 1 if numItems != 0 : st.giveItems(ANCIENT_SCROLL,int(numItems)) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(385,qn,"Yoke of the Past") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) for npcId in range(31095,31126): if npcId in [31111,31112,31113]: continue QUEST.addTalkId(npcId) QUEST.addStartNpc(npcId) for mobs in range(21208,21256): QUEST.addKillId(mobs) STARTED.addQuestDrop(20986,ANCIENT_SCROLL,1) print "importing quests: 385: Yoke of the Past"
if st.getRandom(10)<chance : st.giveItems(item,1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(257,qn,"Guard Is Busy1") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30039) QUEST.addTalkId(30039) QUEST.addKillId(20130) QUEST.addKillId(20131) QUEST.addKillId(20132) QUEST.addKillId(20342) QUEST.addKillId(20343) QUEST.addKillId(20006) QUEST.addKillId(20093) QUEST.addKillId(20096) QUEST.addKillId(20098) STARTED.addQuestDrop(20130,ORC_AMULET,1) STARTED.addQuestDrop(20093,ORC_NECKLACE,1) STARTED.addQuestDrop(20132,WEREWOLF_FANG,1) STARTED.addQuestDrop(30039,GLUDIO_LORDS_MARK,1)
st.playSound("ItemSound.quest_itemget") else: st.playSound("ItemSound.quest_middle") st.set("cond","2") st.giveItems(MARAKU_WEREWOLF_HEAD,1) if st.getRandom(100) <= 5 : st.giveItems(MARAKU_WOLFMEN_TOTEM,1) return QUEST = Quest(274,"274_AgainstWolfMen","Against Wolf Men") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(7569) CREATED.addTalkId(7569) STARTING.addTalkId(7569) STARTED.addTalkId(7569) COMPLETED.addTalkId(7569) STARTED.addKillId(363) STARTED.addKillId(364) STARTED.addQuestDrop(363,MARAKU_WEREWOLF_HEAD,1) STARTED.addQuestDrop(364,MARAKU_WEREWOLF_HEAD,1) print "importing quests: 274: Against Wolf Men"
htmltext = "7095-0a.htm" st.exitQuest(1) elif cond == 1: if not st.getQuestItemsCount(TREASURE_CHEST): htmltext = "7095-2.htm" else: htmltext = "7095-4.htm" return htmltext def onKill(self, npc, st): chance = st.getRandom(100) if chance < CHANCE_OF_DROP: st.giveItems(TREASURE_CHEST, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(365, "365_DevilsLegacy", "Devil's Legacy") CREATED = State("Start", QUEST) STARTED = State("Started", QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(RANDOLF) CREATED.addTalkId(RANDOLF) STARTED.addTalkId(RANDOLF) for mob in MOBS: STARTED.addKillId(mob) STARTED.addQuestDrop(RANDOLF, TREASURE_CHEST, 1) print "importing quests: 365: Devil's Legacy"
st.giveItems(BONE_FRAGMENT6,1) st.playSound("ItemSound.quest_itemget") elif npcId == 20022 : if st.getInt("cond") == 16 and st.getQuestItemsCount(BONE_FRAGMENT7) == 0 : st.giveItems(BONE_FRAGMENT7,1) st.playSound("ItemSound.quest_itemget") elif npcId == 20100 : if st.getInt("cond") == 16 and st.getQuestItemsCount(BONE_FRAGMENT8) == 0 : st.giveItems(BONE_FRAGMENT8,1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(227,qn,"Test Of Reformer") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30118) QUEST.addTalkId(30118) for npcId in [30666,30667,30669,30670,30732,30668]: QUEST.addTalkId(npcId) for mobId in [20100,20102,20104,20404,20022,27099,27128,27130,27129,27132,27131]: QUEST.addKillId(mobId) for item in range(2822,2840)+[3037]: STARTED.addQuestDrop(20102,item,1)
elif npcId == ROXXY and cond == 1: htmltext = "30006-04.htm" elif id == STARTED: if npcId == BAULRO: if cond == 1: htmltext = "30033-01.htm" elif cond == 2 and st.getQuestItemsCount(BAULRO_LETTER): htmltext = "30033-03.htm" elif npcId == SIR_COLLIN and cond == 2 and st.getQuestItemsCount( BAULRO_LETTER): htmltext = "30311-02.htm" elif npcId == ROXXY and cond == 3: htmltext = "30006-05.htm" return htmltext QUEST = Quest(6, qn, "Step into the Future") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(ROXXY) QUEST.addTalkId(ROXXY) QUEST.addTalkId(BAULRO) QUEST.addTalkId(SIR_COLLIN) STARTED.addQuestDrop(ROXXY, BAULRO_LETTER, 1)
QUEST.setInitialState(CREATED) QUEST.addStartNpc(30523) QUEST.addTalkId(30523) QUEST.addTalkId(30516) QUEST.addTalkId(30521) QUEST.addTalkId(30522) QUEST.addTalkId(30523) QUEST.addTalkId(30526) QUEST.addTalkId(30529) QUEST.addTalkId(30555) QUEST.addKillId(20323) QUEST.addKillId(20324) QUEST.addKillId(20480) STARTED.addQuestDrop(30526, GEM_BOX1_ID, 1) STARTED.addQuestDrop(20480, STAR_DIAMOND_ID, 1) STARTED.addQuestDrop(30523, GOUPHS_CONTRACT_ID, 1) STARTED.addQuestDrop(30516, REEPS_CONTRACT_ID, 1) STARTED.addQuestDrop(30555, ELVEN_WINE_ID, 1) STARTED.addQuestDrop(30526, BRONPS_CONTRACT_ID, 1) STARTED.addQuestDrop(20323, AQUAMARINE_ID, 1) STARTED.addQuestDrop(20323, CHRYSOBERYL_ID, 1) STARTED.addQuestDrop(30523, COAL_PIECE_ID, 1) STARTED.addQuestDrop(30529, BRONPS_DICE_ID, 1) STARTED.addQuestDrop(30526, BRONPS_LETTER_ID, 1) STARTED.addQuestDrop(30521, BERRY_TART_ID, 1) STARTED.addQuestDrop(30522, BAT_DIAGRAM_ID, 1)
st.set("cond", "6") return QUEST = Quest(403, qn, "Path To Rogue") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30379) QUEST.addTalkId(30379) QUEST.addTalkId(30425) QUEST.addKillId(27038) for StolenItemId in STOLEN_ITEM.keys(): STARTED.addQuestDrop(27038, STOLEN_ITEM[StolenItemId], 1) for mobId in (20035, 20042, 20045, 20051, 20054, 20060): QUEST.addKillId(mobId) STARTED.addQuestDrop(mobId, SPATOIS_BONES, 1) STARTED.addQuestDrop(30425, NETIS_BOW, 1) STARTED.addQuestDrop(30425, NETIS_DAGGER, 1) STARTED.addQuestDrop(30379, WANTED_BILL, 1) STARTED.addQuestDrop(30425, HORSESHOE_OF_LIGHT, 1) STARTED.addQuestDrop(30379, BEZIQUES_LETTER, 1)
numItems,chance = divmod(100*Config.RATE_DROP_QUEST,100) item,count = MOB[npcId] if item : if st.getRandom(100) <chance : numItems = numItems + 1 prevItems = st.getQuestItemsCount(item) if prevItems < count : if prevItems + numItems > count : numItems = count - prevItems if int(numItems) != 0 : st.giveItems(item,int(numItems)) if (st.getQuestItemsCount(LEAF) != 80 and st.getQuestItemsCount(STONE) != 100) : st.playSound("ItemSound.quest_itemget") else : st.playSound("ItemSound.quest_middle") st.set("cond","2") return QUEST = Quest(379,qn,"Fantasy Wine") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(HARLAN) QUEST.addTalkId(HARLAN) QUEST.addKillId(ENKU_CHAMPION) QUEST.addKillId(ENKU_SHAMAN) STARTED.addQuestDrop(HARLAN,LEAF,1) STARTED.addQuestDrop(HARLAN,STONE,1)
st.get(var)) == value and random < chance and count < maxcount: st.giveItems(item, 1) if count == maxcount - 1: st.playSound("ItemSound.quest_middle") if newValue == 1 and st.getQuestItemsCount( RAGNA_ORC_HEAD) and st.getQuestItemsCount( RAGNA_CHIEF_NOTICE): st.set(var, "2") else: st.set(var, str(newValue)) else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(232, qn, "Test Of Lord") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(NPC[4]) for npcId in NPC: QUEST.addTalkId(npcId) for mobId in MOBS: QUEST.addKillId(mobId) for item in range(3391, 3417): STARTED.addQuestDrop(NPC[4], item, 1)
elif cond == 1: if not st.getQuestItemsCount(TREASURE_CHEST): htmltext = "30095-2.htm" else: htmltext = "30095-4.htm" return htmltext def onKill(self, npc, player, isPet): partyMember = self.getRandomPartyMemberState(player, STARTED) if not partyMember: return st = partyMember.getQuestState(qn) chance = st.getRandom(100) if chance < CHANCE_OF_DROP: st.giveItems(TREASURE_CHEST, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(365, qn, "Devil's Legacy") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(RANDOLF) QUEST.addTalkId(RANDOLF) for mob in MOBS: QUEST.addKillId(mob) STARTED.addQuestDrop(RANDOLF, TREASURE_CHEST, 1)
QUEST.addTalkId(30655) QUEST.addKillId(20145) QUEST.addKillId(20176) QUEST.addKillId(20233) QUEST.addKillId(27077) QUEST.addKillId(20550) QUEST.addKillId(20581) QUEST.addKillId(20582) QUEST.addKillId(20082) QUEST.addKillId(20084) QUEST.addKillId(20086) QUEST.addKillId(20087) QUEST.addKillId(20088) STARTED.addQuestDrop(30154,CAMOMILE_CHARM_ID,1) STARTED.addQuestDrop(30460,CARDIENS_LETTER_ID,1) STARTED.addQuestDrop(30371,WATER_OF_LIFE_ID,1) STARTED.addQuestDrop(30154,MOONFLOWER_CHARM_ID,1) STARTED.addQuestDrop(30154,HIERARCHS_LETTER_ID,1) STARTED.addQuestDrop(30419,STARDUST_ID,1) STARTED.addQuestDrop(30300,PURE_MITHRIL_CUP_ID,1) STARTED.addQuestDrop(30371,THALIAS_INSTRUCTIONS_ID,1) STARTED.addQuestDrop(30655,ISAELS_LETTER_ID,1) STARTED.addQuestDrop(27077,TEARS_OF_UNICORN_ID,1) STARTED.addQuestDrop(30371,GRAIL_DIAGRAM_ID,1) STARTED.addQuestDrop(30300,PUSHKINS_LIST_ID,1) STARTED.addQuestDrop(30371,THALIAS_LETTER1_ID,1) STARTED.addQuestDrop(30419,ARKENIAS_CONTRACT_ID,1) STARTED.addQuestDrop(30375,ANDARIEL_SCRIPTURE_COPY_ID,1) STARTED.addQuestDrop(30419,ARKENIAS_INSTRUCTIONS_ID,1)
chance = st.getRandom(10) for i in DROP[npcId]: if i[0] <= chance < i[1]: qty = i[2] if count + qty > 100: qty = 100 - count if count + qty == 100: st.playSound("ItemSound.quest_middle") st.set("cond", "2") else: st.playSound("ItemSound.quest_itemget") st.giveItems(BAT_FANG, qty) return QUEST = Quest(294, qn, "Covert Business") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30534) QUEST.addTalkId(30534) QUEST.addKillId(20370) QUEST.addKillId(20480) STARTED.addQuestDrop(20480, BAT_FANG, 1)
if sponsor : if player.isInsideRadius(sponsor, 1100, 1, 0) : enabled=True if st.getInt("cond") == cond and count < max and st.getRandom(100) < chance and enabled : st.giveItems(item,1) if count == max-1: st.set("cond",str(cond+1)) st.playSound("ItemSound.quest_middle") else : st.playSound("ItemSound.quest_itemget") return QUEST = Quest(118,qn,"To Lead And Be Led") CREATED = State('Start', QUEST) PROGRESS = State('Progress', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(PINTER) QUEST.addTalkId(PINTER) for mob in DROPLIST.keys(): QUEST.addKillId(mob) PROGRESS.addQuestDrop(PINTER,BLOOD,1) PROGRESS.addQuestDrop(PINTER,LEG,1) print "importing quests: 118: To Lead And Be Led"
def onKill (self,npc,player): st = player.getQuestState(qn) if not st : return if st.getState() != STARTED : return count=st.getQuestItemsCount(ORCISH_ARROWHEAD) if count<10 and st.getRandom(100)<40 : st.giveItems(ORCISH_ARROWHEAD,1) if count == 9 : st.set("cond","2") st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(303,qn,"Collect Arrowheads") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30029) QUEST.addTalkId(30029) QUEST.addKillId(20361) STARTED.addQuestDrop(20361,ORCISH_ARROWHEAD,1) print "importing quests: 303: Collect Arrowheads"
giveItem(itemList[0],maxcount,leader_st) else: if npcId == 27181: # Imperial Gravekeeper leader_st.getPcSpawn().addSpawn(30765,120000,["Curse of the gods on the one that defiles the property of the empire!"],60000) leader_st.set("ImpGraveKeeper","3") self.ImpGraveKepperStat = 1 elif npcId == 20668: leader_st.getPcSpawn().addSpawn(27179) return QUEST = Quest(503,qn,"Pursuit of Clan Ambition") CREATED = State('Start', QUEST) PROGRESS = State('Progress', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(NPC[3]) for npcId in NPC: QUEST.addTalkId(npcId) for mobId in DROPLIST.keys(): QUEST.addKillId(mobId) QUEST.addAttackId(27181) for i in range(3839,3848)+range(3866,3870): PROGRESS.addQuestDrop(27181,i,1) print "importing quests: 503: " + qd
st.giveItems(MOTHERTREE_FRUIT, 1) st.set("cond", "2") elif cond == 2: if npcId == 30362 and st.getQuestItemsCount(MOTHERTREE_FRUIT): htmltext = "30362-06.htm" st.giveItems(ADENA, 100) st.takeItems(MOTHERTREE_FRUIT, 1) st.addExpAndSp(1000, 0) st.unset("cond") st.setState(COMPLETED) st.playSound("ItemSound.quest_finish") elif npcId == 30371 and st.getQuestItemsCount( MOTHERTREE_FRUIT): htmltext = "30371-02.htm" return htmltext QUEST = Quest(161, qn, "Fruits Of Mothertree") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30362) QUEST.addTalkId(30362) QUEST.addTalkId(30371) STARTED.addQuestDrop(30371, MOTHERTREE_FRUIT, 1) STARTED.addQuestDrop(30362, ANDELLRIAS_LETTER, 1)
st.giveItems(CHAPTER_OF_WIND, 1) st.playSound("ItemSound.quest_itemget") elif chance in range(75, 90) and st.getQuestItemsCount(CHAPTER_OF_EARTH) == 0: st.giveItems(CHAPTER_OF_EARTH, 1) st.playSound("ItemSound.quest_itemget") if ( st.getQuestItemsCount(CHAPTER_OF_FIRE) and st.getQuestItemsCount(CHAPTER_OF_WATER) and st.getQuestItemsCount(CHAPTER_OF_WIND) and st.getQuestItemsCount(CHAPTER_OF_EARTH) ): st.playSound("ItemSound.quest_middle") return QUEST = Quest(370, "370_AWisemanSowsSeeds", "A Wiseman Sows Seeds") CREATED = State("Start", QUEST) STARTED = State("Started", QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(CASIAN) CREATED.addTalkId(CASIAN) STARTED.addTalkId(CASIAN) for i in MOBS: STARTED.addKillId(i) for i in range(5917, 5921): STARTED.addQuestDrop(CASIAN, i, 1) print "importing quests: 370: A Wiseman Sows Seeds"
htmltext = "30847-4.htm" st.exitQuest(1) return htmltext def onKill (self,npc,player): partyMember = self.getRandomPartyMember(player,"1") if not partyMember : return st = partyMember.getQuestState(qn) count = st.getQuestItemsCount(REINFORCED_STEEL) if count < 5 : st.giveItems(REINFORCED_STEEL,1) if count == 4 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(36,qn,"Make A Sewing Kit") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30847) QUEST.addTalkId(30847) QUEST.addKillId(20566) STARTED.addQuestDrop(20566,REINFORCED_STEEL,1) print "importing quests: 36: Make A Sewing Kit"
return htmltext def onKill (self,npc,player): st = player.getQuestState(qn) if not st : return if st.getState() != STARTED : return npcId = npc.getNpcId() cond = st.getInt("cond") if cond==1 : st.dropQuestItems(BEAR_SKIN,1,20,CHANCE,1) return QUEST = Quest(341,qn,"Hunting For Wild Beasts") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30078) QUEST.addTalkId(30078) STARTED.addQuestDrop(30078,BEAR_SKIN,1) QUEST.addKillId(20021) QUEST.addKillId(20203) QUEST.addKillId(20310) QUEST.addKillId(20335) print "importing quests: 341: Hunting For Wild Beasts"
else: st.giveItems(item, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(228, qn, "Test Of Magus") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30629) QUEST.addTalkId(30629) for npcId in [30391, 30409, 30411, 30412, 30413, 30612]: QUEST.addTalkId(npcId) for mobId in [ 20145, 20157, 20176, 20230, 20231, 20232, 20234, 27095, 27096, 27097, 27098, 20553, 20564, 20565, 20566 ]: QUEST.addKillId(mobId) for item in range(2841, 2864): STARTED.addQuestDrop(30629, item, 1) print "importing quests: 228: Test Of Magus"
st.giveItems(LIZARD_FANG,st.getRandom(5)+1) st.playSound("ItemSound.quest_itemget") if random<=CHANCE2 : st.giveItems(BARREL_OF_LEAGUE,1) st.set("cond","2") return QUEST = Quest(351,qn,"Black Swan") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30916) QUEST.addTalkId(30916) QUEST.addTalkId(30969) QUEST.addTalkId(30897) STARTED.addQuestDrop(30916,ORDER_OF_GOSTA,1) STARTED.addQuestDrop(30916,BARREL_OF_LEAGUE,1) STARTED.addQuestDrop(30916,LIZARD_FANG,1) QUEST.addKillId(20784) QUEST.addKillId(20785) QUEST.addKillId(21639) QUEST.addKillId(21640) QUEST.addKillId(21642) QUEST.addKillId(21643) print "importing quests: 351: Black Swan"
chance = st.getRandom(100) count = st.getQuestItemsCount(MEDICINAL_HERB) if chance < CHANCE_FOR_DROP and st.getInt("cond") == 3: if count < 20: st.giveItems(MEDICINAL_HERB, 1) if count == 19: st.playSound("ItemSound.quest_middle") st.set("cond", "4") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(32, "32_AnObviousLie", "An Obvious Lie") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(MAXIMILIAN) CREATED.addTalkId(MAXIMILIAN) STARTED.addTalkId(MAXIMILIAN) STARTED.addTalkId(GENTLER) STARTED.addTalkId(MIKI_THE_CAT) STARTED.addKillId(ALLIGATOR) STARTED.addQuestDrop(ALLIGATOR, MEDICINAL_HERB, 1) STARTED.addQuestDrop(GENTLER, MAP, 1) print "importing quests: 32: An Obvious Lie"
st.playSound("Itemsound.quest_itemget") else: st.giveItems(itemid,1) if count==maxcount-1: st.playSound("ItemSound.quest_middle") st.set("cond",str(cond+1)) if npcId == 27093: st.giveItems(STRANGE_MAP,1) else: st.playSound("Itemsound.quest_itemget") if npcId==20781 and random<30 and count<maxcount: st.addSpawn(27094,npc.getX(),npc.getY(),npc.getZ(),npc.getHeading(),True,300000) return QUEST = Quest(225,qn,"Test Of Searcher") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30690) for npcId in NPC: QUEST.addTalkId(npcId) for mobId in MOB: QUEST.addKillId(mobId) for item in range(2784,2809): STARTED.addQuestDrop(30690,item,1)
QUEST.addTalkId(30656) QUEST.addKillId(20144) QUEST.addKillId(20190) QUEST.addKillId(20191) QUEST.addKillId(20200) QUEST.addKillId(20201) QUEST.addKillId(20270) QUEST.addKillId(27119) QUEST.addKillId(20577) QUEST.addKillId(20578) QUEST.addKillId(20579) QUEST.addKillId(20580) QUEST.addKillId(20581) QUEST.addKillId(20582) STARTED.addQuestDrop(30116, LETTER_OF_DUSTIN, 1) STARTED.addQuestDrop(27119, KNIGHTS_TEAR, 1) STARTED.addQuestDrop(30653, OLD_KNIGHT_SWORD, 1) STARTED.addQuestDrop(30656, TEAR_OF_CONFESSION, 1) STARTED.addQuestDrop(30654, MIRROR_OF_ORPIC, 1) STARTED.addQuestDrop(20200, TALIANUSS_REPORT, 1) STARTED.addQuestDrop(20577, MILITAS_ARTICLE, 1) STARTED.addQuestDrop(20270, ATEBALTS_SKULL, 1) STARTED.addQuestDrop(20270, ATEBALTS_RIBS, 1) STARTED.addQuestDrop(20270, ATEBALTS_SHIN, 1) STARTED.addQuestDrop(30311, LETTER_OF_WINDAWOOD, 1) STARTED.addQuestDrop(30655, TEAR_OF_LOYALTY, 1) STARTED.addQuestDrop(30116, SAINTS_ASHES_URN, 1) STARTED.addQuestDrop(20200, REPORT_PIECE, 1)
QUEST.addTalkId(30191) QUEST.addTalkId(30031) QUEST.addTalkId(30154) QUEST.addTalkId(30358) QUEST.addTalkId(30464) QUEST.addTalkId(30515) QUEST.addTalkId(30531) QUEST.addTalkId(30565) QUEST.addTalkId(30621) QUEST.addTalkId(30657) for i in DROPLIST.keys()+[20013,20019,20036,20044,20553] : QUEST.addKillId(i) STARTED.addQuestDrop(30358,SCROLL_OF_DARKELF_TRUST_ID,1) STARTED.addQuestDrop(30154,SCROLL_OF_ELF_TRUST_ID,1) STARTED.addQuestDrop(30531,SCROLL_OF_DWARF_TRUST_ID,1) STARTED.addQuestDrop(30565,SCROLL_OF_ORC_TRUST_ID,1) STARTED.addQuestDrop(27120,BREATH_OF_WINDS_ID,1) STARTED.addQuestDrop(27121,SEED_OF_VERDURE_ID,1) STARTED.addQuestDrop(30154,ORDER_OF_OZZY_ID,1) STARTED.addQuestDrop(30191,LETTER_TO_ELF_ID,1) STARTED.addQuestDrop(30464,ORDER_OF_CLAYTON_ID,1) STARTED.addQuestDrop(20550,BASILISK_PLASMA_ID,1) STARTED.addQuestDrop(20157,STAKATO_ICHOR_ID,1) STARTED.addQuestDrop(20082,HONEY_DEW_ID,1) STARTED.addQuestDrop(30191,LETTER_TO_DARKELF_ID,1) STARTED.addQuestDrop(30358,LETTER_OF_THIFIELL_ID,1) STARTED.addQuestDrop(30191,LETTER_TO_SERESIN_ID,1) STARTED.addQuestDrop(30657,LETTER_TO_ORC_ID,1)
if st.getInt("AGRIPEL") == 1 and st.getInt( "DOMINIC") == 1 and st.getInt("BENEDICT") == 1: htmltext = "31349-02.htm" st.set("cond", "7") st.playSound("ItemSound.quest_middle") return htmltext htmltext = "31349-0" + str(st.getRandom(3)) + ".htm" elif cond == 7: htmltext = "31349-03.htm" elif npcId == 31328: if cond == 7: if st.getQuestItemsCount(7140) == 1: htmltext = "31328-01.htm" elif cond == 0 and onlyone == 1: htmltext = "31328-06.htm" return htmltext QUEST = Quest(21, qn, "Hidden Truth") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(31522) for NPC in [31522, 31523, 31524, 31525, 31526, 31348, 31349, 31350, 31328]: QUEST.addTalkId(NPC) STARTED.addQuestDrop(31526, 7140, 1)
if not st.getQuestItemsCount(GARMIELS_SCRIPTURE_ID) : st.giveItems(GARMIELS_SCRIPTURE_ID,1) htmltext = "30143-01.htm" else : htmltext = "30143-02.htm" if st.getQuestItemsCount(UNDRES_LETTER_ID) and (st.getQuestItemsCount(CEREMONIAL_DAGGER_ID) + st.getQuestItemsCount(DREVIANT_WINE_ID) + st.getQuestItemsCount(GARMIELS_SCRIPTURE_ID) >= 3) : st.set("cond","2") st.playSound("ItemSound.quest_middle") return htmltext QUEST = Quest(166,qn,"Dark Mass") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30130) QUEST.addTalkId(30130) QUEST.addTalkId(30135) QUEST.addTalkId(30139) QUEST.addTalkId(30143) STARTED.addQuestDrop(30135,CEREMONIAL_DAGGER_ID,1) STARTED.addQuestDrop(30139,DREVIANT_WINE_ID,1) STARTED.addQuestDrop(30143,GARMIELS_SCRIPTURE_ID,1) STARTED.addQuestDrop(30130,UNDRES_LETTER_ID,1)
npcId = npc.getNpcId() chance = (CHANCE + (npcId - 20234) * 2) * Config.RATE_DROP_QUEST bonus = int(divmod(chance, 100)[0]) if st.getInt("cond") == 1 and st.getRandom(100) < chance: st.giveItems(ARTICLES_DEAD_HEROES, 1 + bonus) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(344, qn, "1000 Years, the End of Lamentation") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(GILMORE) QUEST.addTalkId(GILMORE) QUEST.addTalkId(RODEMAI) QUEST.addTalkId(ORVEN) QUEST.addTalkId(GARVARENTZ) QUEST.addTalkId(KAIEN) for mob in range(20236, 20241): QUEST.addKillId(mob) for item in range(4269, 4274): STARTED.addQuestDrop(GILMORE, item, 1) print "importing quests: 344: 1000 Years, the End of Lamentation"
st.set("id","5") st.playSound("ItemSound.quest_middle") elif npcId == GREENIS and st.getQuestItemsCount(GREENIS_LETTER) : htmltext = "30157-03.htm" elif npcId == GREENIS and (st.getQuestItemsCount(ARUJIENS_LETTER1) or st.getQuestItemsCount(ARUJIENS_LETTER2) or st.getQuestItemsCount(ARUJIENS_LETTER3)) : htmltext = "30157-01.htm" return htmltext QUEST = Quest(2,qn,"What Women Want") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(ARUJIEN) QUEST.addTalkId(ARUJIEN) QUEST.addTalkId(MIRABEL) QUEST.addTalkId(HERBIEL) QUEST.addTalkId(GREENIS) QUEST.addTalkId(ARUJIEN) STARTED.addQuestDrop(ARUJIEN,GREENIS_LETTER,1) STARTED.addQuestDrop(ARUJIEN,ARUJIENS_LETTER3,1) STARTED.addQuestDrop(ARUJIEN,ARUJIENS_LETTER1,1) STARTED.addQuestDrop(ARUJIEN,ARUJIENS_LETTER2,1) STARTED.addQuestDrop(ARUJIEN,POETRY_BOOK,1) print "importing quests: 2: What Women Want"
class Quest(JQuest): 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) # this function is called by subclasses in order to add their own NPCs def registerNPCs(self): self.addStartNpc(self.NPC[0]) self.addAttackId(self.Mob[2]) self.addFirstTalkId(self.NPC[4]) for npc in self.NPC: self.addTalkId(npc) for mobid in self.Mob: self.addKillId(mobid) for item in self.Items: self.STARTED.addQuestDrop(self.NPC[0], item, 1) def Cast(self, npc, target, skillId, level): target.broadcastPacket( MagicSkillUser(target, target, skillId, level, 6000, 1)) target.broadcastPacket( MagicSkillUser(npc, npc, skillId, level, 6000, 1)) def FindTemplate(self, npcId): for spawn in SpawnTable.getInstance().getSpawnTable().values(): if spawn.getNpcId() == npcId: npcinstance = spawn.getLastSpawn() break return npcinstance def AutoChat(self, npc, text): chars = npc.getKnownList().getKnownPlayers().values().toArray() if chars != None: for pc in chars: sm = CreatureSay(npc.getObjectId(), 0, npc.getName(), text) pc.sendPacket(sm) def AddSpawn(self, st, mob): name = st.getPlayer().getName() self.Spawn_List.append([mob.getObjectId(), name, mob]) return def FindSpawn(self, player, npcObjectId): for mobId, playerName, mob in self.Spawn_List: if mobId == npcObjectId and playerName == player.getName(): return mob return None def DeleteSpawn(self, st, mobid): name = st.getPlayer().getName() for npcId, playerName, mob in self.Spawn_List: if (mobid, name) == (npcId, playerName): self.Spawn_List.remove([mobid, name, mob]) mob.decayMe() return return def giveHallishaMark(self, st2): if st2.getInt("spawned") == 0: if st2.getQuestItemsCount(self.Items[3]) >= 700: st2.takeItems(self.Items[3], 20) xx = int(st2.getPlayer().getX()) yy = int(st2.getPlayer().getY()) zz = int(st2.getPlayer().getZ()) Archon = st2.addSpawn(self.Mob[1], xx, yy, zz) ArchonId = Archon.getObjectId() st2.set("Archon", str(ArchonId)) self.AddSpawn(st2, Archon) st2.set("spawned", "1") st2.startQuestTimer("Archon Hellisha has despawned", 600000, Archon) self.AutoChat( Archon, self.Text[13].replace('PLAYERNAME', st2.getPlayer().getName())) Archon.addDamageHate(st2.getPlayer(), 0, 99999) Archon.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, st2.getPlayer(), None) else: st2.giveItems(self.Items[3], 1) return def findRightState(self, player, mob): mobid = mob.getObjectId() name = player.getName() st1 = None if [mobid, name] in self.Spawn_List: st1 = L2World.getInstance().getPlayer(name) else: for entry in self.Spawn_List: if entry[0] == mobid: name = entry[1] st1 = L2World.getInstance().getPlayer(name) break if st1: return st1.getQuestState(self.qn) return st1 def onAdvEvent(self, event, npc, player): st = player.getQuestState(self.qn) if not st: return htmltext = "" # simple initialization...if none of the events match, return nothing. cond = st.getInt("cond") id = st.getInt("id") player = st.getPlayer() if event == "accept": st.set("cond", "1") st.setState(self.STARTED) st.playSound("ItemSound.quest_accept") st.giveItems(self.Items[10], 1) htmltext = "0-03.htm" elif event == "0-1": if player.getLevel() < 76: htmltext = "0-02.htm" st.exitQuest(1) else: htmltext = "0-05.htm" elif event == "0-2": if player.getLevel() >= 76: st.setState(self.COMPLETED) st.set("cond", "0") htmltext = "0-07.htm" st.takeItems(self.Items[10], -1) st.addExpAndSp(2299404, 0) st.giveItems(57, 5000000) st.giveItems(6622, 1) player.setClassId(self.classid) if not player.isSubClassActive() and player.getBaseClass( ) == self.prevclass: player.setBaseClass(self.classid) player.broadcastUserInfo() self.Cast(self.FindTemplate(self.NPC[0]), player, 4339, 1) else: st.takeItems(self.Items[10], -1) st.playSound("ItemSound.quest_middle") st.set("cond", "20") htmltext = "0-08.htm" elif event == "1-3": st.set("cond", "3") htmltext = "1-05.htm" elif event == "1-4": st.set("cond", "4") st.takeItems(self.Items[0], 1) if self.Items[11] != 0: st.takeItems(self.Items[11], 1) st.giveItems(self.Items[1], 1) htmltext = "1-06.htm" elif event == "2-1": st.set("cond", "2") htmltext = "2-05.htm" elif event == "2-2": st.set("cond", "5") st.takeItems(self.Items[1], 1) st.giveItems(self.Items[4], 1) htmltext = "2-06.htm" elif event == "3-5": htmltext = "3-07.htm" elif event == "3-6": st.set("cond", "11") htmltext = "3-02.htm" elif event == "3-7": st.set("cond", "12") htmltext = "3-03.htm" elif event == "3-8": st.set("cond", "13") st.takeItems(self.Items[2], 1) st.giveItems(self.Items[7], 1) htmltext = "3-08.htm" elif event == "4-1": htmltext = "4-010.htm" elif event == "4-2": st.giveItems(self.Items[9], 1) st.set("cond", "18") st.playSound("ItemSound.quest_middle") htmltext = "4-011.htm" elif event == "4-3": st.giveItems(self.Items[9], 1) st.set("cond", "18") Mob_2 = self.FindSpawn(player, st.getInt("Mob_2")) self.AutoChat( Mob_2, self.Text[13].replace('PLAYERNAME', player.getName())) st.set("Quest0", "0") self.DeleteSpawn(st, Mob_2.getObjectId()) st.playSound("ItemSound.quest_middle") return elif event == "5-1": st.set("cond", "6") st.takeItems(self.Items[4], 1) self.Cast(self.FindTemplate(self.NPC[5]), player, 4546, 1) st.playSound("ItemSound.quest_middle") htmltext = "5-02.htm" elif event == "6-1": st.set("cond", "8") st.takeItems(self.Items[5], 1) self.Cast(self.FindTemplate(self.NPC[6]), player, 4546, 1) st.playSound("ItemSound.quest_middle") htmltext = "6-03.htm" elif event == "7-1": if st.getInt("spawned") == 1: htmltext = "7-03.htm" elif st.getInt("spawned") == 0: Mob_1 = st.addSpawn(self.Mob[0], self.X[0], self.Y[0], self.Z[0]) st.set("Mob_1", str(Mob_1.getObjectId())) st.set("spawned", "1") st.startQuestTimer("Mob_1 Timer 1", 500, Mob_1) st.startQuestTimer("Mob_1 has despawned", 300000, Mob_1) self.AddSpawn(st, Mob_1) htmltext = "7-02.htm" else: htmltext = "7-04.htm" elif event == "7-2": st.set("cond", "10") st.takeItems(self.Items[6], 1) self.Cast(self.FindTemplate(self.NPC[7]), player, 4546, 1) st.playSound("ItemSound.quest_middle") htmltext = "7-06.htm" elif event == "8-1": st.set("cond", "14") st.takeItems(self.Items[7], 1) self.Cast(self.FindTemplate(self.NPC[8]), player, 4546, 1) st.playSound("ItemSound.quest_middle") htmltext = "8-02.htm" elif event == "9-1": st.set("cond", "17") st.takeItems(self.Items[8], 1) self.Cast(self.FindTemplate(self.NPC[9]), player, 4546, 1) st.playSound("ItemSound.quest_middle") htmltext = "9-03.htm" elif event == "10-1": if st.getInt("Quest0") == 0: Mob_3 = st.addSpawn(self.Mob[2], self.X[1], self.Y[1], self.Z[1]) Mob_2 = st.addSpawn(self.NPC[4], self.X[2], self.Y[2], self.Z[2]) self.AddSpawn(st, Mob_3) self.AddSpawn(st, Mob_2) st.set("Mob_3", str(Mob_3.getObjectId())) st.set("Mob_2", str(Mob_2.getObjectId())) st.set("Quest0", "1") st.set("Quest1", "45") st.startQuestTimer("Mob_3 Timer 1", 500, Mob_3) st.startQuestTimer("Mob_3 has despawned", 59000, Mob_3) st.startQuestTimer("Mob_2 Timer 1", 500, Mob_2) st.startQuestTimer("Mob_2 has despawned", 60000, Mob_2) htmltext = "10-02.htm" elif st.getInt("Quest1") == 45: htmltext = "10-03.htm" else: htmltext = "10-04.htm" elif event == "10-2": st.set("cond", "19") st.takeItems(self.Items[9], 1) self.Cast(self.FindTemplate(self.NPC[10]), player, 4546, 1) st.playSound("ItemSound.quest_middle") htmltext = "10-06.htm" elif event == "11-9": st.set("cond", "15") htmltext = "11-03.htm" elif event == "Mob_1 Timer 1": self.AutoChat(npc, self.Text[0].replace('PLAYERNAME', player.getName())) return elif event == "Mob_1 has despawned": self.AutoChat(npc, self.Text[1].replace('PLAYERNAME', player.getName())) self.DeleteSpawn(st, npc.getObjectId()) st.set("spawned", "0") return elif event == "Archon of Hellisha has despawned": self.AutoChat(npc, self.Text[6].replace('PLAYERNAME', player.getName())) self.DeleteSpawn(st, npc.getObjectId()) st.set("spawned", "0") return elif event == "Mob_3 Timer 1": Mob_2 = self.FindSpawn(player, st.getInt("Mob_2")) if npc.getKnownList().knowsObject(Mob_2): npc.addDamageHate(Mob_2, 0, 99999) npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, Mob_2, None) #Mob_2.addDamageHate(npc,0,99999) Mob_2.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, npc, None) self.AutoChat( npc, self.Text[14].replace('PLAYERNAME', player.getName())) else: st.startQuestTimer("Mob_3 Timer 1", 500, npc) return elif event == "Mob_3 has despawned": self.AutoChat( npc, self.Text[15].replace('PLAYERNAME', player.getName())) st.set("Quest0", "2") npc.reduceCurrentHp(9999999, npc) self.DeleteSpawn(st, npc.getObjectId()) return elif event == "Mob_2 Timer 1": self.AutoChat(npc, self.Text[7].replace('PLAYERNAME', player.getName())) st.startQuestTimer("Mob_2 Timer 2", 1500, npc) if st.getInt("Quest1") == 45: st.set("Quest1", "0") return elif event == "Mob_2 Timer 2": self.AutoChat(npc, self.Text[8].replace('PLAYERNAME', player.getName())) st.startQuestTimer("Mob_2 Timer 3", 10000, npc) return elif event == "Mob_2 Timer 3": if st.getInt("Quest0") == 0: st.startQuestTimer("Mob_2 Timer 3", 13000, npc) if st.getRandom(2) == 0: self.AutoChat( npc, self.Text[9].replace('PLAYERNAME', player.getName())) else: self.AutoChat( npc, self.Text[10].replace('PLAYERNAME', player.getName())) return elif event == "Mob_2 has despawned": st.set("Quest1", str(st.getInt("Quest1") + 1)) if st.getInt("Quest0") == 1 or st.getInt( "Quest0") == 2 or st.getInt("Quest1") > 3: st.set("Quest0", "0") if st.getInt("Quest0") == 1: self.AutoChat( npc, self.Text[11].replace('PLAYERNAME', player.getName())) else: self.AutoChat( npc, self.Text[12].replace('PLAYERNAME', player.getName())) npc.reduceCurrentHp(9999999, npc) self.DeleteSpawn(st, npc.getObjectId()) else: st.startQuestTimer("Mob_2 has despawned", 1000, npc) return return htmltext def onTalk(self, npc, player): htmltext = "<html><body>You are either not carrying out your quest or don't meet the criteria.</body></html>" st = player.getQuestState(self.qn) if st: npcId = npc.getNpcId() cond = st.getInt("cond") if st.getState() == self.COMPLETED and npcId == self.NPC[0]: htmltext == "<html><body>You have already completed this quest!</body></html>" elif player.getClassId().getId() == self.prevclass: if cond == 0: if npcId == self.NPC[0]: htmltext = "0-01.htm" elif cond == 1: if npcId == self.NPC[0]: htmltext = "0-04.htm" elif npcId == self.NPC[2]: htmltext = "2-01.htm" elif cond == 2: if npcId == self.NPC[2]: htmltext = "2-02.htm" elif npcId == self.NPC[1]: htmltext = "1-01.htm" elif cond == 3: if npcId == self.NPC[1]: if st.getQuestItemsCount(self.Items[0]): if self.Items[11] == 0: htmltext = "1-03.htm" elif st.getQuestItemsCount(self.Items[11]): htmltext = "1-03.htm" else: htmltext = "1-02.htm" else: htmltext = "1-02.htm" elif cond == 4: if npcId == self.NPC[1]: htmltext = "1-04.htm" elif npcId == self.NPC[2]: htmltext = "2-03.htm" elif cond == 5: if npcId == self.NPC[2]: htmltext = "2-04.htm" elif npcId == self.NPC[5]: htmltext = "5-01.htm" elif cond == 6: if npcId == self.NPC[5]: htmltext = "5-03.htm" elif npcId == self.NPC[6]: htmltext = "6-01.htm" elif cond == 7: if npcId == self.NPC[6]: htmltext = "6-02.htm" elif cond == 8: if npcId == self.NPC[6]: htmltext = "6-04.htm" elif npcId == self.NPC[7]: htmltext = "7-01.htm" elif cond == 9: if npcId == self.NPC[7]: htmltext = "7-05.htm" elif cond == 10: if npcId == self.NPC[7]: htmltext = "7-07.htm" elif npcId == self.NPC[3]: htmltext = "3-01.htm" elif cond == 11 or cond == 12: if npcId == self.NPC[3]: if st.getQuestItemsCount(self.Items[2]): htmltext = "3-05.htm" else: htmltext = "3-04.htm" elif cond == 13: if npcId == self.NPC[3]: htmltext = "3-06.htm" elif npcId == self.NPC[8]: htmltext = "8-01.htm" elif cond == 14: if npcId == self.NPC[8]: htmltext = "8-03.htm" elif npcId == self.NPC[11]: htmltext = "11-01.htm" elif cond == 15: if npcId == self.NPC[11]: htmltext = "11-02.htm" elif npcId == self.NPC[9]: htmltext = "9-01.htm" elif cond == 16: if npcId == self.NPC[9]: htmltext = "9-02.htm" elif cond == 17: if npcId == self.NPC[9]: htmltext = "9-04.htm" elif npcId == self.NPC[10]: htmltext = "10-01.htm" elif cond == 18: if npcId == self.NPC[10]: htmltext = "10-05.htm" elif cond == 19: if npcId == self.NPC[10]: htmltext = "10-07.htm" if npcId == self.NPC[0]: htmltext = "0-06.htm" elif cond == 20: if npcId == self.NPC[0]: if player.getLevel() >= 76: st.setState(self.COMPLETED) st.set("cond", "0") htmltext = "0-07.htm" st.addExpAndSp(2299404, 0) st.giveItems(57, 5000000) st.giveItems(6622, 1) player.setClassId(self.classid) if not player.isSubClassActive( ) and player.getBaseClass() == self.prevclass: player.setBaseClass(self.classid) player.broadcastUserInfo() self.Cast(self.FindTemplate(self.NPC[0]), player, 4339, 1) else: htmltext = "0-010.htm" return htmltext def onFirstTalk(self, npc, player): htmltext = "" st = player.getQuestState(self.qn) npcId = npc.getNpcId() if st: cond = st.getInt("cond") if npcId == self.NPC[4]: if cond == 17: st2 = self.findRightState(player, npc) if st2: if st == st2: if st.getInt("Tab") == 1: if st.getInt("Quest0") == 0: htmltext = "4-04.htm" elif st.getInt("Quest0") == 1: htmltext = "4-06.htm" else: if st.getInt("Quest0") == 0: htmltext = "4-01.htm" elif st.getInt("Quest0") == 1: htmltext = "4-03.htm" else: if st.getInt("Tab") == 1: if st.getInt("Quest0") == 0: htmltext = "4-05.htm" elif st.getInt("Quest0") == 1: htmltext = "4-07.htm" else: if st.getInt("Quest0") == 0: htmltext = "4-02.htm" elif cond == 18: htmltext = "4-08.htm" return htmltext def onAttack(self, npc, player, damage, isPet): st = player.getQuestState(self.qn) if st: if st.getInt("cond") == 17: if npc.getNpcId() == self.Mob[2]: st2 = self.findRightState(player, npc) if st == st2: st.set("Quest0", str(st.getInt("Quest0") + 1)) if st.getInt("Quest0") == 1: self.AutoChat( npc, self.Text[16].replace('PLAYERNAME', player.getName())) if st.getInt("Quest0") > 15: st.set("Quest0", "1") self.AutoChat( npc, self.Text[17].replace('PLAYERNAME', player.getName())) npc.reduceCurrentHp(9999999, npc) self.DeleteSpawn(st, st.getInt("Mob_3")) st.getQuestTimer("Mob_3 has despawned").cancel() st.set("Tab", "1") return def onKill(self, npc, player, isPet): npcId = npc.getNpcId() st = player.getQuestState(self.qn) if npcId in Archon_Minions: party = player.getParty() if party: PartyQuestMembers = [] for player1 in party.getPartyMembers().toArray(): for q in Quests.keys(): st1 = player1.getQuestState(Quests[q]) if st1: if player1.getClassId().getId() == QuestClass[ int(q) - 70]: if st1.getInt("cond") == 15: PartyQuestMembers.append(st1) break if len(PartyQuestMembers) > 0: st2 = PartyQuestMembers[Rnd.get(len(PartyQuestMembers))] st2.getQuest().giveHallishaMark(st2) else: for q in Quests.keys(): st1 = player.getQuestState(Quests[q]) if st1: if player.getClassId().getId() == QuestClass[int(q) - 70]: if st1.getInt("cond") == 15: st1.getQuest().giveHallishaMark(st1) break elif npcId in Archon_Hellisha_Norm: for q in Quests.keys(): st1 = player.getQuestState(Quests[q]) if st1: if player.getClassId().getId() == QuestClass[int(q) - 70]: if st1.getInt("cond") == 15: #This is just a guess....not really sure what it actually says, if anything self.AutoChat( npc, st1.getQuest().Text[4].replace( 'PLAYERNAME', st1.getPlayer().getName())) st1.giveItems(st1.getQuest().Items[8], 1) st1.takeItems(st1.getQuest().Items[3], -1) st1.set("cond", "16") st1.playSound("ItemSound.quest_middle") break elif npcId in Guardian_Angels: for q in Quests.keys(): st1 = player.getQuestState(Quests[q]) if st1: if player.getClassId().getId() == QuestClass[int(q) - 70]: if st1.getInt("cond") == 6: if st1.getInt("kills") < 9: st1.set("kills", str(st1.getInt("kills") + 1)) else: st1.playSound("ItemSound.quest_middle") st1.giveItems(st1.getQuest().Items[5], 1) st1.set("cond", "7") break elif st: cond = st.getInt("cond") if npcId == self.Mob[0] and cond == 8: st2 = self.findRightState(player, npc) if st2: if not player.isInParty(): if st == st2: self.AutoChat( npc, self.Text[12].replace('PLAYERNAME', player.getName())) st.giveItems(self.Items[6], 1) st.set("cond", "9") st.playSound("ItemSound.quest_middle") st2.getQuestTimer("Mob_1 has despawned").cancel() self.DeleteSpawn(st2, st2.getInt("Mob_1")) st2.set("spawned", "0") elif npcId == self.Mob[1]: if cond == 15: st2 = self.findRightState(player, npc) if st2: if not player.isInParty(): if st == st2: self.AutoChat( npc, self.Text[4].replace( 'PLAYERNAME', player.getName())) st.giveItems(self.Items[8], 1) st.takeItems(self.Items[3], -1) st.set("cond", "16") st.playSound("ItemSound.quest_middle") else: self.AutoChat( npc, self.Text[5].replace( 'PLAYERNAME', player.getName())) st2.getQuestTimer( "Archon Hellisha has despawned").cancel() self.DeleteSpawn(st2, st2.getInt("Archon")) st2.set("spawned", "0") else: if npcId == self.Mob[0]: st = self.findRightState(player, npc) if st: st.getQuestTimer("Mob_1 has despawned").cancel() self.DeleteSpawn(st, st.getInt("Mob_1")) st.set("spawned", "0") elif npcId == self.Mob[1]: st = self.findRightState(player, npc) if st: st.getQuestTimer("Archon Hellisha has despawned").cancel() self.DeleteSpawn(st, st.getInt("Archon")) st.set("spawned", "0") return
htmltext = "7116-01.htm" elif npcId == 7116 and int(st.get("cond"))==6 : htmltext = "7116-03.htm" return htmltext QUEST = Quest(46,"46_OnceMoreInTheArmsOfTheMotherTree","Once More In The Arms Of The Mother Tree") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(7097) CREATED.addTalkId(7097) COMPLETED.addTalkId(7097) STARTED.addTalkId(7097) STARTED.addTalkId(7094) STARTED.addTalkId(7090) STARTED.addTalkId(7116) STARTED.addQuestDrop(7097,GALLADUCCIS_ORDER_DOCUMENT_ID_1,1) STARTED.addQuestDrop(7097,GALLADUCCIS_ORDER_DOCUMENT_ID_2,1) STARTED.addQuestDrop(7097,GALLADUCCIS_ORDER_DOCUMENT_ID_3,1) STARTED.addQuestDrop(7094,MAGIC_SWORD_HILT_ID,1) STARTED.addQuestDrop(7090,GEMSTONE_POWDER_ID,1) STARTED.addQuestDrop(7116,PURIFIED_MAGIC_NECKLACE_ID,1) print "importing quests: 46: Once More In The Arms of the Mother Tree"
if st.getInt("cond") == 2 : if st.getRandom(100) < 20 : if st.getQuestItemsCount(ANCIENT_SCROLL) == 0 : st.giveItems(ANCIENT_SCROLL,1) st.playSound("Itemsound.quest_itemget") elif st.getQuestItemsCount(ANCIENT_CLAY_TABLET) == 0 : st.giveItems(ANCIENT_CLAY_TABLET,1) st.playSound("ItemSound.quest_middle") st.set("cond","3") return QUEST = Quest(106,qn,"Forgotten Truth") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30358) QUEST.addTalkId(30358) QUEST.addTalkId(30133) QUEST.addKillId(27070) STARTED.addQuestDrop(30133,KARTAS_TRANSLATION,1) STARTED.addQuestDrop(30358,ONYX_TALISMAN1,1) STARTED.addQuestDrop(30133,ONYX_TALISMAN2,1) STARTED.addQuestDrop(27070,ANCIENT_SCROLL,1) STARTED.addQuestDrop(27070,ANCIENT_CLAY_TABLET,1)
count = st.getQuestItemsCount(KASHA_WOLF_FANG) if count < 50 : if st.getRandom(100) <= 25 and count < 49 : st.giveItems(KASHA_WOLF_FANG,2) count += 2 else : st.giveItems(KASHA_WOLF_FANG,1) count += 1 if count >= 50 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else: st.playSound("ItemSound.quest_itemget") 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) print "importing quests: 271: Proof Of Valor"
return QUEST = Quest(415, qn, "Path To Orc Monk") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30587) QUEST.addTalkId(30587) QUEST.addTalkId(30501) QUEST.addTalkId(30590) QUEST.addTalkId(30591) QUEST.addKillId(20014) QUEST.addKillId(20017) QUEST.addKillId(20024) QUEST.addKillId(20359) QUEST.addKillId(20415) QUEST.addKillId(20478) QUEST.addKillId(20479) for item in range(1593, 1615): STARTED.addQuestDrop(30587, item, 1) print "importing quests: 415: Path To Orc Monk"
st.giveItems(DARK_BEZOAR_ID,1) if st.getQuestItemsCount(DARK_BEZOAR_ID) == 13 : st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(165,"165_WildHunt","Wild Hunt") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(7348) STARTING.addTalkId(7348) STARTED.addTalkId(7348) STARTED.addKillId(456) STARTED.addKillId(529) STARTED.addKillId(532) STARTED.addKillId(536) STARTED.addQuestDrop(529,DARK_BEZOAR_ID,1) STARTED.addQuestDrop(532,DARK_BEZOAR_ID,1) STARTED.addQuestDrop(536,DARK_BEZOAR_ID,1) STARTED.addQuestDrop(456,DARK_BEZOAR_ID,1)
if pst.getQuestTimer( "Soul of Fire Nastron has despawned"): pst.getQuestTimer( "Soul of Fire Nastron has despawned").cancel() elif npcId in Varka_Mobs: st = player.getQuestState(qn) if st: if st.getQuestItemsCount(Fire_Heart): st.takeItems(Fire_Heart, -1) st.unset("cond") st.unset("id") st.exitQuest(1) return QUEST = Quest(616, qn, "Magical Power of Fire - Part 2") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(Udan) QUEST.addTalkId(Udan) QUEST.addTalkId(Alter) QUEST.addKillId(Nastron) STARTED.addQuestDrop(Nastron, Fire_Heart, 1) for mobId in Varka_Mobs: QUEST.addKillId(mobId)
def onKill (self, npc, player): st = player.getQuestState(qn) if st : if st.getState() == STARTED : count = st.getQuestItemsCount(NECROHEART) if st.getInt("cond")==1 and st.getRandom(100)<CHANCE and count<10 : st.giveItems(NECROHEART,1) if count == 9 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(637,qn,"Through the Gate Once More") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(FLAURON) QUEST.addTalkId(FLAURON) for mob in range(21565,21568): QUEST.addKillId(mob) STARTED.addQuestDrop(FLAURON,NECROHEART,1) print "importing quests: 637: Through the Gate Once More"
if Rnd.get(2) : partyMember = partyMember2 st = partyMember.getQuestState(qn) if not st : return if st.getState() != STARTED : return count = st.getQuestItemsCount(SPINNERET) if count < 10 : st.giveItems(SPINNERET,1) if count == 9 : st.playSound("ItemSound.quest_middle") st.set("cond","5") else : st.playSound("ItemSound.quest_itemget") return QUEST = Quest(34,qn,"In Search of Clothes") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30088) QUEST.addTalkId(30088) QUEST.addTalkId(30165) QUEST.addTalkId(30294) QUEST.addKillId(20560) STARTED.addQuestDrop(20560,SPINNERET,1) print "importing quests: 34: In Search of Clothes"
STARTED.addTalkId(7609) STARTED.addTalkId(7610) STARTED.addTalkId(7611) STARTED.addTalkId(7612) STARTED.addKillId(158) STARTED.addKillId(201) STARTED.addKillId(235) STARTED.addKillId(269) STARTED.addKillId(552) STARTED.addKillId(554) STARTED.addKillId(567) STARTED.addKillId(580) STARTED.addKillId(68) STARTED.addQuestDrop(7115, SYMBOL_OF_JUREK_ID, 1) STARTED.addQuestDrop(7461, MIRIENS_SIGIL2_ID, 1) STARTED.addQuestDrop(7070, SYMBOL_OF_SYLVAIN_ID, 1) STARTED.addQuestDrop(7461, MIRIENS_SIGIL1_ID, 1) STARTED.addQuestDrop(7461, MIRIENS_INSTRUCTION_ID, 1) STARTED.addQuestDrop(7610, SYMBOL_OF_CRONOS_ID, 1) STARTED.addQuestDrop(7461, MIRIENS_SIGIL3_ID, 1) STARTED.addQuestDrop(7070, HIGHPRIESTS_SIGIL_ID, 1) STARTED.addQuestDrop(7608, CRYSTAL_OF_PURITY1_ID, 1) STARTED.addQuestDrop(7070, SYLVAINS_LETTER_ID, 1) STARTED.addQuestDrop(7609, CRETAS_LETTER1_ID, 1) STARTED.addQuestDrop(580, BROWN_SCROLL_SCRAP_ID, 1) STARTED.addQuestDrop(7071, CRETAS_PAINTING3_ID, 1) STARTED.addQuestDrop(7071, LUKAS_LETTER_ID, 1) STARTED.addQuestDrop(7609, CRETAS_PAINTING1_ID, 1) STARTED.addQuestDrop(7103, VALKONS_REQUEST_ID, 1)
if st.getState() != STARTED : return npcId = npc.getNpcId() if npcId == 20311 : chance = 90 if npcId == 20312 : chance = 87 if npcId == 20313 : chance = 77 if st.getRandom(100) <= chance : st.giveItems(BLACK_SOULSTONE,1) else: st.giveItems(RED_SOULSTONE,1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(273,qn,"Invaders Of Holyland") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30566) QUEST.addTalkId(30566) QUEST.addKillId(20311) QUEST.addKillId(20312) QUEST.addKillId(20313) STARTED.addQuestDrop(20311,BLACK_SOULSTONE,1) STARTED.addQuestDrop(20313,RED_SOULSTONE,1)
def onKill(self, npc, player): st = player.getQuestState(qn) if st: if st.getState() == STARTED: count = st.getQuestItemsCount(THIEF_GUILD_MARK) if st.getInt("cond") == 1 and count < 200 and st.getRandom( 100) < CHANCE: st.giveItems(THIEF_GUILD_MARK, 1) if count == 199: st.playSound("ItemSound.quest_middle") st.set("cond", "2") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(649, qn, "A Looter and a Railroad Man") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(OBI) QUEST.addTalkId(OBI) for BANDITS in [22017, 22018, 22019, 22021, 22022, 22023, 22024, 22026]: QUEST.addKillId(BANDITS) STARTED.addQuestDrop(OBI, THIEF_GUILD_MARK, 1) print "importing quests: 649: A Looter and a Railroad Man"
if count+qty==100 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else : st.playSound("ItemSound.quest_itemget") st.giveItems(PREDATORS_FANG,qty) return QUEST = Quest(266,"266_PleaOfPixies","Plea Of Pixies") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(12091) CREATED.addTalkId(12091) STARTING.addTalkId(12091) STARTED.addTalkId(12091) COMPLETED.addTalkId(12091) STARTED.addKillId(525) STARTED.addKillId(530) STARTED.addKillId(534) STARTED.addKillId(537) STARTED.addQuestDrop(530,PREDATORS_FANG,1) print "importing quests: 266: Plea Of Pixies"
QUEST = Quest(407,qn,"Path To Elven Scout") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30328) QUEST.addTalkId(30328) QUEST.addTalkId(30334) QUEST.addTalkId(30337) QUEST.addTalkId(30426) QUEST.addKillId(27031) QUEST.addKillId(20053) STARTED.addQuestDrop(30328,REORIA_LETTER2,1) STARTED.addQuestDrop(20053,PRIGUNS_TEAR_LETTER1,1) STARTED.addQuestDrop(20053,PRIGUNS_TEAR_LETTER2,1) STARTED.addQuestDrop(20053,PRIGUNS_TEAR_LETTER3,1) STARTED.addQuestDrop(20053,PRIGUNS_TEAR_LETTER4,1) STARTED.addQuestDrop(27031,RUSTED_KEY,1) STARTED.addQuestDrop(30337,MORETTIS_HERB,1) STARTED.addQuestDrop(30337,MORETTIS_LETTER,1) STARTED.addQuestDrop(30426,PRIGUNS_LETTER,1) STARTED.addQuestDrop(30337,HONORARY_GUARD,1)
st.giveItems(item,1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(326,qn,"Vanquish Remnants") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30435) QUEST.addTalkId(30435) QUEST.addKillId(20436) QUEST.addKillId(20437) QUEST.addKillId(20438) QUEST.addKillId(20439) QUEST.addKillId(20053) QUEST.addKillId(20058) QUEST.addKillId(20061) QUEST.addKillId(20063) QUEST.addKillId(20066) STARTED.addQuestDrop(20053,RED_CROSS_BADGE,1) STARTED.addQuestDrop(20061,BLUE_CROSS_BADGE,1) STARTED.addQuestDrop(20066,BLACK_CROSS_BADGE,1) print "importing quests: 326: Vanquish Remnants"
if st.getRandom(1000) < UNDEADS[npcId]: st.giveItems(Z_LIVER, 1) st.playSound("ItemSound.quest_itemget") elif npcId in DAMOBS.keys(): partyMember = self.getRandomPartyMember(player, "cond", "1") if not partyMember: return st = partyMember.getQuestState(qn) if not st : return if st.getRandom(1000) < DAMOBS[npcId]: st.giveItems(RIB_BONE, 1) if st.getQuestItemsCount(RIB_BONE) == 200: st.set("cond","2") st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(633, qn, "In The Forgotten Village") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) for i in DAMOBS.keys(): QUEST.addKillId(i) for i in UNDEADS.keys(): QUEST.addKillId(i) QUEST.setInitialState(CREATED) QUEST.addStartNpc(MINA) QUEST.addTalkId(MINA) STARTED.addQuestDrop(MINA,RIB_BONE,1) STARTED.addQuestDrop(MINA,Z_LIVER,1)
if not st : return if st.getState() != STARTED : return count=st.getQuestItemsCount(BONE_FRAGMENT) if count<10 and st.getRandom(10)>7 : st.giveItems(BONE_FRAGMENT,1) if count == 9 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else : st.playSound("ItemSound.quest_itemget") return QUEST = Quest(320,qn,"Bones Tell Future") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30359) QUEST.addTalkId(30359) QUEST.addKillId(20517) QUEST.addKillId(20518) STARTED.addQuestDrop(20517,BONE_FRAGMENT,1) print "importing quests: 320: Bones Tell Future"
if st.getState() != STARTED: return npcId = npc.getNpcId() chance, item = DROPLIST[npcId] if st.getRandom(100) < chance: st.giveItems(item, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(306, qn, "Crystal Of Fireice") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30004) QUEST.addTalkId(30004) QUEST.addKillId(20109) QUEST.addKillId(20110) QUEST.addKillId(20112) QUEST.addKillId(20113) QUEST.addKillId(20114) QUEST.addKillId(20115) STARTED.addQuestDrop(20109, FLAME_SHARD, 1) STARTED.addQuestDrop(20110, ICE_SHARD, 1)
if cond == 4: if st.getQuestItemsCount(OL_MAHUM_RUNESTONE_ID)+st.getQuestItemsCount(TUREK_RUNESTONE_ID)+st.getQuestItemsCount(ANT_RUNESTONE_ID)+st.getQuestItemsCount(TURAK_BUGBEAR_RUNESTONE_ID)==4 : st.set("cond",str(cond+1)) return elif cond == 16: if st.getQuestItemsCount(ABYSS_RUNESTONE1_ID)+st.getQuestItemsCount(ABYSS_RUNESTONE2_ID)+st.getQuestItemsCount(ABYSS_RUNESTONE3_ID)+st.getQuestItemsCount(ABYSS_RUNESTONE4_ID)==4: st.set("cond",str(cond+1)) return else: st.set("cond",str(cond+1)) else : st.playSound("Itemsound.quest_itemget") return QUEST = Quest(213,qn,"Trial Of Seeker") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(NPCS[0]) for npcId in NPCS: for i in range(2647,2674): QUEST.addTalkId(npcId) STARTED.addQuestDrop(npcId,i,1) for mobId in MOBS: QUEST.addKillId(mobId)
st.playSound("ItemSound.quest_middle") st.set("cond","2") elif cond == 3 and st.getRandom(100) < 40 and count < 5 : if count == 4 : st.playSound("ItemSound.quest_middle") st.set("cond","4") else: st.playSound("ItemSound.quest_itemget") st.giveItems(PLAGUE_DUST,1) return QUEST = Quest(159,qn,"Protect Headsprings") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30154) QUEST.addTalkId(30154) QUEST.addKillId(27017) STARTED.addQuestDrop(27017,PLAGUE_DUST,1) STARTED.addQuestDrop(30154,HYACINTH_CHARM1,1) STARTED.addQuestDrop(30154,HYACINTH_CHARM2,1) print "importing quests: 159: Protect Headsprings"
count = st.getQuestItemsCount(WOLF_PELT) if count<40 : st.giveItems(WOLF_PELT,1) if count == 39 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(258,"258_BringWolfPelt1","Bring Wolf Pelt1") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(7001) CREATED.addTalkId(7001) STARTING.addTalkId(7001) STARTED.addTalkId(7001) COMPLETED.addTalkId(7001) STARTED.addKillId(120) STARTED.addKillId(442) STARTED.addQuestDrop(120,WOLF_PELT,1) print "importing quests: 258: Bring Wolf Pelt1"
STARTED.addTalkId(7653) STARTED.addKillId(103) STARTED.addKillId(106) STARTED.addKillId(108) STARTED.addKillId(24) STARTED.addKillId(27) STARTED.addKillId(30) STARTED.addKillId(38) STARTED.addKillId(404) STARTED.addKillId(43) STARTED.addKillId(50) STARTED.addKillId(5024) STARTED.addKillId(775) STARTED.addQuestDrop(775, BUGBEAR_NECKLACE_ID, 1) STARTED.addQuestDrop(7332, GLUDIO_GUARDS_MARK1_ID, 1) STARTED.addQuestDrop(5024, EINHASAD_CRUCIFIX_ID, 1) STARTED.addQuestDrop(7289, EINHASAD_CHURCH_MARK1_ID, 1) STARTED.addQuestDrop(38, POISON_SPIDER_LEG1_ID, 1) STARTED.addQuestDrop(7379, GLUDIO_GUARDS_MARK2_ID, 1) STARTED.addQuestDrop(30, LIZARDMAN_TOTEM_ID, 1) STARTED.addQuestDrop(7037, EINHASAD_CHURCH_MARK2_ID, 1) STARTED.addQuestDrop(103, GIANT_SPIDER_HUSK_ID, 1) STARTED.addQuestDrop(7039, GLUDIO_GUARDS_MARK3_ID, 1) STARTED.addQuestDrop(404, HORRIBLE_SKULL_ID, 1) STARTED.addQuestDrop(7031, EINHASAD_CHURCH_MARK3_ID, 1) STARTED.addQuestDrop(7332, COIN_OF_LORDS1_ID, 1) STARTED.addQuestDrop(7289, COIN_OF_LORDS2_ID, 1) STARTED.addQuestDrop(7379, COIN_OF_LORDS3_ID, 1) STARTED.addQuestDrop(7037, COIN_OF_LORDS4_ID, 1)
return htmltext def onKill (self,npc,st): npcId = npc.getNpcId() random = st.getRandom(100) if random<=CHANCE : st.giveItems(LIENRIK_EGG1,1) if random<=CHANCE2 : st.giveItems(LIENRIK_EGG2,1) return QUEST = Quest(352,"352_HelpRoodRaiseANewPet","Help Rood Raise A New Pet") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(8067) CREATED.addTalkId(8067) STARTED.addTalkId(8067) STARTED.addQuestDrop(8067,LIENRIK_EGG1,1) STARTED.addQuestDrop(8067,LIENRIK_EGG2,1) STARTED.addKillId(786) STARTED.addKillId(787) print "importing quests: 352: Help Rood Raise A New Pet"
st.giveItems(FOX_FUR_ID,1) if st.getQuestItemsCount(FOX_FUR_ID) == 10 : st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(154,"154_SacrificeToSea","Sacrifice To Sea") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(7312) STARTING.addTalkId(7312) STARTED.addTalkId(7051) STARTED.addTalkId(7055) STARTED.addTalkId(7312) STARTED.addKillId(481) STARTED.addKillId(545) STARTED.addQuestDrop(481,FOX_FUR_ID,1) STARTED.addQuestDrop(545,FOX_FUR_ID,1) STARTED.addQuestDrop(7051,FOX_FUR_YARN_ID,1) STARTED.addQuestDrop(7055,MAIDEN_DOLL_ID,1)
return htmltext def onKill (self,npc,st): st.giveItems(SUPPLY_ITEM,1) if st.getRandom(10) == 1 : # % chance is custom st.giveItems(SUSPICIOUS_DOCUMENT,1) if st.getQuestItemsCount(SUSPICIOUS_DOCUMENT) == 5 : st.takeItems(SUSPICIOUS_DOCUMENT,5) st.giveItems(RECIPE_OF_SUPPLY,1) st.playSound("ItemSound.quest_itemget") st.playSound("ItemSound.quest_itemget") return QUEST = Quest(360,"360_PlunderTheirSupplies","Plunder Their Supplies") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(COLEMAN) CREATED.addTalkId(COLEMAN) STARTED.addTalkId(COLEMAN) STARTED.addKillId(TAIK_SEEKER) STARTED.addKillId(TAIK_LEADER) STARTED.addQuestDrop(COLEMAN,RECIPE_OF_SUPPLY,1) STARTED.addQuestDrop(COLEMAN,SUPPLY_ITEM,1) STARTED.addQuestDrop(COLEMAN,SUSPICIOUS_DOCUMENT,1) print "importing quests: 360: Plunder Their Supplies"
count = st.getQuestItemsCount(TOP_QUALITY_MEAT) if st.getInt("cond") == 1 and count < 120: chance = 100 * Config.RATE_DROP_QUEST numItems, chance = divmod(chance, 100) if st.getRandom(100) < chance: numItems += 1 if numItems: if count + numItems >= 120: numItems = 120 - count st.playSound("ItemSound.quest_middle") st.set("cond", "2") else: st.playSound("ItemSound.quest_itemget") st.giveItems(TOP_QUALITY_MEAT, int(numItems)) return QUEST = Quest(631, qn, "Delicious Top Choice Meat") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(TUNATUN) QUEST.addTalkId(TUNATUN) for npcId in range(21460, 21468) + range(21479, 21487) + range(21498, 21506): QUEST.addKillId(npcId) STARTED.addQuestDrop(21460, TOP_QUALITY_MEAT, 1)