目录为:Assets/Scripts/ConfigReader/目录下
RuneConfig.cs
全是符文信息
对应配置文件:
Assets/Resources/Config/RuneCfg.xml
部分如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RuneCfg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<info un32ID="120101">
<RuneName>一级物攻符文</RuneName>
<un8Level>1</un8Level>
<un8EffectID>5</un8EffectID>
<n32EffectVal>0.4</n32EffectVal>
<fEffectPer>0</fEffectPer>
<un8ConsumeType>1</un8ConsumeType>
<n32PriceSeries>40</n32PriceSeries>
<bIsShowInShop>1</bIsShowInShop>
<bIsCanRandomComposed>1</bIsCanRandomComposed>
<n32ComposedSubID>0</n32ComposedSubID>
<Description>+{0}点物理攻击</Description>
<Icon>1401</Icon>
</info>
<info un32ID="120102">
<RuneName>一级攻速符文</RuneName>
<un8Level>1</un8Level>
<un8EffectID>10</un8EffectID>
<n32EffectVal>0</n32EffectVal>
<fEffectPer>1.9</fEffectPer>
<un8ConsumeType>1</un8ConsumeType>
<n32PriceSeries>40</n32PriceSeries>
<bIsShowInShop>1</bIsShowInShop>
<bIsCanRandomComposed>1</bIsCanRandomComposed>
<n32ComposedSubID>0</n32ComposedSubID>
<Description>+{1}%攻击速度</Description>
<Icon>1201</Icon>
</info>
<info un32ID="120103">
<RuneName>一级狂暴符文</RuneName>
<un8Level>1</un8Level>
<un8EffectID>24</un8EffectID>
<n32EffectVal>4.1</n32EffectVal>
<fEffectPer>0</fEffectPer>
<un8ConsumeType>1</un8ConsumeType>
<n32PriceSeries>40</n32PriceSeries>
<bIsShowInShop>1</bIsShowInShop>
<bIsCanRandomComposed>1</bIsCanRandomComposed>
<n32ComposedSubID>0</n32ComposedSubID>
<Description>+{0}%暴击伤害</Description>
<Icon>201</Icon>
</info>
using System;
using UnityEngine;
using System.Xml;
using System.Collections.Generic;
using System.Text;
//全是符文信息
//对应配置文件:Assets/Resources/Config/RuneCfg.xml
public class RuneConfig
{
XmlDocument xmlDoc = null;
//构造函数
public RuneConfig(string xmlFilePath)
{
ResourceUnit xmlfileUnit = ResourcesManager.Instance.loadImmediate (xmlFilePath, ResourceType.ASSET);
TextAsset xmlfile = xmlfileUnit.Asset as TextAsset;
if (!xmlfile)
{
return;
}
xmlDoc = new XmlDocument ();
xmlDoc.LoadXml (xmlfile.text);
XmlNodeList infoNodeList = xmlDoc.SelectSingleNode ("RuneCfg").ChildNodes;
for (int i = 0; i < infoNodeList.Count; i++)
{
if ((infoNodeList[i] as XmlElement).GetAttributeNode("un32ID") == null)
{
continue;
}
string typeName = (infoNodeList [i] as XmlElement).GetAttributeNode ("un32ID").InnerText;
RuneConfigInfo RuneSelectInfo = new RuneConfigInfo ();
RuneSelectInfo.runeid = Convert.ToUInt32 (typeName);
foreach (XmlElement xEle in infoNodeList[i].ChildNodes)
{
switch (xEle.Name)
{
case "RuneName":
RuneSelectInfo.RuneName = xEle.InnerText;
break;
case "un8Level":
RuneSelectInfo.level = Convert.ToInt16 (xEle.InnerText);
break;
case "bIsCanRandomComposed":
RuneSelectInfo.bIsCanRandomComposed = Convert.ToInt32 (xEle.InnerText);
break;
case "Description":
RuneSelectInfo.oriDescription = xEle.InnerText;
RuneSelectInfo.Description = xEle.InnerText;
break;
case "Icon":
RuneSelectInfo.Icon = xEle.InnerText;
break;
case "n32EffectVal":
RuneSelectInfo.effectVal = Convert.ToDouble (xEle.InnerText);
break;
case "fEffectPer":
RuneSelectInfo.effectPer = Convert.ToDouble (xEle.InnerText);
break;
case "un8EffectID":
RuneSelectInfo.effectID = Convert.ToUInt32 (xEle.InnerText);
break;
}
}
//进行描述 替换
RuneSelectInfo.Description = (ModifyDes (RuneSelectInfo.effectVal, RuneSelectInfo.effectPer, RuneSelectInfo)).ToString ();
ConfigReader.runeXmlInfoDict [RuneSelectInfo.runeid] = RuneSelectInfo;
}
}
static public StringBuilder ModifyDes(double val, double per, RuneConfigInfo cfg)
{
//XML文件中对应的内容
string des = cfg.oriDescription;
var aStringBuilder = new StringBuilder (des);
// {1}, {0}两种
if (des.Contains ("{1}"))
{
var index = des.IndexOf ("{");
aStringBuilder.Remove (index, 3);
// effectPer/10
double tempVal = per / 10;
//留两位小数
tempVal = Math.Round (tempVal, 2);
aStringBuilder.Insert (index, tempVal);
}
else
{
var index = des.IndexOf ("{");
aStringBuilder.Remove (index, 3);
//effectVal
var tempVal = val;
if (cfg.effectID == 13 || cfg.effectID == 14)
{
tempVal /= 1000;
}
else if (cfg.effectID == 23 || cfg.effectID == 24)
{
tempVal /= 10;
}
//留两位小数
tempVal = Math.Round (tempVal, 2);
aStringBuilder.Insert (index, tempVal);
}
return aStringBuilder;
}
}
/*
XML格式:
<info un32ID="120310">
<RuneName>三级回血符文</RuneName>
<un8Level>3</un8Level>
<un8EffectID>13</un8EffectID>
<n32EffectVal>140</n32EffectVal>
<fEffectPer>0</fEffectPer>
<un8ConsumeType>1</un8ConsumeType>
<n32PriceSeries>360</n32PriceSeries>
<bIsShowInShop>1</bIsShowInShop>
<bIsCanRandomComposed>1</bIsCanRandomComposed>
<n32ComposedSubID>120210</n32ComposedSubID>
<Description>+{0}点/秒生命回复</Description>
<Icon>1003</Icon>
</info>
*/
public class RuneConfigInfo: System.Object
{
public UInt32 runeid;
public string RuneName;
public Int16 level;
public UInt32 effectID;
public double effectVal;
public double effectPer;
public Int64 consumeDiamond;
public Int64 consumeGold;
public Int32 bIsCanRandomComposed;
public Int32 n32ComposedSubID;
public string Description;
public string oriDescription;
public string Icon;
}