コード例 #1
0
        /// <summary>
        /// 由技能ID获取对应的技能树
        /// </summary>
        /// <param name="skillId"></param>
        /// <returns></returns>
        public SkillRootNode GetSkillTreeById(string skillId)
        {
            //由于同一类型的角色可能存在多个并且拥有同一个技能,所以不应该使用一个Dictionary来缓存,而应该每次都创建一个新的返回
            SkillRootNode skillRootNode = null;

            MYXZXmlReader.ReadSkillTree(skillId, out skillRootNode);

            return(skillRootNode);
        }
コード例 #2
0
 public Sprite GetHeadSpriteById(string spriteId)
 {
     if (!this.mIdToSpriteDic.ContainsKey(spriteId))
     {
         Sprite sprite = MYXZAssetBundleManager.Instance.LoadOrGetAssetBundle(MYXZXmlReader.GetConfigAssetBundlePath("HeadSprite")).LoadAsset <Sprite>(spriteId);
         this.mIdToSpriteDic.Add(spriteId, sprite);
     }
     return(mIdToSpriteDic[spriteId]);
 }
コード例 #3
0
        /// <summary>
        /// 返回此节点指向的子技能对应的SkillBase
        /// </summary>
        /// <param name="skillBaseNode"></param>
        /// <returns></returns>
        private static SkillBase GetSkillBase(string skillBaseId)
        {
            XmlDocument doc = new XmlDocument();

            try
            {
                doc.LoadXml(MYXZAssetBundleManager.Instance.LoadOrGetAssetBundle(
                                MYXZXmlReader.GetConfigAssetBundlePath("Skill")
                                ).LoadAsset <TextAsset>(skillBaseId).text); //读取此XML字符串至doc
            }
            catch (XmlException e)
            {
                Debug.LogException(e);
                return(null);
            }

            TargetPicker attackArea    = null;
            string       animationName = "";
            float        skillTime     = 0.0f;

            foreach (XmlNode childNode in doc.FirstChild.ChildNodes)
            {
                if (childNode.Name.Equals("AttackArea"))
                {
                    switch (childNode.Attributes["Mode"].Value)
                    {
                    case "Point":
                        attackArea = new PointTargetPicker(
                            float.Parse(childNode.Attributes["MinDistance"].Value),
                            float.Parse(childNode.Attributes["MaxDistance"].Value),
                            float.Parse(childNode.Attributes["Angle"].Value));
                        break;

                    case "Rect":
                        attackArea = new RectTargetPicker(
                            float.Parse(childNode.Attributes["Width"].Value),
                            float.Parse(childNode.Attributes["Length"].Value));
                        break;
                    }
                }

                if (childNode.Name.Equals("Animation"))
                {
                    animationName = childNode.Attributes["Name"].Value;
                }

                if (childNode.Name.Equals("SkillTime"))
                {
                    skillTime = float.Parse(childNode.InnerText);
                }
            }
            return(new SkillBase(skillBaseId, attackArea, animationName, skillTime));
        }
コード例 #4
0
        private void InitSceneInfo()
        {
            mIdToSceneInfoDic = new Dictionary <string, SceneInfo>();
            AssetBundle sceneInfoAB = MYXZAssetBundleManager.Instance.LoadOrGetAssetBundle(MYXZXmlReader.GetConfigAssetBundlePath("Scene"));

            TextAsset[] sceneInfoTexts = sceneInfoAB.LoadAllAssets <TextAsset>();
            foreach (TextAsset text in sceneInfoTexts)
            {
                SceneInfo sceneInfo;
                MYXZXmlReader.ReadSceneInfo(out sceneInfo, text.text);
                mIdToSceneInfoDic.Add(sceneInfo.Id, sceneInfo);
            }
            MYXZAssetBundleManager.Instance.Unload(sceneInfoAB.name);
        }
コード例 #5
0
        /// <summary>
        /// 通过ID获取Item或者装备
        /// </summary>
        /// <param name="id">Item的ID</param>
        /// <returns>对应的Item,没找到会返回null</returns>
        public Item GetItemOrEquipmentById(string itemId)
        {
            Item item;

            if (!this.mIdToItemDic.TryGetValue(itemId, out item))
            {
                if (MYXZXmlReader.ReadItemInfo(out item, itemId))
                {
                    this.mIdToItemDic.Add(itemId, item);
                }
                else
                {
                    Debug.LogError("读取ID为" + itemId + "的Item信息时发生错误");
                }
            }
            return(item);
        }
コード例 #6
0
        /// <summary>
        /// 通过ID获取Task
        /// </summary>
        /// <param name="taskId">task的ID</param>
        /// <returns>对应的Task,没找到会返回null</returns>
        public Task GetTaskById(string taskId)
        {
            Task task;

            if (!this.mIdToTaskDic.TryGetValue(taskId, out task))
            {
                if (MYXZXmlReader.ReadTask(out task, taskId))
                {
                    this.mIdToTaskDic.Add(taskId, task);
                }
                else
                {
                    Debug.LogError("读取ID为" + taskId + "的任务时发生错误");
                }
            }
            return(task);
        }
