From bc871b112bf04df5b5dcc3fadb77ac0f276749c8 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期一, 17 十一月 2025 02:01:58 +0800
Subject: [PATCH] 328 【主界面】坐骑系统 竞技场布阵的显隐 引导点战锤的时候不暂停游戏;引导的时候如果是功能开启,不显示战力变化避免遮挡

---
 Main/Core/GameEngine/Player/PlayerBaseData.cs                                                |    2 
 Main/Config/PartialConfigs/HorseClassConfig.cs.meta                                          |   11 
 Main/Config/Configs/HorseSkinConfig.cs                                                       |  107 ++++
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB201_tagCSHorseLVUP.cs.meta             |   11 
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB202_tagCSHorseClassUP.cs.meta          |   11 
 Main/Config/ConfigManager.cs                                                                 |    6 
 Main/System/Horse/HorseManager.cs                                                            |  276 ++++++++++++
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA303_tagSCHorseClassInfo.cs      |   12 
 Main/System/Horse/HorseWin.cs.meta                                                           |   11 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA304_tagSCHorseSkinInfo.cs.meta  |   11 
 Main/System/Battle/BattleField/StoryBattleField.cs                                           |    9 
 Main/System/Redpoint/MainRedDot.cs                                                           |    3 
 Main/System/Horse/HorseSkinWin.cs                                                            |   28 +
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB201_tagCSHorseLVUP.cs                  |   18 
 Main/Core/NetworkPackage/ServerPack/HA3_Function/HA304_tagSCHorseSkinInfo.cs.meta            |   11 
 Main/System/Main/PlayerMainDate.cs                                                           |    7 
 Main/Config/Configs/HorseClassConfig.cs                                                      |  122 +++++
 Main/System/Horse/HorseSkinWin.cs.meta                                                       |   11 
 Main/System/Main/HomeWin.cs                                                                  |   39 +
 Main/System/Horse/HorseManager.cs.meta                                                       |   11 
 Main/Main.cs                                                                                 |    3 
 Main/Config/Configs/HorseSkinConfig.cs.meta                                                  |   11 
 Main/Config/PartialConfigs/HorseClassConfig.cs                                               |   10 
 Main/Core/NetworkPackage/ServerPack/HA3_Function/HA303_tagSCHorseClassInfo.cs                |   21 
 Main/Utility/EnumHelper.cs                                                                   |    1 
 Main/System/Horse/HorseSuccessWin.cs                                                         |   28 +
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA304_tagSCHorseSkinInfo.cs       |   12 
 Main/System/Main/FightPowerManager.cs                                                        |   12 
 Main/Core/NetworkPackage/ServerPack/HA3_Function/HA303_tagSCHorseClassInfo.cs.meta           |   11 
 Main/System/Horse/HorseSuccessWin.cs.meta                                                    |   11 
 Main/Config/Configs/HorseClassConfig.cs.meta                                                 |   11 
 Main/System/Horse.meta                                                                       |    8 
 Main/Core/NetworkPackage/ServerPack/HA3_Function/HA304_tagSCHorseSkinInfo.cs                 |   33 +
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB203_tagCSHorseSkinOP.cs.meta           |   11 
 Main/System/HeroUI/HeroPosWin.cs                                                             |    6 
 Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs                                         |    2 
 Main/System/Horse/HorseRankUPWin.cs.meta                                                     |   11 
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB202_tagCSHorseClassUP.cs               |   16 
 Main/System/Horse/HorseWin.cs                                                                |  199 +++++++++
 Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB203_tagCSHorseSkinOP.cs                |   20 
 Main/System/NewBieGuidance/NewBieCenter.cs                                                   |   10 
 Main/System/Horse/HorseRankUPWin.cs                                                          |   99 ++++
 Main/System/NewBieGuidance/NewBieWin.cs                                                      |   21 
 Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA303_tagSCHorseClassInfo.cs.meta |   11 
 44 files changed, 1,282 insertions(+), 13 deletions(-)

diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index 5a0a614..fb2b405 100644
--- a/Main/Config/ConfigManager.cs
+++ b/Main/Config/ConfigManager.cs
@@ -56,6 +56,8 @@
             typeof(GoldRushWorkerConfig),
             typeof(HeroLineupHaloConfig),
             typeof(HeroQualityLVConfig),
+            typeof(HorseClassConfig),
+            typeof(HorseSkinConfig),
             typeof(InvestConfig),
             typeof(ItemCompoundConfig),
             typeof(ItemConfig),
@@ -266,6 +268,10 @@
         ClearConfigDictionary<HeroLineupHaloConfig>();
         // 娓呯┖ HeroQualityLVConfig 瀛楀吀
         ClearConfigDictionary<HeroQualityLVConfig>();
+        // 娓呯┖ HorseClassConfig 瀛楀吀
+        ClearConfigDictionary<HorseClassConfig>();
+        // 娓呯┖ HorseSkinConfig 瀛楀吀
+        ClearConfigDictionary<HorseSkinConfig>();
         // 娓呯┖ InvestConfig 瀛楀吀
         ClearConfigDictionary<InvestConfig>();
         // 娓呯┖ ItemCompoundConfig 瀛楀吀
