#!/usr/bin/python # -*- coding: GBK -*- #×÷Õߣºifo #д½±ÀøÈÎÎñÎļþ½Å±¾ import ConfigParser import sys import os CParser = ConfigParser.ConfigParser() CParser.readfp(open('TaskManager.ini')) ToolRootPath = os.path.dirname(os.getcwd()) # ¹¤¾ß¸ù·¾¶ ScriptPath = os.getcwd() # ¹¤¾ß½Å±¾Â·¾¶ sys.path.append(ScriptPath + "\PythonLib\lib") import IPY_XMLLoader import CommFunc import Log4P Log4P.SetDebug(CParser.getint('TaskManager', 'Debug')) #дÈëquestsÎļþ QuestsPath = ToolRootPath + CParser.get('TaskManager', 'QUESTDATAPath') + "\quests" #¶ÁÈ¡µÄ½±Àø±í¸ñ·¾¶ TaskRewardPath = ToolRootPath + CParser.get('TaskManager', 'ReadDataPath') + "\TaskReward.txt" ServerRootPath = CParser.get('TaskManager', 'ServerRootPath') #½±ÀøÏà¹ØÅäÖà BrSign = CParser.get('Reward', 'BrSign') # »»Ðзû Reward_Space = CParser.get('Reward', 'Space') # ½±ÀøÖ®¼äµÄ¼ä¸ô FormatExp = CParser.get('Reward', 'FormatExp') # ¾­Ñé½±Àø¸ñʽ, ¿ÉÓòÎÊý: {value} - Öµ; {SUBSCRIPT} - ϱêÖµ MoneyTypeDict = eval(CParser.get('Reward', 'MoneyTypeDict')) # »õ±ÒÀàÐͶÔÓ¦Ãû³Æ¼°Í¼±êID {»õ±ÒÀàÐÍ:[»õ±ÒÃû³Æ, »õ±Òͼ±êÎïÆ·ID, ...], ...} FormatMoney = CParser.get('Reward', 'FormatMoney') # »õ±Ò½±Àø¸ñʽ, ¿ÉÓòÎÊý: {value} - Öµ; {SUBSCRIPT} - ϱêÖµ; {name} - »õ±ÒÃû³Æ; {ImgItemID} - »õ±Òͼ±êÎïÆ·ID FormatMoHun = CParser.get('Reward', 'FormatMoHun') # ħ»ê½±Àø¸ñʽ, ¿ÉÓòÎÊý: {value} - Öµ; {SUBSCRIPT} - ϱêÖµ FormatPrestige = CParser.get('Reward', 'FormatPrestige') # ÍþÍû½±Àø¸ñʽ, ¿ÉÓòÎÊý: {value} - Öµ; {SUBSCRIPT} - ϱêÖµ FormatPetExp = CParser.get('Reward', 'FormatPetExp') # ³èÎï¾­Ñé¸ñʽ, ¿ÉÓòÎÊý: {value} - Öµ; {SUBSCRIPT} - ϱêÖµ FormatTitle = CParser.get('Reward', 'FormatTitle') # ³ÆºÅ½±Àø¸ñʽ, ¿ÉÓòÎÊý: {value} - Öµ FormatInvestiture = CParser.get('Reward', 'FormatInvestiture') # ¾ôλ½±Àø¸ñʽ, ¿ÉÓòÎÊý: {value} - Öµ FormatItem = CParser.get('Reward', 'FormatItem') # ÎïÆ·½±Àø¸ñʽ, ¿ÉÓòÎÊý: {itemID} - ÎïÆ·ID; {itemCount} - ÊýÁ¿; {itemAuto} - µ¯¿ò; {attrInfo} - ÊôÐÔ; {imgInfo} - ͼƬÊôÐÔ; FormatSkillPoint = CParser.get('Reward', 'FormatSkillPoint') # ¼¼Äܵ㽱Àø¸ñʽ, ¿ÉÓòÎÊý: {value} - Öµ FormatDayMoney = CParser.get('Reward', 'FormatDayMoney') # ÿÈÕÈÎÎñ½±Àø - ½ð±Ò¸ñʽ, ¿ÉÓòÎÊý: {name} - »õ±ÒÃû³Æ FormatDayExp = CParser.get('Reward', 'FormatDayExp') # ÿÈÕÈÎÎñ½±Àø - ¾­Ñé¸ñʽ FormatDayPetExp = CParser.get('Reward', 'FormatDayPetExp') # ÿÈÕÈÎÎñ½±Àø - ³èÎï¾­Ñé¸ñʽ FormatDayMoHun = CParser.get('Reward', 'FormatDayMoHun') # ÿÈÕÈÎÎñ½±Àø - ħ»ê¸ñʽ FormatDayPrestige = CParser.get('Reward', 'FormatDayPrestige') # ÿÈÕÈÎÎñ½±Àø - ÍþÍû¸ñʽ FormatFamilyHornor = CParser.get('Reward', 'FormatFamilyHornor') # ÿÈÕÈÎÎñ½±Àø - Íæ¼Ò¹±Ï׸ñʽ FormatFamilyActvalue = CParser.get('Reward', 'FormatFamilyActvalue') # ÿÈÕÈÎÎñ½±Àø - Íæ¼Ò»îÔ¾¶È¸ñʽ FormatFamilyMoney = CParser.get('Reward', 'FormatFamilyMoney') # ÿÈÕÈÎÎñ½±Àø - ¼Ò×å×ʽð¸ñʽ FormatEventHornor = CParser.get('Reward', 'FormatEventHornor') # ÿÈÕÈÎÎñ½±Àø - ¼Ò×åÈÙÓþ¸ñʽ FormatFabaoExp = CParser.get('Reward', 'FormatFabaoExp') # ÿÈÕÈÎÎñ½±Àø - ·¨±¦¾­Ñé¸ñʽ xmlkey = 0 def GetNumText(num): num = int(num) if num >= 100000000: return "%%0.%dfE" % (max(0, 3 - len(str(num / 100000000)))) % (num / 100000000.0) if num >= 10000: return "%%0.%dfW" % (max(0, 3 - len(str(num / 10000)))) % (num / 10000.0) return "%s" % num class TaskRewardItemType: ItemID = 0 ItemCount = 0 ItemAuto = 0 ItemPro = "" ItemImgInfo = ""#ͼƬÀ©Õ¹ÐÅÏ¢ class TaskRewardType: ID = 0 Name = '' Step = 0 #Ìá½»²½Öè,ÉèÖÃΪÌύ״̬ DescriptIndex = 0#ÃèÊöË÷Òý, ÔÚÕâ¸öµØ·½¸ø½±Àø RewardTypeName = '' #½±ÀøÀàÐÍ RewardType = 0 #·ÖÀà RewardTypeName2 = '' #½±ÀøÀàÐÍ RewardType2 = 0 #·ÖÀà Exp = 0 PetExp = 0 # ³èÎï¾­Ñé MoHun = 0 # ÁéÁ¦ Prestige = 0 # ÍþÍû Gold = 0 GoldPaper = 0 Silver = 0 SilverPaper = 0 TitleID = 0 InvestitureID = 0 TaskRewardItem = list() #TaskRewardItemType SkillPoint = 0 OpenBack = 0 Notify = '' #notify BigNotify = '' IsDayEvent = 0 IsTrackInfoShowReward = 0 # ÈÎÎñÄ¿±êÒýµ¼ÊÇ·ñ¸½¼Ó½±ÀøÐÅÏ¢ Pos = 0 def __init__(self): self.TaskRewardItem = list() def __GetLine(self, line): result = line[self.Pos] self.Pos += 1 result = result.strip() return result def Read(self, line, allItemIDList): self.Pos = 0 line = line.split('\t') self.ID = self.__GetLine(line) self.Name = self.__GetLine(line) self.Step = self.__GetLine(line) #Ìá½»²½Öè,ÉèÖÃΪÌύ״̬ self.DescriptIndex = self.__GetLine(line)#ÃèÊöË÷Òý, ÔÚÕâ¸öµØ·½¸ø½±Àø self.RewardTypeName = self.__GetLine(line) #½±ÀøÀàÐÍ self.RewardType = self.__GetLine(line) #·ÖÀà self.RewardTypeName2 = self.__GetLine(line) #½±ÀøÀàÐÍ2 self.RewardType2 = self.__GetLine(line) #·ÖÀà2 self.Exp = self.__GetLine(line) self.PetExp = self.__GetLine(line)#³èÎï¾­Ñé self.MoHun = self.__GetLine(line)#ÁéÁ¦ self.Prestige = self.__GetLine(line)#ÍþÍû self.Gold = self.__GetLine(line) self.GoldPaper = self.__GetLine(line) self.Silver = self.__GetLine(line) self.SilverPaper = self.__GetLine(line) self.TitleID = self.__GetLine(line) self.InvestitureID = self.__GetLine(line) for i in range(0, 3): curItemID = self.__GetLine(line) # if self.ID == '9': # print self.Pos # print curItemID intItemID = CommFunc.ToIntDef(curItemID, 0) if intItemID == 0: #¼ÌÐøÍùÏÂÕÒ4¸ö self.__GetLine(line) self.__GetLine(line) self.__GetLine(line) self.__GetLine(line) continue if intItemID not in allItemIDList: Log4P.Error("ÈÎÎñ½±ÀøÎïÆ·ID²»´æÔÚ: ÈÎÎñID=%s,ItemID=%s" % (self.ID, intItemID)) return curTaskRewardItemType = TaskRewardItemType() curTaskRewardItemType.ItemID = curItemID curTaskRewardItemType.ItemCount = self.__GetLine(line) # if self.ID == '9': # print curTaskRewardItemType.ItemCount # print self.Pos # print line curTaskRewardItemType.ItemAuto = self.__GetLine(line) curTaskRewardItemType.ItemPro = self.__GetLine(line) curTaskRewardItemType.ItemImgInfo = self.__GetLine(line) self.TaskRewardItem.append(curTaskRewardItemType) self.SkillPoint = self.__GetLine(line) self.OpenBack = self.__GetLine(line) self.Notify = self.__GetLine(line) #notify self.BigNotify = self.__GetLine(line) self.IsDayEvent = self.__GetLine(line) self.IsTrackInfoShowReward = CommFunc.ToIntDef(self.__GetLine(line), 0) return True def __GetMoneyText(self, result, moneyType, value): if value != '': if result: result.append(Reward_Space) SUBSCRIPT = GetNumText(value) result.append(FormatMoney.replace("{value}", value).replace("{SUBSCRIPT}", SUBSCRIPT)\ .replace("{name}", self.__GetMoneyTextByType(moneyType))\ .replace("{ImgItemID}", str(self.__GetMoneyImgByType(moneyType)))) return def __GetRewardText(self, result, value, rewardFormat): if CommFunc.ToIntDef(value, 0) != 0: if result: result.append(Reward_Space) SUBSCRIPT = GetNumText(value) result.append(rewardFormat.replace("{value}", value).replace("{SUBSCRIPT}", SUBSCRIPT)) return def __GetDayMoneyText(self, result, name, value): if value != '': if result: result.append(Reward_Space) result.append(FormatDayMoney.replace("{name}", name)) return def __GetDayRewardText(self, result, value, rewardFormat): if CommFunc.ToIntDef(value, 0) != 0: if result: result.append(Reward_Space) result.append(rewardFormat) return def GetMaxItemGive(self): maxCnt = 0 for item in self.TaskRewardItem: curID = CommFunc.ToIntDef(item.ItemID, 0) if curID == 0: continue maxCnt += 1 return maxCnt def GetMsgInfoRewardNode(self): ''' Ä¿±êÒýµ¼¸½¼ÓµÄ½±ÀøÐÅÏ¢ÄÚÈÝչʾ, ĿǰÔݶ¨Ö»ÏÔʾһÐÐ Ö»ÏÔʾһ¸ö½±Àø£¬°´ÓÅÏȼ¶ÏÔʾ£¬ÓÅÏȼ¶ÈçÏ£¬ÈçÓÐÐèÒª×Ô¼ºµ÷Õû ÎïÆ·½±Àø > ¾­Ñé > ½ð±Ò > Ê¥Áé ''' showLine = 1 # Ö»ÏÔʾһÐÐ, ÓÐÐèÒªµ÷ÕûÐÐÊýÐ޸ĴËÖµ if showLine <= 0: return '' resultHead = '
¡¡¡¡½±Àø£º' # ½±ÀøÊ×ÐÐÄÚÈÝÍ· resultHead2 = '
¡¡¡¡¡¡¡¡¡¡' # ½±Àø·ÇÊ×ÐÐÄÚÈÝÍ· result = [] # ĿǰÔÝÖ»Ö§³ÖÎïÆ· for item in self.TaskRewardItem: if item.ItemID == '': continue itemCountStr = "" if int(item.ItemCount) > 1: itemCountStr = "`cf417f7*%s" % str(item.ItemCount) # ¸öÊý¸ñʽ result.append('`cf717f4%s' % (item.ItemID, item.ItemPro, item.ItemID, itemCountStr)) if len(result) >= showLine: break if len(result) < showLine and self.Exp: result.append('`cf717f4%s ¾­Ñé' % (GetNumText(self.Exp))) if len(result) < showLine and self.Silver: result.append('`cf717f4%s %s' % (GetNumText(self.Silver), self.__GetMoneyTextByType(3))) if len(result) < showLine and self.MoHun: result.append('`cf717f4%s ÁéÁ¦' % (GetNumText(self.MoHun))) if not result: return '' resultStr = '' for i, line in enumerate(result): resultStr += '%s%s\r\n' % (resultHead if i == 0 else resultHead2, line) return resultStr def GetMsgNode(self): ## ¿Í»§¶ËÓõÄxml½ÚµãÐÅÏ¢£¬¸ñʽ¿ÉÅäÖà result = [] self.__GetRewardText(result, self.Exp, FormatExp) self.__GetMoneyText(result, 1, self.Gold) self.__GetMoneyText(result, 2, self.GoldPaper) self.__GetMoneyText(result, 3, self.Silver) self.__GetMoneyText(result, 4, self.SilverPaper) self.__GetRewardText(result, self.MoHun, FormatMoHun) self.__GetRewardText(result, self.Prestige, FormatPrestige) self.__GetRewardText(result, self.PetExp, FormatPetExp) self.__GetRewardText(result, self.TitleID, FormatTitle) self.__GetRewardText(result, self.InvestitureID, FormatInvestiture) self.__GetRewardText(result, self.SkillPoint, FormatSkillPoint) for item in self.TaskRewardItem: if item.ItemID == '': continue itemCountStr = str(item.ItemCount) if result: result.append(Reward_Space) result.append(FormatItem.replace("{itemID}", item.ItemID).replace("{itemCount}", itemCountStr)\ .replace("{itemAuto}", item.ItemAuto).replace("{attrInfo}", item.ItemPro)\ .replace("{imgInfo}", item.ItemImgInfo)) # if self.OpenBack != '': # if result: # result.append('¡¡¡¡') # result.append('1ÐС¡°ü¹üÀ¸') # result.append('
') if self.IsDayEvent == '1': #ÊÇÿÈÕÈÎÎñ, Ìí¼ÓÿÈÕÈÎÎñµÄ¾­Ñé½±Àø self.__GetDayEventText(result) result.append(BrSign) # ×îºó¼ÓÉÏ»»ÐÐ resultStr = '' for line in result: resultStr += '%s\r\n' % line ## ¿Í»§¶Ë¸ñʽ·Çxml£¬ÔÝʱɽկ resultStr = "" % resultStr return resultStr def __GetMoneyTextByType(self, moneyType): return MoneyTypeDict[int(moneyType)][0] def __GetMoneyImgByType(self, moneyType): return MoneyTypeDict[int(moneyType)][1] def __GetDayEventText(self, result): curPath = os.path.join(QuestsPath, str(self.ID), 'reward.xml') if os.path.isfile(curPath) != True: return curLoader = IPY_XMLLoader.IPY_XMLLoader() curLoader.LoadFromFile(curPath) rewardsNode = curLoader.GetNodeList().FindNode('rewards') curNode = rewardsNode.GetChild(0) if curNode == None or curNode.IsEmpty(): #print curPath return self.__GetDayRewardText(result, curNode.GetAttribute('exp'), FormatDayExp) self.__GetDayRewardText(result, curNode.GetAttribute('pet_exp'), FormatDayPetExp) self.__GetDayRewardText(result, curNode.GetAttribute('MoHun'), FormatDayMoHun) self.__GetDayRewardText(result, curNode.GetAttribute('Prestige'), FormatDayPrestige) if CommFunc.ToIntDef(curNode.GetAttribute('money'), 0) != 0: self.__GetDayMoneyText(result, self.__GetMoneyTextByType(rewardsNode.GetAttribute('moneytype')), curNode.GetAttribute('money')) #curNode.GetAttribute('truck_money') #curNode.GetAttribute('item') self.__GetDayRewardText(result, curNode.GetAttribute('player_family_hornor'), FormatFamilyHornor) self.__GetDayRewardText(result, curNode.GetAttribute('player_family_active_value'), FormatFamilyActvalue) self.__GetDayRewardText(result, curNode.GetAttribute('family_money'), FormatFamilyMoney) self.__GetDayRewardText(result, curNode.GetAttribute('family_hornor'), FormatEventHornor) self.__GetDayRewardText(result, curNode.GetAttribute('fabao_exp'), FormatFabaoExp) return def GetActionNode(self): ## ·þÎñ¶ËÓõÄxml½ÚµãÐÅÏ¢£¬¸ñʽдËÀ result = [] if self.Exp != '': result.append('' % self.Exp) if self.PetExp != '': result.append('' % self.PetExp) if self.MoHun != '': result.append('' % self.MoHun) if self.Prestige != '': result.append('' % self.Prestige) if self.Gold != '': result.append('' % self.Gold) if self.GoldPaper != '': result.append('' % self.GoldPaper) if self.Silver != '': result.append('' % self.Silver) if self.SilverPaper != '': result.append('' % self.SilverPaper) if self.TitleID != '': result.append('' % self.TitleID) if self.InvestitureID != '': result.append('' % self.InvestitureID) for item in self.TaskRewardItem: if item.ItemID == '': continue elif item.ItemAuto != '': result.append('' % (item.ItemID, item.ItemCount, item.ItemPro)) result.append('' % (item.ItemAuto, item.ItemID)) continue result.append('' % (item.ItemID, item.ItemCount, item.ItemPro)) if self.SkillPoint != '': result.append('' % self.SkillPoint) if self.OpenBack != '': result.append('' % self.OpenBack) if self.Notify != '': result.append('' % self.Notify) if self.BigNotify != '': result.append('' % self.Notify) if self.IsDayEvent.strip() == '1': result.append('') resultStr = '' for line in result: resultStr += '%s\r\n' % line return resultStr g_taskRewardDict = {} # {missionID:{DescriptIndex:TaskRewardType, ...}, ...} #abc = TaskRewardType() #abc.TaskRewardItem.append(TaskRewardItemType()) #print abc.GetActionNode() #¶ÁÈ¡Îı¾ def Read(): global g_taskRewardDict #µ±Ç°·þÎñÆ÷ËùÓÐÎïÆ·ID, ÐèÈ·±£±¾µØ·þÎñÆ÷tagChinItem.txt±íÎļþÊÇ×îÐ嵀 allItemIDList = [] chinItemPath = ServerRootPath + "\\db\\PyMongoDataServer\\SysDB\\tagChinItem.txt" if not os.path.isfile(chinItemPath): Log4P.Error("ÕÒ²»µ½·þÎñ¶ËÎïÆ·±í·¾¶!", chinItemPath, "ÇëÐÞ¸Ä TaskManager.ini ÖеÄÅäÖà ServerRootPath") return chinItem = open(chinItemPath) for line in chinItem.readlines(): itemInfoList = line.split('\t') if not itemInfoList: continue itemID = itemInfoList[0] if not itemID.isdigit(): continue itemID = int(itemID) allItemIDList.append(itemID) #¶ÁÈ¡Îļþ file = open(TaskRewardPath, 'r') readList = file.readlines() for line in readList: if line.strip() == '': continue #ʹÓÃÖÆ±í·û·Ö¸ôÄÚÈÝ taskReward = TaskRewardType() if not taskReward.Read(line, allItemIDList): return if CommFunc.ToIntDef(taskReward.ID, 0) == 0: continue if g_taskRewardDict.has_key(taskReward.ID) == False: g_taskRewardDict[taskReward.ID] = {} if taskReward.DescriptIndex == '': taskReward.DescriptIndex = 0 if g_taskRewardDict[taskReward.ID].has_key(taskReward.DescriptIndex) == False: g_taskRewardDict[taskReward.ID][taskReward.DescriptIndex] = list() #print taskReward.DescriptIndex #print taskReward.ID g_taskRewardDict[taskReward.ID][taskReward.DescriptIndex].append(taskReward) return True #¸ù¾ÝÃèÊöË÷ÒýÕÒµ½×î½Ó½üµÄÈÎÎñÁбí def GetMinQuestList(descIndex, questList): minAbs = -1 result = None for key in questList.keys(): keyInt = int(key) curAbs = keyInt - descIndex if curAbs < 0: continue #print 'key = %s descIndex = %s'%(key, descIndex) if minAbs == -1 or minAbs > curAbs: minAbs = curAbs result = questList[key] #print minAbs, descIndex #print 'd' return result def CheckFileHavePackCheck(curFile, questID, giveItemCnt): xmlLoader = IPY_XMLLoader.IPY_XMLLoader() #print curFile xmlLoader.LoadFromFile(curFile) questNode = xmlLoader.GetNodeList().FindNode('event').FindChildNode('quest') for i in range(questNode.GetChildCount()): embranchmentNode = questNode.GetChild(i) #conditionsNode = embranchmentNode.FindChildNode('conditions') answersNode = embranchmentNode.FindChildNode('answers') if answersNode == None or answersNode.IsEmpty(): continue for answerIndex in range(answersNode.GetChildCount()): answerNode = answersNode.GetChild(answerIndex) answer_actionsNode = answerNode.FindChildNode('answer_actions') #------------------------------------------------ #Åж¨ÊÇ·ñÊÇÏÈɾ³ýÎïÆ·, ÔÙ¸ø½±ÀøµÄ, Èç¹ûÊÇÕâÖÖ, ¾Í²»ÓÃÅж¨°ü¹ü, Ö±½Ó·µ»ØTrue haveDelItem = 0 havereward_action = False for answer_actionsNodeIndex in range(answer_actionsNode.GetChildCount()): actionNode = answer_actionsNode.GetChild(answer_actionsNodeIndex) if actionNode.GetNodeName().lower() == 'del_item': haveDelItem += 1 elif actionNode.GetNodeName().lower() == 'reward_action': havereward_action = True if haveDelItem and havereward_action and giveItemCnt == haveDelItem: return True checkItemDel = 0 if haveDelItem and havereward_action: checkItemDel = haveDelItem #------------------------------------------------ answer_conditionsNode = answerNode.FindChildNode('answer_conditions') for answer_conditionsNodeIndex in range(answer_conditionsNode.GetChildCount()): curNode = answer_conditionsNode.GetChild(answer_conditionsNodeIndex) if curNode.GetNodeName() == 'space' and int(curNode.GetAttribute('value')) == giveItemCnt - 1 - checkItemDel: return True return def CheckMissionItemRequire(filePath, questID, giveItemCnt): visitPath = os.path.join(filePath, 'on_visit') if not os.path.isdir(visitPath): return result = False for dir in os.listdir(visitPath): extText = os.path.splitext(dir) if len(extText) < 2: continue if extText[1].lower() != '.xml': continue curFile = os.path.join(visitPath, dir) result = CheckFileHavePackCheck(curFile, questID, giveItemCnt) if result == True: break if result != True: print 'quest Error = %s, filePath = %s' % (questID, filePath) return #¶ÁÈ¡QuestÎļþÏÂÎļþ def ReadSingleQuestInfo(filePath, questID): if g_taskRewardDict.has_key(str(questID)) != True: return if questID == 0: return fileName = os.path.join(filePath, '%d.xml' % questID) #rewardName = 'reward.xml' if os.path.isfile(fileName) != True: return questDict = g_taskRewardDict[str(questID)] xmlLoader = IPY_XMLLoader.IPY_XMLLoader() xmlLoader.LoadFromFile(fileName) descNode = xmlLoader.GetNodeList().FindNode('quests').FindChildNode('quest').FindChildNode('descriptions') mInfoMsgNode = None needCheckItemQuest = 0 for i in range(descNode.GetChildCount()): curDesc = descNode.GetChild(i) curQuestList = GetMinQuestList(i, questDict) if curQuestList == None: continue #print 'i = %s'%(i) #print curQuestList[0].DescriptIndex #ɾ³ýrewards½ÚµãÏÂÃæµÄÄÚÈÝ rewardsNode = curDesc.FindChildNode('rewards') #*************************************************************************************** #Ô­ÎÞrewardsNode½Úµã²»´¦Àí£¬Ð°æÔö¼ÓrewardsNode½Úµã if rewardsNode == None or rewardsNode.IsEmpty() : print "ÈÎÎñ%sÎÞ½±Àø½Úµã£¬·µ»Ø" % str(questID) #continue curDesc.AddChild('rewards') CommFunc.DelXML(rewardsNode) needSetReward = False mInfoMsgNode = None m_info_rewardsNode = None missionInfoNode = curDesc.FindChildNode('mission_info') if missionInfoNode and not missionInfoNode.IsEmpty(): mInfoMsgNode = missionInfoNode.FindChildNode('msg') if mInfoMsgNode and not mInfoMsgNode.IsEmpty(): m_info_rewardsNode = mInfoMsgNode.FindChildNode('m_info_rewards') if m_info_rewardsNode and not m_info_rewardsNode.IsEmpty(): CommFunc.DelXML(m_info_rewardsNode) for curQuest in curQuestList: if len(curQuest.TaskRewardItem) != 0: #print len(curQuest.TaskRewardItem) needCheckItemQuest = curQuest.GetMaxItemGive() #needCheckItemQuest = True if curQuest.IsDayEvent == '2': continue rewardNode = rewardsNode.AddChild('reward') if curQuest.RewardTypeName != '': #rewardNode.SetAttribute(curQuest.RewardTypeName, curQuest.RewardType) rewardNode.SetAttribute('type', curQuest.RewardTypeName) rewardNode.SetAttribute('value', curQuest.RewardType) #print "RewardTypeName:%s"%str(curQuest.RewardTypeName) #print "RewardType:%s"%str(curQuest.RewardType) if curQuest.RewardTypeName2 != '': rewardNode.SetAttribute('type2', curQuest.RewardTypeName2) rewardNode.SetAttribute('value2', curQuest.RewardType2) #Éú³ÉMsg½Úµã msgNode = rewardNode.AddChild('msg') actionsNode = rewardNode.AddChild('actions') global xmlkey CommFunc.AddXML(msgNode, curQuest.GetMsgNode(), str(xmlkey)) xmlkey += 1 if int(curQuest.DescriptIndex) == i: actionNode = actionsNode.AddChild('action') CommFunc.AddXML(actionNode, curQuest.GetActionNode(), str(xmlkey)) xmlkey += 1 needSetReward = True #×·×ÙÐÅÏ¢¸½¼Ó½±ÀøÐÅÏ¢ if curQuest.IsTrackInfoShowReward and mInfoMsgNode: if not m_info_rewardsNode or m_info_rewardsNode.IsEmpty(): m_info_rewardsNode = mInfoMsgNode.AddChild('m_info_rewards') childName = "m_info_reward" if curQuest.RewardTypeName != '' and curQuest.RewardTypeName.lower() == 'job' and \ curQuest.RewardTypeName2 != '' and curQuest.RewardTypeName2.lower() == 'sex': childName = "%s_J%s_S%s" % (childName, curQuest.RewardType, curQuest.RewardType2) elif curQuest.RewardTypeName != '' and curQuest.RewardTypeName.lower() == 'job': childName = "%s_J%s" % (childName, curQuest.RewardType) elif curQuest.RewardTypeName2 != '' and curQuest.RewardTypeName2.lower() == 'sex': childName = "%s_S%s" % (childName, curQuest.RewardType2) m_info_rewardNode = m_info_rewardsNode.AddChild(childName) CommFunc.AddXML(m_info_rewardNode, curQuest.GetMsgInfoRewardNode(), str(xmlkey)) xmlkey += 1 if needSetReward: curDesc.SetAttribute('reward', '1') else: curDesc.DelAttribute('reward') # Ìæ»»¸½¼Ó¿Õ½±ÀøÐÅÏ¢ºóµÄ×·×ÙÐÅÏ¢ if mInfoMsgNode: mInfoMsgStr = mInfoMsgNode.GetXML() if "" in mInfoMsgStr: mInfoMsgStr = mInfoMsgStr.replace("", "") mInfoMsgStr += "\r\n" CommFunc.DelXML(missionInfoNode) CommFunc.AddXML(missionInfoNode, mInfoMsgStr, str(xmlkey)) xmlkey += 1 if needCheckItemQuest: CheckMissionItemRequire(filePath, questID, needCheckItemQuest) xmlLoader.Save() return def main(): #xml¶ÁÈ¡Æ÷µÄ³õʼ»¯¶¯×÷, Èç¹ûûÓмÓÕâÐо͵÷ÓÃ, ¾Í»á±¨´í IPY_XMLLoader.PyCoInitialize() if not Read(): return questPath = QuestsPath if os.path.isdir(questPath) != True: return dirs = os.listdir(questPath) # path = os.path.join(questPath, '2101') # ReadSingleQuestInfo(path, CommFunc.ToIntDef('2101', 0)) # return for curDir in dirs: path = os.path.join(questPath, curDir) ReadSingleQuestInfo(path, CommFunc.ToIntDef(curDir, 0)) #xml¶ÁÈ¡Æ÷µÄ½áÊø¶¯×÷ IPY_XMLLoader.PyCoUninitialize() Log4P.Info("½±Àøµ¼Èë³É¹¦£¡") return main()