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)
QUEST = Quest(405, qn, "Path To Cleric") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30022) QUEST.addTalkId(30022) QUEST.addTalkId(30017) QUEST.addTalkId(30030) QUEST.addTalkId(30253) QUEST.addTalkId(30333) QUEST.addTalkId(30408) QUEST.addKillId(20026) QUEST.addKillId(20029) STARTED.addQuestDrop(30408, LEMONIELLS_COVENANT, 1) STARTED.addQuestDrop(30022, LETTER_OF_ORDER2, 1) STARTED.addQuestDrop(30333, BOOK_OF_PRAGA, 1) STARTED.addQuestDrop(30030, BOOK_OF_VIVI, 1) STARTED.addQuestDrop(30253, BOOK_OF_SIMLON, 1) STARTED.addQuestDrop(30022, LETTER_OF_ORDER1, 1) STARTED.addQuestDrop(30333, NECKLACE_OF_MOTHER, 1) STARTED.addQuestDrop(20026, PENDANT_OF_MOTHER, 1) STARTED.addQuestDrop(20029, PENDANT_OF_MOTHER, 1) STARTED.addQuestDrop(30017, CERTIFICATE_OF_GALLINT, 1) STARTED.addQuestDrop(30408, BOOK_OF_LEMONIELL, 1)
st = player.getQuestState(qn) if not st : return if st.getState() != STARTED : return npcId = npc.getNpcId() if npcId == GEMSTONE_BEAST and st.getInt("cond")==5 and st.getRandom(2)==1 and st.getQuestItemsCount(GEMSTONE_BEAST_CRYSTAL)<10 : st.giveItems(GEMSTONE_BEAST_CRYSTAL,1) if st.getQuestItemsCount(GEMSTONE_BEAST_CRYSTAL) == 10 : st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(347,qn,"Calculator") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(BRUNON) QUEST.addTalkId(BRUNON) QUEST.addTalkId(SILVERA) QUEST.addTalkId(SPIRON) QUEST.addTalkId(BALANKI) QUEST.addKillId(GEMSTONE_BEAST) STARTED.addQuestDrop(GEMSTONE_BEAST, GEMSTONE_BEAST_CRYSTAL, 1)
return htmltext def onKill(self, npc, player, isPet): 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) < DROP_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)
st.giveItems(4319,1) st.set("cond","3") htmltext = "30956_3.htm" elif npcId == 30956 and st.getInt("cond") == 3 : htmltext = "<html><body>Find Barbado..</body></html>" elif npcId == 30959 and st.getInt("cond") == 3 : st.takeItems(4319,1) st.set("cond","4") htmltext = "30959_1.htm" elif npcId == 30959 and st.getInt("cond") == 4 : htmltext = "<html><body>Go back to Nanarin..</body></html>" elif npcId == 30956 and st.getInt("cond") == 4 : htmltext = "30956_4.htm" return htmltext QUEST = Quest(363,qn,"Sorrowful Sounds of Flute") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30956) QUEST.addTalkId(30956) QUEST.addTalkId(30595) QUEST.addTalkId(30959) STARTED.addQuestDrop(30959,4319,1)
htmltext = "31377-05.htm" #else: #htmltext="<html><body>This quest has already been completed</body></html>" return htmltext def onKill(self, npc, player, isPet): partyMembers = [player] party = player.getParty() if party: partyMembers = party.getPartyMembers().toArray() for player in partyMembers: pst = player.getQuestState(qn) if pst: giveReward(pst, npc) else: pst = player.getQuestState(qn) if pst: giveReward(pst, npc) return QUEST = Quest(614, qn, "Slay The Enemy Commander!") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(Ashas) QUEST.addTalkId(Ashas) STARTED.addQuestDrop(Tayr, Tayr_Head, 1) QUEST.addKillId(Tayr)
st.set("cond", "10") st.playSound("ItemSound.quest_middle") st.addSpawn(30646, npc, True, 0) return QUEST = Quest(211, qn, "Trial Of Challenger") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30644) QUEST.addTalkId(30535) QUEST.addTalkId(30644) QUEST.addTalkId(30645) QUEST.addTalkId(30646) QUEST.addTalkId(30647) QUEST.addKillId(27110) QUEST.addKillId(27112) QUEST.addKillId(27113) QUEST.addKillId(27114) STARTED.addQuestDrop(30647, SCROLL_OF_SHYSLASSY, 1) STARTED.addQuestDrop(30644, LETTER_OF_KASH, 1) STARTED.addQuestDrop(27112, WATCHERS_EYE1, 1) STARTED.addQuestDrop(27110, BROKEN_KEY, 1) STARTED.addQuestDrop(27113, WATCHERS_EYE2, 1)
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(qn) if not st : return htmltext 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)
if st.getInt("cond") == 1 and adamantite < 20 : npcId = npc.getNpcId() numItems, chance = divmod(40*Config.RATE_DROP_QUEST,100) if st.getRandom(100) <= chance : numItems += 1 numItems = int(numItems) if numItems != 0 : if 20 <= (adamantite + numItems) : numItems = 20 - adamantite st.playSound("ItemSound.quest_middle") st.set("cond","2") else: st.playSound("ItemSound.quest_itemget") st.giveItems(ADAMANTITE_ORE,numItems) return QUEST = Quest(157,qn,"Recover Smuggled") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30005) QUEST.addTalkId(30005) QUEST.addKillId(20121) STARTED.addQuestDrop(20121,ADAMANTITE_ORE,1)
QUEST.addTalkId(30501) QUEST.addTalkId(30515) QUEST.addTalkId(30565) QUEST.addTalkId(30571) QUEST.addTalkId(30615) QUEST.addTalkId(30616) QUEST.addTalkId(30617) QUEST.addTalkId(30618) QUEST.addTalkId(30619) QUEST.addTalkId(30642) for i in DROPLIST_COND_1.keys()+DROPLIST_COND_4.keys()+DROPLIST_COND_6.keys()+[20778,20779,27086] : QUEST.addKillId(i) STARTED.addQuestDrop(30514,VOKIYANS_ORDER1,1) STARTED.addQuestDrop(20563,MANASHEN_SHARD,1) STARTED.addQuestDrop(20193,TYRANT_TALON,1) STARTED.addQuestDrop(20550,GUARDIAN_BASILISK_FANG,1) STARTED.addQuestDrop(30514,VOKIYANS_ORDER2,1) STARTED.addQuestDrop(30615,SCEPTER_OF_BREKA,1) STARTED.addQuestDrop(30616,SCEPTER_OF_ENKU,1) STARTED.addQuestDrop(30619,SCEPTER_OF_VUKU,1) STARTED.addQuestDrop(30617,SCEPTER_OF_TUREK,1) STARTED.addQuestDrop(30618,SCEPTER_OF_TUNATH,1) STARTED.addQuestDrop(30642,CHIANTAS_ORDER1,1) STARTED.addQuestDrop(30515,MANAKIAS_LETTER1,1) STARTED.addQuestDrop(30515,MANAKIAS_LETTER2,1) STARTED.addQuestDrop(30501,KASMANS_LETTER1,1) STARTED.addQuestDrop(30642,CHIANTAS_ORDER2,1) STARTED.addQuestDrop(30571,TANAPIS_ORDER1,1)
elif npcId == 30090 and st.getInt("cond")==3 : htmltext = "30090-01.htm" elif npcId == 30090 and st.getInt("cond")==4 : htmltext = "30090-03.htm" elif npcId == 30116 and st.getInt("cond")==5 : htmltext = "30116-01.htm" elif npcId == 30116 and st.getInt("cond")==6 : htmltext = "30116-03.htm" return htmltext QUEST = Quest(47,qn,"Into The Dark Forest") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30097) QUEST.addTalkId(30097) QUEST.addTalkId(30094) QUEST.addTalkId(30090) QUEST.addTalkId(30116) STARTED.addQuestDrop(30097,GALLADUCCIS_ORDER_DOCUMENT_ID_1,1) STARTED.addQuestDrop(30097,GALLADUCCIS_ORDER_DOCUMENT_ID_2,1) STARTED.addQuestDrop(30097,GALLADUCCIS_ORDER_DOCUMENT_ID_3,1) STARTED.addQuestDrop(30094,MAGIC_SWORD_HILT_ID,1) STARTED.addQuestDrop(30090,GEMSTONE_POWDER_ID,1) STARTED.addQuestDrop(30116,PURIFIED_MAGIC_NECKLACE_ID,1)
qty=0 for i in DROP[npcId]: if i[0]<=chance<i[1]: qty=i[2] if qty : if count+qty>50 : qty=50-count if count+qty==50: st.playSound("ItemSound.quest_middle") st.set("cond","2") else : st.playSound("ItemSound.quest_itemget") st.giveItems(WOLF_CLAW,qty) return QUEST = Quest(264,qn,"Keen Claws") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30136) QUEST.addTalkId(30136) QUEST.addKillId(20003) QUEST.addKillId(20456) STARTED.addQuestDrop(20003,WOLF_CLAW,1)
else: st.playSound("ItemSound.quest_middle") if st.getQuestItemsCount(GHOULS_SKIN_ID) == 10 and st.getQuestItemsCount(MEDUSAS_BLOOD_ID) == 12 and st.getQuestItemsCount(FETTEREDSOULS_ICHOR_ID) == 5 and st.getQuestItemsCount(ENCHT_GARGOYLES_NAIL_ID) == 5: st.set("cond","29") elif npcId == 20567 : if st.getInt("cond") == 28 and st.getQuestItemsCount(ENCHT_GARGOYLES_NAIL_ID)<5 : st.giveItems(ENCHT_GARGOYLES_NAIL_ID,1) if st.getQuestItemsCount(ENCHT_GARGOYLES_NAIL_ID) < 5 : st.playSound("ItemSound.quest_itemget") else: st.playSound("ItemSound.quest_middle") if st.getQuestItemsCount(GHOULS_SKIN_ID) == 10 and st.getQuestItemsCount(MEDUSAS_BLOOD_ID) == 12 and st.getQuestItemsCount(FETTEREDSOULS_ICHOR_ID) == 5 and st.getQuestItemsCount(ENCHT_GARGOYLES_NAIL_ID) == 5: st.set("cond","29") return QUEST = Quest(214,qn,"Trial Of Scholar") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(NPC[0]) for npcId in NPC: for i in range(2674,2721): QUEST.addTalkId(npcId) STARTED.addQuestDrop(npcId,i,1) for mobId in MOBS: QUEST.addKillId(mobId)
return QUEST = Quest(105,qn,"Skirmish With Orcs") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30218) QUEST.addTalkId(30218) QUEST.addKillId(27059) QUEST.addKillId(27060) QUEST.addKillId(27061) QUEST.addKillId(27062) QUEST.addKillId(27064) QUEST.addKillId(27065) QUEST.addKillId(27067) QUEST.addKillId(27068) STARTED.addQuestDrop(30218,KENDNELLS_ORDER1_ID,1) STARTED.addQuestDrop(30218,KENDNELLS_ORDER2_ID,1) STARTED.addQuestDrop(30218,KENDNELLS_ORDER3_ID,1) STARTED.addQuestDrop(30218,KENDNELLS_ORDER4_ID,1) STARTED.addQuestDrop(30218,KENDNELLS_ORDER5_ID,1) STARTED.addQuestDrop(30218,KENDNELLS_ORDER6_ID,1) STARTED.addQuestDrop(30218,KENDNELLS_ORDER7_ID,1) STARTED.addQuestDrop(30218,KENDNELLS_ORDER8_ID,1)
STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30414) QUEST.addTalkId(30414) QUEST.addTalkId(30157) QUEST.addTalkId(30371) QUEST.addTalkId(30423) QUEST.addKillId(20019) QUEST.addKillId(20466) QUEST.addKillId(20047) STARTED.addQuestDrop(30414,ROGELLIAS_LETTER,1) STARTED.addQuestDrop(20466,RED_DOWN,1) STARTED.addQuestDrop(30157,CHARM_OF_GRAIN,1) STARTED.addQuestDrop(30414,APPETIZING_APPLE,1) STARTED.addQuestDrop(20019,GOLD_LEAVES,1) STARTED.addQuestDrop(30371,SAP_OF_WORLD_TREE,1) STARTED.addQuestDrop(30414,IMMORTAL_LOVE,1) STARTED.addQuestDrop(20047,AMETHYST,1) STARTED.addQuestDrop(30423,LUCKY_POTPOURI,1) STARTED.addQuestDrop(30157,MAGICAL_POWERS_RUBY,1) STARTED.addQuestDrop(30371,PURE_AQUAMARINE,1) STARTED.addQuestDrop(30423,NOBILITY_AMETHYST,1) STARTED.addQuestDrop(30414,FERTILITY_PERIDOT,1)
partyMember = self.getRandomPartyMemberState(player,STARTED) if not partyMember : return st = partyMember.getQuestState(qn) numItems, chance = divmod(DROP_RATE,MAX) drop = st.getRandom(MAX) if drop < chance : numItems = numItems +1 if int(numItems) != 0 : st.giveItems(ANC_BOOK,int(numItems)) 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) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) # Quest NPC starter initialization QUEST.addStartNpc(HR_SOBLING) # Quest initialization QUEST.addTalkId(HR_SOBLING) for i in MOBS : QUEST.addKillId(i) STARTED.addQuestDrop(HR_SOBLING,DICT2,1)
RUMIELS_POEM_4_ID) + st.getQuestItemsCount( RUMIELS_POEM_5_ID) == 4: st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(163, qn, "Legacy Of Poet") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30220) QUEST.addTalkId(30220) QUEST.addKillId(20372) QUEST.addKillId(20373) STARTED.addQuestDrop(20372, RUMIELS_POEM_1_ID, 1) STARTED.addQuestDrop(20373, RUMIELS_POEM_1_ID, 1) STARTED.addQuestDrop(20372, RUMIELS_POEM_3_ID, 1) STARTED.addQuestDrop(20373, RUMIELS_POEM_3_ID, 1) STARTED.addQuestDrop(20372, RUMIELS_POEM_4_ID, 1) STARTED.addQuestDrop(20373, RUMIELS_POEM_4_ID, 1) STARTED.addQuestDrop(20372, RUMIELS_POEM_5_ID, 1) STARTED.addQuestDrop(20373, RUMIELS_POEM_5_ID, 1)
if not st : return if st.getState() != STARTED : return npcId = npc.getNpcId() count = st.getQuestItemsCount(HONEY_POUCH) if st.getInt("cond") == 1 and count < 100 : st.giveItems(HONEY_POUCH,1) if count == 99 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else : st.playSound("ItemSound.quest_itemget") return QUEST = Quest(299,qn,"Gather Ingredients For A Pie") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30620) QUEST.addTalkId(30620) QUEST.addTalkId(30063) QUEST.addTalkId(30466) QUEST.addKillId(WASP_LEADER) QUEST.addKillId(WASP_WORKER) STARTED.addQuestDrop(WASP_WORKER,HONEY_POUCH,1) STARTED.addQuestDrop(EMILY,AVELLAN_SPICE,1) STARTED.addQuestDrop(EMILY,FRUIT_BASKET,1)
QUEST = Quest(103,qn,"Spirit Of Craftsman") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30307) QUEST.addTalkId(30307) QUEST.addTalkId(30132) QUEST.addTalkId(30144) QUEST.addKillId(20015) QUEST.addKillId(20020) QUEST.addKillId(20455) QUEST.addKillId(20517) QUEST.addKillId(20518) STARTED.addQuestDrop(30307,KAROYDS_LETTER_ID,1) STARTED.addQuestDrop(30132,CECKTINONS_VOUCHER1_ID,1) STARTED.addQuestDrop(30144,CECKTINONS_VOUCHER2_ID,1) STARTED.addQuestDrop(20517,BONE_FRAGMENT1_ID,1) STARTED.addQuestDrop(20518,BONE_FRAGMENT1_ID,1) STARTED.addQuestDrop(20455,BONE_FRAGMENT1_ID,1) STARTED.addQuestDrop(30144,SOUL_CATCHER_ID,1) STARTED.addQuestDrop(30132,PRESERVE_OIL_ID,1) STARTED.addQuestDrop(20015,ZOMBIE_HEAD_ID,1) STARTED.addQuestDrop(20020,ZOMBIE_HEAD_ID,1) STARTED.addQuestDrop(30132,STEELBENDERS_HEAD_ID,1)
return htmltext def onKill(self,npc,player,isPet): partyMember = self.getRandomPartyMember(player,"1") if not partyMember : return st = partyMember.getQuestState(qn) if st : if st.getState() == STARTED : count = st.getQuestItemsCount(BLOOD_OF_SAINT) if st.getInt("cond") == 1 and count < 300 : st.giveItems(BLOOD_OF_SAINT,1) if count == 299 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(626,qn,"A Dark Twilight") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(31517) QUEST.addTalkId(31517) for mobs in range(21520,21541): QUEST.addKillId(mobs) STARTED.addQuestDrop(21520,BLOOD_OF_SAINT,1)
if st.getInt("cond") == 2 and count < 50: chance = CHANCE_FOR_QUEST_ITEMS * Config.RATE_DROP_QUEST numItems, chance = divmod(chance, 100) if st.getRandom(100) < chance: numItems += 1 if numItems: if count + numItems >= 50: numItems = 50 - count st.playSound("ItemSound.quest_middle") st.set("cond", "3") else: st.playSound("ItemSound.quest_itemget") st.giveItems(VACUALITE_ORE, int(numItems)) return QUEST = Quest(618, qn, "Into the Flame") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(KLEIN) QUEST.addTalkId(KLEIN) QUEST.addTalkId(HILDA) for mob in range(21274, 21278) + range(21282, 21286) + range(21290, 21294): QUEST.addKillId(mob) for item in range(7265, 7267): STARTED.addQuestDrop(KLEIN, item, 1)
count = st.getQuestItemsCount(PLAGUE_DUST) if cond == 1 and st.getRandom(100) < 40 and not count : st.giveItems(PLAGUE_DUST,1) 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)
return htmltext def onKill(self, npc, player, isPet): st = player.getQuestState(qn) if not st: return if st.getState() != STARTED: return npcId = npc.getNpcId() if st.getRandom(100) < CHANCE: st.giveItems(ORB, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(343, qn, "Under The Shadow Of The Ivory Tower") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30834) QUEST.addTalkId(30834) QUEST.addTalkId(30835) QUEST.addTalkId(30935) QUEST.addTalkId(30934) for i in range(20563, 20567): QUEST.addKillId(i) STARTED.addQuestDrop(30834, ORB, 1)
htmltext = "30042-03.htm" else: htmltext = "30042-02.htm" st.exitQuest(1) elif st.getInt("cond") and st.getQuestItemsCount(OFFICIAL_LETTER_ID) : htmltext = "30042-05.htm" elif npcId == 30311 and st.getInt("cond") and st.getQuestItemsCount(OFFICIAL_LETTER_ID) and id == STARTED: st.takeItems(OFFICIAL_LETTER_ID,-1) st.giveItems(HASTE_POTION_ID,int(Config.RATE_QUESTS_REWARD)) st.unset("cond") st.setState(COMPLETED) st.playSound("ItemSound.quest_finish") htmltext = "30311-01.htm" return htmltext QUEST = Quest(155,qn,"Find Sir Windawood") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30042) QUEST.addTalkId(30042) QUEST.addTalkId(30311) STARTED.addQuestDrop(30042,OFFICIAL_LETTER_ID,1)
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)
count = st.getQuestItemsCount(NECROHEART) if st.getInt("cond") == 1 and count < 10 : chance = DROP_CHANCE * Config.RATE_DROP_QUEST numItems, chance = divmod(int(chance),100) if st.getRandom(100) < chance : numItems += 1 if numItems : if count + numItems >= 10 : numItems = 10 - count st.playSound("ItemSound.quest_middle") st.set("cond","2") else: st.playSound("ItemSound.quest_itemget") st.giveItems(NECROHEART,int(numItems)) 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)
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) SOLO.addQuestDrop(SORINT, 3811, 1) SOLO.addQuestDrop(SORINT, 3812, 1) for item in range(3472, 3499) + range(3813, 3816): PARTY.addQuestDrop(SORINT, item, 1)
if st : if st.getState() == STARTED : count = st.getQuestItemsCount(PROOF_OF_AVENGER) if st.getInt("cond") == 1 and count < 100 : chance = DROP_CHANCE * Config.RATE_DROP_QUEST numItems, chance = divmod(chance,100) if st.getRandom(100) < chance : numItems = 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(PROOF_OF_AVENGER,int(numItems)) return QUEST = Quest(601,qn,"Watching Eyes") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(EYE_OF_ARGOS) QUEST.addTalkId(EYE_OF_ARGOS) for i in MOBS : QUEST.addKillId(i) STARTED.addQuestDrop(EYE_OF_ARGOS,PROOF_OF_AVENGER,1)
STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30391) QUEST.addTalkId(30391) QUEST.addTalkId(30409) QUEST.addTalkId(30410) QUEST.addTalkId(30411) QUEST.addTalkId(30412) QUEST.addTalkId(30413) QUEST.addKillId(20021) QUEST.addKillId(20359) QUEST.addKillId(27030) STARTED.addQuestDrop(20359,KEY_OF_FLAME,1) STARTED.addQuestDrop(30411,MAP_OF_LUSTER,1) STARTED.addQuestDrop(30410,WIND_FEATHER,1) STARTED.addQuestDrop(30412,BROKEN_BRONZE_MIRROR,1) STARTED.addQuestDrop(27030,SPARKLE_PEBBLE,1) STARTED.addQuestDrop(30413,RAMAS_DIARY,1) STARTED.addQuestDrop(20021,RED_SOIL,1) STARTED.addQuestDrop(30409,RUST_GOLD_COIN,1) STARTED.addQuestDrop(30411,FLAME_EARING,1) STARTED.addQuestDrop(30412,WIND_BANGEL,1) STARTED.addQuestDrop(30413,WATER_NECKLACE,1) STARTED.addQuestDrop(30409,EARTH_RING,1)
item,chance = DROPLIST[npc.getNpcId()] count = st.getQuestItemsCount(item) if st.getInt("cond") == 1 and count < 100 : numItems, chance = divmod(chance*Config.RATE_DROP_QUEST,100) if st.getRandom(100) < chance : numItems += 1 if count + numItems >= 100 : numItems = 100 - count if numItems != 0 : st.giveItems(item,int(numItems)) if st.getQuestItemsCount(LEAF_OF_FLAVA) == st.getQuestItemsCount(BUFFALO_MEAT) == st.getQuestItemsCount(ANTELOPE_HORN) == 100 : st.set("cond","2") st.playSound("ItemSound.quest_middle") else : st.playSound("ItemSound.quest_itemget") return QUEST = Quest(623,qn,"The Finest Food") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(JEREMY) QUEST.addTalkId(JEREMY) for mob in DROPLIST.keys() : QUEST.addKillId(mob) for item in range(7199,7202): STARTED.addQuestDrop(JEREMY,item,1)
htmltext = "30048-09.htm" elif ItemsCount_BP > 0 : htmltext = "30048-10.htm" st.takeItems(BAULS_POTION,-1) st.giveItems(NECKLACE,1) st.set("cond","0") st.set("onlyone","1") st.setState(COMPLETED) st.playSound("ItemSound.quest_finish") else: htmltext = "30048-07.htm" return htmltext QUEST = Quest(1,qn,"Letters of Love") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(DARIN) QUEST.addTalkId(DARIN) QUEST.addTalkId(ROXXY) QUEST.addTalkId(BAULRO) STARTED.addQuestDrop(DARIN,DARINGS_LETTER,1) STARTED.addQuestDrop(DARIN,RAPUNZELS_KERCHIEF,1) STARTED.addQuestDrop(DARIN,DARINGS_RECEIPT,1) STARTED.addQuestDrop(DARIN,BAULS_POTION,1)
htmltext = "31543-0.htm" elif npcId == 31544 and cond == 2 and st.getQuestItemsCount(BOILED_EGGS) : htmltext = "31544-0.htm" elif npcId == 31545 and cond == 3 and st.getQuestItemsCount(BOILED_EGGS) : htmltext = "31545-0.htm" elif npcId == 31546 and cond == 4 and st.getQuestItemsCount(BOILED_EGGS) : htmltext = "31546-0.htm" elif npcId == 31547 and cond == 5 and st.getQuestItemsCount(BOILED_EGGS) : htmltext = "31547-0.htm" elif npcId == 31521 and cond == 6 and st.getQuestItemsCount(FEE_OF_EGGS) == 5 : htmltext = "31521-2.htm" elif npcId == 31521 and cond == 7 and st.getQuestItemsCount(FEE_OF_EGGS) == 5 : htmltext = "31521-4.htm" elif npcId == 31584 and cond == 7 and st.getQuestItemsCount(FEE_OF_EGGS) == 5 : htmltext = "31584-1.htm" return htmltext QUEST = Quest(621,qn,"Egg Delivery") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(31521) QUEST.addTalkId(31521) for i in range(31543,31548)+[31521,31584]: QUEST.addTalkId(i) STARTED.addQuestDrop(31521,BOILED_EGGS,1) STARTED.addQuestDrop(31521,FEE_OF_EGGS,1)
if st.getRandom(10)<4 : 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,qn,"Sacrifice To Sea") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30312) QUEST.addTalkId(30312) QUEST.addTalkId(30051) QUEST.addTalkId(30055) QUEST.addKillId(20481) QUEST.addKillId(20545) STARTED.addQuestDrop(20481,FOX_FUR_ID,1) STARTED.addQuestDrop(20545,FOX_FUR_ID,1) STARTED.addQuestDrop(30051,FOX_FUR_YARN_ID,1) STARTED.addQuestDrop(30055,MAIDEN_DOLL_ID,1)
count = st.getQuestItemsCount(VACUALITE_ORE) if st.getInt("cond") == 2 and count < 50 : chance = CHANCE_FOR_QUEST_ITEMS * Config.RATE_DROP_QUEST numItems, chance = divmod(chance,100) if st.getRandom(100) < chance : numItems += 1 if numItems : if count + numItems >= 50 : numItems = 50 - count st.playSound("ItemSound.quest_middle") st.set("cond","3") else: st.playSound("ItemSound.quest_itemget") st.giveItems(VACUALITE_ORE,int(numItems)) return QUEST = Quest(618,qn,"Into the Flame") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(KLEIN) QUEST.addTalkId(KLEIN) QUEST.addTalkId(HILDA) for mob in range(21274,21278)+range(21282,21286)+range(21290,21294) : QUEST.addKillId(mob) for item in range(7265,7267) : STARTED.addQuestDrop(KLEIN,item,1)
STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30391) QUEST.addTalkId(30391) QUEST.addTalkId(30409) QUEST.addTalkId(30410) QUEST.addTalkId(30411) QUEST.addTalkId(30412) QUEST.addTalkId(30413) QUEST.addKillId(20021) QUEST.addKillId(20359) QUEST.addKillId(27030) STARTED.addQuestDrop(20359, KEY_OF_FLAME, 1) STARTED.addQuestDrop(30411, MAP_OF_LUSTER, 1) STARTED.addQuestDrop(30410, WIND_FEATHER, 1) STARTED.addQuestDrop(30412, BROKEN_BRONZE_MIRROR, 1) STARTED.addQuestDrop(27030, SPARKLE_PEBBLE, 1) STARTED.addQuestDrop(30413, RAMAS_DIARY, 1) STARTED.addQuestDrop(20021, RED_SOIL, 1) STARTED.addQuestDrop(30409, RUST_GOLD_COIN, 1) STARTED.addQuestDrop(30411, FLAME_EARING, 1) STARTED.addQuestDrop(30412, WIND_BANGEL, 1) STARTED.addQuestDrop(30413, WATER_NECKLACE, 1) STARTED.addQuestDrop(30409, EARTH_RING, 1)
st.playSound("Itemsound.quest_middle") itemcount=0 for id in [WEIRD_BEES_NEEDLE,MARSH_SPIDERS_WEB,BLOOD_OF_LEECH]: itemcount+=st.getQuestItemsCount(id) if npcId==27133 or itemcount>29: st.set("progress",str(progress+1)) else: st.playSound("Itemsound.quest_itemget") return QUEST = Quest(231,qn,"Test Of Maestro") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30531) QUEST.addTalkId(30531) for npcId in [30532,30533,30535,30536,30556,30671,30672,30673,30675]: QUEST.addTalkId(npcId) for mobId in [20225,20229,20233,27133]: QUEST.addKillId(mobId) for item in range(2864,2867)+range(2868,2879)+[2916]: STARTED.addQuestDrop(30531,item,1)
id = st.getState() cond = st.getInt("cond") if id == CREATED: st.set("cond", "0") if npcId == FUNDIN and cond == 0: if id == COMPLETED: htmltext = "<html><body>This quest has already been completed.</body></html>" elif player.getLevel() < 74: htmltext = "31274-1.htm" st.exitQuest(1) elif player.getLevel() >= 74: htmltext = "31274-0.htm" elif npcId == FUNDIN and cond == 1: htmltext = "31274-2.htm" elif npcId == VULCAN and cond == 1 and id == STARTED: htmltext = "31539-0.htm" return htmltext QUEST = Quest(13, qn, "Parcel Delivery") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(31274) QUEST.addTalkId(31274) QUEST.addTalkId(31539) STARTED.addQuestDrop(31539, PACKAGE, 1)
if st: count = st.getQuestItemsCount(GRAVE_GOODS) if st.getInt("cond") == 1 and count < 180: chance = DROP_CHANCE * Config.RATE_DROP_QUEST numItems, chance = divmod(chance, 100) if st.getRandom(100) < chance: numItems += 1 if numItems: if count + numItems >= 180: numItems = 180 - count st.playSound("ItemSound.quest_middle") st.set("cond", "2") else: st.playSound("ItemSound.quest_itemget") st.giveItems(GRAVE_GOODS, int(numItems)) return QUEST = Quest(645, qn, "Ghosts of Batur") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(KARUDA) QUEST.addTalkId(KARUDA) for i in MOBS: QUEST.addKillId(i) STARTED.addQuestDrop(KARUDA, GRAVE_GOODS, 1)
elif npcId == MIRABEL and cond == 1: htmltext = "30146-04.htm" elif id == STARTED: if npcId == ARIEL and cond: if st.getQuestItemsCount(ARIELS_RECOMMENDATION) == 0: htmltext = "30148-01.htm" else: htmltext = "30148-03.htm" elif npcId == ASTERIOS and cond == 2 and st.getQuestItemsCount( ARIELS_RECOMMENDATION) > 0: htmltext = "30154-01.htm" elif npcId == MIRABEL and cond == 3: htmltext = "30146-05.htm" return htmltext QUEST = Quest(7, qn, "A Trip Begins") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(MIRABEL) QUEST.addTalkId(MIRABEL) QUEST.addTalkId(ARIEL) QUEST.addTalkId(ASTERIOS) STARTED.addQuestDrop(MIRABEL, ARIELS_RECOMMENDATION, 1)
else: htmltext = "30357-04.htm" return htmltext def onKill(self, npc, player, isPet): st = player.getQuestState(qn) if not st: return if st.getState() != STARTED: return if st.getRandom(10) < (5 + ((npc.getNpcId() - 20000) ^ 4)): st.giveItems(IMP_SHACKLES, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(265, qn, "Chains Of Slavery") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30357) QUEST.addTalkId(30357) QUEST.addKillId(20004) QUEST.addKillId(20005) STARTED.addQuestDrop(20004, IMP_SHACKLES, 1)
partyMember = self.getRandomPartyMember(player, partyCond, "1") if not partyMember : return st = partyMember.getQuestState(qn) count = st.getQuestItemsCount(item) if count < 100 : st.giveItems(item,1) if count + 1 >= 100 : st.playSound("ItemSound.quest_middle") st.unset(partyCond) else : 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) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) # Quest NPC starter initialization QUEST.addStartNpc(MANAKIA) # Quest initialization QUEST.addTalkId(MANAKIA) for i in DROPLIST.keys() : QUEST.addKillId(i) STARTED.addQuestDrop(i,DROPLIST[i][0],1)
if st.getInt("cond") == 1 : if st.getRandom(10)<4 and st.getQuestItemsCount(DARK_BEZOAR_ID)<13 : 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,qn,"Wild Hunt") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30348) QUEST.addTalkId(30348) QUEST.addKillId(20456) QUEST.addKillId(20529) QUEST.addKillId(20532) QUEST.addKillId(20536) STARTED.addQuestDrop(20529,DARK_BEZOAR_ID,1) STARTED.addQuestDrop(20532,DARK_BEZOAR_ID,1) STARTED.addQuestDrop(20536,DARK_BEZOAR_ID,1) STARTED.addQuestDrop(20456,DARK_BEZOAR_ID,1)
QUEST.addTalkId(30655) 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)
elif npcId == 30956 and st.getInt("cond") == 2: st.giveItems(4319, 1) st.set("cond", "3") htmltext = "30956_3.htm" elif npcId == 30956 and st.getInt("cond") == 3: htmltext = "<html><body>Find Barbado..</body></html>" elif npcId == 30959 and st.getInt("cond") == 3: st.takeItems(4319, 1) st.set("cond", "4") htmltext = "30959_1.htm" elif npcId == 30959 and st.getInt("cond") == 4: htmltext = "<html><body>Go back to Nanarin..</body></html>" elif npcId == 30956 and st.getInt("cond") == 4: htmltext = "30956_4.htm" return htmltext QUEST = Quest(363, qn, "Sorrowful Sounds of Flute") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30956) QUEST.addTalkId(30956) QUEST.addTalkId(30595) QUEST.addTalkId(30959) STARTED.addQuestDrop(30959, 4319, 1)
count = st.getQuestItemsCount(WOLF_PELT) numItems, chance = divmod(100*Config.RATE_DROP_QUEST,100) if st.getRandom(100) <chance : numItems = numItems + 1 if count+numItems>=40 : numItems = 40 - count if numItems != 0 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else : st.playSound("ItemSound.quest_itemget") st.giveItems(WOLF_PELT,int(numItems)) return QUEST = Quest(258,qn,"Bring Wolf Pelt1") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30001) QUEST.addTalkId(30001) QUEST.addKillId(20120) QUEST.addKillId(20442) STARTED.addQuestDrop(20120,WOLF_PELT,1)
htmltext = "30134-04.htm" elif id == STARTED: if npcId == ROSELYN and cond: if st.getQuestItemsCount(ROSELYNS_NOTE) == 0: htmltext = "30355-01.htm" else: htmltext = "30355-03.htm" elif npcId == HARNE and cond == 2 and st.getQuestItemsCount( ROSELYNS_NOTE) > 0: htmltext = "30144-01.htm" elif npcId == JASMINE and cond == 3: htmltext = "30134-05.htm" return htmltext QUEST = Quest(8, qn, "An Adventure Begins") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(JASMINE) QUEST.addTalkId(JASMINE) QUEST.addTalkId(ROSELYN) QUEST.addTalkId(HARNE) STARTED.addQuestDrop(JASMINE, ROSELYNS_NOTE, 1)
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) SOLO.addQuestDrop(SORINT,3811,1) SOLO.addQuestDrop(SORINT,3812,1) for item in range(3472,3499)+range(3813,3816): PARTY.addQuestDrop(SORINT,item,1)
QUEST = Quest(171, qn, "Acts of Evil") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(ALVAH) QUEST.addTalkId(ALVAH) QUEST.addTalkId(ARODIN) QUEST.addTalkId(TYRA) QUEST.addTalkId(ROLENTO) QUEST.addTalkId(NETI) QUEST.addTalkId(BURAI) STARTED.addQuestDrop(ALVAH, RANGERS_REPORT1, 1) STARTED.addQuestDrop(ALVAH, RANGERS_REPORT2, 1) STARTED.addQuestDrop(ALVAH, RANGERS_REPORT3, 1) STARTED.addQuestDrop(ALVAH, RANGERS_REPORT4, 1) STARTED.addQuestDrop(ALVAH, OL_MAHUM_HEAD, 1) STARTED.addQuestDrop(ALVAH, CARGOBOX, 1) STARTED.addQuestDrop(ALVAH, TYRAS_BILL, 1) STARTED.addQuestDrop(ALVAH, CERTIFICATE, 1) STARTED.addQuestDrop(ALVAH, BLADE_MOLD, 1) STARTED.addQuestDrop(ALVAH, WEAPON_TRADE_CONTRACT, 1) for i in range(20494, 20500) + [20062, 20066, 20438]: QUEST.addKillId(i)
st = player.getQuestState(qn) if not st : return htmltext npcId = npc.getNpcId() id = st.getState() cond = st.getInt("cond") if npcId == LIESEL and cond == 0 : if id == COMPLETED : htmltext = "<html><body>This quest has already been completed.</body></html>" elif player.getLevel() < 74 : htmltext = "31263-1.htm" st.exitQuest(1) elif player.getLevel() >= 74 : htmltext = "31263-0.htm" elif npcId == LIESEL and cond == 1 : htmltext = "31263-2.htm" elif npcId == GHOST_OF_ADVENTURER and cond == 1 and id == STARTED: htmltext = "31538-0.htm" return htmltext QUEST = Quest(14,qn,"Whereabouts Of The Archaeologist") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(LIESEL) QUEST.addTalkId(LIESEL) QUEST.addTalkId(GHOST_OF_ADVENTURER) STARTED.addQuestDrop(GHOST_OF_ADVENTURER,LETTER,1)
htmltext = "30361-07.htm" else : htmltext = "30361-05.htm" return htmltext def onKill(self,npc,player,isPet): st = player.getQuestState(qn) if not st : return if st.getState() != STARTED : return if st.getRandom(100) < 50: st.giveItems(WIND_SHARD,1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(317,qn,"Catch The Wind") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30361) QUEST.addTalkId(30361) QUEST.addKillId(20036) QUEST.addKillId(20044) STARTED.addQuestDrop(20036,WIND_SHARD,1)
if count > 2: st.set("cond", "5") 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)
def onKill(self,npc,player,isPet): st = player.getQuestState(qn) if not st : return if st.getState() != STARTED : return npcId = npc.getNpcId() if npcId == 20333 : if st.getInt("cond") == 1 and st.getQuestItemsCount(STARSTONE1_ID) < 20 : if st.getRandom(2) == 0 : st.giveItems(STARSTONE1_ID,1) if st.getQuestItemsCount(STARSTONE1_ID) == 20 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else : st.playSound("ItemSound.quest_itemget") return QUEST = Quest(277,qn,"Gatekeepers Offering") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30576) QUEST.addTalkId(30576) QUEST.addKillId(20333) STARTED.addQuestDrop(20333,STARSTONE1_ID,1)
st = player.getQuestState(qn) if st: if st.getState() == STARTED: npcId = npc.getNpcId() cond = st.getInt("cond") id = st.getInt("id") Red_Totem = st.getQuestItemsCount(Totem) if npcId in Ketra_Orcs: st.unset("id") st.unset("aggro") st.exitQuest(1) if Red_Totem: st.takeItems(Totem, -1) return QUEST = Quest(609, qn, "Magical Power of Water - Part 1") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(Wahkan) QUEST.addTalkId(Wahkan) QUEST.addTalkId(Asefa) QUEST.addTalkId(Udan_Box) STARTED.addQuestDrop(Udan_Box, Totem, 1) for mobId in Varka_Mobs: QUEST.addAttackId(mobId) for mobId in Ketra_Orcs: QUEST.addKillId(mobId)
st = partyMember.getQuestState(qn) if st: count = st.getQuestItemsCount(LOST_BAIT) 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(LOST_BAIT, 1) return QUEST = Quest(51, qn, "O'Fulle's Special Bait") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(OFULLE) QUEST.addTalkId(OFULLE) QUEST.addKillId(FETTERED_SOUL) STARTED.addQuestDrop(FETTERED_SOUL, LOST_BAIT, 1)
htmltext = "30405-02.htm" return htmltext def onKill(self,npc,player,isPet): st = player.getQuestState(qn) if not st : return if st.getState() != STARTED : return npcId = npc.getNpcId() st.giveItems(GIANT_SPIDER_SKIN,1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(259,qn,"Ranchers Plea") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30497) QUEST.addTalkId(30497) QUEST.addTalkId(30405) QUEST.addKillId(20103) QUEST.addKillId(20106) QUEST.addKillId(20108) STARTED.addQuestDrop(20103,GIANT_SPIDER_SKIN,1)
def onKill(self,npc,player,isPet): st = player.getQuestState(qn) if not st : return if st.getState() != STARTED : return count = st.getQuestItemsCount(BRACELET) cond = st.getInt("cond") if st.getRandom(100) < CHANCE + ((npc.getNpcId() - 20579)*5) and count < 60 and cond == 1: st.giveItems(BRACELET,1) if count == 59 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else : st.playSound("ItemSound.quest_itemget") return QUEST = Quest(300,qn,"Hunting Leto Lizardman") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(RATH) QUEST.addTalkId(RATH) for mob in range(20577,20581)+[20582] : QUEST.addKillId(mob) STARTED.addQuestDrop(RATH,BRACELET,1)