From 259419d539a4b1f506e5e2e2586ea2dbd80f6c73 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 07 十一月 2025 11:26:16 +0800
Subject: [PATCH] 236 子 【福利内容】每日任务/每周任务/章节奖励 / 【福利内容】每日任务/每周任务/章节奖励-客户端

---
 Main/System/DayMission/MissionHeroRoadWin.cs                                                         |   66 +++++
 Main/Core/NetworkPackage/ServerPack/HA3_Function/HA340_tagSCSuccessInfoList.cs                       |   33 ++
 Main/System/DayMission/MissionHeroRoadCell.cs.meta                                                   |   11 
 Main/System/DayMission/MissionHeroRoadWin.cs.meta                                                    |   11 
 Main/System/Achievement.meta                                                                         |    8 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA340_tagSCSuccessInfoList.cs.meta        |   11 
 Main/Core/NetworkPackage/ServerPack/HA3_Function/HA342_tagSCSuccessAwardRecordList.cs                |   29 ++
 Main/Config/PartialConfigs/SuccessConfig.cs.meta                                                     |   11 
 Main/System/DayMission/DayMissionBaseWin.cs                                                          |    2 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA342_tagSCSuccessAwardRecordList.cs.meta |   11 
 Main/System/Redpoint/RedpointCenter.cs                                                               |   12 
 Main/Core/NetworkPackage/ServerPack/HA3_Function/HA342_tagSCSuccessAwardRecordList.cs.meta           |   11 
 Main/System/Message/RichTableEvent.cs                                                                |   26 +-
 Main/Config/Configs/SuccessConfig.cs                                                                 |   71 -----
 Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs                                                 |    2 
 Main/Config/PartialConfigs/SuccessConfig.cs                                                          |   33 ++
 Main/System/Achievement/AchievementManager.cs.meta                                                   |   11 
 Main/Core/NetworkPackage/ServerPack/HA3_Function/HA340_tagSCSuccessInfoList.cs.meta                  |   11 
 Main/Config/PartialConfigs/MainLevelConfig.cs                                                        |    8 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA340_tagSCSuccessInfoList.cs             |   12 +
 Main/System/Achievement/AchievementManager.cs                                                        |  196 ++++++++++++++++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA342_tagSCSuccessAwardRecordList.cs      |   12 +
 Main/System/DayMission/MissionHeroRoadCell.cs                                                        |   68 +++++
 23 files changed, 587 insertions(+), 79 deletions(-)

diff --git a/Main/Config/Configs/SuccessConfig.cs b/Main/Config/Configs/SuccessConfig.cs
index 24e8428..d40fa4a 100644
--- a/Main/Config/Configs/SuccessConfig.cs
+++ b/Main/Config/Configs/SuccessConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�8鏈�5鏃�
+//    [  Date ]:           2025骞�11鏈�6鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
@@ -18,24 +18,9 @@
 
     public int ID;
 	public int Type;
-	public int Group;
 	public int NeedCnt;
 	public int[] Condition;
