From 3963fc611a6962a96ab790cef9d9b8d5f51f38ce Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 06 三月 2026 17:30:24 +0800
Subject: [PATCH] 530 子 【运营需求】前往评价功能 / 【运营需求】前往评价功能-客户端

---
 Main/System/SmallFunc/SmallFuncManager.cs                                                           |  116 +++++++++++++++++++
 Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs                      |    2 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30C_tagMCPlayerRewardGetRecord.cs      |   13 ++
 Main/System/SmallFunc/GoodReviewWin.cs                                                              |   76 ++++++++++++
 Main/System/SmallFunc/GoodReviewWin.cs.meta                                                         |   11 +
 Main/Core/NetworkPackage/ServerPack/HA3_Function/HA30C_tagMCPlayerRewardGetRecord.cs.meta           |   11 +
 Main/System/Redpoint/MainRedDot.cs                                                                  |    3 
 Main/Core/NetworkPackage/ServerPack/HA3_Function/HA30C_tagMCPlayerRewardGetRecord.cs                |   19 +++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30C_tagMCPlayerRewardGetRecord.cs.meta |   11 +
 Main/System/Main/RightFuncInHome.cs                                                                 |    6 +
 Main/System/SmallFunc.meta                                                                          |    8 +
 Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs                                                |    1 
 Main/System/GeneralConfig/GeneralDefine.cs                                                          |   11 +
 Main/Main.cs                                                                                        |    1 
 Main/SDK/SDKUtils.cs                                                                                |    2 
 Main/System/SmallFunc/SmallFuncManager.cs.meta                                                      |   11 +
 16 files changed, 300 insertions(+), 2 deletions(-)

diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
index 3606984..665129e 100644
--- a/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/H01_System/DTC0102_tagCDBPlayer.cs
@@ -5,7 +5,7 @@
 public class DTC0102_tagCDBPlayer : DtcBasic
 {
 
-    public static event Action beforePlayerDataInitializeEvent; //閲嶇櫥鍒囨崲璐﹀彿 鎴栬�� 鐭殏鐨勬柇绾块噸杩� 閮戒細瑙﹀彂,(鎱庣敤锛侊紒锛�)
+    public static event Action beforePlayerDataInitializeEvent; //閲嶇櫥鍒囨崲璐﹀彿 鎴栬�� 鐭殏鐨勬柇绾块噸杩� 閮戒細瑙﹀彂 (閫夋嫨鎬т娇鐢紒锛侊紒)
     public static event Action beforePlayerDataInitializeEventOnRelogin;    //閲嶇櫥鍒囨崲璐﹀彿瑙﹀彂 锛堝ぇ澶氭儏鍐电敤杩欎釜锛屾敞鎰忔湇鍔$浼氬彂鍖呭垪琛ㄧ被鐨勫瓨鍌ㄩ噸澶嶆坊鍔犵殑鎯呭喌锛�
     public static event Action beforePlayerDataInitializeEventOnReconnect;    //鍚岃处鍙锋柇绾块噸杩炶Е鍙�
     public static event Action afterPlayerDataInitializeEvent;
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30C_tagMCPlayerRewardGetRecord.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30C_tagMCPlayerRewardGetRecord.cs
new file mode 100644
index 0000000..1a4e8c8
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30C_tagMCPlayerRewardGetRecord.cs
@@ -0,0 +1,13 @@
+using UnityEngine;
+using System.Collections;
+
+//A3 0C 鐜╁鍚勫鍔辩被鍨嬮鍙栬褰曚俊鎭� #tagMCPlayerRewardGetRecord
+
+public class DTCA30C_tagMCPlayerRewardGetRecord : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HA30C_tagMCPlayerRewardGetRecord vNetData = vNetPack as HA30C_tagMCPlayerRewardGetRecord;
+        SmallFuncManager.Instance.UpdatePlayerReward(vNetData);
+
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30C_tagMCPlayerRewardGetRecord.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30C_tagMCPlayerRewardGetRecord.cs.meta
new file mode 100644
index 0000000..2bc3f33
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA30C_tagMCPlayerRewardGetRecord.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f6149834f7edcb74cb112ba34d865e88
+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 2a5c795..cd1d7ef 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -155,6 +155,7 @@
         Register(typeof(HAA89_tagMCActLunhuidianPlayerInfo), typeof(DTCAA89_tagMCActLunhuidianPlayerInfo));
         Register(typeof(HA124_tagMCPlayerInfo), typeof(DTCA124_tagMCPlayerInfo));
         Register(typeof(HA106_tagMCCoinToGoldReport), typeof(DTCA106_tagMCCoinToGoldReport));
+        Register(typeof(HA30C_tagMCPlayerRewardGetRecord), typeof(DTCA30C_tagMCPlayerRewardGetRecord));
     }
 
     //涓诲伐绋嬫敞鍐屽皝鍖�
