#!/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()