mob = st.addSpawn(ABYSS_JEWEL3, 180000) elif npcId == ABYSS_JEWEL1: self.cancelQuestTimer("Jewel1_Timer1", npc, None) self.cancelQuestTimer("Jewel1_Timer2", npc, None) elif npcId == ABYSS_JEWEL2: self.cancelQuestTimer("Jewel2_Timer1", npc, None) self.cancelQuestTimer("Jewel2_Timer2", npc, None) return QUEST = Quest(337, qn, "Audience With The Land Dragon") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(GABRIELLE) QUEST.addAttackId(ABYSS_JEWEL1) QUEST.addAttackId(ABYSS_JEWEL2) QUEST.addAttackId(ABYSS_JEWEL3) for npc in NPCS: QUEST.addTalkId(npc) for mob in MOBS: QUEST.addKillId(mob) for i in range(3852, 3865) + [3890]: STARTED.addQuestDrop(GABRIELLE, i, 1)
st.playSound("ItemSound.quest_middle") if st.getQuestItemsCount( BROKEN_BLADE_TOP_ID) and st.getQuestItemsCount( BROKEN_BLADE_BOTTOM_ID): st.set("cond", "3") return QUEST = Quest(101, qn, "Sword Of Solidarity Quest") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30008) QUEST.addTalkId(30008) QUEST.addTalkId(30283) QUEST.addKillId(20361) QUEST.addKillId(20362) STARTED.addQuestDrop(30283, ALLTRANS_NOTE_ID, 1) STARTED.addQuestDrop(30283, HOWTOGO_RUINS_ID, 1) STARTED.addQuestDrop(20362, BROKEN_BLADE_TOP_ID, 1) STARTED.addQuestDrop(20361, BROKEN_BLADE_TOP_ID, 1) STARTED.addQuestDrop(20362, BROKEN_BLADE_BOTTOM_ID, 1) STARTED.addQuestDrop(20361, BROKEN_BLADE_BOTTOM_ID, 1) STARTED.addQuestDrop(30008, ROIENS_LETTER_ID, 1) STARTED.addQuestDrop(30008, BROKEN_SWORD_HANDLE_ID, 1)
st.giveItems(LETTER_TO_DARKELF_ID, 1) st.playSound("ItemSound.quest_itemget") if st.getQuestItemsCount( HATOSS_ORDER3_ID) and st.getQuestItemsCount( LETTER_TO_ELF_ID) == 0: st.giveItems(LETTER_TO_ELF_ID, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(107, qn, "Merciless Punishment") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30568) QUEST.addTalkId(30568) QUEST.addTalkId(30580) QUEST.addKillId(27041) STARTED.addQuestDrop(30568, HATOSS_ORDER2_ID, 1) STARTED.addQuestDrop(27041, LETTER_TO_DARKELF_ID, 1) STARTED.addQuestDrop(27041, LETTER_TO_HUMAN_ID, 1) STARTED.addQuestDrop(27041, LETTER_TO_ELF_ID, 1) STARTED.addQuestDrop(30568, HATOSS_ORDER1_ID, 1) STARTED.addQuestDrop(30568, HATOSS_ORDER3_ID, 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
def onKill(self, npc, player, isPet): npcId = npc.getNpcId() partyMember = self.getRandomPartyMember(player, "2") if (partyMember and npcId != ARANEID): drop(partyMember, NECKLACE[npcId]) else: partyMember = self.getRandomPartyMember(player, "4") if (partyMember and npcId != M_LIZARDMAN): drop(partyMember, DROPLIST[npcId]) return QUEST = Quest(39, qn, "Red Eyed Invaders") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(BABENCO) QUEST.addTalkId(BABENCO) QUEST.addTalkId(BATHIS) QUEST.addKillId(M_LIZARDMAN) QUEST.addKillId(M_LIZARDMAN_SCOUT) QUEST.addKillId(M_LIZARDMAN_GUARD) QUEST.addKillId(ARANEID) for item in range(7178, 7182): STARTED.addQuestDrop(BABENCO, item, 1)
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.takeItems(GOBLIN_CLUB,-1) htmltext = "31853-05.htm" else: htmltext = "31853-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 : st.giveItems(GOBLIN_CLUB,1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(267,qn,"Wrath Of Verdure") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(31853) QUEST.addTalkId(31853) QUEST.addKillId(20325) STARTED.addQuestDrop(20325,GOBLIN_CLUB,1)
QUEST = Quest(418, qn, "Path To Artisan") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30527) QUEST.addTalkId(30527) QUEST.addTalkId(30298) QUEST.addTalkId(30317) QUEST.addKillId(20017) QUEST.addKillId(20389) QUEST.addKillId(20390) STARTED.addQuestDrop(30527, SILVERYS_RING, 1) STARTED.addQuestDrop(20389, RATMAN_TOOTH, 1) STARTED.addQuestDrop(20390, BIG_RATMAN_TOOTH, 1) STARTED.addQuestDrop(30527, PASS_1ST, 1) STARTED.addQuestDrop(30298, PASS_2ND, 1) STARTED.addQuestDrop(30298, SECRET_BOX2, 1) STARTED.addQuestDrop(30527, PASS_1ST, 1) STARTED.addQuestDrop(30298, PASS_2ND, 1) STARTED.addQuestDrop(30298, SECRET_BOX2, 1) STARTED.addQuestDrop(30317, KLUTOS_LETTER, 1) STARTED.addQuestDrop(20017, SECRET_BOX1, 1) STARTED.addQuestDrop(30298, FOOTPRINT, 1)
return QUEST = Quest(230, qn, "Test Of Summoner") CREATED = State('Start', QUEST) PROGRESS = State('Progress', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(NPC[1]) # adds all npcs, mobs to the progress state for npcId in NPC: QUEST.addTalkId(npcId) for mobId in DROPLIST_LARA.keys(): QUEST.addKillId(mobId) for mobId in DROPLIST_SUMMON.keys(): QUEST.addKillId(mobId) QUEST.addAttackId(mobId) #for summonId in PLAYER_SUMMONS: # PROGRESS.addKillId(summonId) # this will add the player to the list of notified objects in onDeath Part #addNotifyOfDeath(st.getPlayer()) #This is just to formal add the drops, in case that a player abort this quest.. the items should disappear STARTED = State('Started', QUEST) for item in range(3337, 3390): STARTED.addQuestDrop(30063, item, 1)
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)
st = player.getQuestState(qn) if not st: return if st.getState() != STARTED: return npcId = npc.getNpcId() if npcId == 20521: if st.getInt( "cond") == 1 and st.getQuestItemsCount(STARSTONE2_ID) < 20: if st.getRandom(2) == 0: st.giveItems(STARSTONE2_ID, 1) if st.getQuestItemsCount(STARSTONE2_ID) == 20: st.playSound("ItemSound.quest_middle") st.set("cond", "2") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(297, qn, "Gatekeepers Favor") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30540) QUEST.addTalkId(30540) QUEST.addKillId(20521) STARTED.addQuestDrop(20521, STARSTONE2_ID, 1)
count = st.getQuestItemsCount(DESTROYED_GOLEM_SHARD) if cond == 1 and count < 500: chance = DROP_CHANCE * Config.RATE_DROP_QUEST numItems, chance = divmod(chance, 100) if st.getRandom(100) < chance: numItems += 1 if numItems: if count + numItems >= 500: numItems = 500 - count st.playSound("ItemSound.quest_middle") st.set("cond", "2") else: st.playSound("ItemSound.quest_itemget") st.giveItems(DESTROYED_GOLEM_SHARD, int(numItems)) return QUEST = Quest(647, qn, "Influx of Machines") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(32069) QUEST.addTalkId(32069) for i in range(22052, 22079): QUEST.addKillId(i) STARTED.addQuestDrop(32069, DESTROYED_GOLEM_SHARD, 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)
def onKill(self, npc, player, isPet): partyMember = self.getRandomPartyMemberState(player, STARTED) st = player.getQuestState(qn) if st: if st.getState() == STARTED: numItems = int( (npc.getLevel() * 0.15 + 1.6) * Config.RATE_DROP_QUEST) if st.getRandom(100) >= 10: numItems = 0 if numItems > 0: st.giveItems(DIMENSION_FRAGMENT_ID, numItems) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(634, qn, "In Search of Dimensional Fragments") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) for npcId in range(31494, 31508): QUEST.addTalkId(npcId) QUEST.addStartNpc(npcId) for mobs in range(21208, 21256): QUEST.addKillId(mobs) STARTED.addQuestDrop(7079, DIMENSION_FRAGMENT_ID, 1)
if item != 0 and numItems >= 1: prevItems = st.getQuestItemsCount(item) if count > prevItems: if count <= (prevItems + numItems): #100 is maximum numItems = count - prevItems st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") st.giveItems(item, int(numItems)) return QUEST = Quest(628, qn, "Hunt of the Golden Ram Mercenary Force") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(KAHMAN) QUEST.addTalkId(KAHMAN) QUEST.addTalkId(ABERCROMBIE) QUEST.addTalkId(SELINA) for mob in range(21508, 21518): QUEST.addKillId(mob) for item in range(7246, 7250): STARTED.addQuestDrop(KAHMAN, item, 1)
if random == CHANCE_barrel: st.giveItems(BARREL_OF_LEAGUE, 1) st.set("cond", "2") elif st.getRandom(100) < 4: st.giveItems(BARREL_OF_LEAGUE, 1) st.playSound("ItemSound.quest_itemget") st.set("cond", "2") return QUEST = Quest(351, qn, "Black Swan") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30916) QUEST.addTalkId(30916) QUEST.addTalkId(30969) QUEST.addTalkId(30897) STARTED.addQuestDrop(30916, ORDER_OF_GOSTA, 1) STARTED.addQuestDrop(30916, BARREL_OF_LEAGUE, 1) STARTED.addQuestDrop(30916, LIZARD_FANG, 1) QUEST.addKillId(20784) QUEST.addKillId(20785) QUEST.addKillId(21639) QUEST.addKillId(21640) QUEST.addKillId(21642) QUEST.addKillId(21643)
CREATED = State('Start', QUEST) STARTED = State('started', QUEST) #Following states kept for backwards compatibility only. MIDDLE = State('middle', QUEST) END = State('end', QUEST) COMPLETED = State('completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(ALCHEMIST_MATILD) QUEST.addTalkId(ALCHEMIST_MATILD) QUEST.addTalkId(TORAI) QUEST.addTalkId(RUPINA) QUEST.addTalkId(WISDOM_CHEST) QUEST.addKillId(SECRET_KEEPER_TREE) for mob in DROPLIST.keys(): QUEST.addKillId(mob) STARTED.addQuestDrop(mob, DROPLIST[mob][0], 1) QUEST.addKillId(SUCCUBUS_OF_SEDUCTION) QUEST.addKillId(GRIMA) QUEST.addKillId(SANCHES) QUEST.addKillId(RAMSEBALIUS) QUEST.addKillId(BONAPARTERIUS) QUEST.addKillId(GREAT_DEMON_KING) for item in range(3678, 3683): STARTED.addQuestDrop(ALCHEMIST_MATILD, item, 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)
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 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)
else: htmltext = "30078-03.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() cond = st.getInt("cond") if cond == 1: st.dropQuestItems(BEAR_SKIN, 1, 20, CHANCE, 1) return QUEST = Quest(341, qn, "Hunting For Wild Beasts") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30078) QUEST.addTalkId(30078) STARTED.addQuestDrop(30078, BEAR_SKIN, 1) QUEST.addKillId(20021) QUEST.addKillId(20203) QUEST.addKillId(20310) QUEST.addKillId(20335)
st = player.getQuestState(qn) if st: if npcId == SOUL_OF_WELL: self.well = 0 elif npcId in MOBS: if st.getRandom(10) < 1 and st.getQuestItemsCount(SKULL) < 1: st.giveItems(SKULL, 1) st.playSound("ItemSound.quest_itemget") st.set("cond", "5") return QUEST = Quest(22, qn, "Tragedy In Von Hellmann Forest") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(INNOCENTIN) QUEST.addStartNpc(TIFAREN) for npcid in NPCS: QUEST.addTalkId(npcid) for item in range(7141, 7148): STARTED.addQuestDrop(INNOCENTIN, item, 1) QUEST.addAttackId(SOUL_OF_WELL) for mobid in MOBS + [SOUL_OF_WELL]: QUEST.addKillId(mobid)
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)
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)
# no longer participate in the party-quest pool for this item) if st.getQuestItemsCount(FLARE_SHARD) == max: st.unset("awaitsFlare") elif st.getQuestItemsCount(FREEZING_SHARD) == max: st.unset("awaitsFreezing") if st.getQuestItemsCount(FLARE_SHARD) == st.getQuestItemsCount( FREEZING_SHARD) == max: st.set("cond", str(cond + 1)) st.playSound("ItemSound.quest_middle") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(369, qn, "Collector of Jewels") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(NELL) QUEST.addTalkId(NELL) for mob in DROPLIST_FREEZE.keys(): QUEST.addKillId(mob) for mob in DROPLIST_FLARE.keys(): QUEST.addKillId(mob) STARTED.addQuestDrop(NELL, FLARE_SHARD, 1) STARTED.addQuestDrop(NELL, FREEZING_SHARD, 1)
item, chance = DROPLIST[npc.getNpcId()] if st.getRandom(100) < chance: st.giveItems(item, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(326, qn, "Vanquish Remnants") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30435) QUEST.addTalkId(30435) QUEST.addKillId(20436) QUEST.addKillId(20437) QUEST.addKillId(20438) QUEST.addKillId(20439) QUEST.addKillId(20053) QUEST.addKillId(20058) QUEST.addKillId(20061) QUEST.addKillId(20063) QUEST.addKillId(20066) STARTED.addQuestDrop(20053, RED_CROSS_BADGE, 1) STARTED.addQuestDrop(20061, BLUE_CROSS_BADGE, 1) STARTED.addQuestDrop(20066, BLACK_CROSS_BADGE, 1)
if st.getState() != STARTED : return count=st.getQuestItemsCount(FLOATING_STONE) if count < 50 : if st.getRandom(100) < 25 and count < 49 : st.giveItems(FLOATING_STONE,2) else: st.giveItems(FLOATING_STONE,1) if count == 49 : st.playSound("ItemSound.quest_middle") st.set("cond","2") else: st.playSound("ItemSound.quest_itemget") return QUEST = Quest(295,qn,"Dreams Of Flight") CREATED = State('Start', QUEST) STARTING = State('Starting', QUEST) STARTED = State('Started', QUEST) COMPLETED = State('Completed', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(30536) QUEST.addTalkId(30536) QUEST.addKillId(20153) STARTED.addQuestDrop(20153,FLOATING_STONE,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)
else: htmltext = "600.htm" #TODO: This is custom, need to get official text from retail else: htmltext = "600.htm" #TODO: This is custom, need to get official text from retail elif id == STARTED: htmltext = "400.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 and st.getInt("cond") == 1: if st.getRandom(100) < CHANCE: st.giveItems(DREAM_FRAGMENT_ID, 1) st.playSound("ItemSound.quest_itemget") return QUEST = Quest(650, qn, "A Broken Dream") CREATED = State('Start', QUEST) STARTED = State('Started', QUEST) QUEST.setInitialState(CREATED) QUEST.addStartNpc(GHOST) QUEST.addTalkId(GHOST) QUEST.addKillId(CREWMAN) QUEST.addKillId(VAGABOND) STARTED.addQuestDrop(CREWMAN, DREAM_FRAGMENT_ID, 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)