def __init__(self, id = qID, name = qn, descr = qDesc): JQuest.__init__(self, id, name, descr) for id in self.NPCID: self.addStartNpc(id) self.addFirstTalkId(id) self.addTalkId(id) self.npcNameTable = NpcNameTable() #init pages rb_id = {} bosses = NpcTable.getInstance().getAllNpcOfClassType(["L2RaidBoss"]) for boss in bosses: lv = boss.getLevel() if lv not in rb_id: rb_id[lv] = [] rb_id[lv] += [boss.getNpcId()] rb_id = rb_id.items() rb_id.sort() for lv,id_list in rb_id: if lv in xrange(20,30): self.pages["2x"] += [[lv, id_list]] elif lv in xrange(30,40): self.pages["3x"] += [[lv, id_list]] elif lv in xrange(40,50): self.pages["4x"] += [[lv, id_list]] elif lv in xrange(50,60): self.pages["5x"] += [[lv, id_list]] elif lv in xrange(60,70): self.pages["6x"] += [[lv, id_list]] elif lv in xrange(70,80): self.pages["7x"] += [[lv, id_list]] elif lv in xrange(80,90): self.pages["8x"] += [[lv, id_list]] for name in self.backlistByName: self.backlist += self.getNpcIDsByName(name) print "Init:" + self.qn + " loaded", "rb:", len(bosses), "backlist:", len(self.backlist)
def addDrop(self, id, droplist): t = NpcTable.getInstance().getTemplate(id) for itemID, category, minD, maxD, chance in droplist: d = L2DropData() d.setItemId(itemID) d.setMinDrop(minD) d.setMaxDrop(maxD) d.setChance(chance) #100 * 10000 = 100% t.addDropData(d, category)
def spawnNpc(self, npcId, x, y, z, heading, instid): from com.l2jserver.gameserver.datatables import NpcTable from com.l2jserver.gameserver.model import L2Spawn from com.l2jserver.gameserver.datatables import SpawnTable npcTemplate = NpcTable.getInstance().getTemplate(npcId) npcSpawn = L2Spawn(npcTemplate) npcSpawn.setLocx(x) npcSpawn.setLocy(y) npcSpawn.setLocz(z) npcSpawn.setHeading(heading) npcSpawn.setAmount(1) npcSpawn.setInstanceId(instid) SpawnTable.getInstance().addNewSpawn(npcSpawn, False) npc = npcSpawn.doSpawn() #npc.setOnKillDelay(0) return npc
def spawnNpc(self, npcId, x, y, z, heading, instId): npcTemplate = NpcTable.getInstance().getTemplate(npcId) inst = InstanceManager.getInstance().getInstance(instId) try: npcSpawn = L2Spawn(npcTemplate) npcSpawn.setLocx(x) npcSpawn.setLocy(y) npcSpawn.setLocz(z) # npcSpawn.setHeading(heading) npcSpawn.setAmount(1) npcSpawn.setInstanceId(instId) SpawnTable.getInstance().addNewSpawn(npcSpawn, False) npc = npcSpawn.doSpawn() # npc.setOnKillDelay(0) # npc.setRunning() return npc except: print "spawnNPC error"
def spawnNpc(self, npcId, x, y, z, heading, instId): npcTemplate = NpcTable.getInstance().getTemplate(npcId) inst = InstanceManager.getInstance().getInstance(instId) try: npcSpawn = L2Spawn(npcTemplate) npcSpawn.setLocx(x) npcSpawn.setLocy(y) npcSpawn.setLocz(z) #npcSpawn.setHeading(heading) npcSpawn.setAmount(1) npcSpawn.setInstanceId(instId) SpawnTable.getInstance().addNewSpawn(npcSpawn, False) npc = npcSpawn.doSpawn() #npc.setOnKillDelay(0) #npc.setRunning() return npc except: print "spawnNPC error"
def my_spawn(player, mobid, dist, perm): mobt = NpcTable.getInstance().getTemplate(mobid) if not mobt: return spawn = L2Spawn(mobt) spawn.setInstanceId(0) if Config.SAVE_GMSPAWN_ON_CUSTOM: spawn.setCustom(True) spawn.setLocx(player.getX()-dist+Random().nextInt(dist*2)) spawn.setLocy(player.getY()-dist+Random().nextInt(dist*2)) spawn.setLocz(player.getZ()) spawn.setHeading(player.getHeading()) spawn.setAmount(1); spawn.setRespawnDelay(0) if perm: SpawnTable.getInstance().addNewSpawn(spawn, True) spawn.init() else: spawn.stopRespawn() spawn.doSpawn()
def __init__(self, id=qID, name=qn, descr=qDesc): JQuest.__init__(self, id, name, descr) for id in self.NPCID: self.addStartNpc(id) self.addFirstTalkId(id) self.addTalkId(id) self.npcNameTable = NpcNameTable() #init pages rb_id = {} bosses = NpcTable.getInstance().getAllNpcOfClassType(["L2RaidBoss"]) for boss in bosses: lv = boss.getLevel() if lv not in rb_id: rb_id[lv] = [] rb_id[lv] += [boss.getNpcId()] rb_id = rb_id.items() rb_id.sort() for lv, id_list in rb_id: if lv in xrange(20, 30): self.pages["2x"] += [[lv, id_list]] elif lv in xrange(30, 40): self.pages["3x"] += [[lv, id_list]] elif lv in xrange(40, 50): self.pages["4x"] += [[lv, id_list]] elif lv in xrange(50, 60): self.pages["5x"] += [[lv, id_list]] elif lv in xrange(60, 70): self.pages["6x"] += [[lv, id_list]] elif lv in xrange(70, 80): self.pages["7x"] += [[lv, id_list]] elif lv in xrange(80, 90): self.pages["8x"] += [[lv, id_list]] for name in self.backlistByName: self.backlist += self.getNpcIDsByName(name) print "Init:" + self.qn + " loaded", "rb:", len( bosses), "backlist:", len(self.backlist)
class Quest(JQuest): qID = -1 qn = "dropQuest" qDesc = "custom" NPCID = 100 allnpc = NpcTable.getInstance().getAllMonstersOfLevel(range(100)) htm_header = """<html><body scroll=no><title>物品掉率查詢</title><table border=0 cellpadding=0 cellspacing=0 width=294 height=359>""" htm_search = """<tr><td><table border=0 cellpadding=0 cellspacing=0 height=23 width=294 bgcolor=666666> <tr> <td>物品名稱</td> <td><edit var="value" width=100></td> <td><a action="bypass -h Quest %s search $value">搜尋</a></td> </tr> </table></td></tr>""" % qn htm_footer = """</table></body></html>""" def log(self, m): l = Logger.getLogger(self.qn) l.info(m) def getItemByName(self, name): it = ItemTable.getInstance() r = [] for id in xrange(it.getArraySize()): t = it.getTemplate(id) if t: if name in t.getName(): r.append(t) return r def getNpcByDropItem(self, itemid, issweep): r = [] for npc in self.allnpc: dd = npc.getDropData() if len(dd): for dc in dd: if issweep == dc.isSweep(): for item in dc.getAllDrops(): if item.getItemId() == itemid: r.append([npc, item.getChance()]) return r def __init__(self, id = qID, name = qn, descr = qDesc): self.qID, self.qn, self.qDesc = id, name, descr JQuest.__init__(self, id, name, descr) self.addStartNpc(self.NPCID) self.addFirstTalkId(self.NPCID) self.addTalkId(self.NPCID) self.log("Init:" + self.qn + " loaded") def onAdvEvent(self, event, npc, player): e = event.split() if e[0] == "search": if len(e) > 1: r = """<tr><td>%s</td></tr>""" % ("_"*49) r += """<tr><td><table border=0 cellpadding=0 cellspacing=0 bgcolor=330000 width=294 height=330>""" c = 0 for itemt in self.getItemByName(e[1]): r += """<tr><td><a action="bypass -h Quest %(qn)s searchdid %(id)d"> 掉落 </a></td><td><a action="bypass -h Quest %(qn)s searchsid %(id)d"> 回收 </a></td><td>%(name)s</td></tr>""" % {"qn":self.qn, "id":itemt.getItemId(), "name":itemt.getName()} c += 1 if c >= 20: break r += """</table></td></tr>""" return self.htm_header + self.htm_search + r + self.htm_footer elif e[0] == "searchdid" or e[0] == "searchsid": if len(e) > 1: d = self.getNpcByDropItem(int(e[1]), e[0] == "searchsid") #d = qsort(d, lambda a, b:a[1] < b[1], lambda a, b:a[1] >= b[1]) d = qsort(d, lambda a, b:a[1] >= b[1], lambda a, b:a[1] < b[1]) r = """<tr><td>%d</td></tr>""" % (len(d)) r += """<tr><td><table border=0 cellpadding=0 cellspacing=0 bgcolor=330000 width=294 height=330>""" c = 0 for npc, chance in d: r += """<tr><td>%d %s %0.4f%%</td></tr>""" % (npc.getLevel(), npc.getName(), chance * 1.0 / 10000) c += 1 if c >= 20: break r += """</table></td></tr>""" return self.htm_header + self.htm_search + r + self.htm_footer return self.onFirstTalk(npc, player) def onFirstTalk(self, npc, player): return self.htm_header + self.htm_search + self.htm_footer