目录为:Assets/Scripts/ConfigReader/目录下
ReadDailyTaskConfig.cs
这个类读取日常任务,成就相关的config
这里会读取两个配置文件:
配置文件1:DailyQuest:Assets/Resources/Config/DailyQuest.xml
部分如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<DailyQuest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<info id="1001">
<type>1</type>
<grade>1</grade>
<describe>双杀玩家222222222222222222</describe>
<task>14</task>
<amount>3</amount>
<award>1</award>
<number>100</number>
</info>
配置文件2: AchievementTask:Assets/Resources/Config/AchievementTask.xml
部分如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AchievementTask xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<info id="1001001">
<type>0</type>
<NextID>1001002</NextID>
<describe>累积完成10场普通对战</describe>
<task>5</task>
<amount>1</amount>
<params>1001</params>
<award>1</award>
<number>20</number>
</info>
ConfigReader.cs
using System;
using UnityEngine;
using System.Xml;
using System.Collections.Generic;
//这个类读取日常任务,成就相关的config
//这里会读取两个配置文件
//配置文件1:DailyQuest:Assets/Resources/Config/DailyQuest.xml
//配置文件2:AchievementTask:Assets/Resources/Config/AchievementTask.xml
//其实这个类在两个地方使用了,每一个地方分别读取了一个配置文件
public class ReadTaskConfig
{
XmlDocument xmlDoc = null;
//构造函数
public ReadTaskConfig(string xmlFilePath, TASK_TIME_TYPE timeType)
{
ResourceUnit xmlfileUnit = ResourcesManager.Instance.loadImmediate (xmlFilePath, ResourceType.ASSET);
TextAsset xmlfile = xmlfileUnit.Asset as TextAsset;
if (!xmlfile)
{
Debug.LogError(" error infos: 没有找到指定的xml文件:" + xmlFilePath);
}
xmlDoc = new XmlDocument();
xmlDoc.LoadXml (xmlfile.text);
XmlNodeList infoNodeList = null;
//根据timeType来分辨是哪一个配置文件
if (timeType == TASK_TIME_TYPE.TTT_Daily)
{
infoNodeList = xmlDoc.SelectSingleNode ("DailyQuest").ChildNodes;
}
else if (timeType == TASK_TIME_TYPE.TTT_Infinite)
{
infoNodeList = xmlDoc.SelectSingleNode ("AchievementTask").ChildNodes;
}
for (int i = 0; i < infoNodeList.Count; i++)
{
XmlAttribute xmlAttr = (infoNodeList [i] as XmlElement).GetAttribute("id");
if (xmlAttr == null)
{
continue;
}
//STaskConfig
STaskConfig oneTask = new STaskConfig ();
oneTask.taskID = Convert.ToUInt32 (xmlAttr.InnerText);
foreach (XmlElement xEle in infoNodeList[i].ChildNodes)
{
switch (xEle.Name)
{
case "type":
oneTask.taskTimeType = (TASK_TIME_TYPE)Convert.ToUInt32 (xEle.InnerText);
break;
case "grade":
oneTask.taskLevel = Convert.ToUInt32 (xEle.InnerText);
break;
case "describe":
oneTask.taskDesc = xEle.InnerText;
break;
case "task":
oneTask.taskType = (TASK_TYPE)Convert.ToUInt32 (xEle.InnerText);
break;
case "amount":
oneTask.taskMaxCount = Convert.ToUInt32 (xEle.InnerText);
break;
case "award":
oneTask.n32ItemID = xEle.InnerText.Split (new char[] { ',' });
break;
case "number":
oneTask.n32ItemNum = xEle.InnerText.Split (new char[] { ',' });
break;
case "params":
oneTask.taskParams = xEle.InnerText.Split (new char[] { ',' });
break;
case "NextID":
oneTask.nextTaskID = Convert.ToUInt32 (xEle.InnerText);
break;
}
}
if (timeType == TASK_TIME_TYPE.TTT_Daily)
{
ConfigReader.dailyTaskXmlInfoDic.Add (oneTask.taskID, oneTask);
}
else if (timeType == TASK_TIME_TYPE.TTT_Infinite)
{
ConfigReader.infiniteTaskXmlInfoDic.Add (oneTask.taskID, oneTask);
}
}
}
}
//枚举值必须和服务器保持一一对应
public enum TASK_TIME_TYPE
{
TTT_Infinite,
TTT_Daily,
}
//枚举值必须和服务器保持一一对应
public enum TASK_TYPE
{
TT_None,
TT_KillPlayer,//击杀玩家
TT_KillXiaobin,//击杀小兵
TT_KillMonster,//击杀野怪
TT_KillBuild,//击杀建筑
TT_GamePaly,//进行一场游戏
TT_GameWin,//胜利一场游戏
TT_GameGetCP,//游戏获得CP
TT_GameUseCP,//游戏使用CP
}
public class STaskConfig
{
public uint taskID;//当前任务ID
public uint nextTaskID; //下一任务ID
public uint taskLevel; //任务等级
public string taskDesc; //任务描述
public TASK_TIME_TYPE taskTimeType;//任务时间类型
public TASK_TYPE taskType; //任务类型
public uint taskMaxCount;//需求总量
public string[] taskParams; //格外参数
public string[] n32ItemID; //奖励ID
public string[] n32ItemNum; //奖励数量
}