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)
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)
random = st.getRandom(100) if item == KALDIS_COIN : if cond == 2 : if not st.getQuestItemsCount(item) and random < (chance - 10) : st.giveItems(item,1) st.playSound("ItemSound.quest_middle") st.set("cond","3") elif random < chance: st.giveItems(item,1) st.playSound("ItemSound.quest_itemget") return # Quest class and state definition QUEST = Quest(QUEST_NUMBER, str(QUEST_NUMBER)+"_"+QUEST_NAME, QUEST_DESCRIPTION) CREATED = State('Start', QUEST) SOLO = State('Solo', QUEST) PARTY = State('Party', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) # Quest NPC starter initialization QUEST.addStartNpc(SORINT) # Quest initialization for npc in [SORINT, BERNARD, PAGE, HAGGER, STAN, RALFORD, FERRIS, COLLOB, PANO, DUNING, LORAIN]: QUEST.addTalkId(npc) for mob in DROP_LIST.keys(): QUEST.addKillId(mob) SOLO.addQuestDrop(SORINT,3811,1)
if st.getState() == STARTED : 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)
if not st : return 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)
elif npcId == 30094 and st.getInt("cond")==2 : htmltext = "30094-03.htm" 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)
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)
if not st.getQuestItemsCount(VICTIMS_ARM_BONE) : st.giveItems(VICTIMS_ARM_BONE,1) elif not st.getQuestItemsCount(VICTIMS_THIGH_BONE) : st.giveItems(VICTIMS_THIGH_BONE,1) elif not st.getQuestItemsCount(VICTIMS_SKULL) : st.giveItems(VICTIMS_SKULL,1) elif not st.getQuestItemsCount(VICTIMS_RIB_BONE) : st.giveItems(VICTIMS_RIB_BONE,1) elif not st.getQuestItemsCount(VICTIMS_SPINE) : st.giveItems(VICTIMS_SPINE,1) if random<=CHANCE2 : st.giveItems(USELESS_BONE_PIECES,st.getRandom(8)+1) return QUEST = Quest(345,qn,"Method To Raise The Dead") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30970) QUEST.addTalkId(30970) QUEST.addTalkId(30912) QUEST.addTalkId(30973) STARTED.addQuestDrop(30970,VICTIMS_ARM_BONE,1) STARTED.addQuestDrop(30970,VICTIMS_THIGH_BONE,1) STARTED.addQuestDrop(30970,VICTIMS_SKULL,1) STARTED.addQuestDrop(30970,VICTIMS_RIB_BONE,1) STARTED.addQuestDrop(30970,VICTIMS_SPINE,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)
if 66>st.getQuestItemsCount(DARKWING_BAT_FANG)>10 and st.getRandom(100) < 10 : st.addSpawn(27043) st.giveItems(VARANGKAS_PARASITE,1) else : if st.getQuestItemsCount(DARKWING_BAT_FANG) < 66 and st.getQuestItemsCount(VARANGKAS_PARASITE) : if st.getQuestItemsCount(DARKWING_BAT_FANG) < 65 : st.playSound("ItemSound.quest_itemget") else: st.playSound("ItemSound.quest_middle") st.set("cond","2") st.giveItems(DARKWING_BAT_FANG,5) st.takeItems(VARANGKAS_PARASITE,-1) return QUEST = Quest(275,qn,"Black Winged Spies") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30567) QUEST.addTalkId(30567) QUEST.addKillId(20316) QUEST.addKillId(27043) STARTED.addQuestDrop(20316,DARKWING_BAT_FANG,1) STARTED.addQuestDrop(20316,VARANGKAS_PARASITE,1)
if st.getQuestItemsCount(CHRYSOBERYL_ID) < 10: st.giveItems(CHRYSOBERYL_ID, 1) st.playSound("ItemSound.quest_itemget") elif npcId == 20480: if st.getInt("cond") == 1 and st.getQuestItemsCount( BAT_DIAGRAM_ID) and st.getQuestItemsCount( STAR_DIAMOND_ID) == 0: if st.getRandom(10) < 2: st.giveItems(STAR_DIAMOND_ID, 1) st.takeItems(BAT_DIAGRAM_ID, 1) st.playSound("ItemSound.quest_middle") return QUEST = Quest(108, qn, "Jumble Tumble Diamond Fuss") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) 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)
st.takeItems(M_EGG,1) st.giveItems(57,71318) st.setState(COMPLETED) st.set("cond","0") st.playSound("ItemSound.quest_finish") elif npcId == KARAKAWEI : if cond == 4 : htmltext = "32117-01.htm" if id == MIDDLE : htmltext = "32117-02.htm" elif cond == 5 : htmltext = "32117-04.htm" elif npcId == MANTARASA and cond == 5 : htmltext = "32118-01.htm" return htmltext QUEST = Quest(124,qn,"Meeting The Elroki") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) MIDDLE = State('Middle', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(MARQUEZ) QUEST.addTalkId(MARQUEZ) QUEST.addTalkId(MUSHIKA) QUEST.addTalkId(ASAMAH) QUEST.addTalkId(KARAKAWEI) QUEST.addTalkId(MANTARASA)
if st.getRandom(1000) < chance : numItems += 1 numItems = int(numItems) if numItems != 0 : if int((count+numItems)/100) > int(count/100) : st.playSound("ItemSound.quest_middle") else : st.playSound("ItemSound.quest_itemget") st.giveItems(Molar,numItems) elif npcId in Varka_Mobs : st.unset("id") st.takeItems(Molar,-1) st.exitQuest(1) return QUEST = Quest(612, qn, "War With Ketra Orcs") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(Ashas) QUEST.addTalkId(Ashas) for mobId in Ketra_Orcs : QUEST.addKillId(mobId) STARTED.addQuestDrop(Ashas,Molar,1) for mobId in Varka_Mobs : QUEST.addKillId(mobId)
st.set("id", "0") if st.getInt("cond") and st.getQuestItemsCount( PENDANT_OF_MOTHER) == 0: st.giveItems(PENDANT_OF_MOTHER, 1) st.playSound("ItemSound.quest_middle") elif npcId == 20029: st.set("id", "0") if st.getInt("cond") and st.getQuestItemsCount( PENDANT_OF_MOTHER) == 0: st.giveItems(PENDANT_OF_MOTHER, 1) st.playSound("ItemSound.quest_middle") return 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)
if st.getInt("cond") == 1 : if st.getQuestItemsCount(KENDNELLS_ORDER7_ID) and st.getQuestItemsCount(KABOO_CHIEF_TORC2_ID) == 0 : st.giveItems(KABOO_CHIEF_TORC2_ID,1) st.playSound("ItemSound.quest_middle") elif npcId == 27068 : st.set("id","0") if st.getInt("cond") == 1 : if st.getQuestItemsCount(KENDNELLS_ORDER8_ID) and st.getQuestItemsCount(KABOO_CHIEF_TORC2_ID) == 0 : st.giveItems(KABOO_CHIEF_TORC2_ID,1) st.playSound("ItemSound.quest_middle") 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)
st.playSound("ItemSound.quest_itemget") if st.getRandom(100) < chance: n = st.getRandom(100) if n < 25: st.giveItems(CLAY_URN_FRAGMENT, 1) elif n < 50: st.giveItems(BRASS_TRINKET_PIECE, 1) elif n < 75: st.giveItems(BRONZE_MIRROR_PIECE, 1) else: st.giveItems(JADE_NECKLACE_BEAD, 1) return QUEST = Quest(327, qn, "Reclaim The Land") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30597) QUEST.addTalkId(30597) QUEST.addTalkId(30034) QUEST.addTalkId(30313) QUEST.addTalkId(30597) for i in range(20495, 20502): QUEST.addKillId(i)
chance = st.getRandom(20) 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)
count = st.getQuestItemsCount(SILVER_CRYSTAL_ID) if st.getInt("cond") == 1 and count < 50: chance = 100 * 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", "2") else: st.playSound("ItemSound.quest_itemget") st.giveItems(SILVER_CRYSTAL_ID, int(numItems)) return QUEST = Quest(431, qn, "Wedding March") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(31042) QUEST.addTalkId(31042) QUEST.addKillId(20786) QUEST.addKillId(20787) STARTED.addQuestDrop(20786, SILVER_CRYSTAL_ID, 1)
adamantite = st.getQuestItemsCount(ADAMANTITE_ORE) 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)
htmltext = "31370-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(607, qn, "Prove Your Courage!") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(Kadun) QUEST.addTalkId(Kadun) STARTED.addQuestDrop(Shadith, Shadith_Head, 1) QUEST.addKillId(Shadith)
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)
if st.getQuestItemsCount(AMBER_BEAD_ID) < 70 : if st.getRandom(100) < 50 and player.getClassId().getId() == 0x36: #and IsSpoiled() == 1 : st.giveItems(AMBER_BEAD_ID,1) st.playSound("Itemsound.quest_itemget") if st.getRandom(100) < 50 : if st.getQuestItemsCount(AMBER_BEAD_ID) < 69 : st.giveItems(AMBER_BEAD_ID,1) st.playSound("Itemsound.quest_itemget") else: st.giveItems(AMBER_BEAD_ID,1) st.playSound("ItemSound.quest_middle") return QUEST = Quest(216,qn,"Trial Of Guildsman") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30103) QUEST.addTalkId(30103) QUEST.addTalkId(30210) QUEST.addTalkId(30283) QUEST.addTalkId(30298) QUEST.addTalkId(30688)
if st.getState() == STARTED : 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 = "<html><body>You are either not carrying out your quest or don't meet the criteria.</body></html>" st = player.getQuestState(qn) if st: npcId = npc.getNpcId() id = st.getState() cond = st.getInt("cond") if cond == 0 and id == CREATED: if npcId == WIZARD: htmltext = "31522.htm" if cond == 1 and id == STARTED: htmltext = "31522-1.htm" if cond == 2 and id == STARTED: if st.getQuestItemsCount(V_HEART) == 200: htmltext = "31522-2.htm" return htmltext QUEST = Quest(632, qn, "Necromancer's Request") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) for i in VAMPIRES: QUEST.addKillId(i) for i in UNDEADS: QUEST.addKillId(i) QUEST.setInitialState(CREATED) QUEST.addStartNpc(WIZARD) QUEST.addTalkId(WIZARD) STARTED.addQuestDrop(WIZARD, V_HEART, 1) STARTED.addQuestDrop(WIZARD, Z_BRAIN, 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)
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)
st.playSound("ItemSound.quest_itemget") elif npcId == 20545 : st.set("id","0") if st.getInt("cond") == 1 and st.getQuestItemsCount(FOX_FUR_ID)<10 and st.getQuestItemsCount(FOX_FUR_YARN_ID) == 0 : 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)
def onKill(self, npc, player, isPet): st = player.getQuestState(qn) if not st: return if st.getState() != STARTED: return numItems, chance = divmod(CHANCE * Config.RATE_DROP_QUEST, MAX) if st.getQuestItemsCount(ROYAL_MEMBERSHIP): if st.getRandom(MAX) < chance: numItems = numItems + 1 npcId = npc.getNpcId() if numItems != 0: st.giveItems(MOBS[npcId][st.getRandom(len(MOBS[npcId]))], int(numItems)) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(382, qn, "Kail's Magic Coin") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(VERGARA) QUEST.addTalkId(VERGARA) for npc in MOBS.keys(): QUEST.addKillId(npc) for coin in range(5961, 5964): STARTED.addQuestDrop(coin, VERGARA, 1)
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 = 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)
st.playSound("ItemSound.quest_middle") elif npcId == 27113 and cond == 6 and not st.getQuestItemsCount( WATCHERS_EYE2): st.giveItems(WATCHERS_EYE2, 1) st.playSound("ItemSound.quest_middle") st.set("cond", "7") st.addSpawn(30646, npc, True, 0) elif npcId == 27114 and cond == 9: 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)
def onKill(self,npc,player,isPet): 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)
count = st.getQuestItemsCount(item) if count < 50: if count + numItems > 50: numItems = 50 - count st.giveItems(item, numItems) count_trunk = st.getQuestItemsCount(TRUNK_OF_NEPENTHES) count_foot = st.getQuestItemsCount( FOOT_OF_BANDERSNATCHLING) count_spice = st.getQuestItemsCount(SECRET_SPICE) if count_trunk == count_foot == count_spice == 50: st.set("cond", "3") st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(624, qn, "The Finest Ingredients - Part 1") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(JEREMY) QUEST.addTalkId(JEREMY) for i in MOBS: QUEST.addKillId(i) STARTED.addQuestDrop(JEREMY, TRUNK_OF_NEPENTHES, 1) STARTED.addQuestDrop(JEREMY, FOOT_OF_BANDERSNATCHLING, 1) STARTED.addQuestDrop(JEREMY, SECRET_SPICE, 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)
leader = clan.getLeader() if leader: pleader = leader.getPlayerInstance() if pleader: if player.isInsideRadius(pleader, 1600, 1, 0): st = pleader.getQuestState(qn) if not st: return option = st.getInt("raid") if st.getInt("cond") == 1 and st.getState( ) == STARTED and option in REWARDS_LIST.keys(): raid, item = REWARDS_LIST[option] npcId = npc.getNpcId() if npcId == raid and not st.getQuestItemsCount(item): st.giveItems(item, 1) st.playSound("ItemSound.quest_middle") return # Quest class and state definition QUEST = Quest(508, qn, qd) CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(SIR_ERIC_RODEMAI) QUEST.addTalkId(SIR_ERIC_RODEMAI) for npc, item in REWARDS_LIST.values(): QUEST.addKillId(npc) STARTED.addQuestDrop(npc, item, 1)
st.playSound("Itemsound.quest_before_battle") #st.addSpawn(27086) st.addSpawn(27086, 11839,-106261,-3550,300000) return "Revenant of Tantos Chief has spawned at X=11839 Y=-106261 Z=-3550" # Alternate coord. set: #st.addSpawn(27086,11567,-106785,-3520) elif npcId == 27086 : st.giveItems(SCEPTER_OF_TANTOS,1) st.set("cond","10") st.playSound("Itemsound.quest_middle") return QUEST = Quest(220,qn,"Testimony Of Glory") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30514) QUEST.addTalkId(30514) QUEST.addTalkId(30501) QUEST.addTalkId(30515) QUEST.addTalkId(30565) QUEST.addTalkId(30571) QUEST.addTalkId(30615) QUEST.addTalkId(30616) QUEST.addTalkId(30617)
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)
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.getQuestItemsCount( SEED_OF_VERDURE_ID) and st.getQuestItemsCount( BREATH_OF_WINDS_ID): st.set("cond", "3") st.playSound("Itemsound.quest_middle") else: st.playSound("Itemsound.quest_itemget") elif npcId == 20213: # Condition 19 Porta st.set("cond", "20") st.playSound("ItemSound.quest_middle") else: st.playSound("Itemsound.quest_itemget") return QUEST = Quest(217, qn, "Testimony Of Trust") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30191) QUEST.addTalkId(30191) QUEST.addTalkId(30031) QUEST.addTalkId(30154) QUEST.addTalkId(30358) QUEST.addTalkId(30464) QUEST.addTalkId(30515) QUEST.addTalkId(30531)
def onKill(self,npc,player,isPet) : 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)
st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") elif npcId == VEGUS and not (clover + album) and st.getInt("id"): if st.getRandom(100) < VEGUS_CHANCE: st.giveItems(CLOVER_COIN, 1) if coin: st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(QuestNumber, str(QuestNumber) + "_" + QuestName, QuestDescription) CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(SORINT) QUEST.addTalkId(SORINT) QUEST.addTalkId(SANDRA) QUEST.addKillId(ANCIENT_GARGOYLE) QUEST.addKillId(VEGUS) STARTED.addQuestDrop(KAILS_COIN, SORINT, 1) STARTED.addQuestDrop(COIN_ALBUM, SORINT, 1) STARTED.addQuestDrop(CLOVER_COIN, SORINT, 1)
htmltext = "31517-2a.htm" 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)
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 ]:
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)
elif npcId == 30094 and st.getInt("cond") == 2: htmltext = "30094-03.htm" 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(45, qn, "To Talking Island") 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)
st = partyMember.getQuestState(qn) 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)
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)
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)
return htmltext def onKill(self, npc, player, isPet): st = player.getQuestState(qn) if st: if st.getState() == STARTED: count = st.getQuestItemsCount(GEM_OF_SUBMISSION) if st.getInt("cond") == 1 and count < 300: st.giveItems(GEM_OF_SUBMISSION, 1) if count == 299: st.playSound("ItemSound.quest_middle") st.set("cond", "2") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(627, qn, "Heart In Search Of Power") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(31518) QUEST.addTalkId(31518) QUEST.addTalkId(31519) for mobs in range(21520, 21541): QUEST.addKillId(mobs) STARTED.addQuestDrop(21520, GEM_OF_SUBMISSION, 1)
st.takeItems(WIND_SHARD,-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)
GrandBossManager.getInstance().setBossStatus(Benom, LIVE) self.BenomIsSpawned = 0 self.Benomm.deleteMe() return def onAttack(self, npc, player, damage, isPet): self.cancelQuestTimer("BenomWalk", npc, None) self.cancelQuestTimer("BenomWalkFinish", npc, None) self.startQuestTimer("Attacking", 100, npc, player) return def onKill(self, npc, player, isPet): GrandBossManager.getInstance().setBossStatus(Benom, DEAD) self.cancelQuestTimer("BenomWalk", npc, None) self.cancelQuestTimer("BenomWalkFinish", npc, None) self.cancelQuestTimer("BenomBossDespawn", npc, None) self.cancelQuestTimer("Talk", npc, None) self.cancelQuestTimer("Attacking", npc, None) return QUEST = benom(-1, "benom", "ai") CREATED = State('Start', QUEST) # Quest initialization QUEST.setInitialState(CREATED) QUEST.addStartNpc(BenomTeleport) QUEST.addTalkId(BenomTeleport) QUEST.addAttackId(Benom) QUEST.addKillId(Benom)
st.set("cond","9") else: st.playSound("ItemSound.quest_itemget") elif npcId == 20021 : #Red Bear st.set("id","0") #Only get a RED_SOIL if we are on the quest for the Earth Snake if st.getInt("cond") == 11 : st.giveItems(RED_SOIL,1) st.playSound("ItemSound.quest_middle") st.set("cond","12") return QUEST = Quest(404,qn,"Path To Wizard") CREATED = State('Start', QUEST) 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)
if heart < 1: st.giveItems(TYRANT_KINGPIN_HEART, 1) st.playSound("ItemSound.quest_middle") elif npcId == TRISALIM_TARANTULA: if condition == 9: if sacs < 3: st.giveItems(TRISALIM_TARANTULAS_VENOM_SAC, 1) if skulls == 3: st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(422, qn, "Repent your Sins") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30981) QUEST.addTalkId(30981) QUEST.addTalkId(30668) QUEST.addTalkId(30597) QUEST.addTalkId(30612) QUEST.addTalkId(30718) QUEST.addTalkId(30300) QUEST.addKillId(SCAVENGER_WERERAT) QUEST.addKillId(TUREK_WARHOUND) QUEST.addKillId(TYRANT_KINGPIN)
else: st.playSound("ItemSound.quest_itemget") elif npcId == 20047 : st.set("id","0") if st.getInt("cond") != 0 and st.getQuestItemsCount(LUCKY_POTPOURI) != 0 and st.getQuestItemsCount(AMETHYST)<2 and st.getRandom(100)<40 : st.giveItems(AMETHYST,1) if st.getQuestItemsCount(AMETHYST) == 2 : st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(408,qn,"Path To Elvenwizard") CREATED = State('Start', QUEST) 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)
def onFirstTalk (self,npc,player): st = player.getQuestState(qn) if not st : qs = player.getQuestState("140_ShadowFoxPart2") st = self.newQuestState(player) if qs : if qs.getState().getName() == 'Completed' and st.getState() == CREATED : st.setState(STARTED) elif st.getState() == COMPLETED and player.getLevel() >= 38 : qs2 = player.getQuestState("998_FallenAngelSelect") qs3 = player.getQuestState("142_FallenAngelRequestOfDawn") qs4 = player.getQuestState("143_FallenAngelRequestOfDusk") if qs2 : if qs.getState().getName() == 'Completed' and not (qs3 or qs4) : qs2.setState(STARTED) npc.showChatWindow(player) return QUEST = Quest(141,qn,"Shadow Fox - 3") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addFirstTalkId(NATOOLS) #this quest doesnt have starter npc, quest will appear in list only when u finish quest 140 QUEST.addTalkId(NATOOLS) for mob in NPC : QUEST.addKillId(mob)
item, partyCond = DROPLIST[npcId] 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)
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)
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)
htmltext = "32028-01.htm" return htmltext def onKill(self, npc, player, isPet): st = player.getQuestState(qn) if not st: return if st.getState() == STARTED: chance = DROP_CHANCE * Config.RATE_DROP_QUEST numItems, chance = divmod(chance, 100) random = st.getRandom(100) if random <= chance: numItems += 1 if int(numItems) != 0: st.giveItems(SCRIPTURES, int(numItems)) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(639, qn, "Guardians of the Holy Grail") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(DOMINIC) QUEST.addTalkId(DOMINIC) QUEST.addTalkId(GREMORY) QUEST.addTalkId(GRAIL) for i in MONSTERS: QUEST.addKillId(i)
else : 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)
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")) if st.getQuestTimer("Mob_3 has despawned") : 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") if st2.getQuestTimer("Mob_1 has despawned") : 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())) if st2.getQuestTimer("Archon Hellisha has despawned") : 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: if st.getQuestTimer("Mob_1 has despawned") : 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: if st.getQuestTimer("Archon Hellisha has despawned") : st.getQuestTimer("Archon Hellisha has despawned").cancel() self.DeleteSpawn(st,st.getInt("Archon")) st.set("spawned","0") return