-	public string Condition2;
-	public int Condition3;
-	public string AwardItemList;
-	public string AwardItemList2;
-	public string Money;
-	public int Exp;
-	public int[] AwardAttribute;
-	public int RedPacketID;
-	public int MagicWeaponID;
-	public string MagicWeaponExp;
-	public string Describe;
-	public int NeedGoto;
-	public int Jump;
-	public int ReOrder;
-	public int RealmPracticeID;
+	public int[][] AwardItemList;
 
     public override int LoadKey(string _key)
     {
@@ -51,17 +36,15 @@
 
 			int.TryParse(tables[1],out Type); 
 
-			int.TryParse(tables[2],out Group); 
+			int.TryParse(tables[2],out NeedCnt); 
 
-			int.TryParse(tables[3],out NeedCnt); 
-
-			if (tables[4].Contains("["))
+			if (tables[3].Contains("["))
 			{
-				Condition = JsonMapper.ToObject<int[]>(tables[4]);
+				Condition = JsonMapper.ToObject<int[]>(tables[3]);
 			}
 			else
 			{
-				string[] ConditionStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				string[] ConditionStringArray = tables[3].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
 				Condition = new int[ConditionStringArray.Length];
 				for (int i=0;i<ConditionStringArray.Length;i++)
 				{
@@ -69,47 +52,7 @@
 				}
 			}
 
-			Condition2 = tables[5];
-
-			int.TryParse(tables[6],out Condition3); 
-
-			AwardItemList = tables[7];
-
-			AwardItemList2 = tables[8];
-
-			Money = tables[9];
-
-			int.TryParse(tables[10],out Exp); 
-
-			if (tables[11].Contains("["))
-			{
-				AwardAttribute = JsonMapper.ToObject<int[]>(tables[11]);
-			}
-			else
-			{
-				string[] AwardAttributeStringArray = tables[11].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
-				AwardAttribute = new int[AwardAttributeStringArray.Length];
-				for (int i=0;i<AwardAttributeStringArray.Length;i++)
-				{
-					 int.TryParse(AwardAttributeStringArray[i],out AwardAttribute[i]);
-				}
-			}
-
-			int.TryParse(tables[12],out RedPacketID); 
-
-			int.TryParse(tables[13],out MagicWeaponID); 
-
-			MagicWeaponExp = tables[14];
-
-			Describe = tables[15];
-
-			int.TryParse(tables[16],out NeedGoto); 
-
-			int.TryParse(tables[17],out Jump); 
-
-			int.TryParse(tables[18],out ReOrder); 
-
-			int.TryParse(tables[19],out RealmPracticeID); 
+			AwardItemList = JsonMapper.ToObject<int[][]>(tables[4].Replace("(", "[").Replace(")", "]")); 
         }
         catch (Exception exception)
         {
diff --git a/Main/Config/PartialConfigs/MainLevelConfig.cs b/Main/Config/PartialConfigs/MainLevelConfig.cs
index d7b205b..20abbb0 100644
--- a/Main/Config/PartialConfigs/MainLevelConfig.cs
+++ b/Main/Config/PartialConfigs/MainLevelConfig.cs
@@ -46,5 +46,13 @@
         return waveLineupLists.Count(list => list.Length > 0);
     }
 
+    // 鑾峰彇鐩爣鍏冲崱鐨勭储寮�
+    public static int GetToTargetLevelIndex(int targetLevel)
+    {
+        var levels = GetKeys();
+        levels.Sort();
+        return levels.IndexOf(targetLevel);
+
+    }
 
 }
