From bc2d65658f516301b60eb83cb1640e69d6e2e4f2 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 14 五月 2019 16:13:23 +0800
Subject: [PATCH] 6776 【前端】【2.0】任务反馈

---
 Core/GameEngine/Model/Config/TaskFeedbackConfig.cs.meta |   12 +
 System/Message/RichEvent.cs                             |    3 
 System/MainInterfacePanel/TaskFeedbackModel.cs.meta     |   12 +
 Utility/ConfigInitiator.cs                              |    3 
 System/Message/RichNormalEvent.cs                       |   61 ++++++
 Core/GameEngine/Model/Config/TaskFeedbackConfig.cs      |  214 +++++++++++++++++++++
 System/MainInterfacePanel/TaskListTip.cs                |   38 ++-
 System/MainInterfacePanel/TaskFeedbackModel.cs          |  217 +++++++++++++++++++++
 System/WindowBase/ModelCenter.cs                        |    1 
 System/Role/ReikiRootModel.cs                           |   10 +
 System/Message/WordAnalysis.cs                          |   13 +
 11 files changed, 565 insertions(+), 19 deletions(-)

diff --git a/Core/GameEngine/Model/Config/TaskFeedbackConfig.cs b/Core/GameEngine/Model/Config/TaskFeedbackConfig.cs
new file mode 100644
index 0000000..0c7868b
--- /dev/null
+++ b/Core/GameEngine/Model/Config/TaskFeedbackConfig.cs
@@ -0,0 +1,214 @@
+锘�//--------------------------------------------------------
+//    [Author]:           Fish
+//    [  Date ]:           Tuesday, May 14, 2019
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System;
+using UnityEngine;
+
+[XLua.LuaCallCSharp]
+public partial class TaskFeedbackConfig
+{
+
+    public readonly int taskId;
+	public readonly int type;
+	public readonly string condition;
+	public readonly int succGuide;
+	public readonly int failGuide;
+	public readonly string remind;
+
+	public TaskFeedbackConfig()
+    {
+    }
+
+    public TaskFeedbackConfig(string input)
+    {
+        try
+        {
+            var tables = input.Split('\t');
+
+            int.TryParse(tables[0],out taskId); 
+
+			int.TryParse(tables[1],out type); 
+
+			condition = tables[2];
+
+			int.TryParse(tables[3],out succGuide); 
+
+			int.TryParse(tables[4],out failGuide); 
+
+			remind = tables[5];
+        }
+        catch (Exception ex)
+        {
+            DebugEx.Log(ex);
+        }
+    }
+
+    static Dictionary<string, TaskFeedbackConfig> configs = new Dictionary<string, TaskFeedbackConfig>();
+    public static TaskFeedbackConfig Get(string id)
+    {   
+		if (!inited)
+        {
+            Debug.Log("TaskFeedbackConfig 杩樻湭瀹屾垚鍒濆鍖栥��");
+            return null;
+        }
+		
+        if (configs.ContainsKey(id))
+        {
+            return configs[id];
+        }
+
+        TaskFeedbackConfig config = null;
+        if (rawDatas.ContainsKey(id))
+        {
+            config = configs[id] = new TaskFeedbackConfig(rawDatas[id]);
+            rawDatas.Remove(id);
+        }
+
+        return config;
+    }
+
+	public static TaskFeedbackConfig Get(int id)
+    {
+        return Get(id.ToString());
+    }
+
+    public static List<string> GetKeys()
+    {
+        var keys = new List<string>();
+        keys.AddRange(configs.Keys);
+        keys.AddRange(rawDatas.Keys);
+        return keys;
+    }
+
+    public static List<TaskFeedbackConfig> GetValues()
+    {
+        var values = new List<TaskFeedbackConfig>();
+        values.AddRange(configs.Values);
+
+        var keys = new List<string>(rawDatas.Keys);
+        foreach (var key in keys)
+        {
+            values.Add(Get(key));
+        }
+
+        return values;
+    }
+
+	public static bool Has(string id)
+    {
+        return configs.ContainsKey(id) || rawDatas.ContainsKey(id);
+    }
+
+	public static bool Has(int id)
+    {
+        return Has(id.ToString());
+    }
+
+	public static bool inited { get; private set; }
+    protected static Dictionary<string, string> rawDatas = new Dictionary<string, string>();
+    public static void Init(bool sync=false)
+    {
+	    inited = false;
+		var path = string.Empty;
+        if (AssetSource.refdataFromEditor)
+        {
+            path = ResourcesPath.CONFIG_FODLER +"/TaskFeedback.txt";
+        }
+        else
+        {
+            path = AssetVersionUtility.GetAssetFilePath("config/TaskFeedback.txt");
+        }
+
+		var tempConfig = new TaskFeedbackConfig();
+        var preParse = tempConfig is IConfigPostProcess;
+
+        if (sync)
+        {
+            var lines = File.ReadAllLines(path);
+            if (!preParse)
+            {
+                rawDatas = new Dictionary<string, string>(lines.Length - 3);
+            }
+            for (int i = 3; i < lines.Length; i++)
+            {
+				try 
+				{
+					var line = lines[i];
+					var index = line.IndexOf("\t");
+					if (index == -1)
+					{
+						continue;
+					}
+					var id = line.Substring(0, index);
+
+					if (preParse)
+					{
+						var config = new TaskFeedbackConfig(line);
+						configs[id] = config;
+						(config as IConfigPostProcess).OnConfigParseCompleted();
+					}
+					else
+					{
+						rawDatas[id] = line;
+					}
+				}
+				catch (System.Exception ex)
+                {
+                    Debug.LogError(ex);
+                }
+            }
+			inited = true;
+        }
+        else
+        {
+            ThreadPool.QueueUserWorkItem((object _object) =>
+            {
+                var lines = File.ReadAllLines(path);
+				if (!preParse)
+				{
+					rawDatas = new Dictionary<string, string>(lines.Length - 3);
+				}
+                for (int i = 3; i < lines.Length; i++)
+                {
+					try 
+					{
+					   var line = lines[i];
+						var index = line.IndexOf("\t");
+						if (index == -1)
+						{
+							continue;
+						}
+						var id = line.Substring(0, index);
+
+						if (preParse)
+						{
+							var config = new TaskFeedbackConfig(line);
+							configs[id] = config;
+							(config as IConfigPostProcess).OnConfigParseCompleted();
+						}
+						else
+						{
+							rawDatas[id] = line;
+						}
+					}
+					catch (System.Exception ex)
+                    {
+                        Debug.LogError(ex);
+                    }
+                }
+
+                inited = true;
+            });
+        }
+    }
+
+}
+
+
+
+
diff --git a/Core/GameEngine/Model/Config/TaskFeedbackConfig.cs.meta b/Core/GameEngine/Model/Config/TaskFeedbackConfig.cs.meta
new file mode 100644
index 0000000..ab3f6ce
--- /dev/null
+++ b/Core/GameEngine/Model/Config/TaskFeedbackConfig.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: b80a883f246077d46ab59d6938182ec9
+timeCreated: 1557813920
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/MainInterfacePanel/TaskFeedbackModel.cs b/System/MainInterfacePanel/TaskFeedbackModel.cs
new file mode 100644
index 0000000..a2cc1f4
--- /dev/null
+++ b/System/MainInterfacePanel/TaskFeedbackModel.cs
@@ -0,0 +1,217 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+namespace Snxxz.UI
+{
+    public class TaskFeedbackModel : Model
+    {
+        Dictionary<int, TaskFeedback> m_TaskFeedbacks = new Dictionary<int, TaskFeedback>();
+
+        ReikiRootModel reikiRootModel { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } }
+        PackModel packModel { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
+        TaskModel taskModel { get { return ModelCenter.Instance.GetModel<TaskModel>(); } }
+
+        public override void Init()
+        {
+            ParseConfig();
+        }
+
+        public override void UnInit()
+        {
+        }
+
+        void ParseConfig()
+        {
+            var configs = TaskFeedbackConfig.GetValues();
+            foreach (var config in configs)
+            {
+                if (config.type == 100)
+                {
+                    continue;
+                }
+
+                var feedback = new TaskFeedback()
+                {
+                    taskId = config.taskId,
+                    type = (TaskFeedbackType)config.type,
+                };
+
+                switch (feedback.type)
+                {
+                    case TaskFeedbackType.FightPower:
+                    case TaskFeedbackType.ReikiPoint:
+                    case TaskFeedbackType.Copper:
+                        feedback.condition = int.Parse(config.condition);
+                        break;
+                    case TaskFeedbackType.SideTask:
+                        {
+                            var array = LitJson.JsonMapper.ToObject<int[][]>(config.condition);
+                            if (array != null)
+                            {
+                                List<int[]> sideTasks = new List<int[]>(array.Length);
+                                for (int i = 0; i < array.Length; i++)
+                                {
+                                    sideTasks.Add(array[i]);
+                                }
+                                feedback.sideTasks = sideTasks;
+                            }
+                        }
+                        break;
+                    case TaskFeedbackType.Equip:
+                        {
+                            var array = LitJson.JsonMapper.ToObject<int[]>(config.condition);
+                            feedback.equipCondition = array;
+                        }
+                        break;
+                }
+
+                m_TaskFeedbacks.Add(config.taskId, feedback);
+            }
+        }
+
+        public bool TryGetTaskFeedback(int taskId, out TaskFeedback feedback)
+        {
+            return m_TaskFeedbacks.TryGetValue(taskId, out feedback);
+        }
+
+        public void ExecuteTaskFeedback(int taskId)
+        {
+            TaskFeedback feedback;
+            if (TryGetTaskFeedback(taskId, out feedback))
+            {
+                var config = TaskFeedbackConfig.Get(taskId);
+
+                switch (feedback.type)
+                {
+                    case TaskFeedbackType.FightPower:
+                    case TaskFeedbackType.ReikiPoint:
+                    case TaskFeedbackType.Guide:
+                    case TaskFeedbackType.Equip:
+                        {
+                            int condition = 0;
+                            if (IsSatisfyCondition(feedback, out condition))
+                            {
+                                if (config.succGuide != 0)
+                                {
+                                    ExecuteGuide(config.succGuide);
+                                }
+                            }
+                            else
+                            {
+                                if (!string.IsNullOrEmpty(config.remind))
+                                {
+                                    SysNotifyMgr.Instance.ShowTip(config.remind);
+                                }
+                                if (config.failGuide != 0)
+                                {
+                                    ExecuteGuide(config.succGuide);
+                                }
+                            }
+                        }
+                        break;
+                    case TaskFeedbackType.SideTask:
+                        {
+                            int condition = 0;
+                            if (IsSatisfyCondition(feedback, out condition))
+                            {
+                                if (config.succGuide != 0)
+                                {
+                                    ExecuteGuide(config.succGuide);
+                                }
+                            }
+                            else
+                            {
+                                var sideFeedbackConfig = TaskFeedbackConfig.Get(condition);
+                                if (!string.IsNullOrEmpty(sideFeedbackConfig.remind))
+                                {
+                                    SysNotifyMgr.Instance.ShowTip(sideFeedbackConfig.remind);
+                                }
+                                if (sideFeedbackConfig != null && sideFeedbackConfig.failGuide != 0)
+                                {
+                                    ExecuteGuide(sideFeedbackConfig.failGuide);
+                                }
+                            }
+                        }
+                        break;
+                }
+            }
+        }
+
+        public void ExecuteGuide(int id)
+        {
+            var config = GuideConfig.Get(id);
+            if (config == null)
+            {
+                DebugEx.LogFormat("寮曞<color=#ff0000>{0}</color>鏈坊鍔�", id);
+                return;
+            }
+            switch ((GuideType)config.Type)
+            {
+                case GuideType.Functional:
+                    FunctionalGuideCenter.Instance.StartGuide(id);
+                    break;
+                default:
+                    NewBieCenter.Instance.StartNewBieGuide(id);
+                    break;
+            }
+        }
+
+        public bool IsSatisfyCondition(TaskFeedback feedback, out int condition)
+        {
+            condition = feedback.condition;
+            switch (feedback.type)
+            {
+                case TaskFeedbackType.FightPower:
+                    return PlayerDatas.Instance.baseData.FightPoint >= feedback.condition;
+                case TaskFeedbackType.SideTask:
+                    foreach (var taskId in taskModel.SideQuestsDic.Keys)
+                    {
+                        for (int i = 0; i < feedback.sideTasks.Count; i++)
+                        {
+                            if (taskId >= feedback.sideTasks[i][0]
+                                && taskId <= feedback.sideTasks[i][1])
+                            {
+                                condition = taskId;
+                                return false;
+                            }
+                        }
+                    }
+                    return true;
+                case TaskFeedbackType.ReikiPoint:
+                    return reikiRootModel.GetReikiRootTotalPoint() >= feedback.condition;
+                case TaskFeedbackType.Equip:
+                    var items = packModel.GetItems(PackType.Item, new SinglePack.FilterParams()
+                    {
+                        levels = new List<int>() { feedback.equipCondition[0] },
+                        qualitys = new List<int>() { feedback.equipCondition[1] },
+                    });
+                    return items != null && items.Count > 0;
+                case TaskFeedbackType.Copper:
+                    return PlayerDatas.Instance.baseData.allCopper >= (ulong)feedback.condition;
+                case TaskFeedbackType.Guide:
+                    return true;
+            }
+            return false;
+        }
+    }
+
+    public struct TaskFeedback
+    {
+        public int taskId;
+        public TaskFeedbackType type;
+        public int condition;
+        public List<int[]> sideTasks;
+        public int[] equipCondition;
+    }
+
+    public enum TaskFeedbackType
+    {
+        FightPower = 1,
+        SideTask = 2,
+        ReikiPoint = 3,
+        Equip = 4,
+        Copper = 5,
+        Guide = 6,
+    }
+}
+
diff --git a/System/MainInterfacePanel/TaskFeedbackModel.cs.meta b/System/MainInterfacePanel/TaskFeedbackModel.cs.meta
new file mode 100644
index 0000000..5edffd4
--- /dev/null
+++ b/System/MainInterfacePanel/TaskFeedbackModel.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c55c5981dc69bf44792d505c7cab421e
+timeCreated: 1557814038
+licenseType: Pro
+MonoImporter:
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/System/MainInterfacePanel/TaskListTip.cs b/System/MainInterfacePanel/TaskListTip.cs
index 2054c05..7cfc127 100644
--- a/System/MainInterfacePanel/TaskListTip.cs
+++ b/System/MainInterfacePanel/TaskListTip.cs
@@ -31,6 +31,7 @@
         List<int> _list = new List<int>();//鐢ㄦ潵鎺у埗杩涜鎺掑簭
         TreasureModel model { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
         TaskModel taskmodel { get { return ModelCenter.Instance.GetModel<TaskModel>(); } }
+        ReikiRootModel reikiRootModel { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } }
 
         List<int> ListSort = new List<int>();//鐢ㄤ簬鎺掑垪椤哄簭(鏈崱绾�)
         List<int> ListSort1 = new List<int>();//鐢ㄤ簬鎺掑簭锛堝崱绾э級