diff --git a/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA30C_tagMCPlayerRewardGetRecord.cs b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA30C_tagMCPlayerRewardGetRecord.cs
new file mode 100644
index 0000000..3b7d032
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA30C_tagMCPlayerRewardGetRecord.cs
@@ -0,0 +1,19 @@
+using UnityEngine;
+using System.Collections;
+
+//A3 0C 鐜╁鍚勫鍔辩被鍨嬮鍙栬褰曚俊鎭� #tagMCPlayerRewardGetRecord
+
+public class HA30C_tagMCPlayerRewardGetRecord : GameNetPackBasic {
+    public byte RewardType;    //濂栧姳绫诲瀷
+    public uint RewardGetRecord;    // 鎸変簩杩涘埗浣嶆爣绀洪鍙栬褰�
+
+    public HA30C_tagMCPlayerRewardGetRecord () {
+        _cmd = (ushort)0xA30C;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out RewardType, vBytes, NetDataType.BYTE);
+        TransBytes (out RewardGetRecord, vBytes, NetDataType.DWORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA30C_tagMCPlayerRewardGetRecord.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA30C_tagMCPlayerRewardGetRecord.cs.meta
new file mode 100644
index 0000000..90d31ea
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA30C_tagMCPlayerRewardGetRecord.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 842a0ed9f41346846ba3d8c619c09112
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Main.cs b/Main/Main.cs
index 8e019f4..9152a48 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -107,6 +107,7 @@
         managers.Add(TimingGiftManager.Instance);
         managers.Add(SettingDataManager.Instance);
         managers.Add(TimeRushManager.Instance);
+        managers.Add(SmallFuncManager.Instance);
 
         foreach (var manager in managers)
         {
diff --git a/Main/SDK/SDKUtils.cs b/Main/SDK/SDKUtils.cs
index 35f34f2..9c94b88 100644
--- a/Main/SDK/SDKUtils.cs
+++ b/Main/SDK/SDKUtils.cs
@@ -56,7 +56,7 @@
         get; private set;
     }
 
-    public static string channelSign; //涓嶅悓娓犻亾鐨勬墦鍖呮爣璇�
+    public static string channelSign = ""; //涓嶅悓娓犻亾鐨勬墦鍖呮爣璇�
 
     // 鏄惁鍚屾剰闅愮鏀跨瓥
     public bool IsAgreeSecret = false;
diff --git a/Main/System/GeneralConfig/GeneralDefine.cs b/Main/System/GeneralConfig/GeneralDefine.cs
index d8cf231..f35096e 100644
--- a/Main/System/GeneralConfig/GeneralDefine.cs
+++ b/Main/System/GeneralConfig/GeneralDefine.cs
@@ -44,6 +44,10 @@
     public static int lvExpFullTipLimit { get; private set; }
     public static Dictionary<string, string> commonAwardTipDict { get; private set; }
 
+    public static int[][] review_Awards;
+    public static Dictionary<string, string> review_UrlDict;
+    public static int review_MainLevel;
+    public static int review_CD;
     public static void Init()
     {
         try
@@ -100,6 +104,13 @@
 
             config = FuncConfigConfig.Get("AwardEventTip");
             commonAwardTipDict = JsonMapper.ToObject<Dictionary<string, string>>(config.Numerical1);
+
+            config = FuncConfigConfig.Get("GoodGameReward");
+            review_Awards = JsonMapper.ToObject<int[][]>(config.Numerical1);
+            config = FuncConfigConfig.Get("Review");
+            review_UrlDict = JsonMapper.ToObject<Dictionary<string, string>>(config.Numerical2);
+            review_MainLevel = int.Parse(config.Numerical3);
+            review_CD = int.Parse(config.Numerical4);
         }
         catch (Exception ex)
         {
diff --git a/Main/System/Main/RightFuncInHome.cs b/Main/System/Main/RightFuncInHome.cs
index 4eb474d..cbb314f 100644
--- a/Main/System/Main/RightFuncInHome.cs
+++ b/Main/System/Main/RightFuncInHome.cs
@@ -18,6 +18,7 @@
     [SerializeField] Button llmjBtn; //鍘嗙粌绉樼瑘
     [SerializeField] Button signBtn;
     [SerializeField] Button previewBtn;
+    [SerializeField] Button reviewBtn; //濂借瘎
 
     static string listenWindowName = "";   //鐩戝惉鍏抽棴鏃跺啀鏄剧ず
 
@@ -87,6 +88,10 @@
             ListenWindow("FunctionPreviewWin");
             UIManager.Instance.OpenWindow<FunctionPreviewWin>();
         });
+        reviewBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<GoodReviewWin>();
+        });
     }
     
     void OnDestroy()
