hch
5 天以前 8d5354f23b75fe5ff6187fd311c8b7857fb170c0
217 【福利内容】每日任务
9个文件已修改
17个文件已添加
802 ■■■■■ 已修改文件
Main/Config/ConfigManager.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/DailyLivenessRewardConfig.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/DailyLivenessRewardConfig.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/DailyTaskConfig.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/Configs/DailyTaskConfig.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB109_tagSCDailyTaskInfo.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB109_tagSCDailyTaskInfo.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HB1_Role/HB109_tagSCDailyTaskInfo.cs 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/ServerPack/HB1_Role/HB109_tagSCDailyTaskInfo.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Main.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/DayMission.meta 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/DayMission/DayMissionBaseWin.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/DayMission/DayMissionBaseWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/DayMission/DayMissionCell.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/DayMission/DayMissionCell.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/DayMission/DayMissionManager.cs 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/DayMission/DayMissionManager.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/DayMission/DayMissionWin.cs 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/DayMission/DayMissionWin.cs.meta 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/GeneralConfig/GeneralDefine.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Guild/GuildManager.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/HeroUI/HeroBaseWin.cs 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/RightFuncInHome.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Redpoint/MainRedDot.cs 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Utility/EnumHelper.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Config/ConfigManager.cs
@@ -42,6 +42,7 @@
            typeof(BattleMapConfig),
            typeof(ChestsAwardConfig),
            typeof(CTGConfig),
            typeof(DailyTaskConfig),
            typeof(DamageNumConfig),
            typeof(DirtyWordConfig),
            typeof(DungeonConfig),
@@ -232,6 +233,8 @@
        ClearConfigDictionary<ChestsAwardConfig>();
        // 清空 CTGConfig 字典
        ClearConfigDictionary<CTGConfig>();
        // 清空 DailyTaskConfig 字典
        ClearConfigDictionary<DailyTaskConfig>();
        // 清空 DamageNumConfig 字典
        ClearConfigDictionary<DamageNumConfig>();
        // 清空 DirtyWordConfig 字典
