def onKill(self, npc, player, isPet): partyMember = self.getRandomPartyMemberState(player, State.STARTED) if not partyMember: return st = partyMember.getQuestState(qn) if st: if st.getState() == State.STARTED: npcId = npc.getNpcId() cond = st.getInt("cond") id = st.getInt("id") st2 = partyMember.getQuestState("606_WarWithVarkaSilenos") if not partyMember.isAlliedWithVarka(): if (npcId in Varka_One) or (npcId in Varka_Two) or ( npcId in Varka_Three): item = 0 if cond <= 5: if npcId in Varka_One: item, MAX, drop = One[cond] elif npcId in Varka_Two and cond > 1: item, MAX, drop = Two[cond] elif npcId in Varka_Three and cond > 2: item, MAX, drop = Three[cond] if item != 0: if st.getQuestItemsCount(drop) == MAX: item = 0 chance = Chance[npcId] #This is support for quest 606: War With Varka Silenos. Basically, if the person has both this quest and 606, then they only get one quest item, 50% chance for 606 quest item and 50% chance for this quest's item if st2: if (st.getRandom(2) == 1 or item == 0) and npcId in Chance_mane.keys(): item = 57 MAX = 100 drop = Mane chance = Chance_mane[npcId] giveReward(st, item, chance, MAX, drop) elif id == 2 and item != 0: giveReward(st, item, chance, MAX, drop) elif id == 2 and item != 0: giveReward(st, item, chance, MAX, drop) elif npcId in Ketra_Orcs: party = partyMember.getParty() if party: for member in party.getPartyMembers().toArray(): if Util.checkIfInRange(5000, player, member, True): pst = member.getQuestState(qn) if pst: decreaseAlliance(pst) else: decreaseAlliance(st) return
def onKill(self,npc,player,isPet): partyMember = self.getRandomPartyMemberState(player,State.STARTED) if not partyMember : return st = partyMember.getQuestState(qn) if st : if st.getState() == State.STARTED : npcId = npc.getNpcId() cond = st.getInt("cond") id = st.getInt("id") st2 = partyMember.getQuestState("606_WarWithVarkaSilenos") if not partyMember.isAlliedWithVarka() : if (npcId in Varka_One) or (npcId in Varka_Two) or (npcId in Varka_Three) : item = 0 if cond <= 5 : if npcId in Varka_One : item,MAX,drop = One[cond] elif npcId in Varka_Two and cond > 1: item,MAX,drop = Two[cond] elif npcId in Varka_Three and cond > 2 : item,MAX,drop = Three[cond] if item != 0 : if st.getQuestItemsCount(drop) == MAX : item = 0 chance = Chance[npcId] #This is support for quest 606: War With Varka Silenos. Basically, if the person has both this quest and 606, then they only get one quest item, 50% chance for 606 quest item and 50% chance for this quest's item if st2 : if (self.getRandom(2) == 1 or item == 0) and npcId in Chance_mane.keys() : item = 57 MAX = 100 drop = Mane chance = Chance_mane[npcId] giveReward(st,item,chance,MAX,drop) elif id == 2 and item != 0 : giveReward(st,item,chance,MAX,drop) elif id == 2 and item != 0 : giveReward(st,item,chance,MAX,drop) elif npcId in Ketra_Orcs : party = partyMember.getParty() if party : for member in party.getMembers().toArray() : if Util.checkIfInRange(5000, player, member, True) : pst = member.getQuestState(qn) if pst : decreaseAlliance(pst) else : decreaseAlliance(st) return
def onAdvEvent(self, event, npc, player): if event == "check": old_blacklist = self.blacklist[:] self.blacklist = [] for spawn in SpawnTable.getInstance().getSpawnTable(): if spawn.getNpcid() in self.NPCID: npc = spawn.getLastSpawn() for player in npc.getKnownList().getKnownPlayersInRadius(self.radius): playeroid = player.getObjectId() self.blacklist.append(playeroid) if playeroid not in old_blacklist: self.giveBuffs(npc, player) for player in npc.getKnownList().getKnownSummons().values(): if Util.checkIfInRange(self.radius, npc, player, True): playeroid = player.getObjectId() self.blacklist.append(playeroid) if playeroid not in old_blacklist: self.giveBuffs(npc, player)
def checkAllow(self, player, target): message = "" if not Util.checkIfInRange(2000, player, target, False): message = "%s 不在隊長範圍 2000 單位內" % target.getName() if not target.getLevel() >= 80: message = "%s 等級不足" % target.getName() if self.getQuestItemsCount(target, self.require_item_id) < self.require_item_count: message = "%s 所需道具不足 需要 %s %d 個" % (target.getName(), self.require_item_name, self.require_item_count) l, c = ( InstanceManager.getInstance().getInstanceTime(target.getObjectId(), self.InstanceTemplateId), System.currentTimeMillis(), ) if l > c: message = "%s 副本時間限制 %d 秒後可用" % (target.getName(), (l - c) / 1000) if len(message) > 0: player.sendMessage(message) if player.getObjectId() != target.getObjectId(): target.sendMessage(message) return False return True
def onAdvEvent(self, event, npc, player): if event == "check": old_blacklist = self.blacklist[:] self.blacklist = [] for spawn in SpawnTable.getInstance().getSpawnTable(): if spawn.getNpcid() in self.NPCID: npc = spawn.getLastSpawn() for player in npc.getKnownList().getKnownPlayersInRadius( self.radius): playeroid = player.getObjectId() self.blacklist.append(playeroid) if playeroid not in old_blacklist: self.giveBuffs(npc, player) for player in npc.getKnownList().getKnownSummons().values( ): if Util.checkIfInRange(self.radius, npc, player, True): playeroid = player.getObjectId() self.blacklist.append(playeroid) if playeroid not in old_blacklist: self.giveBuffs(npc, player)
def onKill(self, npc, player, isPet): #當怪物被殺時 會被呼叫.. player 是尾刀殺怪的玩家 party = player.getParty() #獲得尾刀玩家的隊伍 if party: #如果有組隊情況 members = [] #初始化 成員變數 cc = party.getCommandChannel() #取得 聯軍 (如果有) if cc: #有聯軍 members = cc.getMembers() #取得聯軍所有成員 else: #沒有聯軍 members = party.getMembers() #取得一般隊伍所有成員 for m in members: #在 members 變數取出每個成員 M if Util.checkIfInRange(2000, player, m, False): #計算 成員 M 跟 尾刀玩家的距離 是否在 2000 單位以內 #m.addItem(self.qn, itemid, itemcount, null, True) m.addItem(self.qn, 1, 1, None, True) #直接增加物品到 M 成員的背包中.. 第1個參數是解發的參考名稱, 第二參數是 物品 ID, 第三 數量, 參考, 是否發訊息 m.addItem(self.qn, 2, 1, None, True) #每增加一行 多掉一種物品.. 這裡 掉 六個 m.addItem(self.qn, 3, 1, None, True) m.addItem(self.qn, 32272, 1, None, True) m.addItem(self.qn, 35704, 1, None, True) m.addItem(self.qn, 18549, 1, None, True) else: #距離不在 2000 單位以內 player.sendMessage("不在範圍 不掉特別獎勵") #向玩家發出訊息 else: #如果沒有組隊情況 player.sendMessage("沒有隊伍 不掉特別獎勵") #向玩家發出訊息
def checkAllow(self, player, target): message = "" if not Util.checkIfInRange(2000, player, target, False): message = "%s 不在隊長範圍 2000 單位內" % target.getName() if not target.getLevel() >= 80: message = "%s 等級不足" % target.getName() if self.getQuestItemsCount( target, self.require_item_id) < self.require_item_count: message = "%s 所需道具不足 需要 %s %d 個" % (target.getName(), self.require_item_name, self.require_item_count) l, c = InstanceManager.getInstance().getInstanceTime( target.getObjectId(), self.InstanceTemplateId), System.currentTimeMillis() if l > c: message = "%s 副本時間限制 %d 秒後可用" % (target.getName(), (l - c) / 1000) if len(message) > 0: player.sendMessage(message) if player.getObjectId() != target.getObjectId(): target.sendMessage(message) return False return True
def onKill(self, npc, player, isPet): #當怪物被殺時 會被呼叫.. player 是尾刀殺怪的玩家 party = player.getParty() #獲得尾刀玩家的隊伍 if party: #如果有組隊情況 members = [] #初始化 成員變數 cc = party.getCommandChannel() #取得 聯軍 (如果有) if cc: #有聯軍 members = cc.getMembers() #取得聯軍所有成員 else: #沒有聯軍 members = party.getMembers() #取得一般隊伍所有成員 ipDict = {} for m in members: ipDict[self.getIP(m)] = '' if len(ipDict) != len(members): #有組員的 IP 相同. 沒有特別獎勵 return for m in members: #在 members 變數取出每個成員 M if Util.checkIfInRange(2000, player, m, False): #計算 成員 M 跟 尾刀玩家的距離 是否在 2000 單位以內 for itemid, minc, maxc, c in self.REWARD: if self.getRandom(1000000) <= c*10000: m.addItem(self.qn, itemid, self.getRandom(minc, maxc), None, True) else: #距離不在 2000 單位以內 self.sendMessage(player, "不在範圍 不掉特別獎勵") #向玩家發出訊息 else: #如果沒有組隊情況 self.sendMessage(player, "沒有隊伍 不掉特別獎勵") #向玩家發出訊息