From 1bcd08e4f930d6e054080d6859fee8e23be8e304 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期五, 26 十二月 2025 18:26:40 +0800
Subject: [PATCH] 351 【内政】红颜系统 - 游历

---
 Main/System/BeautyMM/BeautyMMManager.Travel.cs |   12 ++++
 Main/System/BeautyMM/BeautyMMManager.cs        |   71 ++++++++++++++++++++++-
 Main/System/BeautyMM/BeautyMMTravelCell.cs     |   17 ++++-
 Main/System/BeautyMM/BeautyMMTravelWin.cs      |   68 +++++++++++++++++++++-
 4 files changed, 155 insertions(+), 13 deletions(-)

diff --git a/Main/System/BeautyMM/BeautyMMManager.Travel.cs b/Main/System/BeautyMM/BeautyMMManager.Travel.cs
index 6fdcb20..8c722b2 100644
--- a/Main/System/BeautyMM/BeautyMMManager.Travel.cs
+++ b/Main/System/BeautyMM/BeautyMMManager.Travel.cs
@@ -23,6 +23,7 @@
 
     public int maxGirds = 0;
     public Int2 clickGirdPos = new Int2();
+    public bool isClickDoor = false;    // 鏄惁鐐瑰嚮杩囬棬锛岀敤浜庡府鐜╁鑷姩閲嶇疆
 
     public void UpdateTravelInfo(HB040_tagSCTravelInfo netPack)
     {
@@ -35,6 +36,11 @@
         m_SceneryLVInfo = netPack.SceneryLVInfo;
         m_Result = netPack.Result;
         openChangeGridList.Clear();
+
+        if (m_Result == 5)
+        {
+            isClickDoor = false; //涓嶉渶瑕佸府蹇樿鑷姩閲嶇疆浜�
+        }
 
         for (int i = 0; i < netPack.GridCnt; i++)
         {
@@ -114,6 +120,12 @@
         return false;
     }
 
+    public int GetMaxEnergy()
+    {
+        var value = allMMTalentEffect.ContainsKey((int)TalentEffectType.Travel) ? allMMTalentEffect[(int)TalentEffectType.Travel] : 0;
+        return baseTravelEnergy + value;
+    }
+
 
     Redpoint redpointTravel = new Redpoint(MainRedDot.Redpoint_BeautyMM, MainRedDot.Redpoint_BeautyMM * 10 + 2);
     void UpdateTravelRedpoint()
diff --git a/Main/System/BeautyMM/BeautyMMManager.cs b/Main/System/BeautyMM/BeautyMMManager.cs
index fb64125..93d6575 100644
--- a/Main/System/BeautyMM/BeautyMMManager.cs
+++ b/Main/System/BeautyMM/BeautyMMManager.cs
@@ -27,6 +27,10 @@
     public int recoverTravelEnergyTime = 0;   // 鏁板��2锛氭仮澶�1鐐逛綋鍔涙墍闇�鏃堕棿锛屽垎閽�  
     public int[] travelRowCol = new int[2]; // 鏁板��3锛氭父鍘嗚鍒楁暟  琛寍鍒�
 
+    public Dictionary<int, int> allMMTalentAttr = new Dictionary<int, int>();
+    public Dictionary<int, int> allMMTalentEffect = new Dictionary<int, int>();
+
+
     public override void Init()
     {
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitialize;
@@ -44,6 +48,8 @@
         beautyMMDataDict.Clear();
         beautyMMSkinDataDict.Clear();
         m_GridDict.Clear();
+        allMMTalentAttr.Clear();
+        allMMTalentEffect.Clear();
     }
 
     void ParseConfig()
@@ -92,6 +98,7 @@
             }
         }
         UpdateRedpoint();
+        RefreshAllTalen();
         OnBeautyMMDataUpdate?.Invoke();
     }
 
@@ -314,7 +321,7 @@
     }
 
     // 鑾峰彇MM澶╄祴鏁堟灉
-    public int GetMMTalentEffect(int mmID)
+    public Dictionary<int, int> GetMMTalentEffect(int mmID)
     {
         int _effect = 0;
         if (beautyMMDataDict.ContainsKey(mmID))
@@ -335,10 +342,49 @@
                         _effect += _addLV * config.EffPerLVAdd;
                     }
                 }
-                return _effect;
+                return new Dictionary<int, int>()
+                {
+                    {config.EffType, _effect}
+                } ;
             }
         }
-        return _effect;
+        return new Dictionary<int, int>();
+    }
+
+
+    void RefreshAllTalen()
+    {
+        foreach (var key in beautyMMDataDict.Keys)
+        {
+            var _dict = GetMMTalentAttr(key);
+            //鍔犲埌allMMTalentAttr
+            foreach (var _key in _dict.Keys)
+            {
+                if (allMMTalentAttr.ContainsKey(_key))
+                {
+                    allMMTalentAttr[_key] += _dict[_key];
+                }
+                else
+                {
+                    allMMTalentAttr.Add(_key, _dict[_key]);
+                }
+            }
+            var _dict2 = GetMMTalentEffect(key);
+            //鍔犲埌allMMTalentEffect
+            foreach (var _key in _dict2.Keys)
+            {
+                if (allMMTalentEffect.ContainsKey(_key))
+                {
+                    allMMTalentEffect[_key] += _dict2[_key];
+                }
+                else
+                {
+                    allMMTalentEffect.Add(_key, _dict2[_key]);
+                }
+            }
+        }
+
+
     }
 
     #region 绾㈢偣