diff --git a/Main/Config/Configs/HorseClassConfig.cs b/Main/Config/Configs/HorseClassConfig.cs
new file mode 100644
index 0000000..9c9c0b0
--- /dev/null
+++ b/Main/Config/Configs/HorseClassConfig.cs
@@ -0,0 +1,122 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�11鏈�16鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HorseClassConfig : ConfigBase<int, HorseClassConfig>
+{
+    static HorseClassConfig()
+    {
+        // 璁块棶杩囬潤鎬佹瀯閫犲嚱鏁�
+        visit = true; 
+    }
+
+    public int ClassLV;
+	public int MaxLV;
+	public int LVUPItemCnt;
+	public int ClassUPItemCnt;
+	public int[] ClassSpecAttrIDList;
+	public int[] ClassSpecAttrValueList;
+	public int[] AttrIDList;
+	public int[] ClassAttrValueList;
+	public int[] PerLVAttrValueList;
+
+    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 ClassLV); 
+
+			int.TryParse(tables[1],out MaxLV); 
+
+			int.TryParse(tables[2],out LVUPItemCnt); 
+
+			int.TryParse(tables[3],out ClassUPItemCnt); 
+
+			if (tables[4].Contains("["))
+			{
+				ClassSpecAttrIDList = JsonMapper.ToObject<int[]>(tables[4]);
+			}
+			else
+			{
+				string[] ClassSpecAttrIDListStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				ClassSpecAttrIDList = new int[ClassSpecAttrIDListStringArray.Length];
+				for (int i=0;i<ClassSpecAttrIDListStringArray.Length;i++)
+				{
+					 int.TryParse(ClassSpecAttrIDListStringArray[i],out ClassSpecAttrIDList[i]);
+				}
+			}
+
+			if (tables[5].Contains("["))
+			{
+				ClassSpecAttrValueList = JsonMapper.ToObject<int[]>(tables[5]);
+			}
+			else
+			{
+				string[] ClassSpecAttrValueListStringArray = tables[5].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				ClassSpecAttrValueList = new int[ClassSpecAttrValueListStringArray.Length];
+				for (int i=0;i<ClassSpecAttrValueListStringArray.Length;i++)
+				{
+					 int.TryParse(ClassSpecAttrValueListStringArray[i],out ClassSpecAttrValueList[i]);
+				}
+			}
+
+			if (tables[6].Contains("["))
+			{
+				AttrIDList = JsonMapper.ToObject<int[]>(tables[6]);
+			}
+			else
+			{
+				string[] AttrIDListStringArray = tables[6].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				AttrIDList = new int[AttrIDListStringArray.Length];
+				for (int i=0;i<AttrIDListStringArray.Length;i++)
+				{
+					 int.TryParse(AttrIDListStringArray[i],out AttrIDList[i]);
+				}
+			}
+
+			if (tables[7].Contains("["))
+			{
+				ClassAttrValueList = JsonMapper.ToObject<int[]>(tables[7]);
+			}
+			else
+			{
+				string[] ClassAttrValueListStringArray = tables[7].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				ClassAttrValueList = new int[ClassAttrValueListStringArray.Length];
+				for (int i=0;i<ClassAttrValueListStringArray.Length;i++)
+				{
+					 int.TryParse(ClassAttrValueListStringArray[i],out ClassAttrValueList[i]);
+				}
+			}
+
+			if (tables[8].Contains("["))
+			{
+				PerLVAttrValueList = JsonMapper.ToObject<int[]>(tables[8]);
+			}
+			else
+			{
+				string[] PerLVAttrValueListStringArray = tables[8].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				PerLVAttrValueList = new int[PerLVAttrValueListStringArray.Length];
+				for (int i=0;i<PerLVAttrValueListStringArray.Length;i++)
+				{
+					 int.TryParse(PerLVAttrValueListStringArray[i],out PerLVAttrValueList[i]);
+				}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/HorseClassConfig.cs.meta b/Main/Config/Configs/HorseClassConfig.cs.meta
new file mode 100644
index 0000000..b4c5f3e
--- /dev/null
+++ b/Main/Config/Configs/HorseClassConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 34c95a7471af1ee41ab1250f1bffdf9b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/Configs/HorseSkinConfig.cs b/Main/Config/Configs/HorseSkinConfig.cs
new file mode 100644
index 0000000..d39ef3f
--- /dev/null
+++ b/Main/Config/Configs/HorseSkinConfig.cs
@@ -0,0 +1,107 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�11鏈�16鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HorseSkinConfig : ConfigBase<int, HorseSkinConfig>
+{
+    static HorseSkinConfig()
+    {
+        // 璁块棶杩囬潤鎬佹瀯閫犲嚱鏁�
+        visit = true; 
+    }
+
+    public int SkinID;
+	public string Name;
+	public int ExpireMinutes;
+	public int UnlockWay;
+	public int UnlockValue;
+	public int UnlockNeedCnt;
+	public int UpNeedCnt;
+	public int StarMax;
+	public int[] AttrIDList;
+	public int[] InitAttrValueList;
+	public int[] AttrPerStarAddList;
+	public string Icon;
+
+    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 SkinID); 
+
+			Name = tables[1];
+
+			int.TryParse(tables[2],out ExpireMinutes); 
+
+			int.TryParse(tables[3],out UnlockWay); 
+
+			int.TryParse(tables[4],out UnlockValue); 
+
+			int.TryParse(tables[5],out UnlockNeedCnt); 
+
+			int.TryParse(tables[6],out UpNeedCnt); 
+
+			int.TryParse(tables[7],out StarMax); 
+
+			if (tables[8].Contains("["))
+			{
+				AttrIDList = JsonMapper.ToObject<int[]>(tables[8]);
+			}
+			else
+			{
+				string[] AttrIDListStringArray = tables[8].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				AttrIDList = new int[AttrIDListStringArray.Length];
+				for (int i=0;i<AttrIDListStringArray.Length;i++)
+				{
+					 int.TryParse(AttrIDListStringArray[i],out AttrIDList[i]);
+				}
+			}
+
+			if (tables[9].Contains("["))
+			{
+				InitAttrValueList = JsonMapper.ToObject<int[]>(tables[9]);
+			}
+			else
+			{
+				string[] InitAttrValueListStringArray = tables[9].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				InitAttrValueList = new int[InitAttrValueListStringArray.Length];
+				for (int i=0;i<InitAttrValueListStringArray.Length;i++)
+				{
+					 int.TryParse(InitAttrValueListStringArray[i],out InitAttrValueList[i]);
+				}
+			}
+
+			if (tables[10].Contains("["))
+			{
+				AttrPerStarAddList = JsonMapper.ToObject<int[]>(tables[10]);
+			}
+			else
+			{
+				string[] AttrPerStarAddListStringArray = tables[10].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				AttrPerStarAddList = new int[AttrPerStarAddListStringArray.Length];
+				for (int i=0;i<AttrPerStarAddListStringArray.Length;i++)
+				{
+					 int.TryParse(AttrPerStarAddListStringArray[i],out AttrPerStarAddList[i]);
+				}
+			}
+
+			Icon = tables[11];
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/HorseSkinConfig.cs.meta b/Main/Config/Configs/HorseSkinConfig.cs.meta
new file mode 100644
index 0000000..79686e8
--- /dev/null
+++ b/Main/Config/Configs/HorseSkinConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9de30687da6d7154f92b7ca9e075a041
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/PartialConfigs/HorseClassConfig.cs b/Main/Config/PartialConfigs/HorseClassConfig.cs
new file mode 100644
index 0000000..38e6023
--- /dev/null
+++ b/Main/Config/PartialConfigs/HorseClassConfig.cs
@@ -0,0 +1,10 @@
+using System.Collections.Generic;
+public partial class HorseClassConfig : ConfigBase<int, HorseClassConfig>
+{
+    public static Dictionary<int, int> maxLVDict = new Dictionary<int, int>();
+    protected override void OnConfigParseCompleted()
+    {
+        maxLVDict[ClassLV] = MaxLV;
+    }
+
+}
diff --git a/Main/Config/PartialConfigs/HorseClassConfig.cs.meta b/Main/Config/PartialConfigs/HorseClassConfig.cs.meta
new file mode 100644
index 0000000..364aa98
--- /dev/null
+++ b/Main/Config/PartialConfigs/HorseClassConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 119ed7937af6c4b469b95744674b1adf
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/GameEngine/Player/PlayerBaseData.cs b/Main/Core/GameEngine/Player/PlayerBaseData.cs
index 42f00c7..3c5ec04 100644
--- a/Main/Core/GameEngine/Player/PlayerBaseData.cs
+++ b/Main/Core/GameEngine/Player/PlayerBaseData.cs
@@ -101,7 +101,7 @@
     public int BasicsDefense;//鍩虹闃插尽
     public int BasicsScoreAHit;//鍩虹鍛戒腑
     public int BasicsDodge;//鍩虹闂伩
-    public uint equipShowSwitch;//瑁呭鏄鹃殣寮�鍏�
+    public uint equipShowSwitch;//褰撳墠閰嶇疆鐨勫潗楠戝瑙侷D瀛樺偍鍦�  涓綅鏁板崄浣嶆暟锛堟渶澶ф敮鎸� 1~99锛�
     public int mater;//鐏垫牴灞炴�р�斺�旈噾
     public int wood;//鐏垫牴灞炴�р�斺�旀湪
     public int water;//鐏垫牴灞炴�р�斺�旀按
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB201_tagCSHorseLVUP.cs b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB201_tagCSHorseLVUP.cs
new file mode 100644
index 0000000..22c85ee
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB201_tagCSHorseLVUP.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+using System.Collections;
+
+// B2 01 鍧愰獞鍗囩骇 #tagCSHorseLVUP
+
+public class CB201_tagCSHorseLVUP : GameNetPackBasic {
+    public byte IsQuick;    // 鏄惁蹇�熷崌绾э紝0-鍙秷鑰�1涓亾鍏凤紱1-娑堣�楀崌1绾х殑閬撳叿
+
+    public CB201_tagCSHorseLVUP () {
+        combineCmd = (ushort)0x03FE;
+        _cmd = (ushort)0xB201;
+    }
+
+    public override void WriteToBytes () {
+        WriteBytes (IsQuick, NetDataType.BYTE);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB201_tagCSHorseLVUP.cs.meta b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB201_tagCSHorseLVUP.cs.meta
new file mode 100644
index 0000000..4451688
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB201_tagCSHorseLVUP.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 307fd40df36bb1a42ac68c26cc5d2126
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB202_tagCSHorseClassUP.cs b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB202_tagCSHorseClassUP.cs
new file mode 100644
index 0000000..3ab14f8
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB202_tagCSHorseClassUP.cs
@@ -0,0 +1,16 @@
+using UnityEngine;
+using System.Collections;
+
+// B2 02 鍧愰獞杩涢樁 #tagCSHorseClassUP
+
+public class CB202_tagCSHorseClassUP : GameNetPackBasic {
+
+    public CB202_tagCSHorseClassUP () {
+        combineCmd = (ushort)0x03FE;
+        _cmd = (ushort)0xB202;
+    }
+
+    public override void WriteToBytes () {
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB202_tagCSHorseClassUP.cs.meta b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB202_tagCSHorseClassUP.cs.meta
new file mode 100644
index 0000000..d243c6b
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB202_tagCSHorseClassUP.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6a711796d86b37b44b24f9c007d757db
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB203_tagCSHorseSkinOP.cs b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB203_tagCSHorseSkinOP.cs
new file mode 100644
index 0000000..a8a5c92
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB203_tagCSHorseSkinOP.cs
@@ -0,0 +1,20 @@
+using UnityEngine;
+using System.Collections;
+
+// B2 03 鍧愰獞澶栬鎿嶄綔 #tagCSHorseSkinOP
+
+public class CB203_tagCSHorseSkinOP : GameNetPackBasic {
+    public byte OPType;    // 鎿嶄綔 1-婵�娲伙紱2-浣╂埓锛�3-鍗囨槦
+    public byte SkinID;    // 澶栬ID锛屼僵鎴存椂鍙�0鍗充负鍗镐笅
+
+    public CB203_tagCSHorseSkinOP () {
+        combineCmd = (ushort)0x03FE;
+        _cmd = (ushort)0xB203;
+    }
+
+    public override void WriteToBytes () {
+        WriteBytes (OPType, NetDataType.BYTE);
+        WriteBytes (SkinID, NetDataType.BYTE);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB203_tagCSHorseSkinOP.cs.meta b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB203_tagCSHorseSkinOP.cs.meta
new file mode 100644
index 0000000..872fdb5
--- /dev/null
+++ b/Main/Core/NetworkPackage/ClientPack/CB2_NewFunction/CB203_tagCSHorseSkinOP.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 03ba97a7c084f1348a751863109ada43
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA303_tagSCHorseClassInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA303_tagSCHorseClassInfo.cs
new file mode 100644
index 0000000..2fd92d6
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA303_tagSCHorseClassInfo.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A3 03 鍧愰獞闃剁骇淇℃伅 #tagSCHorseClassInfo
+
+public class DTCA303_tagSCHorseClassInfo : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HA303_tagSCHorseClassInfo vNetData = vNetPack as HA303_tagSCHorseClassInfo;
+        HorseManager.Instance.UpdateHorseInfo(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA303_tagSCHorseClassInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA303_tagSCHorseClassInfo.cs.meta
new file mode 100644
index 0000000..a0695d4
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA303_tagSCHorseClassInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 88082cef50130fc4a8c19bbf1bb63acb
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA304_tagSCHorseSkinInfo.cs b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA304_tagSCHorseSkinInfo.cs
new file mode 100644
index 0000000..e95e868
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA304_tagSCHorseSkinInfo.cs
@@ -0,0 +1,12 @@
+using UnityEngine;
+using System.Collections;
+
+// A3 04 鍧愰獞澶栬淇℃伅 #tagSCHorseSkinInfo
+
+public class DTCA304_tagSCHorseSkinInfo : DtcBasic {
+    public override void Done(GameNetPackBasic vNetPack) {
+        base.Done(vNetPack);
+        HA304_tagSCHorseSkinInfo vNetData = vNetPack as HA304_tagSCHorseSkinInfo;
+        HorseManager.Instance.UpdateHorseSkinInfo(vNetData);
+    }
+}
diff --git a/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA304_tagSCHorseSkinInfo.cs.meta b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA304_tagSCHorseSkinInfo.cs.meta
new file mode 100644
index 0000000..926284e
--- /dev/null
+++ b/Main/Core/NetworkPackage/DTCFile/ServerPack/HA3_Function/DTCA304_tagSCHorseSkinInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4bae730aac487da499cee86b1bcd9e82
+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 fa90f22..9496682 100644
--- a/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
+++ b/Main/Core/NetworkPackage/DataToCtl/PackageRegedit.cs
@@ -125,6 +125,8 @@
         Register(typeof(HA30D_tagSCDaySignInfo), typeof(DTCA30D_tagSCDaySignInfo));
         Register(typeof(HA123_tagUpdatePlayerNameCount), typeof(DTCA123_tagUpdatePlayerNameCount));
         Register(typeof(HA921_tagSCRenameResult), typeof(DTCA921_tagSCRenameResult));
+        Register(typeof(HA303_tagSCHorseClassInfo), typeof(DTCA303_tagSCHorseClassInfo));
+        Register(typeof(HA304_tagSCHorseSkinInfo), typeof(DTCA304_tagSCHorseSkinInfo));
     }
 
     //涓诲伐绋嬫敞鍐屽皝鍖�
diff --git a/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA303_tagSCHorseClassInfo.cs b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA303_tagSCHorseClassInfo.cs
new file mode 100644
index 0000000..8a817cf
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA303_tagSCHorseClassInfo.cs
@@ -0,0 +1,21 @@
+using UnityEngine;
+using System.Collections;
+
+// A3 03 鍧愰獞闃剁骇淇℃伅 #tagSCHorseClassInfo
+
+public class HA303_tagSCHorseClassInfo : GameNetPackBasic {
+    public byte ClassLV;    //褰撳墠闃剁骇锛屼粠0寮�濮�
+    public ushort HorseLV;    //褰撳墠闃剁瓑绾э紝浠�1寮�濮�
+    public ushort Exp;    //褰撳墠闃剁瓑绾х粡楠岋紝姣忕骇浠�0寮�濮�
+
+    public HA303_tagSCHorseClassInfo () {
+        _cmd = (ushort)0xA303;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out ClassLV, vBytes, NetDataType.BYTE);
+        TransBytes (out HorseLV, vBytes, NetDataType.WORD);
+        TransBytes (out Exp, vBytes, NetDataType.WORD);
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA303_tagSCHorseClassInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA303_tagSCHorseClassInfo.cs.meta
new file mode 100644
index 0000000..8ac49fd
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA303_tagSCHorseClassInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f89267eabf7f9fa439d249ed50f43357
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA304_tagSCHorseSkinInfo.cs b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA304_tagSCHorseSkinInfo.cs
new file mode 100644
index 0000000..d2e1c07
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA304_tagSCHorseSkinInfo.cs
@@ -0,0 +1,33 @@
+using UnityEngine;
+using System.Collections;
+
+// A3 04 鍧愰獞澶栬淇℃伅 #tagSCHorseSkinInfo
+
+public class HA304_tagSCHorseSkinInfo : GameNetPackBasic {
+    public byte Count;
+    public  tagSCHorseSkin[] HorseSkinList;
+
+    public HA304_tagSCHorseSkinInfo () {
+        _cmd = (ushort)0xA304;
+    }
+
+    public override void ReadFromBytes (byte[] vBytes) {
+        TransBytes (out Count, vBytes, NetDataType.BYTE);
+        HorseSkinList = new tagSCHorseSkin[Count];
+        for (int i = 0; i < Count; i ++) {
+            HorseSkinList[i] = new tagSCHorseSkin();
+            TransBytes (out HorseSkinList[i].HorseSkinID, vBytes, NetDataType.BYTE);
+            TransBytes (out HorseSkinList[i].State, vBytes, NetDataType.BYTE);
+            TransBytes (out HorseSkinList[i].EndTime, vBytes, NetDataType.DWORD);
+            TransBytes (out HorseSkinList[i].Star, vBytes, NetDataType.BYTE);
+        }
+    }
+
+    public class tagSCHorseSkin {
+        public byte HorseSkinID;        //鍧愰獞澶栬ID
+        public byte State;        //鏄惁宸叉縺娲�
+        public uint EndTime;        //鍒版湡鏃堕棿鎴筹紝0涓烘案涔�
+        public byte Star;        //鏄熺骇
+    }
+
+}
diff --git a/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA304_tagSCHorseSkinInfo.cs.meta b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA304_tagSCHorseSkinInfo.cs.meta
new file mode 100644
index 0000000..6c41204
--- /dev/null
+++ b/Main/Core/NetworkPackage/ServerPack/HA3_Function/HA304_tagSCHorseSkinInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b1a61c4f381b1ac40b6e95ea776313e6
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Main.cs b/Main/Main.cs
index bbda289..41ff955 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -88,6 +88,9 @@
         managers.Add(SignManager.Instance);
         managers.Add(RenameManager.Instance);
         managers.Add(AchievementManager.Instance);
+        managers.Add(HorseManager.Instance);
+
+
         foreach (var manager in managers)
         {
             manager.Init();
diff --git a/Main/System/Battle/BattleField/StoryBattleField.cs b/Main/System/Battle/BattleField/StoryBattleField.cs
index 93f1aba..3f57168 100644
--- a/Main/System/Battle/BattleField/StoryBattleField.cs
+++ b/Main/System/Battle/BattleField/StoryBattleField.cs
@@ -319,10 +319,17 @@
         }
     }
     
-
+    public bool forceResumeGame = false;
     //鏆傚仠鐨勫師鍥犳湁寰堝锛岄渶瑕佹鏌ュ悇绉嶇姸鎬�
     protected override bool CanResumeGame()
     {
+        if (forceResumeGame)
+        {
+            //寮哄埗鎭㈠
+            forceResumeGame = false;
+            return true;
+        }
+
         if (NewBieCenter.Instance.IsPauseMainBattle(NewBieCenter.Instance.currentGuide))
         {
             return false;
diff --git a/Main/System/HeroUI/HeroPosWin.cs b/Main/System/HeroUI/HeroPosWin.cs
index 00bdc64..16beb3c 100644
--- a/Main/System/HeroUI/HeroPosWin.cs
+++ b/Main/System/HeroUI/HeroPosWin.cs
@@ -116,6 +116,7 @@
         heroListScroller.OnRefreshCell += OnRefreshCell;
         HeroUIManager.Instance.OnTeamPosChangeEvent += TeamChangeEvent;
         TeamManager.Instance.OnTeamChange += OnTeamChange;
+        ShowFuncBtn();
         SelectTiltleBtn();
         CreateScroller();
         Display();
@@ -130,6 +131,11 @@
         TeamManager.Instance.GetTeam(HeroUIManager.Instance.selectTeamType).RestoreTeam();
     }
 
+    void ShowFuncBtn()
+    {
+        jjcBtn.SetActive(FuncOpen.Instance.IsFuncOpen(ArenaManager.Instance.DeployTroopsFuncId));
+    }
+
 
     void SelectTiltleBtn()
     {
diff --git a/Main/System/Horse.meta b/Main/System/Horse.meta
new file mode 100644
index 0000000..1357835
--- /dev/null
+++ b/Main/System/Horse.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 45b98c558c2c8674c9b8e7a879ac5ce9
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Horse/HorseManager.cs b/Main/System/Horse/HorseManager.cs
new file mode 100644
index 0000000..566a1a6
--- /dev/null
+++ b/Main/System/Horse/HorseManager.cs
@@ -0,0 +1,276 @@
+using System;
+using LitJson;
+
+using System.Collections.Generic;
+using System.Linq;
+
+public class HorseManager : GameSystemManager<HorseManager>
+{
+    public int classLV;    //褰撳墠闃剁骇锛屼粠0寮�濮�
+    public int horseLV;    //褰撳墠闃剁瓑绾э紝浠�1寮�濮�
+    public int exp;    //褰撳墠闃剁瓑绾х粡楠岋紝姣忕骇浠�0寮�濮�
+    public event Action OnHorseUpdateEvent;
+
+    public Dictionary<int, HorseSkin> skinDic = new Dictionary<int, HorseSkin>();
+
+    //鍗囩骇/鍗囬樁灞炴��
+    public Dictionary<int, long> specialAttrDic = new Dictionary<int, long>();
+    public Dictionary<int, long> attrDic = new Dictionary<int, long>();
+    public Dictionary<int, long> skinAttrDic = new Dictionary<int, long>();
+
+    //閰嶇疆
+    public int lvUPItemID;
+    public int rankUPItemID;
+    public int quickRankLV;
+
+    public override void Init()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitialize;
+        PackManager.Instance.RefreshItemEvent += OnRefreshItemEvent;
+
+        ParseConfig();
+    }
+
+    public override void Release()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitialize;
+        PackManager.Instance.RefreshItemEvent -= OnRefreshItemEvent;
+    }
+
+    void ParseConfig()
+    {
+        var config = FuncConfigConfig.Get("HorseUpItem");
+        lvUPItemID = int.Parse(config.Numerical1);
+        rankUPItemID = int.Parse(config.Numerical2);
+        quickRankLV = int.Parse(config.Numerical3);
+    }
+
+    void OnBeforePlayerDataInitialize()
+    {
+        classLV = 0;
+        horseLV = 0;
+        exp = 0;
+        skinDic.Clear();
+    }
+
+    void OnRefreshItemEvent(PackType type, int index, int itemID)
+    {
+        if (type == PackType.Item)
+        {
+            if (itemID == lvUPItemID || itemID == rankUPItemID)
+            {
+                UpdateRedpoint();
+            }
+        }
+    }
+
+    public int GetHorseSkinID()
+    {
+        return (int)PlayerDatas.Instance.baseData.equipShowSwitch%100;
+    }
+
+    public void UpdateHorseInfo(HA303_tagSCHorseClassInfo netPack)
+    {
+        classLV = netPack.ClassLV;
+        horseLV = netPack.HorseLV;
+        exp = netPack.Exp;
+        UpdateRedpoint();
+        RefreshAttr();
+        OnHorseUpdateEvent?.Invoke();
+    }
+
+
+    public void UpdateHorseSkinInfo(HA304_tagSCHorseSkinInfo netPack)
+    {
+        for (int i = 0; i < netPack.HorseSkinList.Length; i++)
+        {
+            skinDic[netPack.HorseSkinList[i].HorseSkinID] = new HorseSkin()
+            {
+                State = netPack.HorseSkinList[i].State,
+                EndTime = (int)netPack.HorseSkinList[i].EndTime,
+                Star = netPack.HorseSkinList[i].Star
+            };
+        }
+
+        RefreshSkinAttr();
+        UpdateRedpoint();
+        OnHorseUpdateEvent?.Invoke();
+    }
+
+    Redpoint redpoint = new Redpoint(MainRedDot.RedPoint_HorseKey);
+    void UpdateRedpoint()
+    {
+        if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Horse))
+        {
+            return;
+        }
+
+        redpoint.state = RedPointState.None;
+        var state = GetHorseState();
+        if (state == 0)
+        {
+            if (PackManager.Instance.GetItemCountByID(PackType.Item, lvUPItemID) > 0)
+            {
+                redpoint.state = RedPointState.Simple;
+                return;
+            }
+        }
+        else if (state == 1)
+        {
+            var config = HorseClassConfig.Get(classLV);
+            if (PackManager.Instance.GetItemCountByID(PackType.Item, rankUPItemID) >= config.ClassUPItemCnt)
+            {
+                redpoint.state = RedPointState.Simple;
+                return;
+            }
+        }
+    }
+
+    //0 鍗囩骇 1 鍗囬樁 2 婊$骇
+    public int GetHorseState()
+    {
+        if (HorseClassConfig.maxLVDict.TryGetValue(classLV, out int maxLV))
+        {
+            if (horseLV < maxLV)
+            {
+                return 0;
+            }
+            else if (horseLV >= maxLV)
+            {
+                if (classLV == HorseClassConfig.maxLVDict.Count - 1)
+                {
+                    //浠�0闃剁骇寮�濮�
+                    return 2;
+                }
+                return 1;
+            }
+        }
+
+        return 2;
+
+    }
+
+
+    public void RefreshAttr()
+    {
+        specialAttrDic.Clear();
+        attrDic.Clear();
+        for (int lv = 0; lv <= classLV; lv++)
+        {
+            //鎸夐樁鍔犳垚
+            var config = HorseClassConfig.Get(lv);
+            if (!config.ClassSpecAttrIDList.IsNullOrEmpty())
+            {
+                for (int i = 0; i < config.ClassSpecAttrIDList.Length; i++)
+                {
+                    if (!specialAttrDic.ContainsKey(config.ClassSpecAttrIDList[i]))
+                    {
+                        specialAttrDic[config.ClassSpecAttrIDList[i]] = 0;
+                    }
+                    specialAttrDic[config.ClassSpecAttrIDList[i]] += config.ClassSpecAttrValueList[i];
+                }
+            }
+            
+            if (!config.ClassAttrValueList.IsNullOrEmpty())
+            {
+                for (int i = 0; i < config.AttrIDList.Length; i++)
+                {
+                    if (!attrDic.ContainsKey(config.AttrIDList[i]))
+                    {
+                        attrDic[config.AttrIDList[i]] = 0;
+                    }
+                    attrDic[config.AttrIDList[i]] += config.ClassAttrValueList[i];
+                }
+            }
+
+            //鎸夌瓑绾у姞鎴�
+            if (!config.PerLVAttrValueList.IsNullOrEmpty())
+            {
+                for (int i = 0; i < config.AttrIDList.Length; i++)
+                {
+                    if (!attrDic.ContainsKey(config.AttrIDList[i]))
+                    {
+                        attrDic[config.AttrIDList[i]] = 0;
+                    }
+                    var tmpHorseLV = lv != classLV ? config.MaxLV :horseLV;
+
+                    attrDic[config.AttrIDList[i]] += config.PerLVAttrValueList[i]*tmpHorseLV;
+                }
+            }
+        }
+    }
+
+    //鍒锋柊鐨偆灞炴��
+    void RefreshSkinAttr()
+    {
+        skinAttrDic.Clear();
+        foreach(var skinID in skinDic.Keys)
+        {
+            var skin = skinDic[skinID];
+            if (skin.State != 1)
+            {
+                continue;
+            }
+            
+            var config = HorseSkinConfig.Get(skinID);
+            
+            if (config.AttrIDList.IsNullOrEmpty())
+            {
+                continue;
+            }
+            if (!config.InitAttrValueList.IsNullOrEmpty())
+            {
+                for (int i = 0; i < config.AttrIDList.Length; i++)
+                {
+                    if (!skinAttrDic.ContainsKey(config.AttrIDList[i]))
+                    {
+                        skinAttrDic[config.AttrIDList[i]] = 0;
+                    }
+                    skinAttrDic[config.AttrIDList[i]] += config.InitAttrValueList[i];
+                }
+            }
+            
+            if (!config.AttrPerStarAddList.IsNullOrEmpty())
+            {
+                for (int i = 0; i < config.AttrIDList.Length; i++)
+                {
+                    if (!skinAttrDic.ContainsKey(config.AttrIDList[i]))
+                    {
+                        skinAttrDic[config.AttrIDList[i]] = 0;
+                    }
+                    skinAttrDic[config.AttrIDList[i]] += config.AttrPerStarAddList[i]*skin.Star;
+                }
+            }
+        }
+    }
+
+    public long GetAttrValue(int attrID)
+    {
+        attrDic.TryGetValue(attrID, out long value);
+        specialAttrDic.TryGetValue(attrID, out long specialValue);
+        skinAttrDic.TryGetValue(attrID, out long skinValue);
+        return value + specialValue + skinValue;
+    }
+
+    public int GetAttrPer(int attrID)
+    {
+        if (PlayerPropertyConfig.baseAttr2perDict.ContainsKey(attrID))
+        {
+            var pertype = PlayerPropertyConfig.baseAttr2perDict[attrID];
+            attrDic.TryGetValue(pertype, out long value);
+            specialAttrDic.TryGetValue(pertype, out long specialValue);
+            skinAttrDic.TryGetValue(pertype, out long skinValue);
+
+            return (int)(value + specialValue + skinValue);
+        }
+
+        return 0;
+    }
+}
+
+public class HorseSkin {
+    public int State;        //鏄惁宸叉縺娲�
+    public int EndTime;        //鍒版湡鏃堕棿鎴筹紝0涓烘案涔�
+    public int Star;        //鏄熺骇
+}
+
diff --git a/Main/System/Horse/HorseManager.cs.meta b/Main/System/Horse/HorseManager.cs.meta
new file mode 100644
index 0000000..31c5576
--- /dev/null
+++ b/Main/System/Horse/HorseManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2c615b4e07501fb46b22d715c8234def
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Horse/HorseRankUPWin.cs b/Main/System/Horse/HorseRankUPWin.cs
new file mode 100644
index 0000000..f392de3
--- /dev/null
+++ b/Main/System/Horse/HorseRankUPWin.cs
@@ -0,0 +1,99 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 鍧愰獞鍗囬樁
+/// </summary>
+public class HorseRankUPWin : UIBase
+{
+    [SerializeField] Text curLVText;
+    [SerializeField] Text nextLVText;
+    [SerializeField] Text[] attrNameTexts;
+    [SerializeField] Text[] attrValueTexts;
+    [SerializeField] Text[] nextAttrValueTexts;
+
+    [SerializeField] Transform[] specialAttrRect;
+    [SerializeField] Text[] specialAttrNameTexts;
+    [SerializeField] Text[] specialAttrValueTexts;
+    [SerializeField] Text[] specialNextAttrValueTexts;
+
+    [SerializeField] Text costText;
+    [SerializeField] Image costItemImg;
+    [SerializeField] Button rankUpBtn;
+
+    
+    protected override void InitComponent()
+    {
+        rankUpBtn.AddListener(HorseRankUpgrade);
+    }
+
+    protected override void OnPreOpen()
+    {
+        Display();
+    }
+
+    void Display()
+    {
+        curLVText.text = Language.Get("Horse8", HorseManager.Instance.classLV, HorseManager.Instance.horseLV);
+        nextLVText.text = Language.Get("Horse8", HorseManager.Instance.classLV + 1, 1);
+
+        var nextConfig = HorseClassConfig.Get(HorseManager.Instance.classLV + 1);
+
+        var keys = HorseManager.Instance.attrDic.Keys.ToList();
+        keys.Sort();
+        for (int i = 0; i < attrNameTexts.Length; i++)
+        {
+            if (i < keys.Count)
+            {
+                attrNameTexts[i].text = PlayerPropertyConfig.Get(keys[i]).Name;
+                attrValueTexts[i].text = PlayerPropertyConfig.GetValueDescription(keys[i], HorseManager.Instance.attrDic[keys[i]]);
+                nextAttrValueTexts[i].text = PlayerPropertyConfig.GetValueDescription(keys[i], nextConfig.ClassAttrValueList[i]);
+            }
+        }
+
+        var nextKeys = HorseManager.Instance.specialAttrDic.Keys.ToList();
+        nextKeys.Sort();
+        for (int i = 0; i < specialAttrRect.Length; i++)
+        {
+            if (i < nextConfig.ClassSpecAttrIDList.Length)
+            {
+                specialAttrRect[i].SetActive(true);
+                specialAttrNameTexts[i].text = PlayerPropertyConfig.Get(nextKeys[i]).Name;
+                if (i < nextKeys.Count)
+                {
+                    specialAttrValueTexts[i].text = PlayerPropertyConfig.GetValueDescription(nextConfig.ClassSpecAttrIDList[i], HorseManager.Instance.specialAttrDic[nextKeys[i]]);
+                    specialNextAttrValueTexts[i].text = PlayerPropertyConfig.GetValueDescription(nextConfig.ClassSpecAttrIDList[i], HorseManager.Instance.specialAttrDic[nextKeys[i]] + nextConfig.ClassSpecAttrValueList[i]);
+                }
+                else
+                {
+                    specialAttrValueTexts[i].text = PlayerPropertyConfig.GetValueDescription(nextKeys[i], 0);
+                    specialNextAttrValueTexts[i].text = PlayerPropertyConfig.GetValueDescription(nextKeys[i], nextConfig.ClassSpecAttrValueList[i]);
+                }
+            }
+            else
+            {
+                specialAttrRect[i].SetActive(false);
+            }
+        }
+
+        costText.text = UIHelper.ShowUseItem(PackType.Item, HorseManager.Instance.rankUPItemID, HorseClassConfig.Get(HorseManager.Instance.classLV).ClassUPItemCnt);
+        costItemImg.SetItemSprite(HorseManager.Instance.rankUPItemID);
+
+    }
+
+    //鍗囬樁
+    private void HorseRankUpgrade()
+    {
+        var config = HorseClassConfig.Get(HorseManager.Instance.classLV);
+        if (!ItemLogicUtility.CheckItemCount(PackType.Item, HorseManager.Instance.rankUPItemID, config.ClassUPItemCnt, 2))
+        {
+            return;
+        }
+        var pack = new CB202_tagCSHorseClassUP();
+        GameNetSystem.Instance.SendInfo(pack);
+        CloseWindow();
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Horse/HorseRankUPWin.cs.meta b/Main/System/Horse/HorseRankUPWin.cs.meta
new file mode 100644
index 0000000..d141316
--- /dev/null
+++ b/Main/System/Horse/HorseRankUPWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0ae1b250abb65174f8b4339eaf2fb07c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Horse/HorseSkinWin.cs b/Main/System/Horse/HorseSkinWin.cs
new file mode 100644
index 0000000..13a8fba
--- /dev/null
+++ b/Main/System/Horse/HorseSkinWin.cs
@@ -0,0 +1,28 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 鍧愰獞澶栬
+/// </summary>
+public class HorseSkinWin : UIBase
+{
+    [SerializeField] Button bagBtn;
+
+    protected override void InitComponent()
+    {
+
+    }
+
+    protected override void OnPreOpen()
+    {
+
+    }
+
+    protected override void OnPreClose()
+    {
+
+    }
+
+}
\ No newline at end of file
diff --git a/Main/System/Horse/HorseSkinWin.cs.meta b/Main/System/Horse/HorseSkinWin.cs.meta
new file mode 100644
index 0000000..17d6fc6
--- /dev/null
+++ b/Main/System/Horse/HorseSkinWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 870a2b37a79a6fb4fb0a48fcb49f68c2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Horse/HorseSuccessWin.cs b/Main/System/Horse/HorseSuccessWin.cs
new file mode 100644
index 0000000..eb5091c
--- /dev/null
+++ b/Main/System/Horse/HorseSuccessWin.cs
@@ -0,0 +1,28 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 鍧愰獞
+/// </summary>
+public class HorseSuccessWin : UIBase
+{
+    [SerializeField] Button bagBtn;
+
+    protected override void InitComponent()
+    {
+
+    }
+
+    protected override void OnPreOpen()
+    {
+
+    }
+
+    protected override void OnPreClose()
+    {
+
+    }
+
+}
\ No newline at end of file
diff --git a/Main/System/Horse/HorseSuccessWin.cs.meta b/Main/System/Horse/HorseSuccessWin.cs.meta
new file mode 100644
index 0000000..eb317c8
--- /dev/null
+++ b/Main/System/Horse/HorseSuccessWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1a1c15106e63f6a4fa32cf0f8724c6f4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Horse/HorseWin.cs b/Main/System/Horse/HorseWin.cs
new file mode 100644
index 0000000..6146299
--- /dev/null
+++ b/Main/System/Horse/HorseWin.cs
@@ -0,0 +1,199 @@
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+using UnityEngine.UI;
+
+/// <summary>
+/// 鍧愰獞
+/// </summary>
+public class HorseWin : UIBase
+{
+    [SerializeField] Image modelImg;
+    [SerializeField] UIEffectPlayer lvUPEffect;
+    [SerializeField] Text nameText;
+    [SerializeField] Text specialAttrText;
+    [SerializeField] Button skinBtn;
+    [SerializeField] Text[] attrNameTexts;
+    [SerializeField] Text[] attrValueTexts;
+    [SerializeField] Text[] nextAttrValueTexts;
+    [SerializeField] Text lvText;
+    [SerializeField] Image processImg;
+    [SerializeField] Text processText;
+    [SerializeField] Transform fullRect;
+    [SerializeField] Text costText;
+    [SerializeField] Image costItemImg;
+    [SerializeField] LongPressButton lvupBtn; //鍗囩骇/鍗囬樁鎸夐挳
+    [SerializeField] Toggle quickUpToggle;
+    [SerializeField] Text needUPText;
+    [SerializeField] Button rankUpBtn;
+
+
+
+    int beforeLV;
+
+    protected override void InitComponent()
+    {
+        skinBtn.AddListener(()=>{ UIManager.Instance.OpenWindow<HorseSkinWin>();});
+        lvupBtn.AddListener(HorseUpgrade);
+        lvupBtn.onPress.AddListener(HorseUpgrade);
+        quickUpToggle.onValueChanged.AddListener((bool value)=>{ OnToggle(value);});
+        rankUpBtn.AddListener(HorseRankUpgrade);
+    }
+
+    protected override void OnPreOpen()
+    {
+        beforeLV = HorseManager.Instance.horseLV;
+        //榛樿鍕鹃��
+        quickUpToggle.isOn = !LocalSave.GetBool("HorseQuickUp" + PlayerDatas.Instance.baseData.PlayerID);
+        HorseManager.Instance.OnHorseUpdateEvent += OnHorseUpdateEvent;
+        Display();
+    }
+
+    protected override void OnPreClose()
+    {
+        HorseManager.Instance.OnHorseUpdateEvent -= OnHorseUpdateEvent;
+    }
+
+    void OnHorseUpdateEvent()
+    {
+        if (beforeLV != HorseManager.Instance.horseLV)
+        {
+            beforeLV = HorseManager.Instance.horseLV;
+            lvUPEffect.Play();
+        }
+        Display();
+    }
+    //鍗囩骇
+    private void HorseUpgrade()
+    {
+        bool isQuick = false;
+        if (HorseManager.Instance.classLV >= HorseManager.Instance.quickRankLV && quickUpToggle.isOn)
+        {
+            isQuick = true;
+        }
+
+        if (!ItemLogicUtility.CheckItemCount(PackType.Item, HorseManager.Instance.lvUPItemID, 1, 2))
+        {   
+            return;
+        }
+
+        var pack = new CB201_tagCSHorseLVUP();
+        pack.IsQuick = (byte)(isQuick ? 1 : 0);
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+
+
+    //鍗囬樁
+    private void HorseRankUpgrade()
+    {
+        // var config = HorseClassConfig.Get(HorseManager.Instance.classLV);
+        // if (!ItemLogicUtility.CheckItemCount(PackType.Item, HorseManager.Instance.rankUPItemID, config.ClassUPItemCnt, 2))
+        // {
+        //     return;
+        // }
+        // var pack = new CB202_tagCSHorseClassUP();
+        // GameNetSystem.Instance.SendInfo(pack);
+        UIManager.Instance.OpenWindow<HorseRankUPWin>();
+    }
+
+    void Display()
+    {
+        var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.GetHorseSkinID());
+        modelImg.SetOrgSprite(skinConfig.Icon, "Horse");
+        nameText.text = skinConfig.Name;
+        specialAttrText.text = GetSpecialAttr();
+
+        var config = HorseClassConfig.Get(HorseManager.Instance.classLV);
+        lvText.text = Language.Get("Horse8",HorseManager.Instance.classLV, HorseManager.Instance.horseLV);
+        processImg.fillAmount = HorseManager.Instance.exp / (float)config.LVUPItemCnt;
+        processText.text = HorseManager.Instance.exp + "/" + config.LVUPItemCnt;
+
+        needUPText.text = Language.Get("Horse7", config.MaxLV - HorseManager.Instance.horseLV);
+        var state = HorseManager.Instance.GetHorseState();
+        if (state == 0)
+        {
+            fullRect.SetActive(false);
+            costText.SetActive(true);
+            int useCnt = 1;
+            if (HorseManager.Instance.classLV >= HorseManager.Instance.quickRankLV && quickUpToggle.isOn)
+            {
+                useCnt = config.LVUPItemCnt - HorseManager.Instance.exp;
+            }
+            costText.text = UIHelper.ShowUseItem(PackType.Item, HorseManager.Instance.lvUPItemID, useCnt);
+            costItemImg.SetItemSprite(HorseManager.Instance.lvUPItemID);
+            lvupBtn.SetActive(true);
+            quickUpToggle.SetActive(HorseManager.Instance.classLV >= HorseManager.Instance.quickRankLV);
+            rankUpBtn.SetActive(false);
+
+            processImg.fillAmount = HorseManager.Instance.exp / (float)config.LVUPItemCnt;
+            processText.text = HorseManager.Instance.exp + "/" + config.LVUPItemCnt;
+        }
+        else if (state == 1)
+        {
+            fullRect.SetActive(false);
+            lvupBtn.SetActive(false);
+            rankUpBtn.SetActive(true);
+            costText.SetActive(true);
+            costText.text = UIHelper.ShowUseItem(PackType.Item, HorseManager.Instance.rankUPItemID, config.ClassUPItemCnt);
+            costItemImg.SetItemSprite(HorseManager.Instance.rankUPItemID);
+            quickUpToggle.SetActive(false);
+            processImg.fillAmount = 1;
+            processText.text = "";
+        }
+        else
+        {
+            fullRect.SetActive(true);
+            lvupBtn.SetActive(false);
+            rankUpBtn.SetActive(false);
+            costText.SetActive(false);
+            quickUpToggle.SetActive(false);
+            processImg.fillAmount = 1;
+            processText.text = "";
+        }
+
+
+        var keys = HorseManager.Instance.attrDic.Keys.ToList();
+        keys.Sort();
+        //婊$骇 鍜屼笅绾у睘鎬�
+        var nextConfig = HorseClassConfig.Get(HorseManager.Instance.classLV + 1);
+        var nextAttr = state == 1 ? nextConfig.ClassAttrValueList : (state == 0 ? config.PerLVAttrValueList : new int[config.AttrIDList.Length]);
+        for (int i = 0; i < attrNameTexts.Length; i++)
+        {
+            if (i < keys.Count)
+            {
+                attrNameTexts[i].text = PlayerPropertyConfig.Get(keys[i]).Name;
+                attrValueTexts[i].text = PlayerPropertyConfig.GetValueDescription(keys[i], HorseManager.Instance.attrDic[keys[i]]);
+                nextAttrValueTexts[i].text = PlayerPropertyConfig.GetValueDescription(keys[i], nextAttr[i]);
+            }
+        }
+    }
+
+    string GetSpecialAttr()
+    {
+        List<string> attrList = new List<string>();
+        foreach(var attrID in HorseManager.Instance.specialAttrDic.Keys)
+        {
+            attrList.Add(UIHelper.AppendColor(TextColType.itemchuanqi, PlayerPropertyConfig.GetFullDescription(attrID, HorseManager.Instance.specialAttrDic[attrID])));
+        }
+        return Language.Get("L1100", Language.Get("herocard55"), string.Join(Language.Get("L1112"), attrList));
+    }
+
+    void OnToggle(bool value)
+    {
+        LocalSave.SetBool("HorseQuickUp" + PlayerDatas.Instance.baseData.PlayerID, !quickUpToggle.isOn);
+        var config = HorseClassConfig.Get(HorseManager.Instance.classLV);
+        var state = HorseManager.Instance.GetHorseState();
+        if (state == 0)
+        {
+            int useCnt = 1;
+            if (HorseManager.Instance.classLV >= HorseManager.Instance.quickRankLV && quickUpToggle.isOn)
+            {
+                useCnt = config.LVUPItemCnt - HorseManager.Instance.exp;
+            }
+            costText.text = UIHelper.ShowUseItem(PackType.Item, HorseManager.Instance.lvUPItemID, useCnt);
+        }
+
+        
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Horse/HorseWin.cs.meta b/Main/System/Horse/HorseWin.cs.meta
new file mode 100644
index 0000000..8565245
--- /dev/null
+++ b/Main/System/Horse/HorseWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 52a19eb03ce76e540982134e076a51e9
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Main/FightPowerManager.cs b/Main/System/Main/FightPowerManager.cs
index 9af704d..c11b0e5 100644
--- a/Main/System/Main/FightPowerManager.cs
+++ b/Main/System/Main/FightPowerManager.cs
@@ -74,7 +74,7 @@
     //绛夌骇灞炴��
     void RefreshLVAttrs()
     {
-        // lvAttrs.Clear();
+        lvAttrs.Clear();
         var playerLVConfig = PlayerLVConfig.Get(PlayerDatas.Instance.baseData.LV);
         foreach (var attrType in PlayerPropertyConfig.baseAttrs)
         {
@@ -107,7 +107,7 @@
     //瀹樿亴灞炴��
     void RefreshOfficialAttrs()
     {
-        // officialAttrs.Clear();
+        officialAttrs.Clear();
         var config = RealmConfig.Get(PlayerDatas.Instance.baseData.realmLevel);
         for (int i = 0; i < config.AddAttrType.Length; i++)
         {
@@ -223,7 +223,7 @@
     // 鍗曞熀纭�灞炴�ц绠�
     public double GetPropertyVaule(int attrType, HeroInfo hero, string formula)
     {
-        // propertyVariables.Clear();
+        propertyVariables.Clear();
         propertyVariables["lvValue"] = lvAttrs.ContainsKey(attrType) ? lvAttrs[attrType] : 0;
         propertyVariables["equipValue"] = equipAttrs.ContainsKey(attrType) ? equipAttrs[attrType] : 0;
         propertyVariables["bookValue"] = 0;
@@ -272,7 +272,7 @@
 
     public double GetPropertyVaule(int attrType, HeroInfo hero, int type)
     {
-        // propertyVariables.Clear();
+        propertyVariables.Clear();
         propertyVariables["lvValue"] = lvAttrs.ContainsKey(attrType) ? lvAttrs[attrType] : 0;
         propertyVariables["equipValue"] = equipAttrs.ContainsKey(attrType) ? equipAttrs[attrType] : 0;
         propertyVariables["bookValue"] = 0;
@@ -283,8 +283,8 @@
         propertyVariables["gubaoPer"] = 0;
         propertyVariables["hjgValue"] = 0;
         propertyVariables["hjgPer"] = 0;
-        propertyVariables["horseValue"] = 0;
-        propertyVariables["horsePer"] = 0;
+        propertyVariables["horseValue"] = HorseManager.Instance.GetAttrValue(attrType);
+        propertyVariables["horsePer"] = HorseManager.Instance.GetAttrPer(attrType) / 10000.0f;
 
         //锛侊紒锛佸崟姝﹀皢鎴樺姏棰勮鐨勮瘽闇�瑕佹帓闄ら槦浼嶅奖鍝嶆垬鍔涳紝鍙畻姝﹀皢鑷韩鐨勪笂闃靛睘鎬�
         propertyVariables["lineupInitAddPer"] = GetLineUpPer(attrType, "lineupInitAddPer") / 10000.0f;
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index 141b0fd..20b3bee 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -62,6 +62,12 @@
 
     [SerializeField] Button FirstChargeBtn;
 
+    //鍧愰獞
+    [SerializeField] Image horseBGImg;
+    [SerializeField] Button horseBtn;
+    [SerializeField] Image horseImg;
+    [SerializeField] Text horseLVText;
+    
     /// <summary>
     /// 鍒濆鍖栫粍浠�
     /// </summary>
@@ -119,6 +125,8 @@
         {
             rightFuncInHome.ShowFuncCol(true);
         });
+
+        horseBtn.AddListener(OpenHorse);
     }
 
 
@@ -137,6 +145,8 @@
 
         funcColBtn.SetActive(FuncOpen.Instance.IsFuncOpen(GeneralDefine.mainRightFuncOpenFuncID));
         officialTip.SetActive(OfficialRankManager.Instance.CanOfficialLVUP());
+
+        DisplayHorse();
     }
 
     protected override void OnPreOpen()
@@ -466,6 +476,10 @@
         {
             funcColBtn.SetActive(FuncOpen.Instance.IsFuncOpen(GeneralDefine.mainRightFuncOpenFuncID));
         }
+        else if (funcId == (int)FuncOpenEnum.Horse)
+        {
+            DisplayHorse();
+        }
     }
 
     private void OnUpdateFirstChargeInfo()
@@ -482,4 +496,29 @@
     {
         DisplayCard(TeamType.Story);
     }
+
+
+    void DisplayHorse()
+    {
+        if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Horse))
+        {
+            horseBGImg.SetActive(true);
+            //equipShowSwitch;//褰撳墠閰嶇疆鐨勫潗楠戝瑙侷D瀛樺偍鍦�  涓綅鏁板崄浣嶆暟锛堟渶澶ф敮鎸� 1~99锛�
+            var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.GetHorseSkinID());
+            horseImg.SetOrgSprite(skinConfig.Icon, "Horse");
+            horseLVText.text = Language.Get("Horse8",HorseManager.Instance.classLV, HorseManager.Instance.horseLV);
+        }
+        else
+        {
+            horseBGImg.SetActive(false);
+        }
+    }
+
+    void OpenHorse()
+    {
+        if (FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.Horse, true))
+        {
+            UIManager.Instance.OpenWindow<HorseWin>();
+        }
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Main/PlayerMainDate.cs b/Main/System/Main/PlayerMainDate.cs
index 6fe99db..274bb09 100644
--- a/Main/System/Main/PlayerMainDate.cs
+++ b/Main/System/Main/PlayerMainDate.cs
@@ -49,9 +49,12 @@
 
     public void PowerAdd(long power)
     {
-        if (NewBieCenter.Instance.inGuiding)
+        if (UIManager.Instance.IsOpened<NewBieWin>() )
         {
-            return;
+            if (UIManager.Instance.GetUI<NewBieWin>().IsFuncOpenGuide())
+            {
+                return;
+            }
         }
 
         if (prowBool)
diff --git a/Main/System/NewBieGuidance/NewBieCenter.cs b/Main/System/NewBieGuidance/NewBieCenter.cs
index ff8b1dc..5df85e1 100644
--- a/Main/System/NewBieGuidance/NewBieCenter.cs
+++ b/Main/System/NewBieGuidance/NewBieCenter.cs
@@ -319,7 +319,7 @@
         }
     }
 
-
+    
     public bool IsPauseMainBattle(int _id)
     {
         var config = GuideConfig.Get(_id);
@@ -328,6 +328,12 @@
             return false;
         }
         return GuideConfig.Get(_id).PauseMainBattle == 1;
+    }
+
+    public void ResumeGame()
+    {
+        BattleManager.Instance.storyBattleField.forceResumeGame = true;
+        BattleManager.Instance.storyBattleField.IsPause = false;
     }
 
     //闈�0浠h〃 鍙噸澶嶅紩瀵硷紝涓斾紭鍏堢骇浣庝細琚柊寮曞鏇挎崲锛屼笖涓嶆殏鍋滀富绾挎垬鏂�
@@ -552,6 +558,8 @@
         return id;
     }
 
+
+
 }
 
 public enum GuideTriggerType
diff --git a/Main/System/NewBieGuidance/NewBieWin.cs b/Main/System/NewBieGuidance/NewBieWin.cs
index f4b46b7..37e404b 100644
--- a/Main/System/NewBieGuidance/NewBieWin.cs
+++ b/Main/System/NewBieGuidance/NewBieWin.cs
@@ -112,14 +112,25 @@
             CloseWindow();
             return;
         }
+        if (stepConfig.guideType == GuideType.Function)
+        {
+            UIManager.Instance.CloseWindow<PowerAddWin>();
+        }
 
         Debug.Log($"寮曞ID锛歿NewBieCenter.Instance.currentGuide} 寮曞姝ラ锛歿step}");
 
         lastShowTime = Time.time;
 
+        //閬垮厤寮硅澶囩晫闈㈠拰寮曞鍐茬獊
         if (config.WinName != "EquipExchangeWin" && UIManager.Instance.IsOpened<EquipExchangeWin>())
         {
             UIManager.Instance.CloseWindow<EquipExchangeWin>();
+        }
+
+        //寮曞鐨勬槸鎴樻枟 瑙i櫎鏆傚仠
+        if (stepConfig.UIElementPath.Contains("HomeBtn") && UIManager.Instance.IsOpened<HomeWin>())
+        {
+            NewBieCenter.Instance.ResumeGame();
         }
 
         try
@@ -401,7 +412,15 @@
         return UIManager.Instance.GetUIRoot().transform.Find(path);
     }
 
-
+    public bool IsFuncOpenGuide()
+    {
+        if (stepConfig == null)
+        {
+            return false;
+        }
+        
+        return stepConfig.guideType == GuideType.Function ;
+    }
 
 }
 
diff --git a/Main/System/Redpoint/MainRedDot.cs b/Main/System/Redpoint/MainRedDot.cs
index 73b5bdc..24d557b 100644
--- a/Main/System/Redpoint/MainRedDot.cs
+++ b/Main/System/Redpoint/MainRedDot.cs
@@ -59,7 +59,8 @@
     //绛惧埌
     public const int RedPoint_SignKey = 107;
     
-
+    //鍧愰獞
+    public const int RedPoint_HorseKey = 108;
     
     //姝﹀皢鍗�
     public const int HeroCardRedpoint = 200;
diff --git a/Main/Utility/EnumHelper.cs b/Main/Utility/EnumHelper.cs
index e473b27..05c28c0 100644
--- a/Main/Utility/EnumHelper.cs
+++ b/Main/Utility/EnumHelper.cs
@@ -833,6 +833,7 @@
     Chat = 19,//鑱婂ぉ
     AutoFight = 20,//鑷姩鎴樻枟
     Recharge = 22,//鍏呭��
+    Horse = 37,  //鍧愰獞
     BattlePass = 40, //鍩洪噾锛堟垬浠わ級
     LLMJ = 41,  //鍘嗙粌绉樼瑘
 

--
Gitblit v1.8.0