@@ -104,6 +109,7 @@
         signBtn.SetActive(FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.DaySign));
         monthCardBtn.SetActive(FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.PrivilegeCard));
         previewBtn.SetActive(FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.FunctionPreview));
+        reviewBtn.SetActive(SmallFuncManager.Instance.IsReviewOpen());
     }
 
 
diff --git a/Main/System/Redpoint/MainRedDot.cs b/Main/System/Redpoint/MainRedDot.cs
index d612f4d..ee54644 100644
--- a/Main/System/Redpoint/MainRedDot.cs
+++ b/Main/System/Redpoint/MainRedDot.cs
@@ -83,6 +83,9 @@
     public const int RedPoint_GuaBao = 118;
     //鍛芥牸
     public const int RedPoint_Mingge = 119;
+    //濂借瘎绂忓埄
+    public const int RedPoint_Review = 120;
+
     //姝﹀皢鍗�
     public const int HeroCardRedpoint = 200;
     public Redpoint HeroListRedpoint = new Redpoint(MainHerosRedpoint, HeroCardRedpoint);
diff --git a/Main/System/SmallFunc.meta b/Main/System/SmallFunc.meta
new file mode 100644
index 0000000..448265b
--- /dev/null
+++ b/Main/System/SmallFunc.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d87e877ec143c7f42b49d2659587f18a
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/SmallFunc/GoodReviewWin.cs b/Main/System/SmallFunc/GoodReviewWin.cs
new file mode 100644
index 0000000..459024f
--- /dev/null
+++ b/Main/System/SmallFunc/GoodReviewWin.cs
@@ -0,0 +1,76 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+//濂借瘎
+public class GoodReviewWin : UIBase
+{
+    [SerializeField] ItemCell[] itemCells;
+    [SerializeField] Button goBtn;
+    [SerializeField] Text goBtnText;    //鍓嶅線璇勪环 Review2 / 棰嗗彇濂栧姳 Review4
+
+
+    protected override void InitComponent()
+    {
+        goBtn.AddListener(()=>
+        {
+            if (SmallFuncManager.Instance.IsReviewOpen())
+            {
+                if (SmallFuncManager.Instance.GetReviewState() == 1)
+                {
+                    //棰嗗彇濂栧姳
+                    var pack = new CA504_tagCMPlayerGetReward();
+                    pack.RewardType = 35;
+                    GameNetSystem.Instance.SendInfo(pack);
+                    CloseWindow();
+                    return;
+                }
+
+                if (!string.IsNullOrEmpty(SDKUtils.channelSign))
+                {
+                    //鍓嶅線璇勪环
+                    Application.OpenURL(GeneralDefine.review_UrlDict[SDKUtils.channelSign]);
+                }
+                LocalSave.SetInt("review" + PlayerDatas.Instance.baseData.PlayerID, TimeUtility.AllSeconds);
+            }
+        });
+    }
+
+
+    protected override void OnPreOpen()
+    {
+        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
+        for (int i = 0; i < itemCells.Length; i++)
+        {
+            if (i < GeneralDefine.review_Awards.Length)
+            {
+                itemCells[i].SetActive(true);
+                var itemID = GeneralDefine.review_Awards[i][0];
+                itemCells[i].Init(new ItemCellModel(itemID, false, GeneralDefine.review_Awards[i][1]));
+                itemCells[i].button.AddListener(() =>
+                {
+                    ItemTipUtility.Show(itemID);
+                });
+            }
+            else
+            {
+                itemCells[i].SetActive(false);
+            }
+        }
+
+        goBtnText.text = SmallFuncManager.Instance.GetReviewState() == 1 ? Language.Get("Review4") : Language.Get("Review2");
+    }
+
+    protected override void OnPreClose()
+    {
+        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
+    }
+
+    void OnSecondEvent()
+    {
+        goBtnText.text = SmallFuncManager.Instance.GetReviewState() == 1 ? Language.Get("Review4") : Language.Get("Review2");
+    }
+
+
+
+}
diff --git a/Main/System/SmallFunc/GoodReviewWin.cs.meta b/Main/System/SmallFunc/GoodReviewWin.cs.meta
new file mode 100644
index 0000000..ef9bc1f
--- /dev/null
+++ b/Main/System/SmallFunc/GoodReviewWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: decdd0e3914df2f4a8ced80ac3ae6d4f
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/SmallFunc/SmallFuncManager.cs b/Main/System/SmallFunc/SmallFuncManager.cs
new file mode 100644
index 0000000..96000bc
--- /dev/null
+++ b/Main/System/SmallFunc/SmallFuncManager.cs
@@ -0,0 +1,116 @@
+锘縰sing System.Collections.Generic;
+using UnityEngine.UI;
+using System.Linq;
+using LitJson;
+using System;
+
+//涓�浜涘皬鍔熻兘灏戦噺浠g爜瀛樻斁
+public class SmallFuncManager : GameSystemManager<SmallFuncManager>
+{
+
+    public Dictionary<int, int> playerRewardDict = new Dictionary<int, int>();  //A3 0C 鐜╁鍚勫鍔辩被鍨嬮鍙栬褰曚俊鎭� #tagMCPlayerRewardGetRecord
+    public event Action OnPlayerRewardEvent;
+
+
+    
+    public override void Init()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
+        UIManager.Instance.OnCloseWindow += OnCloseWindow;
+    }
+
+    public override void Release()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
+        UIManager.Instance.OnCloseWindow -= OnCloseWindow;
+    }
+
+    public void OnBeforePlayerDataInitialize()
+    {
+        playerRewardDict.Clear();
+    }
+
+    void OnPlayerLoginOk()
+    {
+        UpdateReviewRedpoint();
+    }
+
+    void OnCloseWindow(UIBase win)
+    {
+        if (win is StoryBossBattleWin)
+        {
+            //鍒氬ソ杩囧叧鐨勬椂鍊欐帹閫�
+            if (PlayerDatas.Instance.baseData.ExAttr1 == (GeneralDefine.review_MainLevel + 1) * 100 && IsReviewOpen())
+            {
+                PopupWindowsProcessor.Instance.Add("GoodReviewWin");
+                UpdateReviewRedpoint();
+            }
+        }
+    }
+
+
+    public void UpdatePlayerReward(HA30C_tagMCPlayerRewardGetRecord pack)
+    {
+        playerRewardDict[pack.RewardType] = (int)pack.RewardGetRecord;
+        UpdateReviewRedpoint();
+        OnPlayerRewardEvent?.Invoke();
+    }
+
+
+    #region 濂借瘎
+
+    //鏄惁鏄剧ず濂借瘎 1.杈惧埌閫氬叧鏉′欢 2.璇ユ笭閬撴湁濂借瘎鍔熻兘锛�3. 鏈鍙栧鍔憋紙鏈瘎浠凤級
+    public bool IsReviewOpen()
+    {   
+        if (PlayerDatas.Instance.baseData.ExAttr1 / 100 <= GeneralDefine.review_MainLevel)
+        {
+            return false;
+        }
+
+        if (!GeneralDefine.review_UrlDict.ContainsKey(SDKUtils.channelSign) && VersionConfig.Get().versionAuthority == VersionAuthority.Release)
+        {
+            return false;
+        }
+
+        if (GetReviewState() == 2)
+        {
+            return false;
+        }
+
+        // 濂栧姳
+        return true;
+    }
+
+    // 濂借瘎绾㈢偣
+    Redpoint reviewRedpoint = new Redpoint(MainRedDot.RightFuncRedpoint, MainRedDot.RedPoint_Review);
+
+    void UpdateReviewRedpoint()
+    {
+        reviewRedpoint.state = IsReviewOpen() ? RedPointState.Simple : RedPointState.None;
+    }
+    
+    //璇勫垎浠呭彲棰�1娆� 0 鏈瘎鍒� 1 鍙鍙� 2 宸查鍙�
+    public int GetReviewState()
+    {
+        if (!playerRewardDict.ContainsKey(35) || playerRewardDict[35] == 0)
+        {
+            var clickTime = LocalSave.GetInt("review" + PlayerDatas.Instance.baseData.PlayerID);
+            if (clickTime == 0)
+            {
+                return 0;
+            }
+            if (TimeUtility.AllSeconds - clickTime > GeneralDefine.review_CD)
+            {
+                return 1;
+            }
+            return 0;
+        }
+
+        return 2;
+    }
+
+    #endregion
+}
+
diff --git a/Main/System/SmallFunc/SmallFuncManager.cs.meta b/Main/System/SmallFunc/SmallFuncManager.cs.meta
new file mode 100644
index 0000000..c2ab9ba
--- /dev/null
+++ b/Main/System/SmallFunc/SmallFuncManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 63a1f22377829424cab384d0ce8401ea
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

--
Gitblit v1.8.0