ConfigReader(五十九)—— RuneConfig

目录为: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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值