def onAdvEvent(self, event, npc, player): htmltext = event st = player.getQuestState(qn) if not st: return if event == "31001-02.htm": st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") if event == "31001-05.htm": st.set("cond", "1") st.playSound("ItemSound.quest_middle") elif event == "32576-02.htm": st.giveItems(IdentityCard, 1) st.set("cond", "2") st.playSound("ItemSound.quest_middle") elif event == "30289-04.htm": player.stopAllEffects() SkillTable.getInstance().getInfo(6204, 1).getEffects(player, player) st.set("cond", "3") elif event == "30289-07.htm": player.stopAllEffects() elif event == "30969-03.htm": st.addExpAndSp(52518015, 5817677) st.unset("cond") 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 == "31001-02.htm": st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") if event == "31001-05.htm": st.set("cond","1") st.playSound("ItemSound.quest_middle") elif event == "32576-02.htm": st.giveItems(IdentityCard,1) st.set("cond","2") st.playSound("ItemSound.quest_middle") elif event == "30289-04.htm": player.stopAllEffects() SkillTable.getInstance().getInfo(6204,1).getEffects(player,player) st.set("cond","3") elif event == "30289-07.htm": player.stopAllEffects() elif event == "30969-03.htm": st.addExpAndSp(52518015, 5817677) st.unset("cond") 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 in ["30839-02.htm", "31307-02.htm"]: st.set("cond", "1") st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") elif event == "30839-05.htm": st.set("cond", "2") st.playSound("ItemSound.quest_middle") elif event == "31307-05.htm": st.set("cond", "7") st.playSound("ItemSound.quest_middle") elif event == "32325-03.htm": st.set("cond", "3") st.giveItems(YinSword, 1, Elementals.FIRE, 10) st.playSound("ItemSound.quest_middle") elif event == "32326-03.htm": st.set("cond", "8") st.giveItems(YangSword, 1, Elementals.EARTH, 10) st.playSound("ItemSound.quest_middle") elif event == "32325-06.htm": if st.getQuestItemsCount(YinSword): st.takeItems(YinSword, 1) htmltext = "32325-07.htm" st.giveItems(YinSword, 1, Elementals.FIRE, 10) elif event == "32326-06.htm": if st.getQuestItemsCount(YangSword): st.takeItems(YangSword, 1) htmltext = "32326-07.htm" st.giveItems(YangSword, 1, Elementals.EARTH, 10) elif event == "32325-09.htm": st.set("cond", "5") SkillTable.getInstance().getInfo(2635, 1).getEffects(player, player) st.giveItems(YinSword, 1, Elementals.FIRE, 10) st.playSound("ItemSound.quest_middle") elif event == "32326-09.htm": st.set("cond", "10") SkillTable.getInstance().getInfo(2636, 1).getEffects(player, player) st.giveItems(YangSword, 1, Elementals.EARTH, 10) st.playSound("ItemSound.quest_middle") elif event.isdigit(): st.giveItems(10520 + int(event), 2) st.addExpAndSp(202160, 20375) st.unset("cond") st.exitQuest(False) st.playSound("ItemSound.quest_finish") htmltext = str(npc.getNpcId()) + "-1" + event + ".htm" return htmltext
def doRebirth(player): st = player.getQuestState(qn) #扣除道具 for id, count in requireItem: st.takeItems(id, count) #降等 player.removeExpAndSp( player.getExp() - ExperienceTable.getInstance().getExpForLevel( levelAfterRebirth), player.getSp()) #記錄轉生次數 st.set('times', str(st.getInt('times') + 1)) #移除技能 for i in player.getAllSkills(): if i.getId() not in sixStatSkills: if i.getId() not in remove_skill_blacklist: player.removeSkill(i) #轉種族 newClass = st.getInt('newClass') st.getPlayer().setClassId(newClass) if player.isSubClassActive(): player.getSubClasses().get(player.getClassIndex()).setClassId( player.getActiveClass()) else: player.setBaseClass(player.getActiveClass()) #st.getPlayer().setBaseClass(newClass) #st.getPlayer().setActiveClass(newClass) player.broadcastUserInfo() player.rewardSkills() player.sendSkillList() #player.stopAllToggles() #player.broadcastUserInfo() #變身..用作暫時解決轉種族後人物怪怪的問題 #變身 瑪瑙獸 ID 617 skillId = 617 skillLevel = 1 skill = SkillTable.getInstance().getInfo(skillId, skillLevel) if skill: skill.getEffects(player, player) #5秒後解除變身 st.startQuestTimer('removeAllEffects', 5000) #player.untransform() #發道具獎勵 for id, count in rewardItem: st.giveItems(id, count) #發素質獎勵 if self.getFreeRebirthPoint(player) > 0: skillId = st.getInt('newSixStat') skillLevel = max(player.getSkillLevel(skillId), 1) player.addSkill( SkillTable.getInstance().getInfo(skillId, skillLevel + 1), True) return
def onAdvEvent (self,event,npc, player) : htmltext = event st = player.getQuestState(qn) if not st : return if event in ["30839-02.htm","31307-02.htm"] : st.set("cond","1") st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") elif event == "30839-05.htm" : st.set("cond","2") st.playSound("ItemSound.quest_middle") elif event == "31307-05.htm" : st.set("cond","7") st.playSound("ItemSound.quest_middle") elif event == "32325-03.htm" : st.set("cond","3") st.giveItems(YinSword,1,Elementals.FIRE,10) st.playSound("ItemSound.quest_middle") elif event == "32326-03.htm" : st.set("cond","8") st.giveItems(YangSword,1,Elementals.EARTH,10) st.playSound("ItemSound.quest_middle") elif event == "32325-06.htm" : if st.getQuestItemsCount(YinSword): st.takeItems(YinSword,1) htmltext = "32325-07.htm" st.giveItems(YinSword,1,Elementals.FIRE,10) elif event == "32326-06.htm" : if st.getQuestItemsCount(YangSword): st.takeItems(YangSword,1) htmltext = "32326-07.htm" st.giveItems(YangSword,1,Elementals.EARTH,10) elif event == "32325-09.htm" : st.set("cond","5") SkillTable.getInstance().getInfo(2635,1).getEffects(player,player) st.giveItems(YinSword,1,Elementals.FIRE,10) st.playSound("ItemSound.quest_middle") elif event == "32326-09.htm" : st.set("cond","10") SkillTable.getInstance().getInfo(2636,1).getEffects(player,player) st.giveItems(YangSword,1,Elementals.EARTH,10) st.playSound("ItemSound.quest_middle") elif event.isdigit() : st.giveItems(10520+int(event),2) st.addExpAndSp(202160,20375) st.unset("cond") st.exitQuest(False) st.playSound("ItemSound.quest_finish") htmltext = str(npc.getNpcId())+"-1"+event+".htm" return htmltext
def makeRemoveLink(self, skill): return "<a action=\"bypass -h Quest " + self.qn + " remove " + str( skill.getId()) + " " + str( skill.getLevel()) + "\">" + SkillTable.getInstance().getInfo( skill.getId(), skill.getLevel()).getName() + "(%d)" % str( skill.getId()) + " Lv " + str( skill.getLevel()) + "</a><BR1>"
def giveBuff(self, npc, player, skill_id, skill_lv): skill = SkillTable.getInstance().getInfo(skill_id, skill_lv) if skill: if skill.getSkillType() == L2SkillType.BUFF: skill.getEffects(npc, player) else: skill.useSkill(player, (player, ))
def onAdvEvent (self,event,npc,player) : htmltext = event st = player.getQuestState(qn) if not st: return Alevel = player.getAllianceWithVarkaKetra() if str(event) in BUFF.keys() : skillId,level,seeds=BUFF[event] if st.getQuestItemsCount(Seed) >= seeds : st.takeItems(Seed,seeds) npc.setTarget(player) npc.doCast(SkillTable.getInstance().getInfo(skillId,level)) npc.setCurrentHpMp(npc.getMaxHp(), npc.getMaxMp()) htmltext = "31379-4.htm" elif event == "Withdraw" : if player.getWarehouse().getSize() == 0 : htmltext = "31381-0.htm" else : player.sendPacket(ActionFailed.STATIC_PACKET) player.setActiveWarehouse(player.getWarehouse()) player.sendPacket(WareHouseWithdrawalList(player, 1)) elif event == "Teleport" : if Alevel == -4 : htmltext = "31383-4.htm" elif Alevel == -5 : htmltext = "31383-5.htm" return htmltext
def giveBuff(self, npc, player, skill_id, skill_lv): skill = SkillTable.getInstance().getInfo(skill_id, skill_lv) if skill: if skill.getSkillType() == L2SkillType.BUFF: skill.getEffects(npc, player) else: skill.useSkill(player, (player,))
def onAttack (self,npc,player,damage,isPet, skill): st = player.getQuestState(qn) if not st : return if st.getState() != State.STARTED : return chance=self.getRandom(100) if chance < 3 : count = 0 for item in range(5875,5879): if st.getQuestItemsCount(item) : count += 1 st.takeItems(item,-1) if count: st.giveItems(5880,1) elif chance < 7 : for item in range(5875,5879): if st.getQuestItemsCount(item) : npc.doCast(SkillTable.getInstance().getInfo(4072,4)) st.takeItems(item,-1) st.giveItems(item+1,1) if item < 5878 : st.playSound("ItemSound.quest_itemget") elif item == 5878 : st.playSound("ItemSound.quest_middle") st.set("cond","2") break return
def onAdvEvent (self,event,npc,player) : htmltext = event st = player.getQuestState(qn) if not st: return Alevel = player.getAllianceWithVarkaKetra() if str(event) in BUFF.keys() : skillId,level,horns=BUFF[event] if st.getQuestItemsCount(Horn) >= horns : st.takeItems(Horn,horns) npc.setTarget(player) npc.doCast(SkillTable.getInstance().getInfo(skillId,level)) npc.setCurrentHpMp(npc.getMaxHp(), npc.getMaxMp()) htmltext = "31372-4.htm" else : htmltext = "<html><body>魂靈引導者亞瑟法:<br>如果要得到祖先的祝福就需要供上<font color=\"LEVEL\">野牛的角</font>!你,在出戰場累積更多的戰績,你就會得到野牛的角為其代價!</body></html>" elif event == "Withdraw" : if player.getWarehouse().getSize() == 0 : htmltext = "31374-0.htm" else : player.sendPacket(ActionFailed.STATIC_PACKET) player.setActiveWarehouse(player.getWarehouse()) player.sendPacket(WareHouseWithdrawalList(player, 1)) elif event == "Teleport" : if Alevel == 4 : htmltext = "31376-4.htm" elif Alevel == 5 : htmltext = "31376-5.htm" return htmltext
def doRebirth(player): st = player.getQuestState(qn) #扣除道具 for id, count in requireItem: st.takeItems(id, count) #降等 player.removeExpAndSp(player.getExp() - ExperienceTable.getInstance().getExpForLevel(levelAfterRebirth), player.getSp()) #記錄轉生次數 st.set('times', str(st.getInt('times')+1)) #移除技能 for i in player.getAllSkills(): if i.getId() not in sixStatSkills: if i.getId() not in remove_skill_blacklist: player.removeSkill(i) #轉種族 newClass = st.getInt('newClass') st.getPlayer().setClassId(newClass) if player.isSubClassActive(): player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass()) else: player.setBaseClass(player.getActiveClass()) #st.getPlayer().setBaseClass(newClass) #st.getPlayer().setActiveClass(newClass) player.broadcastUserInfo() player.rewardSkills() player.sendSkillList() #player.stopAllToggles() #player.broadcastUserInfo() #變身..用作暫時解決轉種族後人物怪怪的問題 #變身 瑪瑙獸 ID 617 skillId = 617 skillLevel = 1 skill = SkillTable.getInstance().getInfo(skillId, skillLevel) if skill: skill.getEffects(player, player) #5秒後解除變身 st.startQuestTimer('removeAllEffects', 5000) #player.untransform() #發道具獎勵 for id, count in rewardItem: st.giveItems(id, count) #發素質獎勵 if self.getFreeRebirthPoint(player) > 0: skillId = st.getInt('newSixStat') skillLevel = max(player.getSkillLevel(skillId), 1) player.addSkill(SkillTable.getInstance().getInfo(skillId, skillLevel + 1), True) return
def giveBuff(self, npc, player, skill_id, skill_lv): skill = str(skill_id) + "-" + str(skill_lv) if skill_lv > 1: if skill not in self.allowBuffList: return if skill_lv == 1: if str(skill_id) not in self.allowBuffList and skill not in self.allowBuffList: return skill = SkillTable.getInstance().getInfo(skill_id, skill_lv) if skill: skill.getEffects(npc, player)
def onAdvEvent(self, event, npc, player): if event.startswith('page '): page = event[len('page '):] return self.htm_header + self.htm_search + self.listSkills(player, int(page)) + self.htm_footer elif event.startswith('remove '): sid, slv = event[len('remove '):].split() sid = int(sid) slv = int(slv) player.removeSkill(SkillTable.getInstance().getInfo(sid, slv)) player.sendSkillList() elif event.startswith('search '): kw = event[len('search '):] r = self.htm_warning skillTable = SkillTable.getInstance() for s in player.getAllSkills(): if kw in skillTable.getInfo(s.getId(), s.getLevel()).getName() or kw == str(s.getId()): r += self.makeRemoveLink(s) return self.htm_header + self.htm_search + r + self.htm_footer return self.onFirstTalk(npc, player)
def onEnterZone(self, character, zone): try: if character.getTransformationId(): return if not isGM_join_event and player.isGM(): return except: return skillId, skillLevel = [672, 1] skill = SkillTable.getInstance().getInfo(skillId, skillLevel) if skill: skill.getEffects(character, character)
def onEnterWorld(self, player): for skill in player.getAllSkills(): if skill.getId() in self.removeSkillsData.keys(): for delskillid in self.removeSkillsData[skill.getId()]: level = player.getSkillLevel(delskillid) if level != -1: delskill = SkillTable.getInstance().getInfo(delskillid, level) player.removeSkill(delskill) print "%s 因覺醒技能 %s 已移除 %s" % (player.getName(), skill.getName(), delskill.getName()) player.sendSkillList()
def transformPlayer(npc, player, transid): if player.isTransformed() == True: player.untransform() time.sleep(2) for effect in player.getAllEffects(): if effect.getAbnormalType() == "speed_up": effect.exit() npc.setTarget(player) npc.doCast(SkillTable.getInstance().getInfo(transid, 1)) return
def transformPlayer(npc, player, transid) : if player.isTransformed() == True : player.untransform() time.sleep(2) for effect in player.getAllEffects() : if effect.getAbnormalType() == "speed_up": effect.exit() npc.setTarget(player) npc.doCast(SkillTable.getInstance().getInfo(transid,1)) return
def onAdvEvent(self, event, npc, player): htmltext = event st = player.getQuestState(qn) if not st: return if event == "31001-05.htm": st.set("cond", "1") st.setState(State.STARTED) st.playSound("ItemSound.quest_middle") elif event == "32576-02.htm": st.giveItems(IdentityCard, 1) st.set("cond", "2") st.playSound("ItemSound.quest_middle") elif event == "30289-04.htm": player.stopAllEffects() SkillTable.getInstance().getInfo(6204, 1).getEffects(player, player) st.set("cond", "3") elif event == "30289-07.htm": player.stopAllEffects() SkillTable.getInstance().getInfo(6204, 1).getEffects(player, player) elif event == "30289-08.htm": player.stopAllEffects() elif event == "30289-11.htm": st.set("cond", "4") st.playSound("ItemSound.quest_middle") player.stopAllEffects() elif event == "30969-03.htm": st.addExpAndSp(52518015, 5817677) st.unset("cond") st.exitQuest(False) st.playSound("ItemSound.quest_finish") elif event == "quit": instanceId = player.getInstanceId() instance = InstanceManager.getInstance().getInstance(instanceId) player.setInstanceId(0) player.teleToLocation(-12491, 122331, -2984) htmltext = "" return htmltext
def onAdvEvent(self, event, npc, player): if event.startswith('page '): page = event[len('page '):] return self.htm_header + self.htm_search + self.listSkills( player, int(page)) + self.htm_footer elif event.startswith('remove '): sid, slv = event[len('remove '):].split() sid = int(sid) slv = int(slv) player.removeSkill(SkillTable.getInstance().getInfo(sid, slv)) player.sendSkillList() elif event.startswith('search '): kw = event[len('search '):] r = self.htm_warning skillTable = SkillTable.getInstance() for s in player.getAllSkills(): if kw in skillTable.getInfo( s.getId(), s.getLevel()).getName() or kw == str( s.getId()): r += self.makeRemoveLink(s) return self.htm_header + self.htm_search + r + self.htm_footer return self.onFirstTalk(npc, player)
def listAvailableSkill(self, player): sl = self.getAvailableSkill(player) r = "可學習的技能清單<br1>" r += '<a action="bypass -h Quest %s learn_all">全部學習</a><br1>' % self.qn for s in sl: if s and s.getName(): ss = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel()) if ss: sn = ss.getName() else: sn = s.getName() r += "<a action=\"bypass -h Quest " + self.qn + " learn " + str(s.getSkillId()) + " " + str(s.getSkillLevel()) + "\">" + sn + " Lv " + str(s.getSkillLevel()) + "</a><BR1>" return r
def onAdvEvent (self,event,npc,player): htmltext = event st = player.getQuestState(qn) if not st: return if event == "31001-05.htm": st.set("cond","1") st.setState(State.STARTED) st.playSound("ItemSound.quest_middle") elif event == "32576-02.htm": st.giveItems(IdentityCard,1) st.set("cond","2") st.playSound("ItemSound.quest_middle") elif event == "30289-04.htm": player.stopAllEffects() SkillTable.getInstance().getInfo(6204,1).getEffects(player,player) st.set("cond","3") elif event == "30289-07.htm": player.stopAllEffects() SkillTable.getInstance().getInfo(6204,1).getEffects(player,player) elif event == "30289-08.htm": player.stopAllEffects() elif event == "30289-11.htm": st.set("cond","4") st.playSound("ItemSound.quest_middle") player.stopAllEffects() elif event == "30969-03.htm": st.addExpAndSp(52518015, 5817677) st.unset("cond") st.exitQuest(False) st.playSound("ItemSound.quest_finish") elif event == "quit": instanceId = player.getInstanceId() instance = InstanceManager.getInstance().getInstance(instanceId) player.setInstanceId(0) player.teleToLocation(-12491,122331,-2984) htmltext = "" return htmltext
def myAddSkill(self, player, id): oldSkill = player.getKnownSkill(id) sl = self.getAvailableSkill(player) for s in sl: if s.getSkillId() == id: newskill = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel()) if newskill: player.addSkill(newskill, True) else: return 1 if oldSkill == player.getKnownSkill(id): print self.qn, player, "學習技能錯誤", id, newskill.getName() player.sendMessage("學習技能錯誤 %s" % newskill.getName()) return 1 self.myAddSkill(player, id) break return 0
def listAvailableSkill(self, player): sl = self.getAvailableSkill(player) r = "可學習的技能清單<br1>" r += '<a action="bypass -h Quest %s learn_all">全部學習</a><br1>' % self.qn for s in sl: if s and s.getName(): ss = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel()) if ss: sn = ss.getName() else: sn = s.getName() r += "<a action=\"bypass -h Quest " + self.qn + " learn " + str( s.getSkillId()) + " " + str( s.getSkillLevel()) + "\">" + sn + " Lv " + str( s.getSkillLevel()) + "</a><BR1>" return r
def myAddSkill(self, player, id): oldSkill = player.getKnownSkill(id) sl = self.getAvailableSkill(player) for s in sl: if s.getSkillId() == id: newskill = SkillTable.getInstance().getInfo( s.getSkillId(), s.getSkillLevel()) if newskill: player.addSkill(newskill, True) else: return 1 if oldSkill == player.getKnownSkill(id): print self.qn, player, "學習技能錯誤", id, newskill.getName() player.sendMessage("學習技能錯誤 %s" % newskill.getName()) return 1 self.myAddSkill(player, id) break return 0
def onAdvEvent (self,event,npc, player) : htmltext = event st = player.getQuestState(qn) if not st : return if event == "32557-06.htm" : st.set("cond","1") st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") elif event == "32557-09.htm" : st.set("transform","1") SkillTable.getInstance().getInfo(5982,1).getEffects(player,player) elif event == "32557-10.htm" : st.set("transform","2") SkillTable.getInstance().getInfo(5983,1).getEffects(player,player) elif event == "32557-13.htm" : if st.getInt("transform") == 1 : SkillTable.getInstance().getInfo(5982,1).getEffects(player,player) elif st.getInt("transform") == 2 : SkillTable.getInstance().getInfo(5983,1).getEffects(player,player) return htmltext
def onAcquireSkillList (self, npc, player) : asl = AcquireSkillList(AcquireSkillList.SkillType.unk4) st = player.getQuestState(qn) oldSkills = player.getAllSkills() count = 0 for i in SKILLITEMS: for j in SUBSKILLS[i]: minLevel = 0 maxLevel = SkillTable.getInstance().getMaxLevel(j) for oldsk in oldSkills: if oldsk.getId() == j: minLevel = oldsk.getLevel() if minLevel < maxLevel: count+=1 asl.addSkill(j, minLevel+1, maxLevel, 0, 0) player.sendPacket(asl) if count == 0: player.sendPacket(SystemMessage(SystemMessageId.NO_MORE_SKILLS_TO_LEARN)) return ""
def onAcquireSkillList(self, npc, player): asl = AcquireSkillList(AcquireSkillList.SkillType.unk4) st = player.getQuestState(qn) oldSkills = player.getAllSkills() count = 0 for i in SKILLITEMS: for j in SUBSKILLS[i]: minLevel = 0 maxLevel = SkillTable.getInstance().getMaxLevel(j) for oldsk in oldSkills: if oldsk.getId() == j: minLevel = oldsk.getLevel() if minLevel < maxLevel: count += 1 asl.addSkill(j, minLevel + 1, maxLevel, 0, 0) player.sendPacket(asl) if count == 0: player.sendPacket( SystemMessage(SystemMessageId.NO_MORE_SKILLS_TO_LEARN)) return ""
def getBuffPage(self, selected_tab, col=1): dialog_width = 270 c = 0 skillTable = SkillTable.getInstance() r = "<table border=0 cellpadding=0 cellspacing=0 width=%d>" % dialog_width for id, bufflist in self.buff_pages: if id == selected_tab: r += "<tr>" for buff in bufflist: skill_id, skill_lv = self.buffToList(buff) r += "<td><table border=0 cellpadding=0 cellspacing=0 height=38 width=%d %%%s%%><tr><td>" % (dialog_width/col, buff) if self.isShowIcon: r += '<img src="%s" width=32 height=32></td><td>' % self.si_table.getIconName(skill_id) r += '<a action="bypass -h Quest %s %s %s">%s</a></td></tr></table></td>' % (self.qn, buff, selected_tab, skillTable.getInfo(skill_id, skill_lv).getName()) c += 1 if c % col == 0: r += "</tr><tr>" r += "</tr>" break r += "</table>" return self.htm_header + self.getTabHtm(selected_tab) + r + self.htm_footer
def getBuffPage(self, selected_tab, col=1): dialog_width = 270 c = 0 skillTable = SkillTable.getInstance() r = "<table border=0 cellpadding=0 cellspacing=0 width=" + str(dialog_width) + ">" for id, bufflist in self.buff_pages: if id == selected_tab: r += "<tr>" for buff in bufflist: skill_id, skill_lv = self.buffToList(buff) # r += "<td><button width=16 height=16 fore=\"L2UI.CheckBox%" + buff + "%\"></td>" r += "<td><table border=0 cellpadding=0 cellspacing=0 height=38 width="+str(dialog_width/col)+" %" + buff + "%><tr><td>" if self.isShowIcon: r += "<img src=\"" + self.si_table.getIconName(skill_id) + "\" width=32 height=32></td><td>" r += "<a action=\"bypass -h Quest " + self.qn + " " + buff + " " + id + "\">" + skillTable.getInfo(skill_id, skill_lv).getName() + "</a></td></tr></table></td>" c += 1 if c % col == 0: r += "</tr><tr>" r += "</tr>" break r += "</table>" return self.htm_header + self.getTabHtm(selected_tab) + r + self.htm_footer
def onAdvEvent (self,event,npc,player) : st = player.getQuestState(qn) if not st: return htmltext = event cond = st.getInt("cond") if htmltext == "31554-03a.htm" : #Giving 100 Splinter Stakato Chitins. Getting Recruit mark if st.getQuestItemsCount(CHITIN)>=count and cond == 1 : st.set("cond","2") st.takeItems(CHITIN,-1) st.giveItems(RECRUIT,1) htmltext = "31554-04.htm" elif event == "31554-07.htm" : #Cancelling the quest st.exitQuest(1) st.playSound("ItemSound.quest_giveup") elif event in BUFF.keys() and cond == 3 : #Asking for buff skillId,level,coins=BUFF[event] if st.getQuestItemsCount(GOLDEN_RAM_COIN) >= coins : st.takeItems(GOLDEN_RAM_COIN,coins) npc.setTarget(player) npc.doCast(SkillTable.getInstance().getInfo(skillId,level)) htmltext = "31556-1.htm" else : htmltext = "You don't have required items" return htmltext
def onAdvEvent (self,event,npc,player) : st = player.getQuestState(qn) if not st: return htmltext = event cond = st.getInt("cond") if htmltext == "31554-03a.htm" : #Giving 100 Splinter Stakato Chitins. Getting Recruit mark if st.getQuestItemsCount(CHITIN)>=count and cond == 1 : st.set("cond","2") st.takeItems(CHITIN,-1) st.giveItems(RECRUIT,1) htmltext = "31554-04.htm" elif event == "31554-07.htm" : #Cancelling the quest st.exitQuest(1) st.playSound("ItemSound.quest_giveup") elif event in BUFF.keys() and cond == 3 : #Asking for buff skillId,level,coins=BUFF[event] if st.getQuestItemsCount(GOLDEN_RAM_COIN) >= coins : st.takeItems(GOLDEN_RAM_COIN,coins) npc.setTarget(player) npc.doCast(SkillTable.getInstance().getInfo(skillId,level)) htmltext = "31556-1.htm" else : htmltext = "材料不足。" return htmltext
def add_skill(self, player, skill_data_key): skill_id = self.skill_data[skill_data_key][0] new_skill_level = player.getSkillLevel(skill_id) new_skill_level = new_skill_level + 1 or 1 player.addSkill(SkillTable.getInstance().getInfo(skill_id, new_skill_level), True)
def onAdvEvent (self,event,npc,player) : if event == "chest_timer" : self.athrea = 0 return if player.isClanLeader() : leaderst = st = player.getQuestState(qn) else : # non-leaders doing this quest need both their own quest state and the leader's st = player.getQuestState(qn) if not st: return leaderst = leader(player) if not leaderst : if DEBUG : debug = "Event can't find leader" print debug return debug return debug = "" htmltext = event if player.isClanLeader() : if event == "30756-07.htm" : st.playSound("ItemSound.quest_accept") st.set("cond","1") st.setState(State.STARTED) st.set("part","1") elif event == "30759-03.htm" : st.set("part","2") st.set("cond","2") st.set("dead_list"," ") elif event == "30759-07.htm" : st.takeItems(SYMBOL_OF_LOYALTY,1) #Item is not stackable, thus need to do this for each item st.takeItems(SYMBOL_OF_LOYALTY,1) st.takeItems(SYMBOL_OF_LOYALTY,1) st.giveItems(ANTIDOTE_RECIPE,1) st.set("part","3") st.set("cond","3") st.startQuestTimer("poison_timer",3600000) st.addNotifyOfDeath(player) SkillTable.getInstance().getInfo(4082,1).getEffects(npc,player); elif event == "poison_timer" : st.exitQuest(1) if DEBUG : debug = "Times Up! Quest failed!" print debug return debug return elif event == "30757-05.htm" : if player.isClanLeader() : return "Only Clan Members can sacrifice themselves!" if st.getRandom(10) > 5 : htmltext = "30757-06.htm" st.giveItems(SYMBOL_OF_LOYALTY,1) deadlist = leaderst.get("dead_list").split() deadlist.append(player.getName()) leaderst.set("dead_list"," ".join(deadlist)) else : skill = SkillTable.getInstance().getInfo(4083,1) npc.setTarget(player) npc.doCast(skill) self.startQuestTimer(player.getName(),4000,npc,player,0) elif event == player.getName() : if player.isDead() : st.giveItems(SYMBOL_OF_LOYALTY,1) deadlist = leaderst.get("dead_list").split() deadlist.append(player.getName()) leaderst.set("dead_list"," ".join(deadlist)) elif DEBUG : debug = "player " + player.getName() + " didn't die!" print debug return debug return elif event == "30758-03.htm" : if not self.athrea : self.athrea = 1 self.chests = 0 leaderst.set("part","4") leaderst.set("chest_wins","0") for x,y,z in CHEST_LOCS : rand = st.getRandom(5) self.addSpawn(27173+rand,x,y,z,0,0,300000) self.startQuestTimer("chest_timer",300000,npc,player,0) else : htmltext = "30758-04.htm" elif event == "30758-07.htm" : if st.getQuestItemsCount(57) >= 667 and not self.athrea : htmltext = "30758-08.htm" st.takeItems(57, 667) if DEBUG and debug : print debug return debug return htmltext
def makeRemoveLink(self, skill): return "<a action=\"bypass -h Quest " + self.qn + " remove " + str(skill.getId()) + " " + str(skill.getLevel()) + "\">" + SkillTable.getInstance().getInfo(skill.getId(), skill.getLevel()).getName() + "(%d)" % str(skill.getId()) + " Lv " + str(skill.getLevel()) + "</a><BR1>"
def onAdvEvent (self,event,npc,player) : htmltext = event st = player.getQuestState(qn) if not st : return if str(event) in BUFF.keys(): skillId,level,coins=BUFF[event] if st.getQuestItemsCount(GOLDEN_RAM_COIN) >= coins : st.takeItems(GOLDEN_RAM_COIN,coins) npc.setTarget(player) npc.doCast(SkillTable.getInstance().getInfo(skillId,level)) htmltext = selina_01 else : htmltext = selina_02 elif event == "31554-03.htm" : st.set("cond","1") st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") elif event == "kahman_06" : htmltext = kahman_06 st.takeItems(CHITIN,-1) st.giveItems(RECRUIT,1) st.set("cond","2") st.playSound("ItemSound.quest_middle") elif event == "kahman_10" : htmltext = kahman_10 st.exitQuest(1) st.playSound("ItemSound.quest_giveup") # 傭兵 卡姆恩 # elif event == "kahman_c1" : # htmltext = kahman_c1 # elif event == "kahman_c2" : # htmltext = kahman_c2 elif event == "kahman_04" : htmltext = kahman_04 elif event == "kahman_05" : htmltext = kahman_05 elif event == "kahman_06" : htmltext = kahman_06 elif event == "kahman_07" : htmltext = kahman_07 elif event == "kahman_08" : htmltext = kahman_08 elif event == "kahman_09" : htmltext = kahman_09 elif event == "kahman_10" : htmltext = kahman_10 elif event == "kahman_11" : htmltext = kahman_11 elif event == "kahman_12" : htmltext = kahman_12 # 傭兵隊補給兵 亞柏克隆比 # elif event == "abercrombie_c1" : # htmltext = abercrombie_c1 # elif event == "abercrombie_01" : # htmltext = abercrombie_01 # elif event == "abercrombie_02" : # htmltext = abercrombie_02 # 傭兵隊醫務兵 瑟麗娜 # elif event == "selina_c1" : # htmltext = selina_c1 # elif event == "selina_c2" : # htmltext = selina_c2 # elif event == "selina_c3" : # htmltext = selina_c3 elif event == "selina_01" : htmltext = selina_01 elif event == "selina_02" : htmltext = selina_02 return htmltext
def onAdvEvent(self, event, npc, player): #檢測轉生條件 def check_rebirth_requirement(player): #檢測轉生要求等級 if player.getLevel() < requireLevel: return False st = player.getQuestState(qn) #檢測轉生要求道具及數量 for id, count in requireItem: if st.getQuestItemsCount(id) < count: return False #檢測轉生次數 if st.getInt('times') >= maxRebirthTimes: return False #限制副職業不能轉生 if player.isSubClassActive(): return False #檢測素質等級不能多於51 sixStatId = st.getInt('newSixStat') if player.getSkillLevel(sixStatId) >= 51: return False #全部檢測通過 return True #執行轉生 def doRebirth(player): st = player.getQuestState(qn) #扣除道具 for id, count in requireItem: st.takeItems(id, count) #降等 player.removeExpAndSp( player.getExp() - ExperienceTable.getInstance().getExpForLevel( levelAfterRebirth), player.getSp()) #記錄轉生次數 st.set('times', str(st.getInt('times') + 1)) #移除技能 for i in player.getAllSkills(): if i.getId() not in sixStatSkills: if i.getId() not in remove_skill_blacklist: player.removeSkill(i) #轉種族 newClass = st.getInt('newClass') st.getPlayer().setClassId(newClass) if player.isSubClassActive(): player.getSubClasses().get(player.getClassIndex()).setClassId( player.getActiveClass()) else: player.setBaseClass(player.getActiveClass()) #st.getPlayer().setBaseClass(newClass) #st.getPlayer().setActiveClass(newClass) player.broadcastUserInfo() player.rewardSkills() player.sendSkillList() #player.stopAllToggles() #player.broadcastUserInfo() #變身..用作暫時解決轉種族後人物怪怪的問題 #變身 瑪瑙獸 ID 617 skillId = 617 skillLevel = 1 skill = SkillTable.getInstance().getInfo(skillId, skillLevel) if skill: skill.getEffects(player, player) #5秒後解除變身 st.startQuestTimer('removeAllEffects', 5000) #player.untransform() #發道具獎勵 for id, count in rewardItem: st.giveItems(id, count) #發素質獎勵 if self.getFreeRebirthPoint(player) > 0: skillId = st.getInt('newSixStat') skillLevel = max(player.getSkillLevel(skillId), 1) player.addSkill( SkillTable.getInstance().getInfo(skillId, skillLevel + 1), True) return try: nEvent = int(event) except: nEvent = -1 #顯示 轉生狀態畫面 if event == 'request_info': return 'info.htm' #執行重設轉生素質 elif event == 'request_reset_sixstat': #移除六大素質技能 for i in player.getAllSkills(): if i.getId() in sixStatSkills: player.removeSkill(i) return 'info.htm' #顯示設定轉生素質獎勵對話 elif event == 'request_set_sixstat': return 'setSixStat.htm' #顯示 選擇新種族畫面 elif event == 'request_choice_class': return 'choiceClass.htm' #記錄 新種族 及 下一步 elif nEvent in baseClassID: st = player.getQuestState(qn) #記錄新種族 st.set('newClass', event) return "choiceSixStat.htm" #記錄 轉生素質獎勵 及 下一步 elif nEvent in sixStatSkills: st = player.getQuestState(qn) #記錄新素質要求 st.set('newSixStat', event) return "confirm.htm" #確定要求轉生 elif event == "request_rebirth": if check_rebirth_requirement(player): doRebirth(player) return "rebirth_ok.htm" else: return "rebirth_fail.htm" #移除所有狀態 elif event == 'removeAllEffects': for e in player.getAllEffects(): e.exit() #設定六大素質 elif event.split()[0] == 'require_sixstat_add': try: c, n, v = event.split() v = max(int(v), 0) i = sixStatName.index(n) except: print qn + ":錯誤 event:" + event return "" newV = max(player.getSkillLevel(sixStatSkills[i]), 1) + v needPoint = v if needPoint == 0 or newV >= 51 or self.getFreeRebirthPoint( player) < needPoint or player.isSubClassActive(): return "setSixStatFail.htm" else: skillId = sixStatSkills[i] skillLevel = newV player.addSkill( SkillTable.getInstance().getInfo(skillId, skillLevel), True) return "info.htm" else: print qn + ":不明的要求:" + event return "" return
def onAdvEvent(self, event, npc, player): htmltext = event st = player.getQuestState(qn) if event == "learn": htmltext = "" st2 = player.getQuestState("136_MoreThanMeetsTheEye") if player.isSubClassActive(): htmltext = "8005-04.htm" elif not st2 or st2.getState() != State.COMPLETED: htmltext = "8005-03.htm" else: j = 0 for i in SKILLITEMS: j += st.getQuestItemsCount(i) if j > 0: self.onAcquireSkillList(npc, player) else: htmltext = "8005-04.htm" elif event == "cancel": if st.getQuestItemsCount(57) < 10000000: htmltext = "8005-07.htm" elif player.getSubClasses().size() == 0: htmltext = "8005-03.htm" elif player.isSubClassActive(): htmltext = "8005-04.htm" else: activeCertifications = 0 for var in QUESTVARSITEMS: for i in range(Config.MAX_SUBCLASS): qvar = st.getGlobalQuestVar(var + str(i + 1)) if qvar.endswith(";"): activeCertifications += 1 elif qvar != "" and qvar != "0": activeCertifications += 1 if activeCertifications == 0: htmltext = "8005-08.htm" else: for var in QUESTVARSITEMS: for i in range(Config.MAX_SUBCLASS): qvar = st.getGlobalQuestVar(var + str(i + 1)) if qvar.endswith(";"): skill = SkillTable.getInstance().getInfo( int(qvar.replace(";", "")), 1) if skill: qvar = st.getGlobalQuestVar(var + str(i + 1)) skillId = int(qvar.replace(";", "")) skillLevel = player.getSkillLevel(skillId) player.removeSkill(skill, skillLevel) st.saveGlobalQuestVar( var + str(i + 1), "0") elif qvar != "" and qvar != "0": Item = player.getInventory().getItemByObjectId( int(qvar)) if Item: player.destroyItem(qn, int(qvar), 1, player, 0) else: Item = player.getWarehouse( ).getItemByObjectId(int(qvar)) if Item: print "Somehow " + player.getName( ) + " put certification book into warehouse!" player.getWarehouse().destroyItem( qn, Item, 1, player, None) else: print "Somehow " + player.getName( ) + " his/her delete certification book!" st.saveGlobalQuestVar(var + str(i + 1), "0") st.takeItems(57, 10000000) htmltext = "8005-09.htm" player.sendSkillList() return htmltext
def onTalk(self, npc, player): htmltext = "<html><body>目前沒有執行任務,或條件不符。</body></html>" st = player.getQuestState(qn) if not st: return htmltext npcId = npc.getNpcId() id = st.getState() cond = st.getInt("cond") if id == State.COMPLETED: htmltext = "<html><body>這是已經完成的任務。</body></html>" elif id == State.CREATED: if npcId == SirGustavAthebaldt and cond == 0: first = player.getQuestState("193_SevenSignDyingMessage") if first: if first.getState( ) == State.COMPLETED and player.getLevel() >= 79: htmltext = "30760-0.htm" else: htmltext = "30760-0a.htm" st.exitQuest(1) else: htmltext = "30760-0b.htm" st.exitQuest(1) elif id == State.STARTED: if npcId == SirGustavAthebaldt: if cond == 1: htmltext = "30760-1.htm" elif cond == 2: htmltext = "30760-3.htm" elif cond == 3: htmltext = "30760-6a.htm" elif npcId == Kollin: if cond == 3: htmltext = "32571-0.htm" elif cond == 4 and player.getFirstEffect(Frog) != None: htmltext = "32571-3a.htm" elif cond == 4 and player.getFirstEffect(Frog) == None: player.doCast(SkillTable.getInstance().getInfo(Frog, 1)) htmltext = "32571-3a.htm" elif cond == 5: htmltext = "32571-4.htm" elif cond == 6: htmltext = "32571-6.htm" elif cond == 7 and player.getFirstEffect(Frog) != None: htmltext = "32571-7a.htm" elif cond == 7 and player.getFirstEffect(Frog) == None: player.doCast(SkillTable.getInstance().getInfo( YoungChild, 1)) htmltext = "32571-7a.htm" elif cond == 8: htmltext = "32571-8.htm" elif cond == 9: htmltext = "32571-10.htm" elif cond == 10 and player.getFirstEffect(Native) != None: htmltext = "32571-11a.htm" elif cond == 10 and player.getFirstEffect(Native) == None: player.doCast(SkillTable.getInstance().getInfo(Native, 1)) htmltext = "32571-11a.htm" elif cond == 11: htmltext = "32571-12.htm" elif cond == 12: htmltext = "32571-13a.htm" elif npcId == FrogKing: if cond == 4 and player.getFirstEffect(Frog) != None: htmltext = "32572-0.htm" elif cond == 4 and player.getFirstEffect(Frog) == None: htmltext = "32572-0a.htm" elif npcId == Tess: if cond == 7 and player.getFirstEffect(YoungChild) != None: htmltext = "32573-0.htm" elif cond == 7 and player.getFirstEffect(YoungChild) == None: htmltext = "32573-0a.htm" elif npcId == Kuta: if cond == 10 and player.getFirstEffect(Native) != None: htmltext = "32574-0.htm" elif cond == 10 and player.getFirstEffect(Native) == None: htmltext = "32574-0a.htm" elif npcId == ClaudiaAthebalt: if cond == 12: htmltext = "31001-0.htm" return htmltext
def onAdvEvent(self, event, npc, player): htmltext = event st = player.getQuestState(qn) if not st: return if event == "30760-1.htm": st.set("cond", "1") st.setState(State.STARTED) st.playSound("ItemSound.quest_accept") elif event == "30760-3.htm": st.set("cond", "2") st.playSound("ItemSound.quest_middle") elif event == "30760-4.htm": player.showQuestMovie(10) self.startQuestTimer("normal_world", 102000, None, player) return elif event == "30760-6.htm": st.giveItems(AthebaltsIntroduction, 1) st.set("cond", "3") st.playSound("ItemSound.quest_middle") elif event == "32571-3.htm": st.takeItems(AthebaltsIntroduction, -1) player.stopAllEffects() SkillTable.getInstance().getInfo(6201, 1).getEffects(player, player) st.set("cond", "4") st.playSound("ItemSound.quest_middle") elif event == "32572-3.htm": st.giveItems(FrogKingsBead, 1) st.set("cond", "5") st.playSound("ItemSound.quest_middle") elif event == "32571-5.htm": st.takeItems(FrogKingsBead, -1) st.set("cond", "6") st.playSound("ItemSound.quest_middle") elif event == "32571-7.htm": player.stopAllEffects() SkillTable.getInstance().getInfo(6202, 1).getEffects(player, player) st.set("cond", "7") st.playSound("ItemSound.quest_middle") elif event == "32573-2.htm": st.giveItems(GrandmaTessCandyPouch, 1) st.set("cond", "8") st.playSound("ItemSound.quest_middle") elif event == "32571-9.htm": st.takeItems(GrandmaTessCandyPouch, -1) st.set("cond", "9") st.playSound("ItemSound.quest_middle") elif event == "32571-11.htm": player.stopAllEffects() SkillTable.getInstance().getInfo(6203, 1).getEffects(player, player) st.set("cond", "10") st.playSound("ItemSound.quest_middle") elif event == "32574-3.htm": st.giveItems(NativesGlove, 1) st.set("cond", "11") st.playSound("ItemSound.quest_middle") elif event == "32571-13.htm": st.takeItems(NativesGlove, -1) player.stopAllEffects() st.set("cond", "12") st.playSound("ItemSound.quest_middle") elif event == "31001-2.htm": st.addExpAndSp(52518015, 5817677) st.unset("cond") st.exitQuest(False) st.playSound("ItemSound.quest_finish") elif event == "normal_world": player.teleToLocation(80102, 56532, -1550) return "30760-4.htm" return htmltext
def add_skill(self, player, skill_data_key): skill_id = self.skill_data[skill_data_key][0] new_skill_level = player.getSkillLevel(skill_id) new_skill_level = new_skill_level + 1 or 1 player.addSkill( SkillTable.getInstance().getInfo(skill_id, new_skill_level), True)
def onTalk(self, npc, player): htmltext = "<html><body>目前沒有執行任務,或條件不符。</body></html>" st = player.getQuestState(qn) if not st: return htmltext id = st.getState() cond = st.getInt("cond") npcId = npc.getNpcId() if id == State.CREATED and npcId == CRONOS: if player.getLevel() < 45 and ( st.getQuestItemsCount(3500) or st.getQuestItemsCount(3501) or st.getQuestItemsCount(3502) ): st.exitQuest(1) htmltext = "30610-01.htm" elif player.getLevel() >= 45 and ( (st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) >= 2 ): st.exitQuest(1) htmltext = "30610-02.htm" elif player.getLevel() >= 45 and ( (st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) == 1 ): if st.getQuestItemsCount(3500) == 1: item = player.getInventory().getItemByItemId(3500) if item.getEnchantLevel() < 55: htmltext = "30610-03.htm" else: htmltext = "30610-04.htm" elif st.getQuestItemsCount(3501) == 1: item = player.getInventory().getItemByItemId(3501) if item.getEnchantLevel() < 55: htmltext = "30610-03.htm" else: htmltext = "30610-04.htm" elif st.getQuestItemsCount(3502) == 1: item = player.getInventory().getItemByItemId(3502) if item.getEnchantLevel() < 55: htmltext = "30610-03.htm" else: htmltext = "30610-04.htm" elif id == State.STARTED: if npcId == CRONOS: htmltext = "30610-07.htm" if npcId == MIMYU: if st.getInt("id") == 1: st.set("id", "2") htmltext = "30747-01.htm" elif st.getInt("id") == 2: summon = player.getPet() if summon: if summon.getControlItem().getObjectId() == st.getInt("summonOid"): htmltext = "30747-04.htm" else: htmltext = "30747-03.htm" else: htmltext = "30747-02.htm" elif st.getInt("id") == 0: htmltext = "30747-07.htm" elif st.getInt("id") > 0 and st.getInt("id") < 15 and st.getQuestItemsCount(FT_LEAF) >= 1: htmltext = "30747-11.htm" elif st.getInt("id") == 15 and st.getQuestItemsCount(FT_LEAF) == 0: summon = player.getPet() if summon: if summon.getControlItem().getObjectId() == st.getInt("summonOid"): st.set("id", "16") htmltext = "30747-13.htm" else: htmltext = "30747-14.htm" else: htmltext = "30747-12.htm" elif st.getInt("id") == 16: summon = player.getPet() if summon: htmltext = "30747-15.htm" elif (st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) == 1: if st.getQuestItemsCount(3500) == 1: item = player.getInventory().getItemByItemId(3500) if item.getObjectId() == st.getInt("summonOid"): # EvolvePet(player,item,4422) st.takeItems(3500, 1) st.giveItems(4422, 1) htmltext = "30747-16.htm" st.exitQuest(1) st.playSound("ItemSound.quest_finish") else: npc.setTarget(player) skill = SkillTable.getInstance().getInfo(4167, 1) if skill != None: skill.getEffects(npc, player) htmltext = "30747-18.htm" elif st.getQuestItemsCount(3501) == 1: item = player.getInventory().getItemByItemId(3501) if item.getObjectId() == st.getInt("summonOid"): # EvolvePet(player,item,4423) st.takeItems(3501, 1) st.giveItems(4423, 1) htmltext = "30747-16.htm" st.exitQuest(1) st.playSound("ItemSound.quest_finish") else: npc.setTarget(player) skill = SkillTable.getInstance().getInfo(4167, 1) if skill != None: skill.getEffects(npc, player) htmltext = "30747-18.htm" elif st.getQuestItemsCount(3502) == 1: item = player.getInventory().getItemByItemId(3502) if item.getObjectId() == st.getInt("summonOid"): # EvolvePet(player,item,4424) st.takeItems(3502, 1) st.giveItems(4424, 1) htmltext = "30747-16.htm" st.exitQuest(1) st.playSound("ItemSound.quest_finish") else: npc.setTarget(player) skill = SkillTable.getInstance().getInfo(4167, 1) if skill != None: skill.getEffects(npc, player) htmltext = "30747-18.htm" else: htmltext = "30747-18.htm" elif (st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) >= 2: htmltext = "30747-17.htm" return htmltext
def onTalk (self, npc, player) : htmltext = "<html><body>目前沒有執行任務,或條件不符。</body></html>" st = player.getQuestState(qn) if not st: return htmltext #id = st.getState() npcId = npc.getNpcId() cond = st.getInt("cond") if npcId == MUSHIKA : first = player.getQuestState("124_MeetingTheElroki") if st.getState() == State.COMPLETED : htmltext = "<html><body>這是已經完成的任務。</body></html>" elif first and first.getState() == State.COMPLETED and st.getState() == State.CREATED and player.getLevel() >= 76 : htmltext = "32114-01.htm" elif cond == 0 : htmltext = "32114-00.htm" elif cond == 1 : htmltext = "32114-07.htm" elif cond == 2 : htmltext = "32114-10.htm" elif cond >= 3 and cond < 8: htmltext = "32114-11.htm" elif cond == 8 : st.addExpAndSp(859195,86603) st.unset("cond") st.unset("pilar1") st.unset("pilar2") st.unset("pilar3") st.setState(State.COMPLETED) st.exitQuest(False) st.playSound("ItemSound.quest_finish") htmltext = "32114-12.htm" elif npcId == KARAKAWEI : if cond == 2 : htmltext = "32117-01.htm" elif cond == 3 : htmltext = "32117-09.htm" elif cond == 4 : st.takeItems(ORNITHOMIMUS_CLAW,-1) st.takeItems(DEINONYCHUS_BONE,-1) st.playSound("ItemSound.quest_middle") htmltext = "32117-10.htm" elif cond == 5 : htmltext = "32117-15.htm" elif cond == 6 or cond == 7 : htmltext = "32117-16.htm" elif cond == 8 : htmltext = "32117-17.htm" elif npcId == ULU_KAIMU : if cond == 5 : npc.doCast(SkillTable.getInstance().getInfo(5089,1)) htmltext = "32119-01.htm" elif cond == 6 : htmltext = "32119-14.htm" elif npcId == BALU_KAIMU : if cond == 6 : npc.doCast(SkillTable.getInstance().getInfo(5089,1)) htmltext = "32120-01.htm" elif cond == 7 : htmltext = "32120-16.htm" elif npcId == CHUTA_KAIMU : if cond == 7 : npc.doCast(SkillTable.getInstance().getInfo(5089,1)) htmltext = "32121-01.htm" elif cond == 8 : htmltext = "32121-17.htm" return htmltext
def onTalk(self, npc, player): htmltext = "<html><body>目前沒有執行任務,或條件不符。</body></html>" st = player.getQuestState(qn) if not st: return htmltext id = st.getState() cond = st.getInt("cond") npcId = npc.getNpcId() if id == State.CREATED and npcId == CRONOS: if player.getLevel() < 45 and (st.getQuestItemsCount(3500) or st.getQuestItemsCount(3501) or st.getQuestItemsCount(3502)): st.exitQuest(1) htmltext = "30610-01.htm" elif player.getLevel() >= 45 and ( (st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) >= 2): st.exitQuest(1) htmltext = "30610-02.htm" elif player.getLevel() >= 45 and ( (st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) == 1): if st.getQuestItemsCount(3500) == 1: item = player.getInventory().getItemByItemId(3500) if item.getEnchantLevel() < 55: htmltext = "30610-03.htm" else: htmltext = "30610-04.htm" elif st.getQuestItemsCount(3501) == 1: item = player.getInventory().getItemByItemId(3501) if item.getEnchantLevel() < 55: htmltext = "30610-03.htm" else: htmltext = "30610-04.htm" elif st.getQuestItemsCount(3502) == 1: item = player.getInventory().getItemByItemId(3502) if item.getEnchantLevel() < 55: htmltext = "30610-03.htm" else: htmltext = "30610-04.htm" elif id == State.STARTED: if npcId == CRONOS: htmltext = "30610-07.htm" if npcId == MIMYU: if st.getInt("id") == 1: st.set("id", "2") htmltext = "30747-01.htm" elif st.getInt("id") == 2: summon = player.getPet() if summon: if summon.getControlItem().getObjectId() == st.getInt( "summonOid"): htmltext = "30747-04.htm" else: htmltext = "30747-03.htm" else: htmltext = "30747-02.htm" elif st.getInt("id") == 0: htmltext = "30747-07.htm" elif st.getInt("id") > 0 and st.getInt( "id") < 15 and st.getQuestItemsCount(FT_LEAF) >= 1: htmltext = "30747-11.htm" elif st.getInt("id") == 15 and st.getQuestItemsCount( FT_LEAF) == 0: summon = player.getPet() if summon: if summon.getControlItem().getObjectId() == st.getInt( "summonOid"): st.set("id", "16") htmltext = "30747-13.htm" else: htmltext = "30747-14.htm" else: htmltext = "30747-12.htm" elif st.getInt("id") == 16: summon = player.getPet() if summon: htmltext = "30747-15.htm" elif (st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) == 1: if st.getQuestItemsCount(3500) == 1: item = player.getInventory().getItemByItemId(3500) if item.getObjectId() == st.getInt("summonOid"): #EvolvePet(player,item,4422) st.takeItems(3500, 1) st.giveItems(4422, 1) htmltext = "30747-16.htm" st.exitQuest(1) st.playSound("ItemSound.quest_finish") else: npc.setTarget(player) skill = SkillTable.getInstance().getInfo( 4167, 1) if skill != None: skill.getEffects(npc, player) htmltext = "30747-18.htm" elif st.getQuestItemsCount(3501) == 1: item = player.getInventory().getItemByItemId(3501) if item.getObjectId() == st.getInt("summonOid"): #EvolvePet(player,item,4423) st.takeItems(3501, 1) st.giveItems(4423, 1) htmltext = "30747-16.htm" st.exitQuest(1) st.playSound("ItemSound.quest_finish") else: npc.setTarget(player) skill = SkillTable.getInstance().getInfo( 4167, 1) if skill != None: skill.getEffects(npc, player) htmltext = "30747-18.htm" elif st.getQuestItemsCount(3502) == 1: item = player.getInventory().getItemByItemId(3502) if item.getObjectId() == st.getInt("summonOid"): #EvolvePet(player,item,4424) st.takeItems(3502, 1) st.giveItems(4424, 1) htmltext = "30747-16.htm" st.exitQuest(1) st.playSound("ItemSound.quest_finish") else: npc.setTarget(player) skill = SkillTable.getInstance().getInfo( 4167, 1) if skill != None: skill.getEffects(npc, player) htmltext = "30747-18.htm" else: htmltext = "30747-18.htm" elif (st.getQuestItemsCount(3500) + st.getQuestItemsCount(3501) + st.getQuestItemsCount(3502)) >= 2: htmltext = "30747-17.htm" return htmltext
def onAdvEvent (self, event, npc, player) : htmltext = event st = player.getQuestState(qn) if event == "learn": htmltext = "" st2 = player.getQuestState("136_MoreThanMeetsTheEye") if player.isSubClassActive(): htmltext = "8005-04.htm" elif not st2 or st2.getState() != State.COMPLETED : htmltext = "8005-03.htm" else: j=0 for i in SKILLITEMS: j+=st.getQuestItemsCount(i) if j > 0: self.onAcquireSkillList(npc,player) else: htmltext = "8005-04.htm" elif event == "cancel": if st.getQuestItemsCount(57) < 10000000: htmltext = "8005-07.htm" elif player.getSubClasses().size() == 0: htmltext = "8005-03.htm" elif player.isSubClassActive(): htmltext = "8005-04.htm" else: activeCertifications = 0 for var in QUESTVARSITEMS: for i in range(Config.MAX_SUBCLASS): qvar = st.getGlobalQuestVar(var+str(i+1)) if qvar.endswith(";") : activeCertifications += 1 elif qvar != "" and qvar != "0" : activeCertifications += 1 if activeCertifications == 0: htmltext = "8005-08.htm" else: for var in QUESTVARSITEMS: for i in range(Config.MAX_SUBCLASS): qvar = st.getGlobalQuestVar(var+str(i+1)) if qvar.endswith(";"): skill = SkillTable.getInstance().getInfo(int(qvar.replace(";","")), 1) if skill: qvar = st.getGlobalQuestVar(var+str(i+1)) skillId = int(qvar.replace(";","")) skillLevel = player.getSkillLevel(skillId) player.removeSkill(skill,skillLevel) st.saveGlobalQuestVar(var+str(i+1), "0") elif qvar != "" and qvar != "0" : Item = player.getInventory().getItemByObjectId(int(qvar)) if Item : player.destroyItem(qn, int(qvar), 1, player, 0) else : Item = player.getWarehouse().getItemByObjectId(int(qvar)) if Item : print "Somehow " + player.getName() + " put certification book into warehouse!" player.getWarehouse().destroyItem(qn, Item, 1, player, None) else: print "Somehow " + player.getName() + " his/her delete certification book!" st.saveGlobalQuestVar(var+str(i+1), "0") st.takeItems(57,10000000) htmltext = "8005-09.htm" player.sendSkillList() return htmltext
def onAdvEvent(self, event, npc, player): #檢測轉生條件 def check_rebirth_requirement(player): #檢測轉生要求等級 if player.getLevel() < requireLevel: return False st = player.getQuestState(qn) #檢測轉生要求道具及數量 for id, count in requireItem: if st.getQuestItemsCount(id) < count: return False #檢測轉生次數 if st.getInt('times') >= maxRebirthTimes: return False #限制副職業不能轉生 if player.isSubClassActive(): return False #檢測素質等級不能多於51 sixStatId = st.getInt('newSixStat') if player.getSkillLevel(sixStatId) >= 51: return False #全部檢測通過 return True #執行轉生 def doRebirth(player): st = player.getQuestState(qn) #扣除道具 for id, count in requireItem: st.takeItems(id, count) #降等 player.removeExpAndSp(player.getExp() - ExperienceTable.getInstance().getExpForLevel(levelAfterRebirth), player.getSp()) #記錄轉生次數 st.set('times', str(st.getInt('times')+1)) #移除技能 for i in player.getAllSkills(): if i.getId() not in sixStatSkills: if i.getId() not in remove_skill_blacklist: player.removeSkill(i) #轉種族 newClass = st.getInt('newClass') st.getPlayer().setClassId(newClass) if player.isSubClassActive(): player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass()) else: player.setBaseClass(player.getActiveClass()) #st.getPlayer().setBaseClass(newClass) #st.getPlayer().setActiveClass(newClass) player.broadcastUserInfo() player.rewardSkills() player.sendSkillList() #player.stopAllToggles() #player.broadcastUserInfo() #變身..用作暫時解決轉種族後人物怪怪的問題 #變身 瑪瑙獸 ID 617 skillId = 617 skillLevel = 1 skill = SkillTable.getInstance().getInfo(skillId, skillLevel) if skill: skill.getEffects(player, player) #5秒後解除變身 st.startQuestTimer('removeAllEffects', 5000) #player.untransform() #發道具獎勵 for id, count in rewardItem: st.giveItems(id, count) #發素質獎勵 if self.getFreeRebirthPoint(player) > 0: skillId = st.getInt('newSixStat') skillLevel = max(player.getSkillLevel(skillId), 1) player.addSkill(SkillTable.getInstance().getInfo(skillId, skillLevel + 1), True) return try: nEvent = int(event) except: nEvent = -1 #顯示 轉生狀態畫面 if event == 'request_info': return 'info.htm' #執行重設轉生素質 elif event == 'request_reset_sixstat': #移除六大素質技能 for i in player.getAllSkills(): if i.getId() in sixStatSkills: player.removeSkill(i) return 'info.htm' #顯示設定轉生素質獎勵對話 elif event == 'request_set_sixstat': return 'setSixStat.htm' #顯示 選擇新種族畫面 elif event == 'request_choice_class': return 'choiceClass.htm' #記錄 新種族 及 下一步 elif nEvent in baseClassID: st = player.getQuestState(qn) #記錄新種族 st.set('newClass', event) return "choiceSixStat.htm" #記錄 轉生素質獎勵 及 下一步 elif nEvent in sixStatSkills: st = player.getQuestState(qn) #記錄新素質要求 st.set('newSixStat', event) return "confirm.htm" #確定要求轉生 elif event == "request_rebirth": if check_rebirth_requirement(player): doRebirth(player) return "rebirth_ok.htm" else: return "rebirth_fail.htm" #移除所有狀態 elif event == 'removeAllEffects': for e in player.getAllEffects(): e.exit() #設定六大素質 elif event.split()[0] == 'require_sixstat_add': try: c, n, v = event.split() v = max(int(v), 0) i = sixStatName.index(n) except: print qn + ":錯誤 event:" + event return "" newV = max(player.getSkillLevel(sixStatSkills[i]), 1) + v needPoint = v if needPoint == 0 or newV >= 51 or self.getFreeRebirthPoint(player) < needPoint or player.isSubClassActive(): return "setSixStatFail.htm" else: skillId = sixStatSkills[i] skillLevel = newV player.addSkill(SkillTable.getInstance().getInfo(skillId, skillLevel), True) return "info.htm" else: print qn + ":不明的要求:" + event return "" return