@@ -65,6 +66,7 @@
             FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent;
             TreasureNewGotWin.CloseTreasureNewGotWinEvent += CloseTreasureNewGotWinEvent;
             PlayerDatas.Instance.playerDataRefreshEvent += Updatefighting;//鏁版嵁鐨勫埛鏂�(h0418)
+            reikiRootModel.onReikiRootPointRefresh += RefreshTaskContent;
             OnCollectingTreasureChangeEvent(TreasureCategory.Human);
             TaskScheduling();//浠诲姟鎺掑簭  
             Selected();//浠诲姟閫夋嫨
@@ -114,30 +116,32 @@
             TaskModel.CardLevelChange -= CardLevelChangeEvent;//鍗$骇浠诲姟鐘舵�佹敼鍙�
             TreasureNewGotWin.CloseTreasureNewGotWinEvent -= CloseTreasureNewGotWinEvent;
             PlayerDatas.Instance.playerDataRefreshEvent -= Updatefighting;//鏁版嵁鐨勫埛鏂�(h0418)
+            reikiRootModel.onReikiRootPointRefresh -= RefreshTaskContent;
             StopAllCoroutines();
+        }
+
+        private void RefreshTaskContent()
+        {
+            foreach (var key in taskmodel.allMissionDict.Keys)
+            {
+                int leng = Content.childCount;
+                for (int i = 0; i < leng; i++)
+                {
+                    var childObj = Content.GetChild(i).gameObject;
+                    var childObjTaskType = Content.GetChild(i).gameObject.GetComponent<TaskType>();
+                    if (childObj.activeSelf && childObjTaskType.TaskID == key)
+                    {
+                        childObj.GetComponent<FlyingShoesTask>().FlyingShoes_Task(key);
+                    }
+                }
+            }
         }
 
         private void Updatefighting(PlayerDataType obj)//绛夌骇鍒锋柊
         {
             if (obj == PlayerDataType.FightPower)
             {
-                foreach (var key in taskmodel.allMissionDict.Keys)
-                {
-                    var TaskPower = TaskPowerConfig.Get(key);
-                    if (TaskPower != null)
-                    {
-                        int leng = Content.childCount;
-                        for (int i = 0; i < leng; i++)
-                        {
-                            var childObj = Content.GetChild(i).gameObject;
-                            var childObjTaskType = Content.GetChild(i).gameObject.GetComponent<TaskType>();
-                            if (childObj.activeSelf && childObjTaskType.TaskID == key)
-                            {
-                                childObj.GetComponent<FlyingShoesTask>().FlyingShoes_Task(key);
-                            }
-                        }
-                    }
-                }
+                RefreshTaskContent();
             }
         }
 