コード例 #7
0
        /// <summary>
        /// 通过ID获取NpcInfo
        /// </summary>
        /// <param name="npcId">npc的ID</param>
        /// <returns>对应的NpcInfo,没找到会返回null</returns>
        public NpcInfo GetNpcInfoById(string npcId)
        {
            NpcInfo info;

            if (!this.mIdToNpcInfoDic.TryGetValue(npcId, out info))
            {
                if (MYXZXmlReader.ReadNpcInfo(out info, npcId))
                {
                    this.mIdToNpcInfoDic.Add(npcId, info);
                }
                else
                {
                    Debug.LogError("读取ID为" + npcId + "的NPC信息时发生错误");
                }
            }
            return(info);
        }
コード例 #8
0
        /// <summary>
        /// 获得所有UIPanel的配置表
        /// </summary>
        /// <param name="typeToAssetBundle"></param>
        /// <param name="typeToName"></param>
        public void GetUIConfig(out Dictionary <UIPanelType, AssetBundle> typeToAssetBundle, out Dictionary <UIPanelType, string> typeToName)
        {
            typeToAssetBundle = new Dictionary <UIPanelType, AssetBundle>();
            typeToName        = new Dictionary <UIPanelType, string>();
            AssetBundle        uiConfigAB   = MYXZAssetBundleManager.Instance.LoadOrGetAssetBundle(MYXZXmlReader.GetConfigAssetBundlePath("UI"));
            TextAsset          uiConfig     = uiConfigAB.LoadAsset <TextAsset>("UIConfig");
            List <UIPanelInfo> uiPanelInfos = JsonConvert.DeserializeObject <List <UIPanelInfo> >(uiConfig.text);

            foreach (UIPanelInfo uiPanelInfo in uiPanelInfos)
            {
                typeToAssetBundle.Add(uiPanelInfo.Type, MYXZAssetBundleManager.Instance.LoadOrGetAssetBundle(uiPanelInfo.AssetBundlePath));
                typeToName.Add(uiPanelInfo.Type, uiPanelInfo.Name);
            }
            MYXZAssetBundleManager.Instance.Unload(uiConfigAB.name);
        }
コード例 #9
0
        /// <summary>
        /// 从xmlFile中读取此NPC的信息
        /// </summary>
        /// <param name="npcInfo">读取得到的信息out写入npcInfo</param>
        /// <param name="xmlText">这个XML文件的string</param>
        /// <returns>是否读取成功</returns>
        public static bool ReadNpcInfo(out NpcInfo npcInfo, string npcId)
        {
            npcInfo = new NpcInfo();

            AssetBundle npcInfoAB = MYXZAssetBundleManager.Instance.LoadOrGetAssetBundle(MYXZXmlReader.GetConfigAssetBundlePath("NPC"));
            TextAsset   taskText  = npcInfoAB.LoadAsset <TextAsset>(npcId);

            if (taskText == null)
            {
                Debug.LogError("无法找到id为" + npcId + "的NPC的信息");
                MYXZAssetBundleManager.Instance.Unload(npcInfoAB.name);
                return(false);
            }

            XmlDocument doc = new XmlDocument();

            try
            {
                doc.LoadXml(taskText.text); //读取此XML字符串至doc
            }
            catch (XmlException e)
            {
                Debug.LogException(e);
                return(false);
            }

            XmlNode npcNode = doc.FirstChild;                   //取得此NPC节点

            npcInfo.Name   = npcNode.Attributes["Name"].Value;  //此NPC的名字
            npcInfo.Id     = npcNode.Attributes["Id"].Value;    //此NPC的ID
            npcInfo.Sprite = MYXZGameDataManager.Instance.GetHeadSpriteById(npcNode.Attributes["Sprite"].Value);

            foreach (XmlNode node in npcNode.ChildNodes)
            {
                if (node.Name.Equals("Task"))
                {
                    npcInfo.TaskIds = node.Attributes["Id"].Value.Split(',');   //获取此NPC的任务
                }
                else if (node.Name.Equals("Talk"))
                {
                    npcInfo.Talks = GetTalks(node);                                     //获取此NPC的交谈
                }
            }
            MYXZAssetBundleManager.Instance.Unload(npcInfoAB.name);

            return(true);
        }