\ No newline at end of file
diff --git a/Main/Config/PartialConfigs/SuccessConfig.cs b/Main/Config/PartialConfigs/SuccessConfig.cs
new file mode 100644
index 0000000..96f1802
--- /dev/null
+++ b/Main/Config/PartialConfigs/SuccessConfig.cs
@@ -0,0 +1,33 @@
+using System.Collections.Generic;
+public partial class SuccessConfig : ConfigBase<int, SuccessConfig>
+{
+    public static Dictionary<int, List<int>> typeToIDsDict = new Dictionary<int, List<int>>();
+    protected override void OnConfigParseCompleted()
+    {
+        if (!typeToIDsDict.ContainsKey(Type))
+        {
+            typeToIDsDict[Type] = new List<int>();
+        }
+        typeToIDsDict[Type].Add(ID);
+    }
+
+    public static List<int> GetTypeToIDDict(int type)
+    {
+        if (typeToIDsDict.ContainsKey(type))
+        {
+            return typeToIDsDict[type];
+        }
+        return null;
+    }
+
+    //鑾峰緱鎴愬氨鏉′欢锛岄粯璁や竴涓被鍨嬪彧鏈変竴绉嶆潯浠�
+    public static string GetConditionString(int type)
+    {
+        if (typeToIDsDict.ContainsKey(type))
+        {
+            var conds = Get(typeToIDsDict[type][0]).Condition;
+            return conds.IsNullOrEmpty() ? "" : conds.ToString();
+        }
+        return "";
+    }
+}
diff --git a/Main/Config/PartialConfigs/SuccessConfig.cs.meta b/Main/Config/PartialConfigs/SuccessConfig.cs.meta
new file mode 100644
index 0000000..96808b7
--- /dev/null
+++ b/Main/Config/PartialConfigs/SuccessConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5c9f079829a75b84587ebbbd29a56119
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA340_tagSCSuccessInfoList.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA340_tagSCSuccessInfoList.cs
new file mode 100644
index 0000000..fae7ad7
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA340_tagSCSuccessInfoList.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A3 40 鎴愬氨淇℃伅鍒楄〃 #tagSCSuccessInfoList
+
+public class DTCA340_tagSCSuccessInfoList : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HA340_tagSCSuccessInfoList vNetData = vNetPack as HA340_tagSCSuccessInfoList;
+        AchievementManager.Instance.UpdateAchievement(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA340_tagSCSuccessInfoList.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA340_tagSCSuccessInfoList.cs.meta
new file mode 100644
index 0000000..ee3b5b2
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA340_tagSCSuccessInfoList.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2349866a7124b0c488485ddc575a80b9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA342_tagSCSuccessAwardRecordList.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA342_tagSCSuccessAwardRecordList.cs
new file mode 100644
index 0000000..3df3fba
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA342_tagSCSuccessAwardRecordList.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A3 42 鎴愬氨棰嗗璁板綍鍒楄〃 #tagSCSuccessAwardRecordList
+
+public class DTCA342_tagSCSuccessAwardRecordList : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HA342_tagSCSuccessAwardRecordList vNetData = vNetPack as HA342_tagSCSuccessAwardRecordList;
+        AchievementManager.Instance.UpdateAchievementAward(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA342_tagSCSuccessAwardRecordList.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA342_tagSCSuccessAwardRecordList.cs.meta
new file mode 100644
index 0000000..519658a
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA342_tagSCSuccessAwardRecordList.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b0b463773ed6e62448f3b7158f1ab2a5
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
index 81e9230..a8be8c4 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -120,6 +120,8 @@
         Register(typeof(HA923_tagSCArenaPlayerInfo), typeof(DTCA923_tagSCArenaPlayerInfo));
         Register(typeof(HB109_tagSCDailyTaskInfo), typeof(DTCB109_tagSCDailyTaskInfo));
         Register(typeof(HB201_tagSCTianziKYInfo), typeof(DTCB201_tagSCTianziKYInfo));
+        Register(typeof(HA340_tagSCSuccessInfoList), typeof(DTCA340_tagSCSuccessInfoList));
+        Register(typeof(HA342_tagSCSuccessAwardRecordList), typeof(DTCA342_tagSCSuccessAwardRecordList));
     }
 
     //涓诲伐绋嬫敞鍐屽皝鍖�
diff --git a/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA340_tagSCSuccessInfoList.cs b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA340_tagSCSuccessInfoList.cs
new file mode 100644
index 0000000..5ce3439
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA340_tagSCSuccessInfoList.cs
@@ -0,0 +1,33 @@
+using UnityEngine;
+using System.Collections;
+
+// A3 40 鎴愬氨淇℃伅鍒楄〃 #tagSCSuccessInfoList
+
+public class HA340_tagSCSuccessInfoList : GameNetPackBasic {
+    public ushort Count;    //淇℃伅涓暟
+    public  tagSCSuccessInfo[] SuccessInfoList;
+
+    public HA340_tagSCSuccessInfoList () {
+        _cmd = (ushort)0xA340;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out Count, vBytes, NetDataType.WORD);
+        SuccessInfoList = new tagSCSuccessInfo[Count];
+        for (int i = 0; i < Count; i ++) {
+            SuccessInfoList[i] = new tagSCSuccessInfo();
+            TransBytes (out SuccessInfoList[i].SuccType, vBytes, NetDataType.WORD);
+            TransBytes (out SuccessInfoList[i].CLen, vBytes, NetDataType.BYTE);
+            TransBytes (out SuccessInfoList[i].Conds, vBytes, NetDataType.DWORD, SuccessInfoList[i].CLen);
+            TransBytes (out SuccessInfoList[i].CurValue, vBytes, NetDataType.DWORD);
+        }
+    }
+
+    public class tagSCSuccessInfo {
+        public ushort SuccType;        //鎴愬氨绫诲瀷
+        public byte CLen;
+        public  uint[] Conds;        // 鏉′欢鍒楄〃
+        public uint CurValue;        // 杩涘害鍊硷紝鐩稿悓浠诲姟绫诲瀷鏉′欢鐨勮繘搴﹀�煎叡浜�
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA340_tagSCSuccessInfoList.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA340_tagSCSuccessInfoList.cs.meta
new file mode 100644
index 0000000..b39bad9
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA340_tagSCSuccessInfoList.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0da6e6a7f64979d4e9d2e102f68fef21
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA342_tagSCSuccessAwardRecordList.cs b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA342_tagSCSuccessAwardRecordList.cs
new file mode 100644
index 0000000..56b58a9
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA342_tagSCSuccessAwardRecordList.cs
@@ -0,0 +1,29 @@
+using UnityEngine;
+using System.Collections;
+
+// A3 42 鎴愬氨棰嗗璁板綍鍒楄〃 #tagSCSuccessAwardRecordList
+
+public class HA342_tagSCSuccessAwardRecordList : GameNetPackBasic {
+    public ushort RecordCnt;    //璁板綍涓暟
+    public  tagSCSuccessAwardRecord[] RecordList;    //璁板綍鍒楄〃
+
+    public HA342_tagSCSuccessAwardRecordList () {
+        _cmd = (ushort)0xA342;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out RecordCnt, vBytes, NetDataType.WORD);
+        RecordList = new tagSCSuccessAwardRecord[RecordCnt];
+        for (int i = 0; i < RecordCnt; i ++) {
+            RecordList[i] = new tagSCSuccessAwardRecord();
+            TransBytes (out RecordList[i].RecordIndex, vBytes, NetDataType.WORD);
+            TransBytes (out RecordList[i].Record, vBytes, NetDataType.DWORD);
+        }
+    }
+
+    public class tagSCSuccessAwardRecord {
+        public ushort RecordIndex;        //绗嚑涓褰曞�� 姣忎釜key瀛�31涓猻uccid   0-30涓�0, 31-61涓�1..
+        public uint Record;        //鏍规嵁鎴愬氨ID浣嶅垽鏂槸鍚﹀凡棰嗗彇
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA342_tagSCSuccessAwardRecordList.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA342_tagSCSuccessAwardRecordList.cs.meta
new file mode 100644
index 0000000..a504448
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA342_tagSCSuccessAwardRecordList.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: be0a52fd85a2e37429a2ed249d0fa74f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Achievement.meta b/Main/System/Achievement.meta
new file mode 100644
index 0000000..97c8dcc
--- /dev/null
+++ b/Main/System/Achievement.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3793503c7ba33204da1ca91f1bb6aacd
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Achievement/AchievementManager.cs b/Main/System/Achievement/AchievementManager.cs
new file mode 100644
index 0000000..f67a54f
--- /dev/null
+++ b/Main/System/Achievement/AchievementManager.cs
@@ -0,0 +1,196 @@
+锘縰sing System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using System;
+using System.Linq;
+
+
+public partial class AchievementManager : GameSystemManager<AchievementManager>
+{
+    //鎴愬氨绫诲瀷锛氭潯浠讹紙鍙互鏄┖锛夛細杩涘害
+    Dictionary<int, Dictionary<string, int>> achivementDict = new Dictionary<int, Dictionary<string, int>>();
+    public event Action<int> OnAchievementUpdateEvent;
+    //key:绗嚑涓褰曞�� 姣忎釜key瀛�31涓猻uccid   0-30涓�0, 31-61涓�1..; value: 鏍规嵁鎴愬氨ID浣嶅垽鏂槸鍚﹀凡棰嗗彇
+    Dictionary<int, int> achivementAwardDict = new Dictionary<int, int>();
+    public override void Init()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
+    }
+
+    public override void Release()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
+    }
+
+    void OnBeforePlayerDataInitialize()
+    {
+    }
+
+    public void UpdateAchievement(HA340_tagSCSuccessInfoList netPack)
+    {
+        List<int> types = new List<int>();
+        for (int i = 0; i < netPack.Count; i++)
+        {
+            var info = netPack.SuccessInfoList[i];
+            if (!achivementDict.ContainsKey(info.SuccType))
+            {
+                achivementDict[info.SuccType] = new Dictionary<string, int>();
+            }
+
+            string key = info.CLen > 0 ? info.Conds.ToString() : "";
+            achivementDict[info.SuccType][key] = (int)info.CurValue;
+
+            OnAchievementUpdateEvent?.Invoke(info.SuccType);
+            if (!types.Contains(info.SuccType))
+            {
+                types.Add(info.SuccType);
+            }
+        }
+        UpdateRedpoint(types);
+    }
+
+    public int GetAchievementProgress(int type)
+    {
+        if (achivementDict.ContainsKey(type))
+        {
+            var condKey = SuccessConfig.GetConditionString(type);
+            if (achivementDict[type].ContainsKey(condKey))
+            {
+                return achivementDict[type][condKey];
+            }
+        }
+        return 0;
+
+    }
+
+    public void UpdateAchievementAward(HA342_tagSCSuccessAwardRecordList netPack)
+    {
+        List<int> types = new List<int>();
+        for (int i = 0; i < netPack.RecordCnt; i++)
+        {
+            var record = netPack.RecordList[i];
+            achivementAwardDict[record.RecordIndex] = (int)record.Record;
+            var startID = record.RecordIndex * 31;
+            var endID = startID + 30;
+            for (int j = startID; j <= endID; j++)
+            {
+                if (SuccessConfig.HasKey(j))
+                {
+                    var type = SuccessConfig.Get(j).Type;
+                    if (!types.Contains(type))
+                    {
+                        types.Add(type);
+                    }
+                }
+            }
+        }
+        OnAchievementUpdateEvent?.Invoke(-1);
+        UpdateRedpoint(types);
+    }
+
+    //鎴愬氨鏄惁宸查鍙� 
+    //姣忎釜key瀛�31涓猻uccid   0-30涓�0, 31-61涓�1..; 鏍规嵁鎴愬氨ID浣嶅垽鏂槸鍚﹀凡棰嗗彇
+    public bool IsAchievementAwarded(int id)
+    {
+        var index = id / 31;
+        var bit = id % 31;
+        if (achivementAwardDict.ContainsKey(index))
+        {
+            return (achivementAwardDict[index] & (1 << bit)) != 0;
+        }
+        return false;
+    }
+
+    //鑾峰彇鎴愬氨鐘舵��  0: 鏈鍙� 1: 鏈揪鎴� 2: 宸查鍙�
+    public int GetAchievementState(int id)
+    {
+        var process = GetAchievementProgress(id);
+        var config = SuccessConfig.Get(id);
+        if (process < config.NeedCnt)
+        {
+            return 1;
+        }
+        if (IsAchievementAwarded(id))
+        {
+            return 2;
+        }
+        return 0;
+    }
+
+
+    //涓荤嚎绔犺妭
+    Redpoint mainLevelRedpoint = new Redpoint(MainRedDot.RedPoint_DailyKey, MainRedDot.RedPoint_MainMissionKey);
+    //绫诲瀷锛氱孩鐐筰d
+    Dictionary<int, int> redpointDict = new Dictionary<int, int>()
+    {
+        {1, MainRedDot.RedPoint_MainMissionKey}
+    };
+
+    void UpdateRedpoint(List<int> _types)
+    {
+        if (_types.IsNullOrEmpty())
+        {
+            _types = redpointDict.Keys.ToList();
+        }
+
+        foreach (var type in _types)
+        {
+            var redpoint = RedpointCenter.Instance.GetRedpoint(redpointDict[type]);
+            redpoint.state = RedPointState.None;
+            //鏍规嵁ID鍒ゆ柇鏄惁鏈夊彲棰嗗彇鐨�
+            var allAchivement = SuccessConfig.GetTypeToIDDict(type);
+            var process = GetAchievementProgress(type);
+            foreach (var id in allAchivement)
+            {
+                var config = SuccessConfig.Get(id);
+                if (config.NeedCnt <= process)
+                {
+                    if (!IsAchievementAwarded(id))
+                    {
+                        redpoint.state = RedPointState.Simple;
+                        break;
+                    }
+                }
+            }
+
+        }
+    }
+
+    //鏍规嵁绫诲瀷鑾峰彇鎵�鏈夋垚灏盜D, 涓旀槸鎺掑簭鍚庣殑 鏈鍙�>鏈揪鎴�>宸查鍙�
+    public List<int> GetAchievementIDs(int type)
+    {
+        var ids = SuccessConfig.GetTypeToIDDict(type);
+        ids.Sort(CmpIds);
+        return ids;
+    }
+
+    int CmpIds(int a, int b)
+    {
+        var stateA = GetAchievementState(a);
+        var stateB = GetAchievementState(b);
+
+        if (stateA != stateB)
+        {
+            return stateA - stateB;
+        }
+
+        return a - b;
+    }
+
+    public void SendGetAward(int id)
+    {
+        var config = SuccessConfig.Get(id);
+        //绠�鍗曞垽鏂儗鍖�
+        if (PackManager.Instance.GetEmptyGridCount(PackType.Item) < config.AwardItemList.Length)
+        {
+            SysNotifyMgr.Instance.ShowTip("GeRen_lhs_202580");
+            return;
+        }
+        
+        var pack = new CA504_tagCMPlayerGetReward();
+        pack.RewardType = 59;
+        pack.DataEx = (uint)id;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+}
+
diff --git a/Main/System/Achievement/AchievementManager.cs.meta b/Main/System/Achievement/AchievementManager.cs.meta
new file mode 100644
index 0000000..e3f06ab
--- /dev/null
+++ b/Main/System/Achievement/AchievementManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cf5275bc4183a394c83cbfa9707c3f13
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/DayMission/DayMissionBaseWin.cs b/Main/System/DayMission/DayMissionBaseWin.cs
index c88fd30..7ccb3f8 100644
--- a/Main/System/DayMission/DayMissionBaseWin.cs
+++ b/Main/System/DayMission/DayMissionBaseWin.cs
@@ -27,7 +27,7 @@
                 break;
             case 2:
                 //涓荤嚎浠诲姟锛堣嫳闆勪箣璺級
-                currentSubUI = UIManager.Instance.OpenWindow<DayMissionWin>();
+                currentSubUI = UIManager.Instance.OpenWindow<MissionHeroRoadWin>();
                 titleText.text = Language.Get("DayMission4");
                 break;
             default:
diff --git a/Main/System/DayMission/MissionHeroRoadCell.cs b/Main/System/DayMission/MissionHeroRoadCell.cs
new file mode 100644
index 0000000..68fe83a
--- /dev/null
+++ b/Main/System/DayMission/MissionHeroRoadCell.cs
@@ -0,0 +1,68 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+
+public class MissionHeroRoadCell : CellView
+{
+    [SerializeField] Text nameText;
+    [SerializeField] Image processImg;
+    [SerializeField] Text processText;
+    [SerializeField] ItemCell[] itemCells;
+    [SerializeField] Transform[] gotRects;
+
+    [SerializeField] Button getBtn;
+    [SerializeField] Button gotoBtn;
+    [SerializeField] Transform gotRect;
+    [SerializeField] Transform mask;
+
+
+    public void Display(int id)
+    {
+        var config = SuccessConfig.Get(id);
+        nameText.text = Language.Get("Achievement1", config.NeedCnt / 100, config.NeedCnt % 100);
+
+        var targetLevel = MainLevelConfig.GetToTargetLevelIndex(config.NeedCnt) + 1;
+        var curLevel = MainLevelConfig.GetToTargetLevelIndex(AchievementManager.Instance.GetAchievementProgress(config.Type)) + 1;
+        
+        processImg.fillAmount = (float)curLevel / targetLevel;
+        processText.text = Math.Min(targetLevel, curLevel) + "/" + targetLevel;
+
+        var state = AchievementManager.Instance.GetAchievementState(id);
+        for (int i = 0; i < itemCells.Length; i++)
+        {
+            if (i < config.AwardItemList.Length)
+            {
+                itemCells[i].SetActive(true);
+                int itemID = config.AwardItemList[i][0];
+                itemCells[i].Init(new ItemCellModel(itemID, false, config.AwardItemList[i][1]));
+                itemCells[i].button.AddListener(() =>
+                {
+                    ItemTipUtility.Show(itemID);
+                });
+                gotRects[i].SetActive(state == 2);
+            }
+            else
+            {
+                itemCells[i].SetActive(false);
+            }
+        }
+
+        getBtn.SetActive(state == 0);
+        gotoBtn.SetActive(state == 1);
+        gotRect.SetActive(state == 2);
+        mask.SetActive(state == 2);
+
+        
+        getBtn.AddListener(() =>
+        {
+            AchievementManager.Instance.SendGetAward(id);
+        });
+    }
+
+
+}
+
+
diff --git a/Main/System/DayMission/MissionHeroRoadCell.cs.meta b/Main/System/DayMission/MissionHeroRoadCell.cs.meta
new file mode 100644
index 0000000..2fc8ed3
--- /dev/null
+++ b/Main/System/DayMission/MissionHeroRoadCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e5424536ae280184192560cd8373d771
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/DayMission/MissionHeroRoadWin.cs b/Main/System/DayMission/MissionHeroRoadWin.cs
new file mode 100644
index 0000000..d028288
--- /dev/null
+++ b/Main/System/DayMission/MissionHeroRoadWin.cs
@@ -0,0 +1,66 @@
+锘縰sing System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+//涓荤嚎浠诲姟锛氳嫳闆勪箣璺�
+public class MissionHeroRoadWin : UIBase
+{
+    [SerializeField] ScrollerController scroller;
+
+
+    List<int> ids = new List<int>();
+    protected override void OnPreOpen()
+    {
+        scroller.OnRefreshCell += OnRefreshCell;
+        AchievementManager.Instance.OnAchievementUpdateEvent += OnAchievementUpdateEvent;
+        CreateScroller();
+
+
+    }
+
+    protected override void OnPreClose()
+    {
+        scroller.OnRefreshCell -= OnRefreshCell;
+        AchievementManager.Instance.OnAchievementUpdateEvent -= OnAchievementUpdateEvent;
+
+    }
+
+
+
+
+
+    void OnAchievementUpdateEvent(int type)
+    {
+        if (type == 1 || type == -1)
+        {
+            ids = AchievementManager.Instance.GetAchievementIDs(1);
+            scroller.m_Scorller.RefreshActiveCellViews();
+        }
+    }
+
+    void CreateScroller()
+    {
+        ids = AchievementManager.Instance.GetAchievementIDs(1);
+        var count = ids.Count;
+        scroller.Refresh();
+        for (int i = 0; i < count; i++)
+        {
+            scroller.AddCell(ScrollerDataType.Header, i);
+        }
+        scroller.Restart();
+
+    }
+
+
+    void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell as MissionHeroRoadCell;
+        _cell.Display(ids[cell.index]);
+    }
+}
+
+
+
+
+
diff --git a/Main/System/DayMission/MissionHeroRoadWin.cs.meta b/Main/System/DayMission/MissionHeroRoadWin.cs.meta
new file mode 100644
index 0000000..affa6e8
--- /dev/null
+++ b/Main/System/DayMission/MissionHeroRoadWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 803a78750ea407f49b5ddf73889160d9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Message/RichTableEvent.cs b/Main/System/Message/RichTableEvent.cs
index c298614..b43baf6 100644
--- a/Main/System/Message/RichTableEvent.cs
+++ b/Main/System/Message/RichTableEvent.cs
@@ -224,19 +224,19 @@
                                     // }
                                 }
                                 break;