@@ -548,8 +594,23 @@
     public ushort Exp;        //褰撳墠绛夌骇缁忛獙
     public ushort AwardLV;        //宸茬粡棰嗗彇鍒扮殑濂栧姳绛夌骇璁板綍
 }
-public class BeautyMMSkinData {
+public class BeautyMMSkinData
+{
     public byte State;        //鏄惁宸叉縺娲�
     public byte Used;        //鏄惁宸茬┛鎴磋鏃惰锛屾煇涓孩棰滅殑鎵�鏈夋椂瑁呯┛鎴村彲鑳介兘涓�0锛屽垯鍓嶇鍙栭粯璁ゆ椂瑁呰繘琛屽睍绀猴紝濡傛灉鏈夊悓姝ュ凡绌挎埓鐨勫垯浠ュ悗绔负鍑�
     public byte Star;        //鏃惰鏄熺骇锛屾縺娲绘椂涓�0鏄�
-}
\ No newline at end of file
+}
+
+// 1.涓荤嚎鎴樺埄鍝佷笂闄愭彁楂樼櫨鍒嗘瘮		鏃�	鐧惧垎姣�
+// 2.婕旀鍦烘寫鎴樿儨鍒╋紝姒傜巼棰濆鑾峰緱1涓墿鍝佺殑姒傜巼	鐗╁搧ID	姒傜巼
+// 3.娓稿巻浣撳姏涓婇檺澧炲姞		鏃�	澧炲姞涓婇檺
+// 4.鐧介鐩堥噹鎵崱棰濆鐗╁搧濂栧姳		鐗╁搧ID	涓暟
+
+public enum TalentEffectType
+{
+    MainLine = 1,
+    Arena = 2,
+    Travel = 3,
+    BoneField = 4,
+}
+
diff --git a/Main/System/BeautyMM/BeautyMMTravelCell.cs b/Main/System/BeautyMM/BeautyMMTravelCell.cs
index a1fbd30..6ab242d 100644
--- a/Main/System/BeautyMM/BeautyMMTravelCell.cs
+++ b/Main/System/BeautyMM/BeautyMMTravelCell.cs
@@ -13,6 +13,7 @@
     [SerializeField] UIEffectPlayer openEffect;
     [SerializeField] UIEffectPlayer boomEffect;
     [SerializeField] UIEffectPlayer gateEffect;
+    [SerializeField] RotationTween restartTween;
 
 
     public void Display(int index)
@@ -116,14 +117,19 @@
         if (grid.State == 0 || grid.State == 2)
         {
             SoundPlayer.Instance.PlayUIAudio(25);
+            if (BeautyMMManager.Instance.m_Energy == 0)
+            {
+                SysNotifyMgr.Instance.ShowTip("BeautyMM4");
+                return;
+            }
         }
 
-        if (grid.EventID == 100)
+        if (grid.EventID == (int)GirdEventType.Empty)
         {
             // 绌烘牸瀛�
             return;
         }
-        if (grid.EventID < 99 && grid.EventID > 0)
+        if (grid.EventID < (int)GirdEventType.Door && grid.EventID > 0)
         {
             //鍒ゆ柇寤虹瓚鏄惁閮藉紑鍏ㄤ簡娌�
             if (!BeautyMMManager.Instance.CanOpenBuild())
@@ -132,7 +138,7 @@
                 return;
             }
         }
-        if (grid.EventID == 101)
+        if (grid.EventID == (int)GirdEventType.Horse)
         {
             boomEffect.Play();
         }
@@ -143,6 +149,11 @@
         pack.Col = (byte)girdPos.y;
         GameNetSystem.Instance.SendInfo(pack);
         BeautyMMManager.Instance.clickGirdPos = girdPos;
+        if (grid.EventID == (int)GirdEventType.Door)
+        {
+            BeautyMMManager.Instance.isClickDoor = true;
+        }
+
 
     }
 }