Main/Config/Configs/DailyLivenessRewardConfig.cs
New file
@@ -0,0 +1,44 @@
//--------------------------------------------------------
//    [Author]:           YYL
//    [  Date ]:           2025年11月3日
//--------------------------------------------------------
using System.Collections.Generic;
using System;
using UnityEngine;
using LitJson;
public partial class DailyLivenessRewardConfig : ConfigBase<int, DailyLivenessRewardConfig>
{
    static DailyLivenessRewardConfig()
    {
        // 访问过静态构造函数
        visit = true;
    }
    public int ID;
    public int NeedLiveness;
    public int[][] AwardItemList;
    public override int LoadKey(string _key)
    {
        int key = GetKey(_key);
        return key;
    }
    public override void LoadConfig(string input)
    {
        try {
        string[] tables = input.Split('\t');
        int.TryParse(tables[0],out ID);
            int.TryParse(tables[1],out NeedLiveness);
            AwardItemList = JsonMapper.ToObject<int[][]>(tables[2].Replace("(", "[").Replace(")", "]"));
        }
        catch (Exception exception)
        {
            Debug.LogError(exception);
        }
    }
}
Main/Config/Configs/DailyLivenessRewardConfig.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 6c305e1f375abfd49b4c9d1053ef5bcf
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Config/Configs/DailyTaskConfig.cs
New file
@@ -0,0 +1,68 @@
//--------------------------------------------------------
//    [Author]:           YYL
//    [  Date ]:           2025年11月3日
//--------------------------------------------------------
using System.Collections.Generic;
using System;
using UnityEngine;
using LitJson;
public partial class DailyTaskConfig : ConfigBase<int, DailyTaskConfig>
{
    static DailyTaskConfig()
    {
        // 访问过静态构造函数
        visit = true;
    }
    public int TaskID;
    public int TaskType;
    public int[] TaskConds;
    public int NeedValue;
    public int AwardLiveness;
    public string Title;
    public int GuideID;
    public override int LoadKey(string _key)
    {
        int key = GetKey(_key);
        return key;
    }
    public override void LoadConfig(string input)
    {
        try {
        string[] tables = input.Split('\t');
        int.TryParse(tables[0],out TaskID);
            int.TryParse(tables[1],out TaskType);
            if (tables[2].Contains("["))
            {
                TaskConds = JsonMapper.ToObject<int[]>(tables[2]);
            }
            else
            {
                string[] TaskCondsStringArray = tables[2].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
                TaskConds = new int[TaskCondsStringArray.Length];
                for (int i=0;i<TaskCondsStringArray.Length;i++)
                {
                     int.TryParse(TaskCondsStringArray[i],out TaskConds[i]);
                }
            }
            int.TryParse(tables[3],out NeedValue);
            int.TryParse(tables[4],out AwardLiveness);
            Title = tables[5];
            int.TryParse(tables[6],out GuideID);
        }
        catch (Exception exception)
        {
            Debug.LogError(exception);
        }
    }
}
Main/Config/Configs/DailyTaskConfig.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 0ba5c113ebde460469cc494b48333132
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB109_tagSCDailyTaskInfo.cs
New file
@@ -0,0 +1,12 @@
using UnityEngine;
using System.Collections;
// B1 09 每日活跃任务信息 #tagSCDailyTaskInfo
public class DTCB109_tagSCDailyTaskInfo : DtcBasic {
    public override void Done(GameNetPackBasic vNetPack) {
        base.Done(vNetPack);
        HB109_tagSCDailyTaskInfo vNetData = vNetPack as HB109_tagSCDailyTaskInfo;
        DayMissionManager.Instance.UpdateDailyTaskInfo(vNetData);
    }
}
Main/Core/NetworkPackage/DTCFile/ServerPack/HB1_Role/DTCB109_tagSCDailyTaskInfo.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 894bb389b50caa241b017836c059b06e
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -117,6 +117,7 @@
        Register(typeof(HA009_tagSCGameRecInfo), typeof(DTCA009_tagSCGameRecInfo));
        Register(typeof(HA922_tagSCArenaMatchList), typeof(DTCA922_tagSCArenaMatchList));
        Register(typeof(HA923_tagSCArenaPlayerInfo), typeof(DTCA923_tagSCArenaPlayerInfo));
        Register(typeof(HB109_tagSCDailyTaskInfo), typeof(DTCB109_tagSCDailyTaskInfo));
    }
    //主工程注册封包
