def onTalk(self, npc, player): html = "fine" npcId = npc.getNpcId() st = player.getQuestState(qn) if not st: st = self.newQuestState(player) party = player.getParty() if not party: html = "32330-01.htm" else: have_quest = False wrong_Level = False for partyMember in party.getPartyMembers().toArray(): pst = partyMember.getQuestState("179_IntoTheLargeCavern") if pst: have_quest = True if partyMember.getLevel() < 15 or partyMember.getLevel( ) > 22 or partyMember.getClassId().level() != 0: wrong_Level = True player_name = partyMember.getName() if not have_quest: html = "32330-02.htm" elif player != party.getLeader(): party.broadcastToPartyMembers(SystemMessage(2185)) html = "32330-03.htm" elif wrong_Level: party.broadcastToPartyMembers( SystemMessage(2097).addString(player_name)) html = "32330-03.htm" else: for partyMember in party.getPartyMembers().toArray(): partyMember.teleToLocation(-111188, 74555, -12432) html = "" st.exitQuest(1) return html
def canMeJoin(self, player, clanid, pledgeType): clan = ClanTable.getInstance().getClan(clanid) if not clan: return False if clan.getCharPenaltyExpiryTime() > System.currentTimeMillis(): player.sendPacket(SystemMessageId.YOU_MUST_WAIT_BEFORE_ACCEPTING_A_NEW_MEMBER) return False if player.getClanId() != 0: sm = SystemMessage.getSystemMessage(SystemMessageId.S1_WORKING_WITH_ANOTHER_CLAN) sm.addString(player.getName()) player.sendPacket(sm) return False if player.getClanJoinExpiryTime() > System.currentTimeMillis(): sm = SystemMessage.getSystemMessage(SystemMessageId.C1_MUST_WAIT_BEFORE_JOINING_ANOTHER_CLAN) sm.addString(player.getName()) player.sendPacket(sm) return False if player.getLevel() > 40 or player.getClassId().level() >= 2: if pledgeType == -1: sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DOESNOT_MEET_REQUIREMENTS_TO_JOIN_ACADEMY) sm.addString(player.getName()) player.sendPacket(sm) player.sendPacket(SystemMessageId.ACADEMY_REQUIREMENTS) return False if clan.getSubPledgeMembersCount(pledgeType) >= clan.getMaxNrOfMembers(pledgeType): if pledgeType == 0: sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CLAN_IS_FULL) sm.addString(clan.getName()) player.sendPacket(sm) else: player.sendPacket(SystemMessageId.SUBCLAN_IS_FULL) return False return True
def useVoicedCommand(self, command, player, params): world = InstanceManager.getInstance().getWorld(player.getInstanceId()) if world and world.templateId >= 0: sm = SystemMessage.getSystemMessage(SystemMessageId.INSTANT_ZONE_CURRENTLY_INUSE_S1) sm.addInstanceName(world.templateId) player.sendPacket(sm) instanceTimes = InstanceManager.getInstance().getAllInstanceTimes(player.getObjectId()) hasMessage = False if instanceTimes: for instanceId in instanceTimes.keySet(): remainingTime = (instanceTimes.get(instanceId) - System.currentTimeMillis()) / 1000 if remainingTime > 60: if not hasMessage: hasMessage = True player.sendPacket(SystemMessageId.INSTANCE_ZONE_TIME_LIMIT) hours = (int) (remainingTime / 3600) minutes = (int) ((remainingTime%3600) / 60) sm = SystemMessage.getSystemMessage(SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES) sm.addInstanceName(instanceId) sm.addNumber(hours) sm.addNumber(minutes) player.sendPacket(sm) else: InstanceManager.getInstance().deleteInstanceTime(player.getObjectId(), instanceId) if not hasMessage: player.sendPacket(SystemMessageId.NO_INSTANCEZONE_TIME_LIMIT) return
def useVoicedCommand(self, command, player, params): world = InstanceManager.getInstance().getWorld(player.getInstanceId()) if world and world.templateId >= 0: sm = SystemMessage.getSystemMessage( SystemMessageId.INSTANT_ZONE_CURRENTLY_INUSE_S1) sm.addInstanceName(world.templateId) player.sendPacket(sm) instanceTimes = InstanceManager.getInstance().getAllInstanceTimes( player.getObjectId()) hasMessage = False if instanceTimes: for instanceId in instanceTimes.keySet(): remainingTime = (instanceTimes.get(instanceId) - System.currentTimeMillis()) / 1000 if remainingTime > 60: if not hasMessage: hasMessage = True player.sendPacket( SystemMessageId.INSTANCE_ZONE_TIME_LIMIT) hours = (int)(remainingTime / 3600) minutes = (int)((remainingTime % 3600) / 60) sm = SystemMessage.getSystemMessage( SystemMessageId.AVAILABLE_AFTER_S1_S2_HOURS_S3_MINUTES) sm.addInstanceName(instanceId) sm.addNumber(hours) sm.addNumber(minutes) player.sendPacket(sm) else: InstanceManager.getInstance().deleteInstanceTime( player.getObjectId(), instanceId) if not hasMessage: player.sendPacket(SystemMessageId.NO_INSTANCEZONE_TIME_LIMIT) return
def checkCondition(player): if not player.getLevel() >= 78: sm = SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT) sm.addCharName(player) player.sendPacket(sm) return False return True
def checkLeader(player) : party = player.getParty() if not party: player.sendPacket(SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER)) return False elif not player.getParty().isLeader(player): player.sendPacket(SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER)) return False else : return True
def getCertified(player, itemId, var): st = player.getQuestState(qn) qvar = st.getGlobalQuestVar(var) if qvar != "" and qvar != "0" : return "" item = player.getInventory().addItem("Quest", itemId, 1, player, player.getTarget()) st.saveGlobalQuestVar(var,str(item.getObjectId())) smsg = SystemMessage(SystemMessageId.EARNED_ITEM) smsg.addItemName(item) player.sendPacket(smsg) return
def getCertified(player, itemId, var): st = player.getQuestState(qn) qvar = st.getGlobalQuestVar(var) if qvar != "" and qvar != "0": return "" item = player.getInventory().addItem("Quest", itemId, 1, player, player.getTarget()) st.saveGlobalQuestVar(var, str(item.getObjectId())) smsg = SystemMessage(SystemMessageId.EARNED_ITEM) smsg.addItemName(item) player.sendPacket(smsg) return
def checkConditions(player, new): party = player.getParty() if not party: player.sendPacket(SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER)) return False for partyMember in party.getPartyMembers().toArray(): if not partyMember.getLevel() >= 70: player.sendPacket(SystemMessage(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER)) return False if not partyMember.isInsideRadius(player, 1000, False, False): sm = SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED) sm.addCharName(partyMember) player.sendPacket(sm) return False return True
def onAcquireSkill(self, npc, player, skill): if player.isSubClassActive(): player.sendMessage("You are trying to learn skill that u can't..") Util.handleIllegalPlayerAction( player, "Player " + player.getName() + " tried to learn skill that he can't!!!", Config.DEFAULT_PUNISH) return "false" st = player.getQuestState(qn) for i in SKILLITEMS: if skill.getId() in SUBSKILLS[i]: for var in QUESTVARSITEMS: if i in QUESTVARSITEMS[var]: for j in range(Config.MAX_SUBCLASS): qvar = st.getGlobalQuestVar(var + str(j + 1)) if qvar != "" and qvar != "0" and not qvar.endswith( ";"): Item = player.getInventory().getItemByObjectId( int(qvar)) if Item and Item.getItemId() == i: player.destroyItem(qn, int(qvar), 1, player, 0) st.saveGlobalQuestVar( var + str(j + 1), str(skill.getId()) + ";") return "true" player.sendPacket( SystemMessage(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL)) return "false"
def merge(self, player, item1OID, item2OID): inv = player.getInventory() item1 = inv.getItemByObjectId(int(item1OID)) item2 = inv.getItemByObjectId(int(item2OID)) if not self.check(player, item1, item2): return self.htm_header + "指定的道具出問題<BR>請確定道具能強化" + self.htm_footer if not self.removeRequirement(player): return self.htm_header + "需要金幣1個" + self.htm_footer item1enclvl = item1.getEnchantLevel() item2enclvl = item2.getEnchantLevel() enchant2 = item2.getEnchantLevel() inv.destroyItem(self.qn, item2, player, item2) if Rnd.get(100) > self.chance: self.updatePlayerInfo(player) return self.htm_header + "<font color=FF0000>合拼強化機率性失敗</font><BR>" + self.htm_select_part + self.htm_footer item1.setEnchantLevel(item1.getEnchantLevel()+Rnd.get(enchant2+1)) item1.updateDatabase() player.sendPacket(EnchantResult(0, 0, 0)) sm = SystemMessage.getSystemMessage(SystemMessageId.C1_SUCCESSFULY_ENCHANTED_A_S2_S3); sm.addCharName(player) sm.addNumber(item1.getEnchantLevel()) sm.addItemName(item1) player.sendPacket(sm) self.updatePlayerInfo(player) return self.htm_header + "<font color=FFFF00>恭喜! 合拼強化成功 強化度由 +%d 變為 +%d</font><BR>" % (item1enclvl, item1.getEnchantLevel()) + self.htm_select_part + self.htm_footer
def onTalk (self,npc,player) : htmltext = Quest.getNoQuestMsg(player) st = player.getQuestState(qn) if not st : return htmltext clan = player.getClan() npcId = npc.getNpcId() if player.getClan() == None or player.isClanLeader() == 0 : st.exitQuest(1) htmltext = "31331-0.htm" elif player.getClan().getLevel() < 5 : st.exitQuest(1) htmltext = "31331-0.htm" else : cond = st.getInt("cond") id = st.getState() if id == State.CREATED and cond == 0 : htmltext = "31331-1.htm" elif id == State.STARTED and cond == 1 : count = st.getQuestItemsCount(Claw) if not count : htmltext = "31331-4.htm" elif count >= 1 : htmltext = "31331-7.htm" # custom html st.takeItems(Claw,-1) reward = int(CLAN_POINTS_REWARD * count) clan.addReputationScore(reward,True) player.sendPacket(SystemMessage.getSystemMessage(1777).addNumber(reward)) clan.broadcastToOnlineMembers(PledgeShowInfoUpdate(clan)) return htmltext
def myJoinClan(self, player, clanid, pledgeType): clan = ClanTable.getInstance().getClan(clanid) if clan: player.sendPacket(JoinPledge(clanid)) # player.setPledgeType(L2Clan.SUBUNIT_ROYAL1) player.setPledgeType(pledgeType) if pledgeType == L2Clan.SUBUNIT_ACADEMY: player.setPowerGrade(9) player.setLvlJoinedAcademy(player.getLevel()) else: player.setPowerGrade(5) clan.addClanMember(player) player.setClanPrivileges(clan.getRankPrivs(5)) player.sendPacket(SystemMessageId.ENTERED_THE_CLAN) sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_JOINED_CLAN) sm.addString(player.getName()) clan.broadcastToOnlineMembers(sm) try: #GS 879 以後 if player.getClan().getCastleId() > 0: CastleManager.getInstance().getCastleByOwner(player.getClan()).giveResidentialSkills(player) if player.getClan().getFortId() > 0: FortManager.getInstance().getFortByOwner(player.getClan()).giveResidentialSkills(player) except: #GS 879 之前 if player.getClan().getHasCastle() > 0: CastleManager.getInstance().getCastleByOwner(player.getClan()).giveResidentialSkills(player) if player.getClan().getHasFort() > 0: FortManager.getInstance().getFortByOwner(player.getClan()).giveResidentialSkills(player) player.sendSkillList() clan.broadcastToOtherOnlineMembers(PledgeShowMemberListAdd(player), player) clan.broadcastToOnlineMembers(PledgeShowInfoUpdate(clan)) player.sendPacket(PledgeShowMemberListAll(clan, player)) player.setClanJoinExpiryTime(0) player.broadcastUserInfo()
def merge(self, player, item1OID, item2OID): inv = player.getInventory() item1 = inv.getItemByObjectId(int(item1OID)) item2 = inv.getItemByObjectId(int(item2OID)) if not self.check(player, item1, item2): return self.htm_header + "指定的道具出問題<BR>請確定道具能強化" + self.htm_footer if not self.removeRequirement(player): return self.htm_header + "需要金幣1個" + self.htm_footer item1enclvl = item1.getEnchantLevel() item2enclvl = item2.getEnchantLevel() enchant2 = item2.getEnchantLevel() inv.destroyItem(self.qn, item2, player, item2) if Rnd.get(100) > self.chance: self.updatePlayerInfo(player) return self.htm_header + "<font color=FF0000>合拼強化機率性失敗</font><BR>" + self.htm_select_part + self.htm_footer item1.setEnchantLevel(item1.getEnchantLevel() + Rnd.get(enchant2 + 1)) item1.updateDatabase() player.sendPacket(EnchantResult(0, 0, 0)) sm = SystemMessage.getSystemMessage( SystemMessageId.C1_SUCCESSFULY_ENCHANTED_A_S2_S3) sm.addCharName(player) sm.addNumber(item1.getEnchantLevel()) sm.addItemName(item1) player.sendPacket(sm) self.updatePlayerInfo(player) return self.htm_header + "<font color=FFFF00>恭喜! 合拼強化成功 強化度由 +%d 變為 +%d</font><BR>" % ( item1enclvl, item1.getEnchantLevel()) + self.htm_select_part + self.htm_footer
def onTalk(self, npc, player): htmltext = "<html><body>目前沒有執行任務,或條件不符。</body></html>" st = player.getQuestState(qn) if not st: return htmltext clan = player.getClan() npcId = npc.getNpcId() if player.getClan() == None or player.isClanLeader() == 0: st.exitQuest(1) htmltext = "31331-0.htm" elif player.getClan().getLevel() < 5: st.exitQuest(1) htmltext = "31331-0.htm" else: cond = st.getInt("cond") id = st.getState() if id == State.CREATED and cond == 0: htmltext = "31331-1.htm" elif id == State.STARTED and cond == 1: count = st.getQuestItemsCount(Claw) if not count: htmltext = "31331-4.htm" elif count >= 1: htmltext = "31331-7.htm" # custom html st.takeItems(Claw, -1) reward = int(CLAN_POINTS_REWARD * count) clan.addReputationScore(reward, True) player.sendPacket( SystemMessage.getSystemMessage(1777).addNumber(reward)) clan.broadcastToOnlineMembers(PledgeShowInfoUpdate(clan)) return htmltext
def onTalk (self,npc,player) : htmltext = "<html><body>目前沒有執行任務,或條件不符。</body></html>" st = player.getQuestState(qn) if not st : return htmltext clan = player.getClan() npcId = npc.getNpcId() if player.getClan() == None or player.isClanLeader() == 0 : st.exitQuest(1) htmltext = "30868-0a.htm" elif player.getClan().getLevel() < 5 : st.exitQuest(1) htmltext = "30868-0b.htm" else : cond = st.getInt("cond") raid = st.getInt("raid") id = st.getState() if id == State.CREATED and cond == 0 : htmltext = "30868-0c.htm" elif id == State.STARTED and cond == 1 and raid in REWARDS_LIST.keys() : npc,item,min,max=REWARDS_LIST[raid] count = st.getQuestItemsCount(item) CLAN_POINTS_REWARD = Rnd.get(min, max) if not count : htmltext = "30868-"+str(raid)+"a.htm" elif count == 1 : htmltext = "30868-"+str(raid)+"b.htm" st.takeItems(item,1) clan.addReputationScore(CLAN_POINTS_REWARD,True) player.sendPacket(SystemMessage.getSystemMessage(1777).addNumber(CLAN_POINTS_REWARD)) clan.broadcastToOnlineMembers(PledgeShowInfoUpdate(clan)) return htmltext
def onTalk (self,npc,player) : htmltext = "<html><body>目前沒有執行任務,或條件不符。</body></html>" st = player.getQuestState(qn) if not st : return htmltext clan = player.getClan() npcId = npc.getNpcId() if player.getClan() == None or player.isClanLeader() == 0 : st.exitQuest(1) htmltext = "31331-0a.htm" elif player.getClan().getLevel() < 6 : st.exitQuest(1) htmltext = "31331-0b.htm" else : cond = st.getInt("cond") raid = st.getInt("raid") id = st.getState() if id == State.CREATED and cond == 0 : htmltext = "31331-0c.htm" elif id == State.STARTED and cond == 1 and raid in REWARDS_LIST.keys() : npc,item,min,max=REWARDS_LIST[raid] count = st.getQuestItemsCount(item) CLAN_POINTS_REWARD = Rnd.get(min, max) if not count : htmltext = "31331-"+str(raid)+"a.htm" elif count == 1 : htmltext = "31331-"+str(raid)+"b.htm" st.takeItems(item,1) clan.addReputationScore(CLAN_POINTS_REWARD,True) player.sendPacket(SystemMessage.getSystemMessage(1777).addNumber(CLAN_POINTS_REWARD)) clan.broadcastToOnlineMembers(PledgeShowInfoUpdate(clan)) return htmltext
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 EvolvePet(player,item,striderControlItem) : con = L2DatabaseFactory.getInstance().getConnection() statement = con.prepareStatement("UPDATE items SET item_id =? WHERE object_id=? AND owner_id=?") statement.setInt(1, striderControlItem) statement.setInt(2, item.getObjectId()) statement.setInt(3, player.getObjectId()) statement.execute() statement.close() con.close() sm1 = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED) sm1.addItemName(item.getItemId()) sm1.addNumber(1) sm2 = SystemMessage.getSystemMessage(SystemMessageId.YOU_PICKED_UP_A_S1_S2) sm2.addNumber(item.getEnchantLevel()) sm2.addItemName(striderControlItem) player.sendPacket(sm1) player.sendPacket(sm2) player.sendPacket(ItemList(player, False)) return
def EvolvePet(player, item, striderControlItem): con = L2DatabaseFactory.getInstance().getConnection() statement = con.prepareStatement("UPDATE items SET item_id =? WHERE object_id=? AND owner_id=?") statement.setInt(1, striderControlItem) statement.setInt(2, item.getObjectId()) statement.setInt(3, player.getObjectId()) statement.execute() statement.close() con.close() sm1 = SystemMessage.getSystemMessage(SystemMessageId.S2_S1_DISAPPEARED) sm1.addItemName(item.getItemId()) sm1.addNumber(1) sm2 = SystemMessage.getSystemMessage(SystemMessageId.YOU_PICKED_UP_A_S1_S2) sm2.addNumber(item.getEnchantLevel()) sm2.addItemName(striderControlItem) player.sendPacket(sm1) player.sendPacket(sm2) player.sendPacket(ItemList(player, False)) 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("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 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 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.getSystemMessage(SystemMessageId.NO_MORE_SKILLS_TO_LEARN)) return ""
def onAcquireSkill (self, npc, player, skill) : if player.isSubClassActive(): player.sendMessage("You are trying to learn skill that u can't.."); Util.handleIllegalPlayerAction(player, "Player " + player.getName() + " tried to learn skill that he can't!!!", Config.DEFAULT_PUNISH); return "false" st = player.getQuestState(qn) for i in SKILLITEMS: if skill.getId() in SUBSKILLS[i]: for var in QUESTVARSITEMS: if i in QUESTVARSITEMS[var]: for j in range(Config.MAX_SUBCLASS): qvar = st.getGlobalQuestVar(var+str(j+1)) if qvar != "" and qvar != "0" and not qvar.endswith(";") : Item = player.getInventory().getItemByObjectId(int(qvar)) if Item and Item.getItemId() == i: player.destroyItem(qn,int(qvar), 1, player, 0) st.saveGlobalQuestVar(var+str(j+1),str(skill.getId())+";") return "true" player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL)) return "false"
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 checkConditions(player, new): party = player.getParty() if not party: player.sendPacket(SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER)) return False for partyMember in party.getPartyMembers().toArray(): if not partyMember.getLevel() >= 60: player.sendPacket(SystemMessage(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER)) return False if not partyMember.isInsideRadius(player, 1000, False, False): sm = SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED) sm.addCharName(partyMember) player.sendPacket(sm) return False return True
def checkCondition(player) : party = player.getParty() if not party : player.sendPacket(SystemMessage(SystemMessageId.NOT_IN_PARTY_CANT_ENTER)) return False if not player.getParty().isLeader(player) : player.sendPacket(SystemMessage(SystemMessageId.ONLY_PARTY_LEADER_CAN_ENTER)) return False membersCount = player.getParty().getMemberCount() if membersCount < 2 : player.sendPacket(SystemMessage(SystemMessageId.PARTY_EXCEEDED_THE_LIMIT_CANT_ENTER)) return False for partyMember in party.getPartyMembers().toArray() : if not partyMember.getLevel() >= 78 : sm = SystemMessage(SystemMessageId.C1_LEVEL_REQUIREMENT_NOT_SUFFICIENT) sm.addCharName(partyMember) player.sendPacket(sm) return False for partyMember in player.getParty().getPartyMembers().toArray() : if not partyMember.isInsideRadius(player, 500, False, False) : sm = SystemMessage(SystemMessageId.C1_IS_IN_LOCATION_THAT_CANNOT_BE_ENTERED) sm.addCharName(partyMember) player.sendPacket(sm) return False 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 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)
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