diff --git a/System/Message/RichEvent.cs b/System/Message/RichEvent.cs
index eb651d8..85041b9 100644
--- a/System/Message/RichEvent.cs
+++ b/System/Message/RichEvent.cs
@@ -25,4 +25,7 @@
     AncientRobotName,//涓婂彜鎴樺満闅忔満鍚嶅瓧
     AuctionBidding,//闆嗗競绔炰环
     RandomChat,
+    TaskFeedback,
+    MyFightPoint,
+    MyReikiRoot,
 }
diff --git a/System/Message/RichNormalEvent.cs b/System/Message/RichNormalEvent.cs
index db06561..696ee18 100644
--- a/System/Message/RichNormalEvent.cs
+++ b/System/Message/RichNormalEvent.cs
@@ -18,6 +18,9 @@
         RichTextMgr.Inst.RegisterEvent(RichTextEventEnum.AncientRobotName, this);
         RichTextMgr.Inst.RegisterEvent(RichTextEventEnum.AuctionBidding, this);
         RichTextMgr.Inst.RegisterEvent(RichTextEventEnum.RandomChat, this);
+        RichTextMgr.Inst.RegisterEvent(RichTextEventEnum.TaskFeedback, this);
+        RichTextMgr.Inst.RegisterEvent(RichTextEventEnum.MyFightPoint, this);
+        RichTextMgr.Inst.RegisterEvent(RichTextEventEnum.MyReikiRoot, this);
     }
 
     public override bool Execute(RichTextEventEnum type, RichTextMgr.HrefInfo href)