Main/Core/NetworkPackage/ServerPack/HB1_Role/HB109_tagSCDailyTaskInfo.cs
New file
@@ -0,0 +1,39 @@
using UnityEngine;
using System.Collections;
// B1 09 每日活跃任务信息 #tagSCDailyTaskInfo
public class HB109_tagSCDailyTaskInfo : GameNetPackBasic {
    public uint ActivityTotal;    // 今日累计获得活跃度
    public uint ActivityAward;    // 累计活跃领奖记录,按活跃ID奖励二进制位存储是否已领取
    public uint DailyTaskState;    // 今日任务是否已领取奖励,按任务ID二进制位存储是否已领取
    public byte TaskCount;
    public  tagSCDailyTask[] TaskList;    // 差异更新的任务信息
    public HB109_tagSCDailyTaskInfo () {
        _cmd = (ushort)0xB109;
    }
    public override void ReadFromBytes (byte[] vBytes) {
        TransBytes (out ActivityTotal, vBytes, NetDataType.DWORD);
        TransBytes (out ActivityAward, vBytes, NetDataType.DWORD);
        TransBytes (out DailyTaskState, vBytes, NetDataType.DWORD);
        TransBytes (out TaskCount, vBytes, NetDataType.BYTE);
        TaskList = new tagSCDailyTask[TaskCount];
        for (int i = 0; i < TaskCount; i ++) {
            TaskList[i] = new tagSCDailyTask();
            TransBytes (out TaskList[i].TaskType, vBytes, NetDataType.BYTE);
            TransBytes (out TaskList[i].CLen, vBytes, NetDataType.BYTE);
            TransBytes (out TaskList[i].Conds, vBytes, NetDataType.DWORD, TaskList[i].CLen);
            TransBytes (out TaskList[i].CurValue, vBytes, NetDataType.DWORD);
        }
    }
    public class tagSCDailyTask {
        public byte TaskType;        // 任务类型
        public byte CLen;
        public  uint[] Conds;        // 条件列表
        public uint CurValue;        // 进度值,相同任务类型条件的进度值共享
    }
}
Main/Core/NetworkPackage/ServerPack/HB1_Role/HB109_tagSCDailyTaskInfo.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 83a37cb51971a04478013e6f737e6eaa
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/Main.cs
@@ -83,6 +83,8 @@
        managers.Add(AdsManager.Instance);
        managers.Add(BoneFieldManager.Instance);
        managers.Add(ArenaManager.Instance);
        managers.Add(DayMissionManager.Instance);
        foreach (var manager in managers)
        {
            manager.Init();
Main/System/DayMission.meta
New file
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 1f7eb0d49e99cb641b0b1643cce2d73e
folderAsset: yes
DefaultImporter:
  externalObjects: {}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/DayMission/DayMissionBaseWin.cs
New file
@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
//日常界面
public class DayMissionBaseWin : FunctionsBaseWin
{
   [SerializeField] Text titleText;
    protected override void OpenSubUIByTabIndex()
    {
        switch (functionOrder)
        {
            case 0:
                //日常任务
                currentSubUI = UIManager.Instance.OpenWindow<DayMissionWin>();
                titleText.text = Language.Get("DayMission2");
                break;
            case 1:
                //周奖励
                // currentSubUI = UIManager.Instance.OpenWindow<HeroCollectionWin>();
                titleText.text = Language.Get("DayMission3");
                break;
            case 2:
                //主线任务(英雄之路)
                titleText.text = Language.Get("DayMission4");
                break;
            default:
                Debug.LogWarning("未知的标签索引: " + functionOrder);
                break;
        }
    }
}
Main/System/DayMission/DayMissionBaseWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: d7b1726e7f98b034daa3ddccc679e67b
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/DayMission/DayMissionCell.cs
New file
@@ -0,0 +1,67 @@
using System;
using UnityEngine;
using UnityEngine.UI;
public class DayMissionCell : CellView
{
    [SerializeField] Text titleText;
    [SerializeField] Text valueText;
    [SerializeField] Image processImg;
    [SerializeField] Text processText;
    [SerializeField] Button getBtn;
    [SerializeField] Button gotoBtn;
    [SerializeField] Transform gotRect;
    [SerializeField] Transform mask;
    public void Display(int index)
    {
        int id = DayMissionManager.Instance.dailyIDList[index];
        var config = DailyTaskConfig.Get(id);
        titleText.text = string.Format(config.Title, config.NeedValue);
        valueText.text = config.AwardLiveness.ToString();
        var process = DayMissionManager.Instance.GetDailyTaskProcess(id);
        processImg.fillAmount = (float)process / config.NeedValue;
        processText.text = Math.Min(process, config.NeedValue) + "/" + config.NeedValue;
        var state = DayMissionManager.Instance.GetDailyTaskState(config);
        if (state == 0)
        {
            getBtn.SetActive(false);
            gotoBtn.SetActive(true);
            gotRect.SetActive(false);
            mask.SetActive(true);
            gotoBtn.AddListener(()=>
            {
                UIManager.Instance.CloseWindow<DayMissionBaseWin>();
                NewBieCenter.Instance.StartNewBieGuide(config.GuideID);
            });
        }
        else if (state == 1)
        {
            getBtn.SetActive(true);
            gotoBtn.SetActive(false);
            gotRect.SetActive(false);
            mask.SetActive(false);
            getBtn.AddListener(()=>
            {
                var pack = new CA504_tagCMPlayerGetReward();
                pack.RewardType = 1;
                pack.DataEx = (uint)id;
                GameNetSystem.Instance.SendInfo(pack);
            });
        }
        else if (state == 2)
        {
            getBtn.SetActive(false);
            gotoBtn.SetActive(false);
            gotRect.SetActive(true);
            mask.SetActive(true);
        }
    }
}
Main/System/DayMission/DayMissionCell.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ad65770eaf39355489a8cd13d53d3399
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/DayMission/DayMissionManager.cs
New file
@@ -0,0 +1,201 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class DayMissionManager : GameSystemManager<DayMissionManager>
{
    public int activityTotal;    // 今日累计获得活跃度
    public int activityAward;    // 累计活跃领奖记录,按活跃ID奖励二进制位存储是否已领取
    public int dailyTaskState;    // 今日任务是否已领取奖励,按任务ID二进制位存储是否已领取
    public Dictionary<int, Dictionary<int, int>> taskProcessDict = new Dictionary<int, Dictionary<int, int>>();    // 任务进度字典,key:任务类型,value:进度值
    public event Action OnDayMissionEvent;  // 日常任务事件
    public List<int> dailyIDList = new List<int>();
    bool isRefreshDayMission = false;   //做个延迟刷新
    public override void Init()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
        ParseConfig();
    }
    public override void Release()
    {
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
    }
    void OnBeforePlayerDataInitialize()
    {
        activityTotal = 0;
        activityAward = 0;
        dailyTaskState = 0;
        taskProcessDict.Clear();
    }
    void OnSecondEvent()
    {
        if (isRefreshDayMission)
        {
            isRefreshDayMission = false;
            UpdateRedpoint();
            OnDayMissionEvent?.Invoke();
        }
    }
    void ParseConfig()
    {
        dailyIDList = DailyTaskConfig.GetKeys();
    }
    public void UpdateDailyTaskInfo(HB109_tagSCDailyTaskInfo netPack)
    {
        if (netPack.TaskCount > 4)
        {
            //4是随便写的 正常刷新包小于等于1,只有重登和过天会将所有同步一次
            //日常活跃包会被战斗包包含打乱顺序,故按最大值存储
            activityTotal = 0;
            activityAward = 0;
            dailyTaskState = 0;
            taskProcessDict.Clear();
        }
        activityTotal = Math.Max(activityTotal, (int)netPack.ActivityTotal);
        activityAward = Math.Max(activityAward, (int)netPack.ActivityAward);
        dailyTaskState = Math.Max(dailyTaskState, (int)netPack.DailyTaskState);
        for (int i = 0; i < netPack.TaskCount; i++)
        {
            var task = netPack.TaskList[i];
            if (!taskProcessDict.ContainsKey(task.TaskType))
            {
                taskProcessDict[task.TaskType] = new Dictionary<int, int>();
            }
            int cond = 0;
            if (!task.Conds.IsNullOrEmpty())
            {
                // 暂时按单条件规则存储,后续有变化再定义
                cond = (int)task.Conds[0];
            }
            if (!taskProcessDict[task.TaskType].ContainsKey(cond))
            {
                taskProcessDict[task.TaskType][cond] = 0;
            }
            taskProcessDict[task.TaskType][cond] = Math.Max(taskProcessDict[task.TaskType][cond], (int)task.CurValue);
        }
        isRefreshDayMission = true;
        // UpdateRedpoint();
        // OnDayMissionEvent?.Invoke();
    }
    public int GetDailyTaskProcess(int id)
    {
        var config = DailyTaskConfig.Get(id);
        if (!taskProcessDict.ContainsKey(config.TaskType))
        {
            return 0;
        }
        var cond = 0;
        if (!config.TaskConds.IsNullOrEmpty())
        {
            // 暂时按单条件规则存储,后续有变化再定义
            cond = config.TaskConds[0];
        }
        if (!taskProcessDict[config.TaskType].ContainsKey(cond))
        {
            return 0;
        }
        return taskProcessDict[config.TaskType][cond];
    }
    Redpoint redpoint = new Redpoint(MainRedDot.RedPoint_DailyKey, MainRedDot.RedPoint_DailyFuncKey);
    void UpdateRedpoint()
    {
        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.DayMission))
        {
            return;
        }
        //累积奖励 和 可领取任务奖励任一
        redpoint.state = RedPointState.None;
        foreach (var config in DailyLivenessRewardConfig.GetValues())
        {
            if (GetDayActivityState(config) == 1)
            {
                redpoint.state = RedPointState.Simple;
                return;
            }
        }
        foreach (var config in DailyTaskConfig.GetValues())
        {
            if (GetDailyTaskState(config) == 1)
            {
                redpoint.state = RedPointState.Simple;
                return;
            }
        }
    }
    //总活跃奖励:0 未达标 1 可领取 2 已领取
    public int GetDayActivityState(DailyLivenessRewardConfig config)
    {
        if (activityTotal < config.NeedLiveness)
        {
            return 0;
        }
        if (((1 << config.ID) & activityAward) == 0)
        {
            return 1;
        }
        return 2;
    }
    //每日任务奖励:0 未达标 1 可领取 2 已领取
    public int GetDailyTaskState(DailyTaskConfig config)
    {
        if (GetDailyTaskProcess(config.TaskID) < config.NeedValue)
        {
            return 0;
        }
        if (((1 << config.TaskID) & dailyTaskState) == 0)
        {
            return 1;
        }
        return 2;
    }
    public void SortDailyTask()
    {
        dailyIDList.Sort(CmpDayTask);
    }
    // 可领取 》 已领取 》 未达标
    List<int> indexs = new List<int>() { 1, 0, 2 };
    int CmpDayTask(int idA, int idB)
    {
        var configA = DailyTaskConfig.Get(idA);
        var configB = DailyTaskConfig.Get(idB);
        var stateA = GetDailyTaskState(configA);
        var stateB = GetDailyTaskState(configB);
        var indexA = indexs.IndexOf(stateA);
        var indexB = indexs.IndexOf(stateB);
        if (indexA != indexB)
        {
            return indexA.CompareTo(indexB);
        }
        return idA.CompareTo(idB);
    }
}
Main/System/DayMission/DayMissionManager.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 64cbcc7debad2de488af4a6e79510c08
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/DayMission/DayMissionWin.cs
New file
@@ -0,0 +1,138 @@
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//日常任务
public class DayMissionWin : UIBase
{
    [SerializeField] Text totalActivityText;
    [SerializeField] Image totalActivityProcessImg;
    [SerializeField] ItemCell[] itemCells;
    [SerializeField] Transform[] finishMarkImg;
    [SerializeField] Transform[] canGetAwardImg;
    [SerializeField] Text[] targetActivityText;
    [SerializeField] ScrollerController scroller;
    int beforeActivity; //用于显示活跃奖励
    protected override void OnPreOpen()
    {
        beforeActivity = DayMissionManager.Instance.activityTotal;
        scroller.OnRefreshCell += OnRefreshCell;
        DayMissionManager.Instance.OnDayMissionEvent += OnDayMissionEvent;
        CreateScroller();
        Display();
    }
    protected override void OnPreClose()
    {
        scroller.OnRefreshCell -= OnRefreshCell;
        DayMissionManager.Instance.OnDayMissionEvent -= OnDayMissionEvent;
    }
    void Display()
    {
        totalActivityText.text = DayMissionManager.Instance.activityTotal.ToString();
        var keys = DailyLivenessRewardConfig.GetKeys();
        keys.Sort();
        for (int i = 0; i < itemCells.Length; i++)
        {
            int id = keys[i];
            var config = DailyLivenessRewardConfig.Get(id);
            int itemID = config.AwardItemList[0][0];
            int itemCount = config.AwardItemList[0][1];
            var state = DayMissionManager.Instance.GetDayActivityState(config);
            itemCells[i].Init(new ItemCellModel(itemID, false, itemCount));
            itemCells[i].button.AddListener(() => { ShowAward(id); });
            if (state == 0)
            {
                finishMarkImg[i].SetActive(false);
                canGetAwardImg[i].SetActive(false);
            }
            else if (state == 1)
            {
                finishMarkImg[i].SetActive(false);
                canGetAwardImg[i].SetActive(true);
            }
            else if (state == 2)
            {
                finishMarkImg[i].SetActive(true);
                canGetAwardImg[i].SetActive(false);
            }
            targetActivityText[i].text = config.NeedLiveness.ToString();
        }
        totalActivityProcessImg.fillAmount = (float)DayMissionManager.Instance.activityTotal / 100;
    }
    void CreateScroller()
    {
        scroller.Refresh();
        DayMissionManager.Instance.SortDailyTask();
        for (int i = 0; i < DayMissionManager.Instance.dailyIDList.Count; i++)
        {
            var id = DayMissionManager.Instance.dailyIDList[i];
            scroller.AddCell(ScrollerDataType.Header, i);
        }
        scroller.Restart();
    }
    void OnDayMissionEvent()
    {
        DayMissionManager.Instance.SortDailyTask();
        Display();
        scroller.m_Scorller.RefreshActiveCellViews();
        if (DayMissionManager.Instance.activityTotal != beforeActivity)
        {
            List<Item> showItems = new List<Item>();
            Item tempItem = new Item(GeneralDefine.activityItemID, DayMissionManager.Instance.activityTotal - beforeActivity);
            showItems.Add(tempItem);
            ItemLogicUtility.Instance.ShowGetItem(showItems);
            beforeActivity = DayMissionManager.Instance.activityTotal;
        }
    }
    void ShowAward(int id)
    {
        var config = DailyLivenessRewardConfig.Get(id);
        var state = DayMissionManager.Instance.GetDayActivityState(config);
        if (state == 1)
        {
            var keys = DailyLivenessRewardConfig.GetKeys();
            keys.Sort();
            foreach(var id1 in keys)
            {
                var config1 = DailyLivenessRewardConfig.Get(id1);
                var state1 = DayMissionManager.Instance.GetDayActivityState(config1);
                if (state1 == 1)
                {
                    //增加一键领奖
                    var pack = new CA504_tagCMPlayerGetReward();
                    pack.RewardType = 0;
                    pack.DataEx = (uint)id1;
                    GameNetSystem.Instance.SendInfo(pack);
                }
            }
            return;
        }
        int itemID = config.AwardItemList[0][0];
        ItemTipUtility.Show(itemID);
    }
    void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell as DayMissionCell;
        _cell.Display(cell.index);
    }
}
Main/System/DayMission/DayMissionWin.cs.meta
New file
@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 342c2cca8edf22941b9f959890f2c9ba
MonoImporter:
  externalObjects: {}
  serializedVersion: 2
  defaultReferences: []
  executionOrder: 0
  icon: {instanceID: 0}
  userData:
  assetBundleName:
  assetBundleVariant:
