def onKill(self, npc, player, isPet): st = player.getQuestState(qn) if not st: return if st.getState() != State.STARTED: return npcId = npc.getId() cond = st.getInt("cond") if npcId == Angel and cond == 12: st.set("angel", "1") self.isAngelSpawned = 0 npc.broadcastPacket( NpcSay(npc.getObjectId(), 0, npc.getId(), "Grr. I've been hit...")) if self.isKatenarSpawned == 0: katenar = st.addSpawn(32242, 36110, 191921, -3712, 60000) katenar.broadcastPacket( NpcSay(katenar.getObjectId(), 0, katenar.getId(), "I am late!")) self.isKatenarSpawned == 1 self.startQuestTimer("katenar_cleanup", 60000, katenar, player) if npcId == Wyrm and st.getQuestItemsCount( Heart) < 10 and cond == 15 and self.getRandom(100) <= 25: if st.getQuestItemsCount(Heart) == 9: st.giveItems(Heart, 1) st.set("cond", "16") st.playSound("ItemSound.quest_middle") else: st.giveItems(Heart, 1) st.playSound("ItemSound.quest_itemget") return
def onKill(self, npc, player, isPet) : st = player.getQuestState(qn) if not st : return if npc.getNpcId() == SHILENSEVIL and st.getInt("cond") == 4 : npc.broadcastPacket(NpcSay(npc.getObjectId(),0,npc.getNpcId(),"「" + player.getName() + "」!現在我就讓你一步..不過,我一定會抓到你的。")) npc.broadcastPacket(NpcSay(32569,0,32569,"很好,「" + player.getName() + "」。很高興能幫得上你。")) st.giveItems(SCULPTURE, 1) st.set("cond", "5") st.playSound("ItemSound.quest_middle") return
def onAttack(self, npc, player, damage, isPet, skill): objId = npc.getObjectId() if self.FirstAttacked: if Rnd.get(4): return npc.broadcastPacket( NpcSay(objId, 0, npc.getNpcId(), "幾乎無人防守的後方是你的!")) else: self.FirstAttacked = True if Rnd.get(4): return npc.broadcastPacket(NpcSay(objId, 0, npc.getNpcId(), "我一定會回來!")) return
def onAdvEvent (self, event, npc, player) : if event == "CheckTrustP": if self.trustp >= 500000: HellboundManager.getInstance().changeLevel(11) self.trustp = 0 self.saveGlobalQuestVar("trust10p", str(self.trustp)) self.cancelQuestTimers("CheckTrustP") elif event == "keySpawn1" or event == "keySpawn2": self.startQuestTimer("keySpawn2", 300000, None, None) loc = LOCS[Rnd.get(len(LOCS))] self.keymaster.teleToLocation(loc[0],loc[1],loc[2]) if event == "keySpawn1": self.startQuestTimer("keySpawn2", 300000, None, None) else: self.startQuestTimer("keySpawn1", 300000, None, None) elif event == "decayNpc": npc.decayMe() elif event == "NATIVESay": world = self.worlds[npc.getInstanceId()] npc.broadcastPacket(NpcSay(22450, 0, 22450, "我會...將...全部...打死...!")) npc.broadcastPacket(NpcSay(22450, 0, 22450, "我會...將...全部...打死...!")) npc.broadcastPacket(NpcSay(22450, 0, 22450, "我會...將...全部...打死...!")) elif event == "freeprisoner": world = self.worlds[npc.getInstanceId()] sayNpc = npc.getObjectId() npc.broadcastPacket(NpcSay(sayNpc, 0, npc.getNpcId(), "多謝幫助!看守者馬上就要來了快躲起來...")) self.startQuestTimer("decayNpc", 15000, npc, None) chance = Rnd.get(100) if chance <= 30: if not world.guardsSpawned: callGuards(self,npc,player,world) world.guardsSpawned = True npc.broadcastPacket(NpcSay(22359, 0, 22359, "發.現.入.侵.者...!")) hellboundLevel = HellboundManager.getInstance().getLevel() if hellboundLevel == 10: HellboundManager.getInstance().increaseTrust(50) self.trustp += 50 self.saveGlobalQuestVar("trust10p", str(self.trustp)) elif event == "key": world = self.worlds[npc.getInstanceId()] if not world.instanceFinished: key = player.getInventory().getItemByItemId(KEY); if key != None: world.instanceFinished = True player.destroyItemByItemId("Moonlight Stone", KEY, 1, player, True); instance = InstanceManager.getInstance().getInstance(npc.getInstanceId()) if instance != None: instance.setDuration(30000) instance.setReturnTeleport(ReturnPort[dataIndex][0],ReturnPort[dataIndex][1],ReturnPort[dataIndex][2]) else : return "32343-2.htm" else : return "32343-1.htm" return
def onAdvEvent(self, event, npc, player): htmltext = event st = player.getQuestState(qn) if not st: return if event == "30191-02.htm": st.set("cond", "1") st.setState(State.STARTED) st.giveItems(JACOB_NECK, 1) st.playSound("ItemSound.quest_accept") elif event == "32569-05.htm": st.set("cond", "2") st.takeItems(JACOB_NECK, 1) st.playSound("ItemSound.quest_middle") elif event == "32570-02.htm": st.set("cond", "3") st.giveItems(DEADMANS_HERB, 1) st.playSound("ItemSound.quest_middle") elif event.isdigit(): if int(event) == 9: st.takeItems(DEADMANS_HERB, 1) st.set("cond", "4") st.playSound("ItemSound.quest_middle") player.showQuestMovie(int(event)) return "" elif event == "32569-09.htm": npc.broadcastPacket( NpcSay(npc.getObjectId(), 0, npc.getNpcId(), player.getName() + "! That stranger must be defeated!")) monster = self.addSpawn(SHILENSEVIL, 82624, 47422, -3220, 0, False, 60000, True) monster.broadcastPacket( NpcSay(monster.getObjectId(), 0, monster.getNpcId(), "You are not the owner of that item!")) monster.setRunning() monster.addDamageHate(player, 0, 999) monster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, st.getPlayer()) elif event == "32569-13.htm": st.set("cond", "6") st.takeItems(SCULPTURE, 1) st.playSound("ItemSound.quest_middle") elif event == "30760-02.htm": st.addExpAndSp(52518015, 5817677) st.unset("cond") st.setState(State.COMPLETED) st.exitQuest(False) st.playSound("ItemSound.quest_finish") return htmltext
def onAdvEvent(self, event, npc, player) : htmltext = event st = player.getQuestState(qn) if not st : return if event == "32593-02.htm" : st.set("cond","1") st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") elif event == "32597-10.htm" : st.set("cond","3") st.takeItems(SCULPTURE, 1) st.playSound("ItemSound.quest_middle") elif event == "32597-05.htm" : monster = self.addSpawn(SHILENSEVIL1, -23801, -9004, -5385, 0, False, 0, False, npc.getInstanceId()) monster.broadcastPacket(NpcSay(monster.getObjectId(),0,monster.getNpcId(),"You are not the owner of that item!")) monster.setRunning() monster.addDamageHate(player,0,999) monster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, st.getPlayer()) monster1 = self.addSpawn(SHILENSEVIL2, -23801, -9004, -5385, 0, False, 0, False, npc.getInstanceId()) monster1.setRunning() monster1.addDamageHate(player,0,999) monster1.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, st.getPlayer()) monster2 = self.addSpawn(SHILENSEVIL2, -23801, -9004, -5385, 0, False, 0, False, npc.getInstanceId()) monster2.setRunning() monster2.addDamageHate(player,0,999) monster2.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, st.getPlayer()) return htmltext
def onTalk(self, npc, player): st = player.getQuestState(qn) npcId = npc.getNpcId() if not st: return ################### # Start Locations # ################### if TELEPORTERS.has_key(npcId): random_id = st.getRandom(len(ISLE_LOCS)) x, y, z = ISLE_LOCS[random_id][0], ISLE_LOCS[random_id][ 1], ISLE_LOCS[random_id][2] st.getPlayer().teleToLocation(x, y, z) st.setState(State.STARTED) st.set("id", str(TELEPORTERS[npcId])) ################ # Fantasy Isle # ################ elif npcId == PADDIES: if st.getState() == State.STARTED and st.getInt("id"): # back to start location return_id = st.getInt("id") - 1 st.getPlayer().teleToLocation(RETURN_LOCS[return_id][0], RETURN_LOCS[return_id][1], RETURN_LOCS[return_id][2]) st.unset("id") else: # no base location founded (player swimmed) player.sendPacket( NpcSay( npc.getObjectId(), 0, npc.getNpcId(), "You've arrived here from a different way. I'll send you to Rune Township which is the nearest town." )) st.getPlayer().teleToLocation(43835, -47749, -792) st.exitQuest(1) return
def onTalk(self, npc, player): st = player.getQuestState(qn) npcId = npc.getNpcId() if not st: return ################### # Start Locations # ################### if TELEPORTERS.has_key(npcId): st.getPlayer().teleToLocation(12661, 181687, -3560) st.setState(State.STARTED) st.set("id", str(TELEPORTERS[npcId])) ############################ # Monster Derby Race Track # ############################ elif npcId == RACE_MANAGER: if st.getState() == State.STARTED and st.getInt("id"): # back to start location return_id = st.getInt("id") - 1 if return_id < 13: st.getPlayer().teleToLocation(RETURN_LOCS[return_id][0], RETURN_LOCS[return_id][1], RETURN_LOCS[return_id][2]) st.unset("id") else: # no base location player.sendPacket( NpcSay( npc.getObjectId(), 0, npc.getNpcId(), "You've arrived here from a different way. I'll send you to Dion Castle Town which is the nearest town." )) st.getPlayer().teleToLocation(15670, 142983, -2700) st.exitQuest(1) return
def onKill(self,npc,player,isPet) : leaderst = leader(player) if not leaderst : return if not leaderst.getState() == State.STARTED : if DEBUG : print "onKill says leader needs to start quest" return "Need to start quest!" return part = leaderst.getInt("part") npcId = npc.getNpcId() if npcId in CHESTS and part == 4 : wins = leaderst.getInt("chest_wins") if (self.chests - wins) == 12 or (wins < 4 and not leaderst.getRandom(4)) : wins += 1 leaderst.set("chest_wins",str(wins)) npc.broadcastPacket(NpcSay(npc.getObjectId(),0,npc.getNpcId(),"###### BINGO! ######")) self.chests += 1 elif npcId in MOBS.keys() : st = player.getQuestState(qn) if not st : st = self.newQuestState(player) if st == leaderst : return if part >=3 and part < 6 : if not st.getRandom(10) : st.giveItems(MOBS[npcId],1) st.playSound("ItemSound.quest_itemget") elif DEBUG : print "onKill says leader is not correct state"+str(part) return "leader is not correct state" return
def onAttack(self, npc, player, damage, isPet, skill): st = player.getQuestState(qn) npcId = npc.getNpcId() objId = npc.getObjectId() maxHp = npc.getMaxHp() nowHp = npc.getStatus().getCurrentHp() if npcId == AMASKARI: if (nowHp < maxHp * 0.1): if self.Lock == 0: npc.broadcastPacket(CreatureSay(objId, 0, npc.getName(), "我將讓大家和我一樣的痛苦!")) self.Lock = 1 elif npcId == KEYMASTER : if not self.keymasterattacked: self.keymasterattacked = True self.amaskari.teleToLocation(player.getX(),player.getY(),player.getZ()) self.amaskari.setTarget(player) objId = self.amaskari.getObjectId() self.amaskari.broadcastPacket(NpcSay(objId, 0, self.amaskari.getNpcId(), AMASKARI_TEXT[Rnd.get(len(AMASKARI_TEXT))])) self.startQuestTimer("NATIVESay", 5000, npc, None) elif npcId == NATIVE : if self.NATIVELock == 0: npc.broadcastPacket(CreatureSay(objId, 0, npc.getName(), "嘿...好痛...好痛...啊!")) self.NATIVELock = 1 if self.worlds.has_key(npc.getInstanceId()): world = self.worlds[npc.getInstanceId()] return
def onTalk(self, npc, player): st = player.getQuestState(qn) npcId = npc.getNpcId() if not st: return ################### # Start Locations # ################### if TELEPORTERS.has_key(npcId): st.getPlayer().teleToLocation(12661, 181687, -3560) st.setState(State.STARTED) st.set("id", str(TELEPORTERS[npcId])) ############################ # Monster Derby Race Track # ############################ elif npcId == RACE_MANAGER: if st.getState() == State.STARTED and st.getInt("id"): # back to start location return_id = st.getInt("id") - 1 if return_id < 13: st.getPlayer().teleToLocation(RETURN_LOCS[return_id][0], RETURN_LOCS[return_id][1], RETURN_LOCS[return_id][2]) st.unset("id") else: # no base location player.sendPacket( NpcSay(npc.getObjectId(), 0, npc.getNpcId(), "你是用其它的方法來到這裡,因此將傳送到最近的魯因城鎮。")) st.getPlayer().teleToLocation(15670, 142983, -2700) st.exitQuest(1) return
def onTalk(self, npc, player): st = player.getQuestState(qn) npcId = npc.getNpcId() if not st: return ################### # Start Locations # ################### if TELEPORTERS.has_key(npcId): random_id = st.getRandom(len(ISLE_LOCS)) x, y, z = ISLE_LOCS[random_id][0], ISLE_LOCS[random_id][ 1], ISLE_LOCS[random_id][2] st.getPlayer().teleToLocation(x, y, z) st.setState(State.STARTED) st.set("id", str(TELEPORTERS[npcId])) ################ # Fantasy Isle # ################ elif npcId == PADDIES: if st.getState() == State.STARTED and st.getInt("id"): # back to start location return_id = st.getInt("id") - 1 st.getPlayer().teleToLocation(RETURN_LOCS[return_id][0], RETURN_LOCS[return_id][1], RETURN_LOCS[return_id][2]) st.unset("id") else: # no base location founded (player swimmed) player.sendPacket( NpcSay(npc.getObjectId(), 0, npc.getNpcId(), "你是用其它的方法來到這裡,因此將傳送到最近的魯因城鎮。")) st.getPlayer().teleToLocation(43835, -47749, -792) st.exitQuest(1) return
def onKill(self, npc, player, isPet): npcId = npc.getNpcId() objId = npc.getObjectId() if npcId == KEYMASTER: HellboundManager.getInstance().increaseTrust(250) self.trustp += 250 self.saveGlobalQuestVar("trust10p", str(self.trustp)) chance = Rnd.get(100) if chance <= 75: npc.broadcastPacket(NpcSay(objId, 0, npc.getNpcId(), "我的天呀!我.的..鑰...匙.......")) dropItem(player,npc,9714,1) else: npc.broadcastPacket(NpcSay(objId, 0, npc.getNpcId(), "你永遠都不能得到我的..鑰匙!")) if npcId == AMASKARI: if HellboundManager.getInstance().getLevel() <= 11: HellboundManager.getInstance().increaseTrust(500) self.trustp += 500 self.saveGlobalQuestVar("trust10p", str(self.trustp)) try: if self.Slaves[objId][0] != "noSlaves": for i in self.Slaves[objId]: try: i.setIsInvul(1) i.broadcastPacket(CreatureSay(i.getObjectId(), 0, i.getName(), "謝謝你救我!")) i.decayMe() except: pass self.Slaves[objId] = [] except: pass if npcId == NATIVE: HellboundManager.getInstance().increaseTrust(-10) self.trustp -= 10 self.saveGlobalQuestVar("trust10p", str(self.trustp)) self.Lock = 0 if npcId == PRISONER: HellboundManager.getInstance().increaseTrust(-10) self.trustp -= 10 self.saveGlobalQuestVar("trust10p", str(self.trustp)) if npcId in LIST: HellboundManager.getInstance().increaseTrust(20) self.trustp += 20 self.saveGlobalQuestVar("trust10p", str(self.trustp)) if self.worlds.has_key(npc.getInstanceId()): world = self.worlds[npc.getInstanceId()] return
def onKill(self, npc, player, isPet) : st = player.getQuestState(qn) if not st : return if npc.getNpcId() == SHILENSEVIL and st.getInt("cond") == 4 : npc.broadcastPacket(NpcSay(npc.getObjectId(),0,npc.getNpcId(),player.getName() + "... You may have won this time... But next time, I will surely capture you!")) st.giveItems(SCULPTURE, 1) st.set("cond", "5") return
def myAddSpawn(self, npc, player, damage): # npc 用作召喚位置, player 被仇恨的玩家 n = self.addSpawn(self.NPCs[Rnd.get(len(self.NPCs))], npc, False) n.addDamageHate(player, 0, damage * 1000 / (player.getLevel() + 7)) n.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player) npc.broadcastPacket( NpcSay( n.getObjectId(), 0, n.getNpcId(), self.npc_spawn_say[Rnd.get( len(self.npc_spawn_say))].replace('%player_name%', player.getName())))
def onKill(self,npc,player,isPet): st = player.getQuestState(qn) if not st: return npcId = npc.getNpcId() if st.getState() == State.STARTED and st.getInt("cond") == 10: if npcId == Guardian : npc.broadcastPacket(NpcSay(npc.getObjectId(), 0, npcId, NpcStringId.THIS_ENEMY_IS_FAR_TOO_POWERFUL_FOR_ME_TO_FIGHT_I_MUST_WITHDRAW)) st.set("cond","11") st.playSound("ItemSound.quest_middle")
def onAttack(self, npc, player, damage, isPet, skill): objId = npc.getObjectId() if self.FirstAttacked: if Rnd.get(50): return npc.broadcastPacket( NpcSay( objId, 0, npc.getNpcId(), "Brother " + player.getName() + ", move your weapon away!!")) else: self.FirstAttacked = True return
def onAdvEvent (self,event,npc,pc) : if event == "timer_check" : sayNpc = self.addSpawn(self.SHADAI,9041,253010,-1938,49909,False,2410000) autochat(sayNpc,"誰會成為今晚的幸運兒呢?哈哈!真是好奇,真是好奇!") self.startQuestTimer("REPORT1",600000, sayNpc, None) elif event in REPORTS.keys() : check,report,nextEvent=REPORTS[event] self.isCheck = check npc.broadcastPacket(NpcSay(npc.getObjectId(),1,npc.getNpcId(),report)) self.startQuestTimer(nextEvent,600000, npc, None) return
def onKill(self,npc,player,isPet): st = player.getQuestState(qn) if not st : return if st.getState() != State.STARTED : return if st.getInt("cond") == 7: st.playSound("ItemSound.quest_itemget") st.set("cond","8") npc.broadcastPacket(NpcSay(npc.getObjectId(), 0, npc.getId(), "You've ended my immortal life! You've protected by the feudal lord, aren't you?")) st.giveItems(TotemDoll,1) st.set("step","2") return
def onKill(self, npc, player, isPet): st = player.getQuestState(qn) if not st: return npcId = npc.getNpcId() if st.getState() == State.STARTED and st.getInt("cond") == 10: if npcId == Guardian: npc.broadcastPacket( NpcSay(npc.getObjectId(), 0, npcId, "敵人比想像中更加強悍,無法戰鬥,還是先退下了。")) st.set("cond", "11") st.playSound("ItemSound.quest_middle")
def onKill(self, npc, player, isPet): st = player.getQuestState(qn) if not st: return npcId = npc.getNpcId() if st.getState() == State.STARTED and st.getInt("cond") == 10: if npcId == Guardian: npc.broadcastPacket( NpcSay( npc.getObjectId(), 0, npcId, "This enemy is far too powerful for me to fight. I must withdraw" )) st.set("cond", "11") st.playSound("ItemSound.quest_middle")
def onAdvEvent(self, event, npc, player): htmltext = event st = player.getQuestState(qn) if not st: return if event == "31328-02.htm": # call 31328-03.htm st.giveItems(MapForestofDeadman, 1) st.giveItems(SilverKey, 1) st.set("cond", "1") st.playSound("ItemSound.quest_accept") st.setState(State.STARTED) elif event == "31328-03.htm": # call 31328-05.htm and 31328-06.htm st.set("cond", "2") st.playSound("ItemSound.quest_middle") elif event == "31526-05.htm": # called by 31526-03.htm for hairpin if st.getQuestItemsCount(LidiaHairPin) == 0: st.giveItems(LidiaHairPin, 1) # give hairpin if st.getQuestItemsCount( LidiaDiary) != 0: # if has diary cond = 4 st.set("cond", "4") st.playSound("ItemSound.quest_middle") elif event == "31526-11.htm": # called by 31526-07 for diary if st.getQuestItemsCount(LidiaDiary) == 0: st.giveItems(LidiaDiary, 1) if st.getQuestItemsCount( LidiaHairPin) != 0: # if has hairpin cond = 4 st.set("cond", "4") st.playSound("ItemSound.quest_middle") elif event == "31328-19.htm": # end of questions loop go to ghost st.set("cond", "6") st.playSound("ItemSound.quest_middle") elif event == "31524-04.htm": # sends you to the tombstone to dig st.set("cond", "7") st.playSound("ItemSound.quest_middle") st.takeItems(LidiaDiary, -1) elif event == "31523-02.htm": st.playSound("SkillSound5.horror_02") ghost = st.addSpawn(31524, 51432, -54570, -3136, 1800000) ghost.broadcastPacket( NpcSay(ghost.getObjectId(), 0, ghost.getNpcId(), "是誰叫醒我。")) elif event == "31523-05.htm": st.startQuestTimer("ghost_timer", 10000) elif event == "ghost_timer": st.set("cond", "8") htmltext = "31523-06.htm" st.giveItems(SilverKey, 1) elif event == "31530-02.htm": # box gives spear takes key st.set("cond", "10") st.playSound("ItemSound.quest_middle") st.takeItems(SilverKey, -1) st.giveItems(SilverSpear, 1) return htmltext
def onAdvEvent(self, event, npc, player): htmltext = event st = player.getQuestState(qn) if not st: return if event == "30969-05.htm": st.set("cond", "1") st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") elif event == "32598-02.htm": st.giveItems(STAFF, 1) st.playSound("ItemSound.quest_middle") elif event == "30969-11.htm": st.set("cond", "6") st.playSound("ItemSound.quest_middle") elif event == "32584-05.htm": st.set("cond", "2") st.giveItems(STONE, 1) st.playSound("ItemSound.quest_middle") elif event == "32586-06.htm": st.set("cond", "4") st.takeItems(STONE, 1) st.giveItems(SWORD, 1) st.giveItems(WATER, 1) st.playSound("ItemSound.quest_middle") elif event == "32586-12.htm": st.set("cond", "5") st.takeItems(SEAL, 4) st.takeItems(SWORD, 1) st.takeItems(WATER, 1) st.takeItems(STAFF, 1) st.playSound("ItemSound.quest_middle") elif event == "32593-02.htm": st.addExpAndSp(52518015, 5817676) st.unset("cond") st.setState(State.COMPLETED) st.exitQuest(False) st.playSound("ItemSound.quest_finish") elif event == "30969-06.htm": if not self.mammon: npc = st.addSpawn(MAMMON, 60000) self.mammon = 1 st.startQuestTimer("Despawn_Mammon", 60000) npc.broadcastPacket( NpcSay(npc.getObjectId(), 0, npc.getNpcId(), "Who dares summon the Merchant of Mammon?!")) elif event == "Despawn_Mammon": self.mammon = 0 return return htmltext
def onKill(self, npc, player, isPet): self.cancelQuestTimer("npc_cleanup", npc, None) self.isNpcSpawned = 0 st = player.getQuestState(qn) if not st: return if st.getState() != State.STARTED: return npcId = npc.getNpcId() cond = st.getInt("cond") if npcId == 27340 and cond == 1: string = "沒想到會這麼強,我失算了。" npc.broadcastPacket( NpcSay(npc.getObjectId(), 0, npc.getNpcId(), string)) st.giveItems(10867, 1) st.set("cond", "2") st.playSound("ItemSound.quest_middle") return
def onKill(self, npc, player, isPet): # all kill events triggered by the leader occur automatically. # However, kill events that were triggered by members occur via the leader and # only if the leader is online and within a certain distance! leader_st = 0 if player.isClanLeader(): leader_st = player.getQuestState(qn) else: clan = player.getClan() if clan: c_leader = clan.getLeader() if c_leader: leader = c_leader.getPlayerInstance() if leader: if player.isInsideRadius(leader, 1600, 1, 0): leader_st = leader.getQuestState(qn) if leader_st: if leader_st.getState() != State.STARTED: return npcId = npc.getId() condition, maxcount, chance, itemList = DROPLIST[npcId] random = self.getRandom(100) cond = leader_st.getInt("cond") if cond == condition and random < chance: if len(itemList) > 1: stoneRandom = self.getRandom(3) if stoneRandom == 0: if leader_st.getInt("Kurtz") < 4: return else: maxcount *= 4 giveItem(itemList[stoneRandom], maxcount, leader_st) elif len(itemList): giveItem(itemList[0], maxcount, leader_st) else: if npcId == 27181: # Imperial Gravekeeper spawnedNpc = leader_st.addSpawn(30765, 120000) npc.broadcastPacket( NpcSay( spawnedNpc.getObjectId(), 0, spawnedNpc.getId(), "Curse of the gods on the one that defiles the property of the empire!" )) leader_st.set("ImpGraveKeeper", "3") self.ImpGraveKepperStat = 1 else: leader_st.addSpawn(27179) return
def onKill(self,npc,player,isPet): self.cancelQuestTimer("npc_cleanup", None, None) self.isNpcSpawned = 0 st = self.getQuestState(player, False) if not st : return if st.getState() != State.STARTED : return npcId = npc.getId() cond = st.getInt("cond") if npcId == 27340 and cond == 1: string = "You are strong. This was a mistake." if self.getRandom(1): string = "You have good luck. I shall return." npc.broadcastPacket(NpcSay(npc.getObjectId(),0,npc.getId(),string)) st.giveItems(10867,1) st.set("cond","2") st.playSound("ItemSound.quest_middle") return
def onAggroRangeEnter(self, npc, player, isPet): objId = npc.getObjectId() for player in npc.getKnownList().getKnownPlayers().values(): if player.isInsideRadius(npc, 500, False, False): if player.getActiveWeaponItem(): npc.broadcastPacket( NpcSay( objId, 0, npc.getNpcId(), "Brother " + player.getName() + ", move your weapon away!!")) npc.addDamageHate(player, 0, 999) npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player) else: npc.getAggroList().remove(player) npc.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, None, None) return
def onAttack(self, npc, player, damage, isPet, skill) : st = player.getQuestState(qn) if not st: return npcId = npc.getNpcId() for pc, mobId, in self.killedTrees: if pc == player and mobId == npcId: return if isPet and st.getInt("id") < 16: pet = player.getPet() if self.getRandom(100) <= 2 and st.getQuestItemsCount(FT_LEAF) >= 0: st.takeItems(FT_LEAF,1) st.playSound("ItemSound.quest_middle") npc.broadcastPacket(NpcSay(npc.getNpcId(),0,npcId,"gives me spirit leaf...!")) self.killedTrees.append([player,npcId]) if st.getQuestItemsCount(FT_LEAF) == 0 : st.set("id","15") st.set("cond","3") return
def onAdvEvent(self, event, npc, player): htmltext = event st = player.getQuestState(qn) if not st: return if event == "32593-04.htm": st.set("cond", "1") st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") elif event == "30857-04.htm": st.set("cond", "2") st.playSound("ItemSound.quest_middle") elif event == "32594-03.htm": st.set("cond", "3") st.playSound("ItemSound.quest_middle") elif event == "32595-04.htm": monster = self.addSpawn(SHILENSEVIL, 152520, -57685, -3438, 0, False, 60000, True) monster.broadcastPacket( NpcSay(monster.getObjectId(), 0, monster.getNpcId(), "You are not the owner of that item!")) monster.setRunning() monster.addDamageHate(player, 0, 999) monster.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, st.getPlayer()) elif event == "32595-08.htm": st.set("cond", "5") st.playSound("ItemSound.quest_middle") elif event == "32596-04.htm": st.set("cond", "6") st.giveItems(TEXT, 1) st.playSound("ItemSound.quest_middle") elif event == "32593-08.htm": st.addExpAndSp(52518015, 5817676) st.unset("cond") st.takeItems(TEXT, 1) st.takeItems(SCULPTURE, 1) st.setState(State.COMPLETED) st.exitQuest(False) st.playSound("ItemSound.quest_finish") return htmltext
def autochat(npc, text): if npc: npc.broadcastPacket(NpcSay(npc.getObjectId(), 0, npc.getNpcId(), text)) return
def onAdvEvent (self,event,npc, player) : htmltext = event st = player.getQuestState(qn) if not st : return if event == "31961-02.htm" : st.set("cond","22") st.takeItems(Letter,1) st.giveItems(Starstone2,1) st.playSound("ItemSound.quest_middle") if event == "32041-02.htm" : st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") st.set("cond","1") st.set("talk","0") elif event == "32041-06.htm" : st.set("talk","1") elif event == "32041-07.htm" : st.set("cond","2") st.playSound("ItemSound.quest_middle") st.set("talk","0") elif event == "32041-10.htm" : choice = st.getInt("choice") if choice == 1 : htmltext = "32041-10.htm" elif choice == 2 : htmltext = "32041-10a.htm" elif choice == 3 : htmltext = "32041-10b.htm" elif event == "32041-11.htm" : st.set("talk","1") elif event == "32041-18.htm" : st.set("talk","2") elif event == "32041-20.htm" : st.set("cond","6") st.playSound("ItemSound.quest_middle") st.set("talk","0") elif event == "32041-25.htm" : st.set("cond","17") st.playSound("ItemSound.quest_middle") st.giveItems(Detector,1) elif event == "32041-28.htm" : st.takeItems(Detector2,1) st.set("talk","1") elif event == "32041-31.htm" : choice = st.getInt("choice") if choice == 2 : # pmq 修改 htmltext = "32041-37.htm" elif event == "32041-32.htm" : st.set("cond","21") st.giveItems(Letter,1) st.playSound("ItemSound.quest_middle") elif event == "32041-36.htm" : st.set("cond","20") st.set("progress","MIDDLE") # pmq 修改 st.playSound("ItemSound.quest_middle") elif event == "32046-02.htm" : st.set("cond","19") st.playSound("ItemSound.quest_middle") elif event == "32046-06.htm" : st.exitQuest(False) st.addExpAndSp(1846611,144270) st.playSound("ItemSound.quest_finish") elif event == "32047-01.htm" : if st.getInt("talk") + st.getInt("talk1") == 2: htmltext = "32047-04.htm" elif st.getInt("talk") + st.getInt("talk1") + st.getInt("talk2")== 6: htmltext = "32047-08.htm" elif event == "32047-02.htm" : if st.getInt("talk") == 0 : st.set("talk","1") elif event == "32047-03.htm" : if st.getInt("talk1") == 0 : st.set("talk1","1") elif event == "32047-05.htm" : st.set("cond","3") st.playSound("ItemSound.quest_middle") st.set("talk","0") st.set("choice","1") st.unset("talk1") elif event == "32047-06.htm" : st.set("cond","4") st.playSound("ItemSound.quest_middle") st.set("talk","0") st.set("choice","2") st.unset("talk1") elif event == "32047-07.htm" : st.set("cond","5") st.playSound("ItemSound.quest_middle") st.set("talk","0") st.set("choice","3") st.unset("talk1") elif event == "32047-13b.htm" : # pmq 修改 st.set("cond","7") st.playSound("ItemSound.quest_middle") elif event == "32047-13a.htm" : st.set("cond","10") st.playSound("ItemSound.quest_middle") elif event == "32047-15.htm" : if st.getInt("talk") == 0 : st.set("talk","1") elif event == "32047-15a.htm" : if self.isSpawned == 0 : golem = st.addSpawn(Guardian,96977,-110625,-3280,0,False,900000) nSay = NpcSay(golem.getObjectId(), 0, golem.getNpcId(), NpcStringId.YOU_S1_YOU_ATTACKED_WENDY_PREPARE_TO_DIE) nSay.addStringParameter(player.getName()) golem.broadcastPacket(nSay) golem.setRunning() golem.addDamageHate(player,0,999) golem.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, player) self.isSpawned = 1 else: htmltext = "32047-19a.htm" elif event == "32047-17a.htm" : st.set("cond","12") st.playSound("ItemSound.quest_middle") elif event == "32047-20.htm" : st.set("talk","2") elif event == "32047-23.htm" : st.set("cond","13") st.playSound("ItemSound.quest_middle") st.set("talk","0") elif event == "32047-25.htm" : st.set("cond","15") st.playSound("ItemSound.quest_middle") st.takeItems(Starstone,1) elif event == "32047-30.htm" : st.set("talk","2") elif event == "32047-33.htm" : if st.getInt("cond") == 7: st.set("cond","8") st.set("talk","0") st.playSound("ItemSound.quest_middle") elif st.getInt("cond") == 8: st.set("cond","9") st.playSound("ItemSound.quest_middle") htmltext = "32047-34.htm" elif event == "32047-34.htm" : st.set("cond","9") st.playSound("ItemSound.quest_middle") elif event == "32047-36a.htm" : # pmq 修改 st.set("cond","23") st.playSound("ItemSound.quest_middle") elif event == "32047-38.htm" : st.giveItems(Starstone2,1) st.takeItems(57,3000) st.set("cond","26") st.playSound("ItemSound.quest_middle") elif event == "32047-39" : # pmq 修改 htmltext = "32047-39.htm" if st.get("progress") : if st.get("progress") == "MIDDLE": htmltext = "32047-41.htm" elif event == "32050-02.htm" : st.playSound("ItemSound.armor_wood_3") st.set("talk","1") elif event == "32050-04.htm" : st.set("cond","14") st.giveItems(Starstone,1) st.playSound("ItemSound.quest_middle") st.set("talk","0") elif event == "32050-04a.htm" : # pmq 修改 st.set("cond","24") st.giveItems(Starstone2,1) st.playSound("ItemSound.quest_middle") return htmltext