@@ -127,6 +130,23 @@
                     }
                 }
                 break;
+            case RichTextEventEnum.TaskFeedback:
+                {
+                    if (href.mSplits.ContainsKey("taskfeedback"))
+                    {
+                        var taskId = 0;
+                        int.TryParse(href.mSplits["taskfeedback"], out taskId);
+
+                        TaskFeedback feedback;
+                        var feedbackModel = ModelCenter.Instance.GetModel<TaskFeedbackModel>();
+                        if (feedbackModel.TryGetTaskFeedback(taskId, out feedback))
+                        {
+                            feedbackModel.ExecuteTaskFeedback(taskId);
+                            return true;
+                        }
+                    }
+                }
+                break;
         }
         return false;
     }
@@ -150,6 +170,47 @@
                     }
                 }
                 break;
+            case RichTextEventEnum.MyFightPoint:
+                {
+                    var colorType = 0;
+                    if (RichTextMgr.Inst.presentRichText != null)
+                    {
+                        colorType = RichTextMgr.Inst.presentRichText.colorType == RichText.ColorType.Dark ? 0 : 1;
+                    }
+                    var fightPoint = PlayerDatas.Instance.baseData.FightPoint;
+                    var targetValue = int.Parse(dic["myfightpoint"]);
+                    if (fightPoint < targetValue)
+                    {
+                        var label = dic.ContainsKey("replacelabel1") ? dic["replacelabel1"] : string.Empty;
+                        return UIHelper.AppendColor(TextColType.Red, StringUtility.Contact(label, fightPoint, "/", targetValue), colorType == 1);
+                    }
+                    else
+                    {
+                        var label = dic.ContainsKey("replacelabel2") ? dic["replacelabel2"] : string.Empty;
+                        return UIHelper.AppendColor(TextColType.Green, label, colorType == 1);
+                    }
+                }
+            case RichTextEventEnum.MyReikiRoot:
+                {
+                    var colorType = 0;
+                    if (RichTextMgr.Inst.presentRichText != null)
+                    {
+                        colorType = RichTextMgr.Inst.presentRichText.colorType == RichText.ColorType.Dark ? 0 : 1;
+                    }
+                    var reikiRootModel = ModelCenter.Instance.GetModel<ReikiRootModel>();
+                    var point = reikiRootModel.GetReikiRootTotalPoint();
+                    var targetValue = int.Parse(dic["myreikiroot"]);
+                    if (point < targetValue)
+                    {
+                        var label = dic.ContainsKey("replacelabel1") ? dic["replacelabel1"] : string.Empty;
+                        return UIHelper.AppendColor(TextColType.Red, StringUtility.Contact(label, point, "/", targetValue), colorType == 1);
+                    }
+                    else
+                    {
+                        var label = dic.ContainsKey("replacelabel2") ? dic["replacelabel2"] : string.Empty;
+                        return UIHelper.AppendColor(TextColType.Green, label, colorType == 1);
+                    }
+                }
         }
         return string.Empty;
     }