Main/System/GeneralConfig/GeneralDefine.cs
@@ -9,6 +9,7 @@
public class GeneralDefine
{
    public static Dictionary<int, int> MoneyDisplayModel { get; private set; }
    public static int activityItemID { get; private set; }
    
    public static int expDisplayId { get; private set; }
    
@@ -45,7 +46,7 @@
        try
        {
            MoneyDisplayModel = ConfigParse.ParseIntDict(GetInputString("MoneyDisplayModel", 1));
            activityItemID = GetInt("MoneyDisplayModel", 2);
            var config = FuncConfigConfig.Get("PutInItemPack");
            JsonData itemPutInData = JsonMapper.ToObject(config.Numerical1);
Main/System/Guild/GuildManager.cs
@@ -898,9 +898,9 @@
    #region 红点
    
    Redpoint donateRedpoint = new Redpoint(MainRedDot.guildHallRedpointID, MainRedDot.guildHallRedpointID * 10);
    Redpoint donateRedpoint = new Redpoint(MainRedDot.guildHallRedpointID, MainRedDot.donateRedpointID);
    //珍宝阁(行商)
    Redpoint zbgRedpoint = new Redpoint(MainRedDot.MainGuildRedpoint, MainRedDot.MainGuildRedpoint * 100 + 1);
    Redpoint zbgRedpoint = new Redpoint(MainRedDot.MainGuildRedpoint, MainRedDot.hawkerRedpointID);
    void UpdateDonateRedPoint()
    {
Main/System/HeroUI/HeroBaseWin.cs
Main/System/Main/RightFuncInHome.cs
@@ -13,6 +13,7 @@
    [SerializeField] Button closeBtn;
    [SerializeField] Button storeBtn;
    [SerializeField] Button monthCardBtn;
    [SerializeField] Button dayMissionBtn;
    string listenWindowName = "";   //监听关闭时再显示
@@ -21,11 +22,13 @@
    {
        monthCardBtn.AddListener(() =>
        {
            ListenWindow("");
            //用于监听界面,打开时缩进右边功能栏,关闭时显示
            // ListenWindow("");
            InvestModel.Instance.BuyInvest(InvestModel.monthCardType);
        });
        storeBtn.AddListener(() =>
        {
            //用于监听界面,打开时缩进右边功能栏,关闭时显示
            ListenWindow("StoreBaseWin");
            UIManager.Instance.OpenWindow<StoreBaseWin>();
        });
@@ -45,11 +48,19 @@
        UIManager.Instance.OnCloseWindow -= OnCloseWindow;
        UIManager.Instance.OnCloseWindow += OnCloseWindow;
        dayMissionBtn.AddListener(() =>
        {
            //用于监听界面,打开时缩进右边功能栏,关闭时显示
            ListenWindow("DayMissionBaseWin");
            UIManager.Instance.OpenWindow<DayMissionBaseWin>();
        });
    }
    void ShowBtns()
    {
        storeBtn.SetActive(FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Store));
        dayMissionBtn.SetActive(FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.DayMission));
    }
@@ -73,7 +84,7 @@
        }
    }
    //用于监听界面,打开时缩进右边功能栏,关闭时显示
    void ListenWindow(string _listenWindowName)
    {
        ShowFuncCol(false);
Main/System/Redpoint/MainRedDot.cs
@@ -24,6 +24,32 @@
    //比如功能A红点100,子红点1001,以此类推,或者100*10000 +1类推,避免重复的可能性,如1010 就可能和功能B中的红点重复
    //    功能B红点101,子红点1011,以此类推,或者101*10000 +1类推,避免重复的可能性
    //官职
    public const int RedPoint_OfficialKey = 101;
    #region 背包红点
    public const int RedPoint_MainPackKey = 102;
    public const int RedPoint_BagFuncKey = 10201;    //背包功能
    public const int RedPoint_ComposeFuncKey = 10202;   //合成
    public Redpoint redPointMainPack = new Redpoint(MainAffairsRedpoint, RedPoint_MainPackKey);
    #endregion
    #region 商店入口红点
    public const int Store_REDPOINT = 103;
    #endregion
    //日常
    public const int RedPoint_DailyKey = 104;
    public Redpoint redPointDaily = new Redpoint(RightFuncRedpoint, RedPoint_DailyKey);
    public const int RedPoint_DailyFuncKey = 1041;  //日常任务
    public const int RedPoint_WeekBPFuncKey = 1042;  //周奖励(战令)
    public const int RedPoint_MainMissionKey = 1043;  //主线任务奖励(成就)
    //武将卡
    public const int HeroCardRedpoint = 200;
    public Redpoint HeroListRedpoint = new Redpoint(MainHerosRedpoint, HeroCardRedpoint);
@@ -45,34 +71,6 @@
    public Redpoint redPointFriendChat = new Redpoint(RedPoint_FriendChatKey);
    #endregion
    #region 背包红点
    public const int RedPoint_MainPackKey = 102;
    public const int RedPoint_BagFuncKey = 10201;    //背包功能
    public const int RedPoint_ComposeFuncKey = 10202;   //合成
    public Redpoint redPointMainPack = new Redpoint(MainAffairsRedpoint, RedPoint_MainPackKey);
    #endregion
    //官职
    public const int RedPoint_OfficialKey = 101;
    #region 仙盟红点
    //大厅
    public const int guildHallRedpointID = MainGuildRedpoint * 10;
    Redpoint hallRedpoint = new Redpoint(MainGuildRedpoint, guildHallRedpointID);
    #endregion
    #region 商店入口红点
    public const int Store_REDPOINT = 103;
    #endregion
    #region 开服活动红点
    public const int REDPOINT_OPENSERVER = 209;
@@ -90,6 +88,17 @@
    #endregion
        
    public const int BlessLVRedpoint = 399;  //祝福等级红点
    #region 仙盟红点
    //大厅
    public const int guildHallRedpointID = 40;
    Redpoint hallRedpoint = new Redpoint(MainGuildRedpoint, guildHallRedpointID);
    public const int donateRedpointID = 400;    //捐献
    public const int hawkerRedpointID = 401;    //行商(原珍宝阁)
    #endregion
    public const int DailySpecialsRedpoint = 439;  //每日特惠入口红点
    public const int BlessedLandRedpoint = 444; //淘金红点
Main/Utility/EnumHelper.cs
@@ -825,7 +825,9 @@
    Realm = 10, //境界 官职
    Guild = 11,// 公会
    BlessLV = 12, //祝福等级
    DayMission = 15,//日常
    Store = 16,//坊市
    DaySign = 17,//每日签到
    HappyFindTreasure = 18,// 英雄招募
    Chat = 19,//聊天
    AutoFight = 20,//自动战斗