From 9a808cbdb6dcb0ce36888290b13b2f2cdc210faa Mon Sep 17 00:00:00 2001
From: client_Wu Xijin <364452445@qq.com>
Date: 星期四, 23 五月 2019 16:11:24 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.87:10010/r/snxxz_scripts

---
 System/MainInterfacePanel/TaskFeedbackModel.cs |  104 ++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 92 insertions(+), 12 deletions(-)

diff --git a/System/MainInterfacePanel/TaskFeedbackModel.cs b/System/MainInterfacePanel/TaskFeedbackModel.cs
index 33ba378..3c09b4b 100644
--- a/System/MainInterfacePanel/TaskFeedbackModel.cs
+++ b/System/MainInterfacePanel/TaskFeedbackModel.cs
@@ -14,6 +14,8 @@
         TaskModel taskModel { get { return ModelCenter.Instance.GetModel<TaskModel>(); } }
         TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }
         AlchemyModel alchemyModel { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } }
+        EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
+        EquipStrengthModel equipStrengthModel { get { return ModelCenter.Instance.GetModel<EquipStrengthModel>(); } }
 
         public override void Init()
         {
@@ -164,9 +166,13 @@
                                 if (feedback.failFuns != null)
                                 {
                                     var index = Mathf.Min(condition, feedback.failFuns.Count - 1);
-                                    taskFeedbackFuncs.Clear();
-                                    taskFeedbackFuncs.AddRange(feedback.failFuns[index]);
-                                    WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
+                                    List<int> succFuncs;
+                                    if (TryGetSatisfyConditionFuncs(feedback.failFuns[index], out succFuncs))
+                                    {
+                                        taskFeedbackFuncs.Clear();
+                                        taskFeedbackFuncs.AddRange(succFuncs);
+                                        WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
+                                    }
                                 }
                             }
                         }
@@ -197,9 +203,13 @@
                                 if (feedback.failFuns != null)
                                 {
                                     var index = Mathf.Min(condition, feedback.failFuns.Count - 1);
-                                    taskFeedbackFuncs.Clear();
-                                    taskFeedbackFuncs.AddRange(feedback.failFuns[index]);
-                                    WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
+                                    List<int> succFuncs;
+                                    if (TryGetSatisfyConditionFuncs(feedback.failFuns[index], out succFuncs))
+                                    {
+                                        taskFeedbackFuncs.Clear();
+                                        taskFeedbackFuncs.AddRange(succFuncs);
+                                        WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
+                                    }
                                 }
                             }
                         }
@@ -223,9 +233,13 @@
                                 {
                                     var taskIndex = feedback.IndexOfSideTasks(condition);
                                     var index = Mathf.Min(taskIndex, feedback.failFuns.Count - 1);
-                                    taskFeedbackFuncs.Clear();
-                                    taskFeedbackFuncs.AddRange(feedback.failFuns[index]);
-                                    WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
+                                    List<int> succFuncs;
+                                    if (TryGetSatisfyConditionFuncs(feedback.failFuns[index], out succFuncs))
+                                    {
+                                        taskFeedbackFuncs.Clear();
+                                        taskFeedbackFuncs.AddRange(succFuncs);
+                                        WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
+                                    }
                                 }
                             }
                         }
@@ -250,9 +264,13 @@
                                     IsSatisfySideTask(feedback.sideTasks, out sideTaskId);
                                     var taskIndex = feedback.IndexOfSideTasks(sideTaskId);
                                     var index = Mathf.Min(taskIndex, feedback.failFuns.Count - 1);
-                                    taskFeedbackFuncs.Clear();
-                                    taskFeedbackFuncs.AddRange(feedback.failFuns[index]);
-                                    WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
+                                    List<int> succFuncs;
+                                    if (TryGetSatisfyConditionFuncs(feedback.failFuns[index], out succFuncs))
+                                    {
+                                        taskFeedbackFuncs.Clear();
+                                        taskFeedbackFuncs.AddRange(succFuncs);
+                                        WindowCenter.Instance.Open<TaskFeedbackFuncWin>();
+                                    }
                                 }
                             }
                         }
@@ -408,6 +426,68 @@
             }
             return true;
         }
+
+        public bool TryGetSatisfyConditionFuncs(int[] funcs, out List<int> succFuncs)
+        {
+            succFuncs = null;
+            if (funcs != null && funcs.Length > 0)
+            {
+                succFuncs = new List<int>();
+                for (int i = 0; i < funcs.Length; i++)
+                {
+                    if (IsSatisfyFuncConfition(funcs[i]))
+                    {
+                        succFuncs.Add(funcs[i]);
+                    }
+                }
+                return succFuncs.Count > 0;
+            }
+            return false;
+        }
+
+        public bool IsSatisfyFuncConfition(int func)
+        {
+            var config = TaskFeedbackFuncConfig.Get(func);
+            if (config != null)
+            {
+                switch (config.type)
+                {
+                    case 1:
+                        foreach (var item in config.itemCondition)
+                        {
+                            var count = packModel.GetItemCountByID(PackType.Item, item.x);
+                            if (count < item.y)
+                            {
+                                return false;
+                            }
+                        }
+                        return true;
+                    case 2:
+                        return reikiRootModel.freePoint > 0;
+                    case 3:
+                        foreach (var equipSet in equipModel.GetUnLockedEquipSets())
+                        {
+                            if (equipModel.ExistBetterEquip(equipSet, EquipModel.realmEquipTypes))
+                            {
+                                return true;
+                            }
+                        }
+                        return false;
+                    case 4:
+                        MissionDetailDates taskData;
+                        if (taskModel.TryGetTaskData(config.condition, out taskData))
+                        {
+                            return taskData.MissionState != 3;
+                        }
+                        return false;
+                    case 5:
+                        return equipStrengthModel.ExistAnySatisfyStrengh();
+                    default:
+                        return true;
+                }
+            }
+            return false;
+        }
     }
 
     public struct TaskFeedback

--
Gitblit v1.8.0