diff --git a/System/Message/WordAnalysis.cs b/System/Message/WordAnalysis.cs
index ec93da3..6999a90 100644
--- a/System/Message/WordAnalysis.cs
+++ b/System/Message/WordAnalysis.cs
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing Snxxz.UI;
+using System;
 using System.Collections;
 using System.Collections.Generic;
 using System.Text.RegularExpressions;
@@ -147,6 +148,16 @@
                         eventType = RichTextEventEnum.AncientRobotName;
                     }
                     break;
+                case "myfightpoint":
+                    {
+                        eventType = RichTextEventEnum.MyFightPoint;
+                    }
+                    break;
+                case "myreikiroot":
+                    {
+                        eventType = RichTextEventEnum.MyReikiRoot;
+                    }
+                    break;
                 default:
                     {
                         displayDic.Add(split_value, array[1]);
diff --git a/System/Role/ReikiRootModel.cs b/System/Role/ReikiRootModel.cs
index 0a5b78c..a8ddf8d 100644
--- a/System/Role/ReikiRootModel.cs
+++ b/System/Role/ReikiRootModel.cs
@@ -244,6 +244,16 @@
             return totalPoint;
         }
 
+        public int GetReikiRootTotalPoint()
+        {
+            var point = 0;
+            foreach (var _point in m_ReikiRootPoints.Values)
+            {
+                point += _point;
+            }
+            return point;
+        }
+
         public List<ReikiRootRecommend> GetReikiRootRecommendPoint(int point)
         {
             if (point == 0)
diff --git a/System/WindowBase/ModelCenter.cs b/System/WindowBase/ModelCenter.cs
index 3858ada..2cc2f0a 100644
--- a/System/WindowBase/ModelCenter.cs
+++ b/System/WindowBase/ModelCenter.cs
@@ -234,6 +234,7 @@
             RegisterModel<DungeonUseBuffModel>();
             RegisterModel<AlchemyModel>();
             RegisterModel<OtherPlayerEquipModel>();
+            RegisterModel<TaskFeedbackModel>();
 
             CSharpCallLua.ModelInit();
             inited = true;
diff --git a/Utility/ConfigInitiator.cs b/Utility/ConfigInitiator.cs
index f8e7948..8d1afde 100644
--- a/Utility/ConfigInitiator.cs
+++ b/Utility/ConfigInitiator.cs
@@ -291,7 +291,8 @@
         normalTasks.Add(new ConfigInitTask("DungeonUseBuffConfig", () => { DungeonUseBuffConfig.Init(); }, () => { return DungeonUseBuffConfig.inited; }));
         normalTasks.Add(new ConfigInitTask("AlchemyCountConfig", () => { AlchemyCountConfig.Init(); }, () => { return AlchemyCountConfig.inited; }));
         normalTasks.Add(new ConfigInitTask("CollectNpcConfig", () => { CollectNpcConfig.Init(); }, () => { return CollectNpcConfig.inited; }));
-        normalTasks.Add(new ConfigInitTask("TreasureChapterConfig", () => { TreasureChapterConfig.Init(); }, () => { return TreasureChapterConfig.inited; }));
+        normalTasks.Add(new ConfigInitTask("TreasureChapterConfig", () => { TreasureChapterConfig.Init(); }, () => { return TreasureChapterConfig.inited; }));
+        normalTasks.Add(new ConfigInitTask("TaskFeedbackConfig", () => { TaskFeedbackConfig.Init(); }, () => { return TaskFeedbackConfig.inited; }));
     }
 
     static List<ConfigInitTask> doingTasks = new List<ConfigInitTask>();

--
Gitblit v1.8.0