コード例 #10
0
        /// <summary>
        /// 根据技能树的ID来获取一个技能树实例
        /// </summary>
        /// <param name="skillId"></param>
        /// <param name="rootNode"></param>
        public static void ReadSkillTree(string skillId, out SkillRootNode rootNode)
        {
            AssetBundle skillConfigAB = MYXZAssetBundleManager.Instance.LoadOrGetAssetBundle(MYXZXmlReader.GetConfigAssetBundlePath("Skill"));  //包括SkillTree和SkillBase
            TextAsset   skillText     = skillConfigAB.LoadAsset <TextAsset>(skillId);

            rootNode = new SkillRootNode(skillId);
            XmlDocument doc = new XmlDocument();

            try
            {
                doc.LoadXml(skillText.text);   //读取此XML字符串至doc
            }
            catch (XmlException e)
            {
                Debug.LogException(e);
                return;
            }

            XmlNode configNode = doc.FirstChild;

            rootNode.Loop = bool.Parse(configNode.Attributes["Loop"].Value);
            rootNode.Name = configNode.Attributes["Name"].Value;
            TraverseToGetSkillTree(rootNode, configNode);
            MYXZAssetBundleManager.Instance.Unload(skillConfigAB.name);
        }
コード例 #11
0
        /// <summary>
        /// 从xmlText读取Item信息
        /// </summary>
        /// <param name="item">读取得到的信息out写入item</param>
        /// <param name="xmlText">xml文档</param>
        /// <returns>是否读取成功</returns>
        public static bool ReadItemInfo(out Item item, string itemId)
        {
            item = null;

            AssetBundle itemInfoAB = MYXZAssetBundleManager.Instance.LoadOrGetAssetBundle(MYXZXmlReader.GetConfigAssetBundlePath("Item"));

            TextAsset itemText = itemInfoAB.LoadAsset <TextAsset>(itemId);

            if (itemText == null)
            {
                Debug.LogError("无法找到id为" + itemId + "的Item的信息");
                MYXZAssetBundleManager.Instance.Unload(itemInfoAB.name);
                return(false);
            }

            XmlDocument doc = new XmlDocument();

            try
            {
                doc.LoadXml(itemText.text);   //读取此XML字符串至doc
            }
            catch (XmlException e)
            {
                Debug.LogException(e);
                return(false);
            }
            XmlNode itemNode = doc.FirstChild;
            string  itemType = itemNode.Attributes["ID"].Value.Substring(0, 2); //获取Item的类型

            string name            = itemNode.Attributes["Name"].Value;
            string id              = itemNode.Attributes["ID"].Value;
            string spriteId        = itemNode.Attributes["Sprite"].Value;
            string itemDescription = "";
            string useDescription  = "";
            int    buyPrice        = 0;
            int    salePrice       = 0;

            int hp              = 0;
            int physicalAttack  = 0;
            int physicalDefense = 0;
            int magicAttack     = 0;
            int magicDefense    = 0;

            Equipment.Type equipmentType = Equipment.Type.Weapon;

            foreach (XmlNode node in itemNode.ChildNodes)
            {
                if (node.Name.Equals("ItemDescription"))
                {
                    itemDescription = node.InnerText;
                }
                else if (node.Name.Equals("UseDescription"))
                {
                    useDescription = node.InnerText;
                }
                else if (node.Name.Equals("SalePrice"))
                {
                    salePrice = Int32.Parse(node.InnerText);
                }
                else if (node.Name.Equals("BuyPrice"))
                {
                    buyPrice = Int32.Parse(node.InnerText);
                }
                else if (node.Name.Equals("HP"))
                {
                    hp = Int32.Parse(node.InnerText);
                }
                else if (node.Name.Equals("PhysicalAttack"))
                {
                    physicalAttack = Int32.Parse(node.InnerText);
                }
                else if (node.Name.Equals("MagicAttack"))
                {
                    magicAttack = Int32.Parse(node.InnerText);
                }
                else if (node.Name.Equals("PhysicalDefense"))
                {
                    physicalDefense = Int32.Parse(node.InnerText);
                }
                else if (node.Name.Equals("MagicDefense"))
                {
                    magicDefense = Int32.Parse(node.InnerText);
                }
                else if (node.Name.Equals("Type"))
                {
                    equipmentType = (Equipment.Type)Enum.Parse(typeof(Equipment.Type), node.InnerText);
                }
            }

            if (itemType.Equals("03"))
            {
                item = new Consumable(name, id, spriteId, itemDescription, useDescription, buyPrice, salePrice,
                                      hp);
            }
            else if (itemType.Equals("04"))
            {
                item = new Equipment(name, id, spriteId, itemDescription, useDescription, buyPrice, salePrice,
                                     physicalAttack, magicAttack, physicalDefense, magicDefense, hp, equipmentType);
            }
            else if (itemType.Equals("09"))
            {
                item = new TaskItem(name, id, spriteId, itemDescription, useDescription);
            }
            else if (itemType.Equals("10"))
            {
                item = new Material(name, id, spriteId, itemDescription, useDescription, buyPrice, salePrice);
            }
            MYXZAssetBundleManager.Instance.Unload(itemInfoAB.name);

            return(true);
        }
