def onTalk(self, npc, player): npcId = npc.getNpcId() st = player.getQuestState(qn) if not st : st = self.newQuestState(player) hellboundLevel = HellboundManager.getInstance().getLevel() if hellboundLevel < 10: return "<html><body>卡納夫:<br>你是誰?...<br>快滾開,我不想和你說話!</body></html>" if npcId == KANAF : party = player.getParty() if not party: return "32346-0.htm" if not checkCondition(player): return else : tele = PyObject() tele.x = 14205 tele.y = 255451 tele.z = -2025 instanceId = getExistingInstanceId(player) if instanceId == 0: instanceId = InstanceManager.getInstance().createDynamicInstance("HBTown.xml") if not self.worlds.has_key(instanceId): world = PyObject() world.rewarded=[] world.instanceId = instanceId world.instanceFinished = False world.guardsSpawned = False self.worlds[instanceId] = world self.world_ids.append(instanceId) self.currentWorld = instanceId print "地獄舊市區:使用即時地區:" +str(instanceId) + " 創造玩家:" + str(player.getName()) KLOC = KLOCS[Rnd.get(len(KLOCS))] newKeymaster = self.addSpawn(KEYMASTER,KLOC[0],KLOC[1],KLOC[2],KLOC[3],False,0,False,world.instanceId) self.keymaster = newKeymaster self.keymasterattacked = False newAmaskari = self.addSpawn(AMASKARI,19496,253125,-2030,0,False,0,False,world.instanceId) self.amaskari = newAmaskari self.amaskariattacked = False tele.instanceId = instanceId teleportPlayer(self,player,tele) party = player.getParty() if party != None: for partyMember in party.getPartyMembers().toArray(): teleportPlayer(self,partyMember,tele) else: for worldid in self.world_ids: if worldid == instanceId: foundworld = True if not worldid == instanceId: foundworld = False if not foundworld: player.sendPacket(SystemMessage.sendString("你的隊員已進入其它的即時地區。")) return tele.instanceId = instanceId teleportPlayer(self,player,tele) return
def enterInstance(self,player,template,teleto,quest): instanceId = 0 if not checkCondition(player): return instanceId party = player.getParty() if party != None : channel = party.getCommandChannel() if channel != None : members = channel.getMembers().toArray() else: members = party.getPartyMembers().toArray() else: members = [] #check for exising instances of party members or channel members for member in members : if member.getInstanceId()!= 0 : instanceId = member.getInstanceId() #exising instance if instanceId != 0: foundworld = False for worldid in self.world_ids: if worldid == instanceId: foundworld = True if not foundworld: player.sendPacket(SystemMessage.sendString("你的隊員已進入其它的即時地區。")) return 0 teleto.instanceId = instanceId teleportplayer(self,player,teleto) return instanceId else: instanceId = InstanceManager.getInstance().createDynamicInstance(template) if not self.worlds.has_key(instanceId): world = PyObject() world.rewarded=[] world.instanceId = instanceId world.instanceFinished = False world.guardsSpawned = False world.status = 0 self.worlds[instanceId] = world self.world_ids.append(instanceId) print "地獄舊市區:使用 " + template + " 即時地區:" +str(instanceId) + " 創造玩家:" + str(player.getName()) newNpc = self.addSpawn(AMASKARI,19496,253125,-2030,0,False,0,False,instanceId) quest.amaskari = newNpc quest.amaskariattacked = False loc = LOCS[Rnd.get(len(LOCS))] newNpc = self.addSpawn(KEYMASTER,loc[0],loc[1],loc[2],0,False,0,False,instanceId) quest.keymaster = newNpc quest.startQuestTimer("keySpawn1", 300000, None, None) quest.keymasterattacked = False # teleports player teleto.instanceId = instanceId teleportplayer(self,player,teleto) return instanceId return instanceId
def checkEnter(self, player) : entertime = self.loadGlobalQuestVar("511_NextEnter") if entertime.isdigit() : remain = long(entertime) - System.currentTimeMillis() if remain <= 0 : return True else : timeleft = remain / 60000 player.sendPacket(SystemMessage.sendString("從現在起將會限制進入即時地區:「要塞地下怪物收容所」。下一次的進場時間還剩" + str(timeleft) + "分鐘。")) return False else : return True
def checkEnter(self, player) : entertime = self.loadGlobalQuestVar("512_NextEnter") if entertime.isdigit() : remain = long(entertime) - System.currentTimeMillis() if remain <= 0 : return True else : timeleft = remain / 60000 player.sendPacket(SystemMessage.sendString("從現在起將會限制進入即時地區:「城堡地下監獄」。下一次的進場時間還剩" + str(timeleft) + "分鐘。")) return False else : return True
def enterInstance(self, player, template, teleto): instanceId = 0 if not checkEnter(self, player) : return 0 party = player.getParty() #check for other instances of party members if party : for partyMember in party.getPartyMembers().toArray(): st = partyMember.getQuestState(qn) if st : id = st.getState() if not id == State.STARTED : player.sendPacket(SystemMessage.sendString(partyMember.getName() + "隊伍成員沒有進行任務。")) return 0 else : player.sendPacket(SystemMessage.sendString(partyMember.getName() + "隊伍成員沒有進行任務。")) return 0 if partyMember.getInstanceId() != 0: instanceId = partyMember.getInstanceId() if debug: print "Rim Pailaka: found party member in instance:" + str(instanceId) else : if player.getInstanceId() != 0: instanceId = player.getInstanceId() #exising instance if instanceId != 0: if not checkConditions(player, False): return 0 foundworld = False for worldid in self.world_ids: if worldid == instanceId: foundworld = True if not foundworld: player.sendPacket(SystemMessage.sendString("你的隊員已進入其它的即時地區。")) return 0 teleto.instanceId = instanceId teleportplayer(self, player, teleto) return instanceId #new instance else: if not checkConditions(player, True): return 0 instanceId = InstanceManager.getInstance().createDynamicInstance(template) if not instanceId in self.world_ids: world = PyObject() world.rewarded = [] world.instanceId = instanceId self.worlds[instanceId] = world self.world_ids.append(instanceId) self.currentWorld = instanceId print "Rim Pailaka: started. " + template + " Instance: " + str(instanceId) + " created by player: " + str(player.getName()) self.saveGlobalQuestVar("511_NextEnter", str(System.currentTimeMillis() + 14400000)) raidid = 1 spawnRaid(self, world, raidid) #teleports player teleto.instanceId = instanceId for partyMember in party.getPartyMembers().toArray(): st = partyMember.getQuestState(qn) st.set("cond", "1") playerName = partyMember.getName() teleportplayer(self, partyMember, teleto) return instanceId return instanceId
def broadcastMessage(self, instanceId, text): Broadcast.toPlayersInInstance(SystemMessage.sendString(text), instanceId)
def enterInstance(self, player, template, teleto): instanceId = 0 if not checkEnter(self, player) : return 0 party = player.getParty() #check for other instances of party members if party : for partyMember in party.getPartyMembers().toArray(): st = partyMember.getQuestState(qn) if st : id = st.getState() if not id == State.STARTED : player.sendPacket(SystemMessage.sendString(partyMember.getName() + "隊伍成員沒有進行任務。")) return 0 else : player.sendPacket(SystemMessage.sendString(partyMember.getName() + "隊伍成員沒有進行任務。")) return 0 if partyMember.getInstanceId() != 0: instanceId = partyMember.getInstanceId() if debug: print "Rim Pailaka: found party member in instance:" + str(instanceId) else : if player.getInstanceId() != 0: instanceId = player.getInstanceId() #exising instance if instanceId != 0: if not checkConditions(player, False): return 0 foundworld = False for worldid in self.world_ids: if worldid == instanceId: foundworld = True if not foundworld: player.sendPacket(SystemMessage.sendString("你的隊員已進入其它的即時地區。")) return 0 teleto.instanceId = instanceId teleportplayer(self, player, teleto) return instanceId #new instance else: if not checkConditions(player, True): return 0 instanceId = InstanceManager.getInstance().createDynamicInstance(template) if not instanceId in self.world_ids: world = PyObject() world.rewarded = [] world.instanceId = instanceId self.worlds[instanceId] = world self.world_ids.append(instanceId) self.currentWorld = instanceId print "Rim Pailaka: started. " + template + " Instance: " + str(instanceId) + " created by player: " + str(player.getName()) self.saveGlobalQuestVar("512_NextEnter", str(System.currentTimeMillis() + 14400000)) raidid = 1 spawnRaid(self, world, raidid) #teleports player teleto.instanceId = instanceId for partyMember in party.getPartyMembers().toArray(): st = partyMember.getQuestState(qn) st.set("cond", "1") playerName = partyMember.getName() teleportplayer(self, partyMember, teleto) return instanceId return instanceId
def process_enchant(self, event, npc, player): itemoid, scrolloid = event itemoid, scrolloid = int(itemoid), int(scrolloid) inv = player.getInventory() item = inv.getItemByObjectId(itemoid) scroll = inv.getItemByObjectId(scrolloid) if item == None or scroll == None: return escroll = EnchantItemTable.getInstance().getEnchantScroll(scroll) if escroll == None: return dscroll = inv.destroyItem(self.qn, scrolloid, 1, player, item) if not dscroll: return if not item.getOwnerId() == player.getObjectId(): return if not item.isEnchantable(): return chance = self.getChance(scroll, item) if Rnd.get(100) < chance: item.setEnchantLevel(item.getEnchantLevel() + 1) item.updateDatabase() player.sendPacket(EnchantResult(0, 0, 0)) sm = SystemMessage.getSystemMessage(SystemMessageId.C1_SUCCESSFULY_ENCHANTED_A_S2_S3); sm.addCharName(player) sm.addNumber(item.getEnchantLevel()) sm.addItemName(item) if item.getEnchantLevel() in self.enchant_lv_notify: player.broadcastPacket(sm) if self.canFireWorks: skill = SkillTable.FrequentSkill.FIREWORK.getSkill() if skill: player.broadcastPacket(MagicSkillUse(player, player, skill.getId(), skill.getLevel(), skill.getHitTime(), skill.getReuseDelay())) else: player.sendPacket(sm) if self.isEnchantToSafe: if item.getEnchantLevel() < self.getSafeEnchantLevel(item): self.process_enchant(event, npc, player) # self.startQuestTimer(" ".join(["enchant"] + event), 250, npc, player, False) else: if escroll.isSafe(): player.sendPacket(SystemMessage.sendString("強化失敗 物品強化值不變")) # player.sendPacket(SystemMessageId.SAFE_ENCHANT_FAILED) player.sendPacket(EnchantResult(5, 0, 0)) else: if item.isEquipped(): if item.getEnchantLevel() > 0: sm = SystemMessage.getSystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED) sm.addNumber(item.getEnchantLevel()) sm.addItemName(item) player.sendPacket(sm) else: sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISARMED) sm.addItemName(item) player.sendPacket(sm) unequiped = inv.unEquipItemInSlotAndRecord(item.getLocationSlot()) iu = InventoryUpdate() for itm in unequiped: iu.addModifiedItem(itm) player.sendPacket(iu) player.broadcastUserInfo() if escroll.isBlessed(): player.sendPacket(SystemMessageId.BLESSED_ENCHANT_FAILED) if self.canEnchantZero: item.setEnchantLevel(0) item.updateDatabase() player.sendPacket(EnchantResult(3, 0, 0)) else: if self.canDestory: crystalId = item.getItem().getCrystalItemId() count = item.getCrystalCount() - ((item.getItem().getCrystalCount() + 1) / 2) if count < 1: count = 1 destroyItem = inv.destroyItem(self.qn, item, player, None) if not destroyItem: Util.handleIllegalPlayerAction(player, "Unable to delete item on enchant failure from player " + player.getName() + ", possible cheater !", Config.DEFAULT_PUNISH); player.sendPacket(EnchantResult(2, 0, 0)) crystals = None if crystalId: crystals = inv.addItem(self.qn, crystalId, count, player, destroyItem) sm = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S) sm.addItemName(crystals) sm.addItemNumber(count) player.sendPacket(sm) iu = InventoryUpdate() if destroyItem.getCount(): iu.addModifiedItem(destroyItem) else: iu.addRemovedItem(destroyItem) if crystalId and crystals: iu.addItem(crystals) player.sendPacket(iu) L2World.getInstance().removeObject(destroyItem) if crystalId: player.sendPacket(EnchantResult(1, crystalId, count)) else: player.sendPacket(EnchantResult(4, 0, 0)) elif self.canEnchantZero: player.sendPacket(SystemMessage.sendString("強化失敗 物品強化值變為0")) item.setEnchantLevel(0) item.updateDatabase() player.sendPacket(EnchantResult(3, 0, 0)) else: player.sendPacket(SystemMessage.sendString("強化失敗 物品強化值不變")) # player.sendPacket(SystemMessageId.SAFE_ENCHANT_FAILED) player.sendPacket(EnchantResult(5, 0, 0)) su = StatusUpdate(player) su.addAttribute(StatusUpdate.CUR_LOAD, player.getCurrentLoad()) player.sendPacket(su) player.sendPacket(ItemList(player, False)); player.broadcastUserInfo() player.setActiveEnchantItem(None)