diff --git a/Main/System/BeautyMM/BeautyMMTravelWin.cs b/Main/System/BeautyMM/BeautyMMTravelWin.cs
index 860de82..0d314cb 100644
--- a/Main/System/BeautyMM/BeautyMMTravelWin.cs
+++ b/Main/System/BeautyMM/BeautyMMTravelWin.cs
@@ -43,9 +43,11 @@
 
     protected override void OnPreOpen()
     {
-
         BeautyMMManager.Instance.OnTravelInfoUpdate += OnTravelInfoUpdate;
+        GlobalTimeEvent.Instance.secondEvent += ShowEnergy;
         BeautyMMManager.Instance.openChangeGridList.Clear();
+        BeautyMMManager.Instance.isClickDoor = false;
+        BeautyMMManager.Instance.clickGirdPos = new Int2(0, 0);
         UIManager.Instance.OnCloseWindow += OnCloseWindow;
         rateTipRect.SetActive(false);
 
@@ -57,6 +59,7 @@
     {
         BeautyMMManager.Instance.OnTravelInfoUpdate -= OnTravelInfoUpdate;
         UIManager.Instance.OnCloseWindow -= OnCloseWindow;
+        GlobalTimeEvent.Instance.secondEvent -= ShowEnergy;
     }
 
     void OnTravelInfoUpdate(int result)
@@ -65,7 +68,6 @@
         Display();
         if (result == 2)
         {
-            //BeautyMMManager.Instance.clickGirdPos
             boomRowEffect.transform.localPosition = new Vector3(0,
             -((BeautyMMManager.Instance.clickGirdPos.x - 1) * gridHeight + gridHeight / 2), 0);
             boomRowEffect.Play();
@@ -120,6 +122,26 @@
                 buildImgs[i].SetActive(false);
             }
         }
+
+
+        ShowEnergy();
+    }
+
+    void ShowEnergy()
+    {
+        processImg.fillAmount = BeautyMMManager.Instance.m_Energy*1.0f / BeautyMMManager.Instance.GetMaxEnergy();
+        processText.text = BeautyMMManager.Instance.m_Energy.ToString() + "/" + BeautyMMManager.Instance.GetMaxEnergy().ToString();
+
+        if (processImg.fillAmount >= 1)
+        {
+            timeText.text = Language.Get("BeautyMM27");
+        }
+        else
+        {
+            //BeautyMM12
+            var remainSeconds = BeautyMMManager.Instance.recoverTravelEnergyTime * 60 - (TimeUtility.AllSeconds - BeautyMMManager.Instance.m_EnergyTime);
+            timeText.text = Language.Get("BeautyMM12", TimeUtility.SecondsToMS((int)remainSeconds));
+        }
     }
 
     void DisplyRate()
@@ -145,8 +167,8 @@
     Dictionary<int, int> buildEffectDic = new Dictionary<int, int>()
     {
         {1, 1073},
-        {2, 1078},
-        {3, 1083}
+        {4, 1078},
+        {6, 1083}
     };
     void DisplayBuildResult()
     {
@@ -157,7 +179,43 @@
         }
         buildResultBtn.SetActive(true);
 
+        var startEffectID = buildEffectDic[BeautyMMManager.Instance.m_SceneryType] + GetSuccessCnt();
+        buildResultEffect.effectId = startEffectID;
+        buildResultEffect.isPlaySpineLoop = true;
+        buildResultEffect.Play(1);
 
+        //public uint m_SceneryLVInfo;    //鏅鍗囩骇淇℃伅锛�0-杩樻湭澶勭悊鏅鍗囩骇锛涗釜浣嶆暟-绗�1娆″崌绾ф垚鍔熶笌鍚︼紝1-鎴愬姛锛�2-澶辫触锛涘崄浣�-绗�2娆� ...
+        for (int i = 0; i < whatImgs.Length; i++)
+        {
+            //0鏄剧ず闂彿 1 鎴愬姛 2 澶辫触
+            var value = BeautyMMManager.Instance.m_SceneryLVInfo;
+            for (int j = 0; j < i; j++)
+            {
+                value /= 10;
+            }
+            var result = value % 10;
+            whatImgs[i].SetActive(result == 0);
+            rightImgs[i].SetActive(result == 1);
+            wrongImgs[i].SetActive(result == 2);
+
+        }
+    }
+
+    //public uint m_SceneryLVInfo;    //鏅鍗囩骇淇℃伅锛�0-杩樻湭澶勭悊鏅鍗囩骇锛涗釜浣嶆暟-绗�1娆″崌绾ф垚鍔熶笌鍚︼紝1-鎴愬姛锛�2-澶辫触锛涘崄浣�-绗�2娆� ...
+    int GetSuccessCnt()
+    {
+        uint value = BeautyMMManager.Instance.m_SceneryLVInfo;
+        //鎬诲叡4娆�
+        var cnt = 0;
+        for (int i = 0; i < 4; i++)
+        {
+            if (value % 10 == 1)
+            {
+                cnt++;
+            }
+            value /= 10;
+        }
+        return cnt;
     }
 
     void BuildLVUP()
@@ -189,7 +247,7 @@
         if (ui is CommonGetItemWin)
         {
             var gird = BeautyMMManager.Instance.GetGrid(BeautyMMManager.Instance.clickGirdPos);
-            if (gird != null && gird.EventID == (int)GirdEventType.Door)
+            if (BeautyMMManager.Instance.isClickDoor && gird != null && gird.EventID == (int)GirdEventType.Door)
             {
                 //榛樿璇锋眰涓嬩竴灞�
                 var pack = new CB040_tagCSTravelClick();

--
Gitblit v1.8.0