コード例 #12
0
        /// <summary>
        /// 从xmlFile中读取此Task的信息
        /// </summary>
        /// <param name="task">读取得到的信息out写入task中</param>
        /// <param name="xmlText"></param>
        /// <returns>是否读取成功</returns>
        public static bool ReadTask(out Task task, string taskId)
        {
            task = new Task();

            AssetBundle taskInfoAb = MYXZAssetBundleManager.Instance.LoadOrGetAssetBundle(MYXZXmlReader.GetConfigAssetBundlePath("Task"));

            TextAsset taskText = taskInfoAb.LoadAsset <TextAsset>(taskId);

            if (taskText == null)
            {
                Debug.LogError("无法找到id为" + taskId + "的Task的信息");
                MYXZAssetBundleManager.Instance.Unload(taskInfoAb.name);
                return(false);
            }

            XmlDocument doc = new XmlDocument();

            try
            {
                doc.LoadXml(taskText.text);   //读取此XML字符串至doc
            }
            catch (XmlException e)
            {
                Debug.LogException(e);
                return(false);
            }

            XmlNode taskNode = doc.FirstChild;

            task.Name      = taskNode.Attributes["Name"].Value;         //任务名字
            task.Id        = taskNode.Attributes["Id"].Value;           //任务ID
            task.Publisher = taskNode.Attributes["Publisher"].Value;    //任务发布者ID
            task.Deliverer = taskNode.Attributes["Deliverer"].Value;    //任务交付者ID

            foreach (XmlNode node in taskNode.ChildNodes)
            {
                if (node.Name.Equals("Require"))
                {
                    if (!node.Attributes["Predecessors"].Value.Equals(""))                    //如果有前置任务
                    {
                        task.Predecessors = node.Attributes["Predecessors"].Value.Split(','); //设置前置任务
                    }
                    task.LevelRequirement = Int32.Parse(node.Attributes["Level"].Value);      //等级需求
                    if (!node.Attributes["Item"].Value.Equals(""))                            //如果有道具需求
                    {
                        task.RequireItems = new Dictionary <string, int>();
                        string[] items = node.Attributes["Item"].Value.Split(',');
                        for (int i = 0; i < items.Length; i++)
                        {
                            string[] item = items[i].Split('/');
                            task.RequireItems.Add(item[0], Int32.Parse(item[1])); //接取任务所需要的物品,item[0]是ID,item[1]是数量
                        }
                    }
                }
                else if (node.Name.Equals("Description"))
                {
                    task.Description = node.InnerText;            //对任务的描述
                }
                else if (node.Name.Equals("Target"))
                {
                    task.Targets = new Task.Target[node.ChildNodes.Count];
                    for (int i = 0; i < node.ChildNodes.Count; i++)
                    {
                        task.Targets[i]          = new Task.Target();
                        task.Targets[i].Type     = (TaskTargetType)Enum.Parse(typeof(TaskTargetType), node.ChildNodes[i].Attributes["Type"].Value); //任务类型
                        task.Targets[i].TargetId = node.ChildNodes[i].Attributes["Id"].Value;                                                       //任务目标ID
                        task.Targets[i].Count    = int.Parse(node.ChildNodes[i].Attributes["Count"].Value);                                         //对目标操作次数
                    }
                }
                else if (node.Name.Equals("TakeTask"))
                {
                    task.TakeTaskTalk = GetTalks(node);     //接取任务时的对话
                }
                else if (node.Name.Equals("InTask"))
                {
                    task.InTaskTalk = GetTalks(node);       //在任务中的对话
                }
                else if (node.Name.Equals("FininTask"))
                {
                    task.FinishTaskTalk = GetTalks(node);   //任务交付时的对话,只有交付者不是010000(系统)时才有
                }
                else if (node.Name.Equals("TakeTaskReward"))
                {
                    task.TakeTaskExperience = int.Parse(node.Attributes["Experience"].Value);
                    ReadRewardMoney(node.Attributes["Money"].Value, ref task.TakeTaskGold, ref task.TakeTaskSilver, ref task.TakeTaskCopper);
                    task.TakeTaskItem = ReadRewardItem(task.TakeTaskItem, node);
                }
                else if (node.Name.Equals("FinishTaskReward"))
                {
                    task.FinishTaskExperience = int.Parse(node.Attributes["Experience"].Value);
                    ReadRewardMoney(node.Attributes["Money"].Value, ref task.FinishTaskGold, ref task.FinishTaskSilver, ref task.FinishTaskCopper);
                    task.FinishTaskItem = ReadRewardItem(task.FinishTaskItem, node);
                }
            }
            MYXZAssetBundleManager.Instance.Unload(taskInfoAb.name);

            return(true);
        }