-                            case "success":
-                                {
-                                    var _id = 0;
-                                    if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id))
-                                    {
-                                        var _cfg = SuccessConfig.Get(_id);
-                                        if (_cfg != null)
-                                        {
-                                            return _cfg.Describe;
-                                        }
-                                    }
-                                }
-                                break;
+                            // case "success":
+                            //     {
+                            //         var _id = 0;
+                            //         if (_dict.ContainsKey("id") && int.TryParse(_dict["id"], out _id))
+                            //         {
+                            //             var _cfg = SuccessConfig.Get(_id);
+                            //             if (_cfg != null)
+                            //             {
+                            //                 return _cfg.Describe;
+                            //             }
+                            //         }
+                            //     }
+                            //     break;
 
                             case "treasureprivilege":
                                 {
diff --git a/Main/System/Redpoint/RedpointCenter.cs b/Main/System/Redpoint/RedpointCenter.cs
index c0a7f71..9447982 100644
--- a/Main/System/Redpoint/RedpointCenter.cs
+++ b/Main/System/Redpoint/RedpointCenter.cs
@@ -107,7 +107,7 @@
         {
             TestParentValue(_redpoint.parent);
         }
-        
+
         if (_redpoint.otherParent > 0)
         {
             TestParentValue(_redpoint.otherParent);
@@ -176,4 +176,14 @@
         }
     }
 
+    public Redpoint GetRedpoint(int _id)
+    {
+        Redpoint redpoint = null;
+        if (this.redpoints.TryGetValue(_id, out redpoint))
+        {
+            return redpoint;
+        }
+        
+        return null;
+    }
 }

--
Gitblit v1.8.0