From 007fbd542c30f5fa8308128aac26ce6584b3067a Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期二, 17 六月 2025 17:13:47 +0800
Subject: [PATCH] 117 【武将】武将系统 武将的属性部分 部分战斗的内容

---
 Main/Config/PartialConfigs/HeroBreakConfig.cs             |   49 +
 Main/System/Hero/HeroInfo.Fetter.cs                       |   18 
 Main/Config/PartialConfigs/HeroQualityAwakeConfig.cs.meta |   11 
 Main/System/Hero/HeroTalentInfo.cs                        |   26 +
 Main/System/GeneralConfig/ItemCost.cs.meta                |   11 
 Main/System/Hero/HeroInfo.Level.cs.meta                   |   11 
 Main/System/Hero/HeroInfo.Collection.cs                   |   12 
 Main/System/Hero/HeroInfo.Quality.cs                      |   12 
 Main/System/Hero/HeroInfo.Level.cs                        |   12 
 Main/System/Battle/BattleField/StoryBattleField.cs        |   20 
 Main/System/Hero/HeroAttrType.cs.meta                     |   11 
 Main/Config/PartialConfigs/HeroQualityBreakConfig.cs.meta |   11 
 Main/System/Hero/HeroInfo.Talent.cs                       |   12 
 Main/System/Hero/HeroInfo.Awake.cs.meta                   |   11 
 Main/System/Hero/HeroInfo.Properties.cs                   |  124 ++++
 Main/System/Battle/BattleObject/BattleObject.cs           |   12 
 Main/System/Hero/HeroInfo.Quality.cs.meta                 |   11 
 Main/Config/PartialConfigs/HeroAwakeConfig.cs             |   63 ++
 Main/System/Battle/BattleField/StoryBattleField.cs.meta   |   11 
 Main/System/Hero/HeroInfo.Star.cs.meta                    |   11 
 Main/Config/Configs/HeroConfig.cs                         |   17 
 Main/System/Hero/HeroFetterInfo.cs                        |   56 ++
 Main/Config/PartialConfigs/HeroTalentConfig.cs            |   52 ++
 Main/Config/PartialConfigs/HeroFetterConfig.cs.meta       |   11 
 Main/System/Hero/HeroInfo.Skin.cs                         |    5 
 Main/Config/ConfigBase.cs                                 |   11 
 Main/Config/PartialConfigs/HeroFetterConfig.cs            |   48 +
 Main/System/Hero/HeroInfo.Equip.cs.meta                   |   11 
 Main/Config/PartialConfigs/HeroConfig.cs                  |   55 ++
 Main/Config/PartialConfigs/HeroBreakConfig.cs.meta        |   11 
 Main/System/Hero/HeroInfo.Collection.cs.meta              |   11 
 Main/System/Hero/HeroInfo.Talent.cs.meta                  |   11 
 Main/Config/PartialConfigs/HeroTalentConfig.cs.meta       |   11 
 Main/System/Hero/HeroInfo.Equip.cs                        |   12 
 Main/System/Hero/HeroInfo.cs                              |  118 +++-
 Main/System/Team/TeamType.cs.meta                         |   11 
 Main/System/Hero/HeroInfo.Break.cs.meta                   |   11 
 Main/System/Hero/HeroFetterInfo.cs.meta                   |   11 
 Main/Config/Configs/HeroFetterConfig.cs                   |    2 
 Main/Config/PartialConfigs/HeroConfig.cs.meta             |   11 
 Main/System/Hero/HeroInfo.Star.cs                         |   12 
 Main/Common/EventName.cs                                  |    2 
 Main/System/Battle/BattleField/BattleField.cs             |   33 
 Main/System/GeneralConfig/ItemCost.cs                     |   32 +
 Main/Config/PartialConfigs/HeroQualityAwakeConfig.cs      |   60 ++
 Main/System/Team/TeamBase.Properties.cs                   |   28 +
 Main/Config/PartialConfigs/HeroAwakeConfig.cs.meta        |   11 
 Main/System/Team/TeamManager.cs                           |   46 +
 Main/System/Hero/HeroManager.cs                           |   32 +
 Main/System/Team/TeamManager.cs.meta                      |   11 
 Main/System/Team/TeamBase.cs                              |   13 
 Main/System/Hero/HeroInfo.Fetter.cs.meta                  |   11 
 Main/System/Battle/BattleManager.cs                       |   23 
 Main/System/Hero/HeroInfo.Awake.cs                        |   12 
 Main/System/Hero/HeroTalentInfo.cs.meta                   |   11 
 Main/System/Team/TeamType.cs                              |   12 
 Main/System/Battle/RecordPlayer/RecordPlayer.cs           |   12 
 Main/System/Hero/HeroInfo.Break.cs                        |   19 
 Main/System/Battle/BattleObject/BattleObjMgr.cs           |   47 +
 Main/Config/PartialConfigs/HeroQualityBreakConfig.cs      |   49 +
 Main/System/Hero/HeroAttrType.cs                          |   40 +
 61 files changed, 1,337 insertions(+), 124 deletions(-)

diff --git a/Main/Common/EventName.cs b/Main/Common/EventName.cs
index b457b3f..b7d2d1a 100644
--- a/Main/Common/EventName.cs
+++ b/Main/Common/EventName.cs
@@ -2,6 +2,6 @@
 
 public class EventName
 {
-    public const string BATTLE_ACTION_OVER = "BATTLE_ACTION_OVER"; //鎴樻枟 琛屼负缁撴潫浜�(涓�涓垬鎶ユ挱瀹�)
+    
 
 }
\ No newline at end of file
diff --git a/Main/Config/ConfigBase.cs b/Main/Config/ConfigBase.cs
index 313b9ad..3f4f3d0 100644
--- a/Main/Config/ConfigBase.cs
+++ b/Main/Config/ConfigBase.cs
@@ -98,7 +98,11 @@
                 Debug.LogError(typeof(T).Name  + " 閲嶅鐨刱ey " + key + " " + exception.Message);
             }
             #endif
-            
+        }
+
+        foreach (var cfg in dic.Values)
+        {
+            cfg.AllConfigLoadFinish();
         }
 
         isInit = true;
@@ -109,6 +113,11 @@
         return default(U);
     }
 
+    protected virtual void AllConfigLoadFinish()
+    {
+        
+    }
+
     public virtual void LoadConfig(string line)
     {
         
diff --git a/Main/Config/Configs/HeroConfig.cs b/Main/Config/Configs/HeroConfig.cs
index 1763f4c..0d30f09 100644
--- a/Main/Config/Configs/HeroConfig.cs
+++ b/Main/Config/Configs/HeroConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�13鏃�
+//    [  Date ]:           2025骞�6鏈�16鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
@@ -23,6 +23,7 @@
 	public int DefInheritPer;
 	public int HPInheritPer;
 	public string BatAttrDict;
+	public int[] FetterIDList;
 
     public override int LoadKey(string _key)
     {
@@ -65,6 +66,20 @@
 			int.TryParse(tables[8],out HPInheritPer); 
 
 			BatAttrDict = tables[9];
+
+			if (tables[10].Contains("["))
+			{
+				FetterIDList = JsonMapper.ToObject<int[]>(tables[10]);
+			}
+			else
+			{
+				string[] FetterIDListStringArray = tables[10].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				FetterIDList = new int[FetterIDListStringArray.Length];
+				for (int i=0;i<FetterIDListStringArray.Length;i++)
+				{
+					 int.TryParse(FetterIDListStringArray[i],out FetterIDList[i]);
+				}
+			}
         }
         catch (Exception exception)
         {
diff --git a/Main/Config/Configs/HeroFetterConfig.cs b/Main/Config/Configs/HeroFetterConfig.cs
index 81bba9d..e1973a0 100644
--- a/Main/Config/Configs/HeroFetterConfig.cs
+++ b/Main/Config/Configs/HeroFetterConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�13鏃�
+//    [  Date ]:           2025骞�6鏈�16鏃�
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/PartialConfigs/HeroAwakeConfig.cs b/Main/Config/PartialConfigs/HeroAwakeConfig.cs
new file mode 100644
index 0000000..2398d6d
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroAwakeConfig.cs
@@ -0,0 +1,63 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           2025骞�6鏈�13鏃�
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroAwakeConfig : ConfigBase<int, HeroAwakeConfig>
+{
+    // public int HeroID;
+    // public int AwakeLV;
+
+    // HeroID, Dictionary<AwakeLV, HeroAwakeConfig>
+    public static Dictionary<int, Dictionary<int, HeroAwakeConfig>> configDics = new Dictionary<int, Dictionary<int, HeroAwakeConfig>>();
+
+    protected override void OnConfigParseCompleted()
+    {
+        base.OnConfigParseCompleted();
+
+        Dictionary<int, HeroAwakeConfig> tempDic = null;
+
+        if (!configDics.TryGetValue(HeroID, out tempDic))
+        {
+            tempDic = new Dictionary<int, HeroAwakeConfig>();
+            configDics.Add(HeroID, tempDic);
+        }
+
+        if (tempDic.ContainsKey(AwakeLV))
+        {
+            // 瑕嗙洊锛岄槻姝簩娆″垵濮嬪寲鍑洪敊
+            tempDic[AwakeLV] = this;
+        }
+        else
+        {
+            tempDic.Add(AwakeLV, this);
+        }
+    }
+
+    public static HeroAwakeConfig GetHeroAwakeConfig(int heroID, int awakeLv)
+    {
+        Dictionary<int, HeroAwakeConfig> tempDic = null;
+
+        if (!configDics.TryGetValue(heroID, out tempDic))
+        {
+            return null;
+        }
+
+        HeroAwakeConfig config = null;
+        tempDic.TryGetValue(awakeLv, out config);
+
+        return config;
+    }
+
+    public static bool IsReachMax(int heroID, int awakeLv)
+    {
+        return GetHeroAwakeConfig(heroID, awakeLv) == null;
+    }
+}
diff --git a/Main/Config/PartialConfigs/HeroAwakeConfig.cs.meta b/Main/Config/PartialConfigs/HeroAwakeConfig.cs.meta
new file mode 100644
index 0000000..3ddd635
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroAwakeConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e524a2adfe4b6e24dbde99544124292c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/PartialConfigs/HeroBreakConfig.cs b/Main/Config/PartialConfigs/HeroBreakConfig.cs
new file mode 100644
index 0000000..683b915
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroBreakConfig.cs
@@ -0,0 +1,49 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public partial class HeroBreakConfig : ConfigBase<int, HeroBreakConfig>
+{
+    // public int HeroID;
+    // public int BreakLV;
+
+    // HeroID, Dictionary<BreakLV, HeroBreakConfig>
+    public static Dictionary<int, Dictionary<int, HeroBreakConfig>> configDics = new Dictionary<int, Dictionary<int, HeroBreakConfig>>();
+
+    protected override void OnConfigParseCompleted()
+    {
+        base.OnConfigParseCompleted();
+
+        Dictionary<int, HeroBreakConfig> tempDic = null;
+        if (!configDics.TryGetValue(HeroID, out tempDic))
+        {
+            tempDic = new Dictionary<int, HeroBreakConfig>();
+            configDics.Add(HeroID, tempDic);
+        }
+
+        if (tempDic.ContainsKey(BreakLV))
+        {
+            tempDic[BreakLV] = this;
+        }
+        else
+        {
+            tempDic.Add(BreakLV, this);
+        }
+    }
+
+    public static HeroBreakConfig GetHeroBreakConfig(int heroID, int breakLv)
+    {
+        Dictionary<int, HeroBreakConfig> tempDic = null;
+        if (!configDics.TryGetValue(heroID, out tempDic))
+        {
+            return null;
+        }
+        HeroBreakConfig config = null;
+        tempDic.TryGetValue(breakLv, out config);
+        return config;
+    }
+
+    public static bool IsReachMax(int heroID, int breakLv)
+    {
+        return GetHeroBreakConfig(heroID, breakLv) == null;
+    }
+}
\ No newline at end of file
diff --git a/Main/Config/PartialConfigs/HeroBreakConfig.cs.meta b/Main/Config/PartialConfigs/HeroBreakConfig.cs.meta
new file mode 100644
index 0000000..0379af1
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroBreakConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a263d1f9613456e4bbea60e3fcb19d2e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/PartialConfigs/HeroConfig.cs b/Main/Config/PartialConfigs/HeroConfig.cs
new file mode 100644
index 0000000..6727d54
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroConfig.cs
@@ -0,0 +1,55 @@
+using System.Collections.Generic;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroConfig : ConfigBase<int, HeroConfig>
+{
+    public Dictionary<HeroAttrType, int> inheritPropertiesDict = new Dictionary<HeroAttrType, int>();
+
+    protected override void OnConfigParseCompleted()
+    {
+        base.OnConfigParseCompleted();
+
+        inheritPropertiesDict.Clear();
+
+        inheritPropertiesDict.Add(HeroAttrType.attack, AtkInheritPer);
+        inheritPropertiesDict.Add(HeroAttrType.defense, DefInheritPer);
+        inheritPropertiesDict.Add(HeroAttrType.hp, HPInheritPer);
+
+
+        // json鏍煎紡
+        // {"灞炴�D":鍊�, ...}
+        // 灞炴�D瀵瑰簲灞炴�ф潯鐩〃鐨処D
+        // 鏈夊�肩殑閰嶅嵆鍙紝娌℃湁閰嶇疆鐨勫睘鎬ч粯璁�0
+        JsonData jsonData = JsonMapper.ToObject(BatAttrDict);
+
+        foreach (var attrId in jsonData.Keys)
+        {
+            if (int.TryParse(attrId.ToString(), out int attrTypeId))
+            {
+                HeroAttrType attrType = (HeroAttrType)attrTypeId;
+                if (jsonData[attrId] != null && int.TryParse(jsonData[attrId].ToString(), out int value))
+                {
+                    if (inheritPropertiesDict.ContainsKey(attrType))
+                    {
+                        Debug.LogError($"HeroTalentConfig: 灞炴�� {attrType} 宸茬粡瀛樺湪锛屾棤娉曢噸澶嶆坊鍔犮�傝妫�鏌ラ厤缃枃浠躲��");
+                    }
+                    else
+                    {
+                        inheritPropertiesDict.Add(attrType, value);
+                    }
+                }
+            }
+        }
+    }
+
+    public int GetInheritPercent(HeroAttrType attrType)
+    {
+        if (inheritPropertiesDict.TryGetValue(attrType, out int perc))
+        {
+            return perc;
+        }
+
+        return 0;
+    }
+}
\ No newline at end of file
diff --git a/Main/Config/PartialConfigs/HeroConfig.cs.meta b/Main/Config/PartialConfigs/HeroConfig.cs.meta
new file mode 100644
index 0000000..c03e9a5
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dd269c7c73dcf3f4f87848b25f007405
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/PartialConfigs/HeroFetterConfig.cs b/Main/Config/PartialConfigs/HeroFetterConfig.cs
new file mode 100644
index 0000000..26b58b9
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroFetterConfig.cs
@@ -0,0 +1,48 @@
+锘�
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroFetterConfig : ConfigBase<int, HeroFetterConfig>
+{
+	private Dictionary<HeroAttrType, int> attrValues = new Dictionary<HeroAttrType, int>();
+
+	protected override void OnConfigParseCompleted()
+    {
+        base.OnConfigParseCompleted();
+
+		// public int[] AttrIDList;
+		// public int[] AttrValueList;
+
+		if (AttrIDList.Length != AttrValueList.Length)
+		{
+			Debug.LogError("HeroFetterConfig 閰嶇疆閿欒 " + FetterID);
+			return;
+		}
+
+		for (int i = 0; i < AttrIDList.Length; i++)
+		{
+			HeroAttrType attrType = (HeroAttrType)AttrIDList[i];
+			if (attrValues.ContainsKey(attrType))
+			{
+				Debug.LogError("HeroFetterConfig 閰嶇疆閿欒 " + FetterID);
+				return;
+			}
+
+			attrValues.Add((HeroAttrType)AttrIDList[i], AttrValueList[i]);
+		}
+    }
+
+	public int GetFetterAttr(HeroAttrType attrType)
+	{
+		if (attrValues.TryGetValue(attrType, out int value))
+		{
+			return value;
+		}
+
+		return 0;
+	}
+}
diff --git a/Main/Config/PartialConfigs/HeroFetterConfig.cs.meta b/Main/Config/PartialConfigs/HeroFetterConfig.cs.meta
new file mode 100644
index 0000000..d181bf2
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroFetterConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4a3ad59499e2d754d869070e775fd250
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/PartialConfigs/HeroQualityAwakeConfig.cs b/Main/Config/PartialConfigs/HeroQualityAwakeConfig.cs
new file mode 100644
index 0000000..39f14cf
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroQualityAwakeConfig.cs
@@ -0,0 +1,60 @@
+
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class HeroQualityAwakeConfig : ConfigBase<int, HeroQualityAwakeConfig>
+{
+
+	//	Quality, Dictionary<AwakeLV, UPCostItem>
+	public static Dictionary<int, Dictionary<int, HeroQualityAwakeConfig>> costDics = new Dictionary<int, Dictionary<int, HeroQualityAwakeConfig>>();
+
+    protected override void OnConfigParseCompleted()
+    {
+    	base.OnConfigParseCompleted();
+        
+    	Dictionary<int, HeroQualityAwakeConfig> tempDic = null;
+
+    	if (!costDics.TryGetValue(Quality, out tempDic))
+    	{
+    		tempDic = new Dictionary<int, HeroQualityAwakeConfig>();
+    	}
+
+
+    	if (tempDic.ContainsKey(AwakeLV))
+    	{
+    		//	瑕嗙洊 杩欓噷鎬曟湁浠g爜鍐欓敊 浜屾鍒濆鍖栭厤缃� 瀵艰嚧鍑洪棶棰� 
+    		//	褰撴槸闃查敊 鎬ц兘涓婁篃涓嶇畻澶�� 鍥犱负琛ㄥ氨娌″灏戞暟鎹�
+    		tempDic[AwakeLV] = this;
+    	}
+    	else
+    	{
+    		tempDic.Add(AwakeLV, this);
+    	}
+    }
+
+    public static HeroQualityAwakeConfig GetQualityAwakeConfig(int quality, int awakeLv)
+    {
+    	Dictionary<int, HeroQualityAwakeConfig> tempDic = null;
+
+    	if (!costDics.TryGetValue(quality, out tempDic))
+    	{
+    		return null;
+    	}
+
+    	HeroQualityAwakeConfig config = null;
+
+    	tempDic.TryGetValue(awakeLv, out config);
+
+    	return config;
+    }
+
+    public static bool IsReachMax(int quality, int awakeLv)
+    {
+    	return GetQualityAwakeConfig(quality, awakeLv) == null;
+    }
+
+}
\ No newline at end of file
diff --git a/Main/Config/PartialConfigs/HeroQualityAwakeConfig.cs.meta b/Main/Config/PartialConfigs/HeroQualityAwakeConfig.cs.meta
new file mode 100644
index 0000000..a44de7c
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroQualityAwakeConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6fcabb6f5d955a048b40024428c7b510
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/PartialConfigs/HeroQualityBreakConfig.cs b/Main/Config/PartialConfigs/HeroQualityBreakConfig.cs
new file mode 100644
index 0000000..3026f37
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroQualityBreakConfig.cs
@@ -0,0 +1,49 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public partial class HeroQualityBreakConfig : ConfigBase<int, HeroQualityBreakConfig>
+{
+    // public int Quality;
+    // public int BreakLV;
+
+    // Quality, Dictionary<BreakLV, HeroQualityBreakConfig>
+    public static Dictionary<int, Dictionary<int, HeroQualityBreakConfig>> configDics = new Dictionary<int, Dictionary<int, HeroQualityBreakConfig>>();
+
+    protected override void OnConfigParseCompleted()
+    {
+        base.OnConfigParseCompleted();
+
+        Dictionary<int, HeroQualityBreakConfig> tempDic = null;
+        if (!configDics.TryGetValue(Quality, out tempDic))
+        {
+            tempDic = new Dictionary<int, HeroQualityBreakConfig>();
+            configDics.Add(Quality, tempDic);
+        }
+
+        if (tempDic.ContainsKey(BreakLV))
+        {
+            tempDic[BreakLV] = this;
+        }
+        else
+        {
+            tempDic.Add(BreakLV, this);
+        }
+    }
+
+    public static HeroQualityBreakConfig GetQualityBreakConfig(int quality, int breakLv)
+    {
+        Dictionary<int, HeroQualityBreakConfig> tempDic = null;
+        if (!configDics.TryGetValue(quality, out tempDic))
+        {
+            return null;
+        }
+        HeroQualityBreakConfig config = null;
+        tempDic.TryGetValue(breakLv, out config);
+        return config;
+    }
+
+    public static bool IsReachMax(int quality, int breakLv)
+    {
+        return GetQualityBreakConfig(quality, breakLv) == null;
+    }
+}
\ No newline at end of file
diff --git a/Main/Config/PartialConfigs/HeroQualityBreakConfig.cs.meta b/Main/Config/PartialConfigs/HeroQualityBreakConfig.cs.meta
new file mode 100644
index 0000000..36474a0
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroQualityBreakConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4ebc71d06bf0df04d8696b6a41f1199c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/PartialConfigs/HeroTalentConfig.cs b/Main/Config/PartialConfigs/HeroTalentConfig.cs
new file mode 100644
index 0000000..f568ac8
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroTalentConfig.cs
@@ -0,0 +1,52 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public partial class HeroTalentConfig : ConfigBase<int, HeroTalentConfig>
+{
+    // public int Quality;
+    // public int AttrID;
+
+    // Quality, List<HeroTalentConfig>
+    public static Dictionary<int, List<HeroTalentConfig>> configDics = new Dictionary<int, List<HeroTalentConfig>>();
+
+    protected override void OnConfigParseCompleted()
+    {
+        base.OnConfigParseCompleted();
+
+        List<HeroTalentConfig> list = null;
+        if (!configDics.TryGetValue(Quality, out list))
+        {
+            list = new List<HeroTalentConfig>();
+            configDics.Add(Quality, list);
+        }
+        list.Add(this);
+    }
+
+    public static List<HeroTalentConfig> GetTalentListByQuality(int quality)
+    {
+        List<HeroTalentConfig> list = null;
+        if (configDics.TryGetValue(quality, out list))
+        {
+            return list;
+        }
+        return null;
+    }
+
+    /// <summary>
+    /// 鎵�鏈夊搧璐ㄧ殑鍒楄〃鎸堿ttrID鍗囧簭鎺掑簭锛堥渶鍦ㄦ墍鏈夐厤缃姞杞藉畬鍚庤皟鐢ㄤ竴娆★級
+    /// </summary>
+    public static void SortAllByAttrID()
+    {
+        foreach (var pair in configDics)
+        {
+            pair.Value.Sort((a, b) => a.AttrID.CompareTo(b.AttrID));
+        }
+    }
+
+    protected override void AllConfigLoadFinish()
+    {   
+        base.AllConfigLoadFinish();
+        //  鎺掑簭
+        SortAllByAttrID();
+    }
+}
\ No newline at end of file
diff --git a/Main/Config/PartialConfigs/HeroTalentConfig.cs.meta b/Main/Config/PartialConfigs/HeroTalentConfig.cs.meta
new file mode 100644
index 0000000..7d44298
--- /dev/null
+++ b/Main/Config/PartialConfigs/HeroTalentConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a74ae0573fd8447429167015504998af
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index e503cd8..35b1bd5 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -2,8 +2,6 @@
 
 public class BattleField
 {
-    protected int battleId = 0;
-
     public BattleMode battleMode;
 
     public BattleObjMgr battleObjMgr;
@@ -12,29 +10,21 @@
 
     public int round = 0;
 
-    public BattleField()
+    public virtual void Init(TeamBase _redTeam, TeamBase _blueTeam)
     {
-
-    }
-
-    public void Init(int _battleId, int _levelId, BattleMode _battleMode, TeamBase _redTeam, TeamBase _blueTeam = null)
-    {
-        battleId = _battleId;
-        battleMode = _battleMode;
-
         battleObjMgr = new BattleObjMgr();
-        battleObjMgr.Init(_levelId, _redTeam, _blueTeam);
+        battleObjMgr.Init(_redTeam, _blueTeam);
 
         recordPlayer = new RecordPlayer();
         recordPlayer.Init(this);
     }
 
-    public void Release()
+    public virtual void Release()
     {
         battleObjMgr.Release();
     }
 
-    public void Run()
+    public virtual void Run()
     {
         recordPlayer.Run();
         battleObjMgr.Run();
@@ -45,17 +35,17 @@
         battleMode = _battleMode;
     }
 
-    public void PlayRecord(RecordAction recordAction)
+    public virtual void PlayRecord(RecordAction recordAction)
     {
         recordPlayer.PlayRecord(recordAction);
     }
 
-    public void PlayRecord(List<RecordAction> recordList)
+    public virtual void PlayRecord(List<RecordAction> recordList)
     {
         recordPlayer.PlayRecord(recordList);
     }
 
-    public void OnActionOver(int attackId)
+    public virtual void OnActionOver(int attackId)
     {
         //
 // 鎵嬪姩鎺ㄧ偣涓�涓嬪彂涓�涓寘 鏀朵竴涓寘 鎾斁涓�娆℃姤鏂� 涔嬪悗灏卞仠浣� 鐩村埌鎴樻枟缁撴潫鐨勫寘鏂�
@@ -75,8 +65,13 @@
         }
     }
 
-    public void StartGame()
+    public virtual void ResumeGame()
     {
-        recordPlayer.StartGame();
+        battleObjMgr.ResumeGame();
+    }
+
+    public virtual void PauseGame()
+    {
+        battleObjMgr.PauseGame();
     }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/StoryBattleField.cs b/Main/System/Battle/BattleField/StoryBattleField.cs
new file mode 100644
index 0000000..c5434f4
--- /dev/null
+++ b/Main/System/Battle/BattleField/StoryBattleField.cs
@@ -0,0 +1,20 @@
+
+
+using System;
+
+public class StoryBattleField : BattleField
+{
+    public override void Init(TeamBase _redTeam, TeamBase _blueTeam)
+    {
+        string savedStr = LocalSave.GetString("StoryBattleFieldBattleMode");
+        if (string.IsNullOrEmpty(savedStr))
+        {
+            savedStr = "Hand";
+        }
+        battleMode = (BattleMode)Enum.Parse(typeof(BattleMode), savedStr);
+
+        base.Init(_redTeam, _blueTeam);
+
+    }
+
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/StoryBattleField.cs.meta b/Main/System/Battle/BattleField/StoryBattleField.cs.meta
new file mode 100644
index 0000000..3632499
--- /dev/null
+++ b/Main/System/Battle/BattleField/StoryBattleField.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6679c13aebc8e5a48afaa1001b4656f8
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs
index 074c581..017432e 100644
--- a/Main/System/Battle/BattleManager.cs
+++ b/Main/System/Battle/BattleManager.cs
@@ -5,13 +5,13 @@
 
 public class BattleManager : GameSystemManager<BattleManager>
 {
-    protected Dictionary<int, BattleField> battleFields = new Dictionary<int, BattleField>();
+    public StoryBattleField storyBattleField = new StoryBattleField();//涓荤嚎鎴樺満
 
+    protected Dictionary<int, BattleField> battleFields = new Dictionary<int, BattleField>();
 
     public override void Init()
     {
         base.Init();
-        EventBroadcast.Instance.AddListener<int, int>(EventName.BATTLE_ACTION_OVER, OnActionOver);
     }
 
     public override void Release()
@@ -19,24 +19,25 @@
         base.Release();
     }
 
-    private void OnActionOver(int battleFieldId, int attackId)
+    public void StartStoryBattle()
     {
-        BattleField battleField = null;
-        if (battleFields.TryGetValue(battleFieldId, out battleField))
+        if (null == storyBattleField)
         {
-            battleField.OnActionOver(attackId);
-        }
-        else
-        {
-            Debug.LogError("BattleManager OnActionOver battleFieldId:" + battleFieldId + " not find");
+            storyBattleField = new StoryBattleField();
+
         }
     }
 
     public void Run()
     {
+        if (null != storyBattleField)
+        {
+            storyBattleField.Run();
+        }
+
         foreach (var battleField in battleFields)
         {
-            battleField.Value.Run();
+            battleField.Value?.Run();
         }
     }
 
diff --git a/Main/System/Battle/BattleObject/BattleObjMgr.cs b/Main/System/Battle/BattleObject/BattleObjMgr.cs
index a01879f..8a95deb 100644
--- a/Main/System/Battle/BattleObject/BattleObjMgr.cs
+++ b/Main/System/Battle/BattleObject/BattleObjMgr.cs
@@ -1,3 +1,4 @@
+using System;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
@@ -9,26 +10,8 @@
     private Dictionary<int, BattleObject> redCampDict = new Dictionary<int, BattleObject>();
     private Dictionary<int, BattleObject> blueCampDict = new Dictionary<int, BattleObject>();
 
-    public void Init(int _levelId, TeamBase _redTeam, TeamBase _blueTeam = null)
+    public void Init(TeamBase _redTeam, TeamBase _blueTeam)
     {
-        if (_levelId == 0 && _blueTeam == null)
-        {
-            Debug.LogError("BattleObjMgr Init Error: _levelId == 0 && _blueTeam == null 鍏冲崱id娌℃湁(涓嶆槸PVE) 涔熸病鏈夎摑鑹查槦浼嶄俊鎭紙涔熶笉鏄疨VP锛�)");
-            return;
-        }
-
-        if (_levelId != 0 && _blueTeam != null)
-        {
-            Debug.LogError("BattleObjMgr Init Error: _levelId!= 0 && _blueTeam != null 鍏冲崱id鏈�(鏄疨VE) 涔熸湁钃濊壊闃熶紞淇℃伅锛堜篃涓嶆槸PVP锛�)");
-            return;
-        }
-
-        if (_levelId != 0)
-        {
-            _blueTeam = new TeamBase();
-            _blueTeam.InitByLevelId(_levelId);
-        }
-
         CreateTeam(redCampDict, _redTeam);
         CreateTeam(blueCampDict, _blueTeam);
     } 
@@ -80,4 +63,30 @@
             item.Value.Run();
         }
     }
+
+    public void ResumeGame()
+    {
+        foreach (var item in redCampList)
+        {
+            item.ResumeGame();
+        }
+
+        foreach (var item in blueCampList)
+        {
+            item.ResumeGame();
+        }
+    }
+
+    public void PauseGame()
+    {
+        foreach (var item in redCampList)
+        {
+            item.PauseGame();
+        }
+
+        foreach (var item in blueCampList)
+        {
+            item.PauseGame();
+        }
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 4d2010f..42caec7 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -150,6 +150,16 @@
     {
         motionBase.Run();
     }
-    
+
+    public virtual void PauseGame()
+    {
+        
+    }
+
+    public virtual void ResumeGame()
+    {
+        
+    }
+
     #endregion
 }
\ No newline at end of file
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index be05643..54891c2 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -28,17 +28,7 @@
         }
     }
 
-    public void StartGame()
-    {
-
-    }
-
-    public void PlayNext()
-    {
-        
-    }
-
-    public void Run()
+    public virtual void Run()
     {
         if (recordActionQueue.Count == 0)
         {
diff --git a/Main/System/GeneralConfig/ItemCost.cs b/Main/System/GeneralConfig/ItemCost.cs
new file mode 100644
index 0000000..04254d7
--- /dev/null
+++ b/Main/System/GeneralConfig/ItemCost.cs
@@ -0,0 +1,32 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ItemCost
+{
+	public int itemId;
+	public int costNum;
+
+	public ItemCost(int _itemId, int _costNum)
+	{
+		itemId = _itemId;
+		costNum = _costNum;
+	}
+
+	public static List<ItemCost> GetList(int[] array)
+	{
+		List<ItemCost> retList = new List<ItemCost>();
+
+		if (array.Length % 2 != 0)
+		{
+			Debug.LogError("ItemCost.GetList Failure, because array % 2 != 0");
+			return retList;
+		}
+
+		for (int i = 0; i < array.Length; i += 2)
+		{	
+			retList.Add(new ItemCost(array[i], array[i+1]));
+		}
+
+		return retList;
+	}
+}
\ No newline at end of file
diff --git a/Main/System/GeneralConfig/ItemCost.cs.meta b/Main/System/GeneralConfig/ItemCost.cs.meta
new file mode 100644
index 0000000..f5f7a4a
--- /dev/null
+++ b/Main/System/GeneralConfig/ItemCost.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 99306ce8f2356fd488b06f7de7d2557c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroAttrType.cs b/Main/System/Hero/HeroAttrType.cs
new file mode 100644
index 0000000..9e7e2d3
--- /dev/null
+++ b/Main/System/Hero/HeroAttrType.cs
@@ -0,0 +1,40 @@
+
+
+public enum HeroAttrType
+{
+	// 鐢熷懡
+    hp,
+    // 鏀诲嚮鍔�
+    attack,
+    // 闃插尽鍔�
+    defense,
+    //鐪╂檿姒傜巼
+    stunRate,
+    //鏆村嚮姒傜巼
+    critRate,
+    //杩炲嚮姒傜巼
+    comboRate,
+    //鏍兼尅姒傜巼
+    blockRate,
+    //鍙嶅嚮姒傜巼
+    counterAttackRate,
+    //鏀诲嚮鐩爣鏃讹紝閫犳垚浼ゅ杞寲鎴愮敓鍛界殑鐧惧垎姣旀暟鍊兼彁鍗�
+    recoverRate,
+
+    //鎴樻枟鎶垫姉灞炴��
+    //鐪╂檿鎶垫姉
+    stunResist,
+    //鏆村嚮鎶垫姉
+    critResist,
+    //杩炲嚮鎶垫姉
+    comboResist,
+    //鏍兼尅鎶垫姉
+    blockResist,
+    //鍙嶅嚮鎶垫姉
+    counterAttackResist,
+    //鍑忓皯鏀诲嚮鏃跺惛琛�杞寲鎴愮敓鍛界殑鐧惧垎姣旀暟鍊�
+    recoverResist,
+
+    //  鐗规畩灞炴��(寰呰ˉ鍏�)
+
+}
\ No newline at end of file
diff --git a/Main/System/Hero/HeroAttrType.cs.meta b/Main/System/Hero/HeroAttrType.cs.meta
new file mode 100644
index 0000000..47f69c9
--- /dev/null
+++ b/Main/System/Hero/HeroAttrType.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0c340f5ce4b296047a302ba21f2a65d2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroFetterInfo.cs b/Main/System/Hero/HeroFetterInfo.cs
new file mode 100644
index 0000000..a5bb622
--- /dev/null
+++ b/Main/System/Hero/HeroFetterInfo.cs
@@ -0,0 +1,56 @@
+using System;
+using System.Collections.Generic;
+
+public class HeroFetterInfo
+{
+    private HeroInfo heroInfo;
+    private int fetterId;
+
+	public HeroFetterConfig fetterConfig;
+
+    protected bool isActive = false;
+
+    public HeroFetterInfo(HeroInfo _heroInfo, int _fetterId)
+    {
+        heroInfo = _heroInfo;
+        fetterId = _fetterId;
+
+		fetterConfig = HeroFetterConfig.Get(fetterId);
+    }
+
+    //	鏄惁婵�娲讳簡缇佺粖
+    public bool IsActiveFetter()
+    {
+    	return isActive;
+    }
+
+    public void SetIsActiveFetter(TeamBase teamBase)
+    {
+        int fetterHeroCount = fetterConfig.HeroIDList.Length;
+
+        int count = 0;
+
+        for (int i = 0; i < teamBase.teamHeros.Length; i++)
+        {
+            TeamHero teamHero = teamBase.teamHeros[i];
+
+            if (null == teamHero)
+                continue;
+
+            if (Array.IndexOf(fetterConfig.HeroIDList, teamHero.heroInfo.heroId) >= 0)
+            {
+                count++;
+            }
+        }
+
+        isActive = (count >= fetterHeroCount);
+    }
+
+    public int GetFetterAttr(HeroAttrType attrType)
+    {
+        if (!isActive)
+            return 0;
+        
+        return fetterConfig.GetFetterAttr(attrType);
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Hero/HeroFetterInfo.cs.meta b/Main/System/Hero/HeroFetterInfo.cs.meta
new file mode 100644
index 0000000..b759df1
--- /dev/null
+++ b/Main/System/Hero/HeroFetterInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 61d40aba9c2091445ae692419d4c5ebf
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroInfo.Awake.cs b/Main/System/Hero/HeroInfo.Awake.cs
new file mode 100644
index 0000000..2f91343
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Awake.cs
@@ -0,0 +1,12 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public partial class HeroInfo
+{
+
+    protected int GetIFByInheritAwakePercent(HeroAttrType attrType)
+    {
+    	//	YYL TODO
+    	return 0;
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Hero/HeroInfo.Awake.cs.meta b/Main/System/Hero/HeroInfo.Awake.cs.meta
new file mode 100644
index 0000000..e3c6e63
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Awake.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7fba5bbc8a4d5c94e8691c63207e4edb
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroInfo.Break.cs b/Main/System/Hero/HeroInfo.Break.cs
new file mode 100644
index 0000000..200e689
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Break.cs
@@ -0,0 +1,19 @@
+
+
+
+public partial class HeroInfo
+{
+	protected int GetBreakCultivationPercent(HeroAttrType attrType)
+	{
+		//	YYL TODO
+		return 0;
+	}
+	
+	protected int GetIFByInheritBreakPercent(HeroAttrType attrType)
+	{
+		//	YYL TODO
+		return 0;
+	}
+	
+
+}
diff --git a/Main/System/Hero/HeroInfo.Break.cs.meta b/Main/System/Hero/HeroInfo.Break.cs.meta
new file mode 100644
index 0000000..d882d13
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Break.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6c7d00805f733194e9f54b2c3c0ecc72
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroInfo.Collection.cs b/Main/System/Hero/HeroInfo.Collection.cs
new file mode 100644
index 0000000..60cf189
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Collection.cs
@@ -0,0 +1,12 @@
+
+
+
+public partial class HeroInfo
+{
+	protected int GetCollectionCultivationPercent(HeroAttrType attrType)
+	{
+		//	YYL TODO
+		return 0;
+	}
+
+}
diff --git a/Main/System/Hero/HeroInfo.Collection.cs.meta b/Main/System/Hero/HeroInfo.Collection.cs.meta
new file mode 100644
index 0000000..ea3af75
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Collection.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 14fc4e08ba34d504a936ff5d6c2b7c53
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroInfo.Equip.cs b/Main/System/Hero/HeroInfo.Equip.cs
new file mode 100644
index 0000000..223adc7
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Equip.cs
@@ -0,0 +1,12 @@
+
+
+
+public partial class HeroInfo
+{
+	protected int GetEquipStableProperties(HeroAttrType attrType)
+	{
+		//	YYL TODO
+		return 0;
+	}
+
+}
diff --git a/Main/System/Hero/HeroInfo.Equip.cs.meta b/Main/System/Hero/HeroInfo.Equip.cs.meta
new file mode 100644
index 0000000..72b571d
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Equip.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 27a10dfeaeacac3439ab8ecc85001796
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroInfo.Fetter.cs b/Main/System/Hero/HeroInfo.Fetter.cs
new file mode 100644
index 0000000..3b47512
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Fetter.cs
@@ -0,0 +1,18 @@
+
+
+
+public partial class HeroInfo
+{
+	protected int GetIFByInheritFetterPercent(HeroAttrType attrType)
+	{
+		//	YYL TODO
+		int total = 0;
+		for (int i = 0; i < fetterInfoList.Count; i++)
+		{
+			HeroFetterInfo fetterInfo = fetterInfoList[i];
+			total += fetterInfo.GetFetterAttr(attrType);
+		}
+		return total;
+	}
+
+}
diff --git a/Main/System/Hero/HeroInfo.Fetter.cs.meta b/Main/System/Hero/HeroInfo.Fetter.cs.meta
new file mode 100644
index 0000000..8ea1859
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Fetter.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 54b6d26a54e84c0489aed5a95980ad78
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroInfo.Level.cs b/Main/System/Hero/HeroInfo.Level.cs
new file mode 100644
index 0000000..836c749
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Level.cs
@@ -0,0 +1,12 @@
+
+
+
+public partial class HeroInfo
+{
+	protected int GetLevelCultivationPercent(HeroAttrType attrType)
+	{
+		//	YYL TODO
+		return 0;
+	}
+
+}
diff --git a/Main/System/Hero/HeroInfo.Level.cs.meta b/Main/System/Hero/HeroInfo.Level.cs.meta
new file mode 100644
index 0000000..781b376
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Level.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2a7ad855fa3dd5249a06835e88181ddd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroInfo.Properties.cs b/Main/System/Hero/HeroInfo.Properties.cs
index dbb3911..3f40b99 100644
--- a/Main/System/Hero/HeroInfo.Properties.cs
+++ b/Main/System/Hero/HeroInfo.Properties.cs
@@ -15,48 +15,124 @@
     public int attack = 0;
     // 闃插尽鍔�
     public int defense = 0;
-    // 閫熷害
-    public int speed = 0;
 
 
 
-    //鎴樻枟灞炴��
-    //闂伩姒傜巼
-    public float dodge = 0f;
-    //鏆村嚮姒傜巼
-    public float crit = 0f;
-    //杩炲嚮姒傜巼
-    public float comboRate = 0f;
+    //鎴樻枟灞炴�� 鍑绘檿銆佹毚鍑汇�佽繛鍑汇�佹牸鎸°�佸弽鍑汇�佸惛琛�
     //鐪╂檿姒傜巼
-    public float stunRate = 0f;
+    public int stunRate = 0;
+    //鏆村嚮姒傜巼
+    public int critRate = 0;
+    //杩炲嚮姒傜巼
+    public int comboRate = 0;
+    //鏍兼尅姒傜巼
+    public int blockRate = 0;
     //鍙嶅嚮姒傜巼
-    public float counterAttack = 0f;
+    public int counterAttackRate = 0;
     //鏀诲嚮鐩爣鏃讹紝閫犳垚浼ゅ杞寲鎴愮敓鍛界殑鐧惧垎姣旀暟鍊兼彁鍗�
-    public float recoverRate = 0f;
+    public int recoverRate = 0;
 
     //鎴樻枟鎶垫姉灞炴��
-    //闂伩鎶垫姉
-    public float dodgeResist = 0f;
-    //鏆村嚮鎶垫姉
-    public float critResist = 0f;
-    //杩炲嚮鎶垫姉
-    public float comboResist = 0f;
     //鐪╂檿鎶垫姉
-    public float stunResist = 0f;
+    public int stunResist = 0;
+    //鏆村嚮鎶垫姉
+    public int critResist = 0;
+    //杩炲嚮鎶垫姉
+    public int comboResist = 0;
+    //鏍兼尅鎶垫姉
+    public int blockResist = 0;
     //鍙嶅嚮鎶垫姉
-    public float counterAttackResist = 0f;
+    public int counterAttackResist = 0;
     //鍑忓皯鏀诲嚮鏃跺惛琛�杞寲鎴愮敓鍛界殑鐧惧垎姣旀暟鍊�
-    public float recoverResist = 0f;
+    public int recoverResist = 0;
+
+    //  鐗规畩灞炴��(寰呰ˉ鍏�)
+
 
     //璁$畻涓汉/鑱屼笟/绉嶆棌鍏绘垚灞炴�у姞鎴�
     public void CalculateProperties()
     {
-        //todo
+// 姝﹀皢鍗曚綋灞炴�э紝鏍规嵁缁ф壙姣斾緥锛屼粠鍏ㄤ綋灞炴�х户鎵垮緱鍒�
+// 渚嬪锛氭灏嗘敾鍑诲姏=
+// [锛堣澶囧熀纭�鍥哄畾鍊�+鍏跺畠妯″潡鐨勫浐瀹氬�硷級* 锛�1+鍒濆鍔犳垚%+姝﹀皢鍗囩骇鍔犳垚%+姝﹀皢绐佺牬鍔犳垚%+姝﹀皢鍚炲櫖鏄熺骇鍔犳垚%+鍥鹃壌鍔犳垚%锛塢
+// *
+// [ 缁ф壙姣斾緥*锛�1+缇佺粖鍔犳垚%+娼滆兘鍔犳垚%+澶╄祴鍔犳垚%+瑙夐啋鏁堟灉鍔犳垚%锛塢
+        hp = GetProperties(HeroAttrType.hp);
+        attack = GetProperties(HeroAttrType.attack);
+        defense = GetProperties(HeroAttrType.defense);
+        stunRate = GetProperties(HeroAttrType.stunRate);
+        critRate = GetProperties(HeroAttrType.critRate);
+        comboRate = GetProperties(HeroAttrType.comboRate);
+        blockRate = GetProperties(HeroAttrType.blockRate);
+        counterAttackRate = GetProperties(HeroAttrType.counterAttackRate);
+        recoverRate = GetProperties(HeroAttrType.recoverRate);
+        stunResist = GetProperties(HeroAttrType.stunResist);
+        critResist = GetProperties(HeroAttrType.critResist);
+        comboResist = GetProperties(HeroAttrType.comboResist);
+        blockResist = GetProperties(HeroAttrType.blockResist);
+        counterAttackResist = GetProperties(HeroAttrType.counterAttackResist);
+        recoverResist = GetProperties(HeroAttrType.recoverResist);
+    }
+
+    protected int GetProperties(HeroAttrType attrType)
+    {
+        return GetStableProperties(attrType) 
+                    * GetCultivationPercent(attrType)
+                    * GetInheritRate(attrType) 
+                    * GetInfluenceByInheritPercent(attrType);
+    }
+
+
+    //  鍥哄畾鍊煎睘鎬�
+    public int GetStableProperties(HeroAttrType attrType)
+    {
+        int stableValue = 0;
+        stableValue += GetEquipStableProperties(attrType);
+        return stableValue;
+    }
+
+    //  鍩瑰吇鐧惧垎姣�
+    public int GetCultivationPercent(HeroAttrType attrType)
+    {
+        int cultivationPercent = 100;
+        cultivationPercent += GetQualityCultivationPercent(attrType);//鍒濆鍔犳垚鏍规嵁姝﹀皢鍝佽川鍐冲畾锛屼笉鍚屽搧璐ㄦ灏嗗垵濮嬪姞鎴愪笉鍚� HeroInfo.Quality.cs
+        cultivationPercent += GetLevelCultivationPercent(attrType);// 绛夌骇缁欑殑鐧惧垎姣� HeroInfo.Level.cs
+        cultivationPercent += GetBreakCultivationPercent(attrType);// 绐佺牬缁欑殑鐧惧垎姣� HeroInfo.Break.cs
+        cultivationPercent += GetStarCultivationPercent(attrType);// 鍚炲櫖鏄熺骇缁欑殑鐧惧垎姣� HeroInfo.Star.cs
+        cultivationPercent += GetCollectionCultivationPercent(attrType);// 鍥鹃壌缁欑殑鐧惧垎姣� HeroInfo.Collection.cs
+        return cultivationPercent;
+    }
+
+    //  琚户鎵挎瘮渚嬪奖鍝嶇殑鐧惧垎姣斿睘鎬�
+    public int GetInfluenceByInheritPercent(HeroAttrType attrType)
+    {
+        // 锛�1+缇佺粖鍔犳垚%+娼滆兘鍔犳垚%+澶╄祴鍔犳垚%+瑙夐啋鏁堟灉鍔犳垚%锛�
+
+        int IFByInheritPercent = 100;
+        IFByInheritPercent += GetIFByInheritFetterPercent(attrType); //缇佺粖鍔犳垚 HeroInfo.Fetter
+        IFByInheritPercent += GetIFByInheritBreakPercent(attrType);  //娼滆兘鍔犳垚 HeroInfo.Break
+        IFByInheritPercent += GetIFByInheritTalentPercent(attrType); //澶╄祴鍔犳垚 HeroInfo.Talent
+        IFByInheritPercent += GetIFByInheritAwakePercent(attrType); //瑙夐啋鍔犳垚 HeroInfo.Awake
+        return IFByInheritPercent;
     }
 
     public int CalculatePower()
     {
-        //todo
-        return 0;
+        //  鏆傝
+        return hp +
+                attack +
+                defense +
+                stunRate +
+                critRate +
+                comboRate +
+                blockRate +
+                counterAttackRate +
+                recoverRate +
+                stunResist +
+                critResist +
+                comboResist +
+                blockResist +
+                counterAttackResist +
+                recoverResist;
     }
 }
\ No newline at end of file
diff --git a/Main/System/Hero/HeroInfo.Quality.cs b/Main/System/Hero/HeroInfo.Quality.cs
new file mode 100644
index 0000000..c35973b
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Quality.cs
@@ -0,0 +1,12 @@
+
+
+
+public partial class HeroInfo
+{
+	protected int GetQualityCultivationPercent(HeroAttrType attrType)
+	{
+		//	YYL TODO
+		return 0;
+	}
+
+}
diff --git a/Main/System/Hero/HeroInfo.Quality.cs.meta b/Main/System/Hero/HeroInfo.Quality.cs.meta
new file mode 100644
index 0000000..e37f87e
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Quality.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8540c5ed5104dfe40b0bff4aaf9a080b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroInfo.Skin.cs b/Main/System/Hero/HeroInfo.Skin.cs
index 46c8faf..f3ba92f 100644
--- a/Main/System/Hero/HeroInfo.Skin.cs
+++ b/Main/System/Hero/HeroInfo.Skin.cs
@@ -11,11 +11,14 @@
     {
         get
         {
+            if (null == heroConfig)
+                return 0;
+
             if (SkinIndex > heroConfig.SkinNPCIDList.Length && SkinIndex >= 0)
             {
                 return heroConfig.SkinNPCIDList[SkinIndex];
             }
-            return 0;
+            return heroConfig.SkinNPCIDList[0];
         }
     }
 
diff --git a/Main/System/Hero/HeroInfo.Star.cs b/Main/System/Hero/HeroInfo.Star.cs
new file mode 100644
index 0000000..33df4df
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Star.cs
@@ -0,0 +1,12 @@
+
+
+
+public partial class HeroInfo
+{
+	protected int GetStarCultivationPercent(HeroAttrType attrType)
+	{
+		//	YYL TODO
+		return 0;
+	}
+
+}
diff --git a/Main/System/Hero/HeroInfo.Star.cs.meta b/Main/System/Hero/HeroInfo.Star.cs.meta
new file mode 100644
index 0000000..d113b22
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Star.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 01382d3bab4b6674ba541f0704dd7037
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroInfo.Talent.cs b/Main/System/Hero/HeroInfo.Talent.cs
new file mode 100644
index 0000000..f66f6b7
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Talent.cs
@@ -0,0 +1,12 @@
+
+
+
+public partial class HeroInfo
+{
+	protected int GetIFByInheritTalentPercent(HeroAttrType attrType)
+	{
+		//	YYL TODO
+		return 0;
+	}
+
+}
diff --git a/Main/System/Hero/HeroInfo.Talent.cs.meta b/Main/System/Hero/HeroInfo.Talent.cs.meta
new file mode 100644
index 0000000..900bd63
--- /dev/null
+++ b/Main/System/Hero/HeroInfo.Talent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6ca2b1a1de9030c4eaf3b2b272ec9aad
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Hero/HeroInfo.cs b/Main/System/Hero/HeroInfo.cs
index bf47961..fae1795 100644
--- a/Main/System/Hero/HeroInfo.cs
+++ b/Main/System/Hero/HeroInfo.cs
@@ -7,7 +7,13 @@
     public long sid;
 
     //  姝﹀皢閰嶇疆琛↖D
-    public int heroId;
+    public int heroId
+    {
+        get
+        {
+            return itemHero.config.ID;
+        }
+    }
 
     //  姝﹀皢绛夌骇
     public int heroLevel;
@@ -17,6 +23,9 @@
 
     //  姝﹀皢绐佺牬绛夌骇
     public int breakLevel;
+
+    //  姝﹀皢瑙夐啋绛夌骇
+    public int awakeLevel;
 
 
     public HeroCountry heroCountry
@@ -35,61 +44,108 @@
         }
     }
 
+    public readonly ItemModel itemHero;
 
-#region 閰嶇疆
+    public readonly CB122_tagSCHeroInfo.tagSCHero scHeroInfo;
+
     //  姝﹀皢閰嶇疆
     public HeroConfig heroConfig;
-
     //  瑙夐啋閰嶇疆
     public HeroAwakeConfig awakeConfig;
-
     //  绐佺牬閰嶇疆
     public HeroBreakConfig breakConfig;
-
     //  缇佺粖閰嶇疆
     public HeroFetterConfig fetterConfig;
-
     //  鍝佽川瑙夐啋閰嶇疆
     public HeroQualityAwakeConfig qualityAwakeConfig;
-
     //  鍝佽川閰嶇疆
     public HeroQualityConfig qualityConfig;
-
     //  鍝佽川绐佺牬閰嶇疆
     public HeroQualityBreakConfig qualityBreakConfig;
 
-    //  澶╄祴閰嶇疆
-    public HeroTalentConfig talentConfig;
-#endregion 閰嶇疆
+    public List<HeroFetterInfo> fetterInfoList = new List<HeroFetterInfo>();
+    public List<HeroTalentInfo> talentList = new List<HeroTalentInfo>();
 
 
-    public HeroSkillMgr heroSkillMgr;
-
-    public HeroInfo(CB122_tagSCHeroInfo.tagSCHero scHeroInfo, ItemModel itemHero)
+    public HeroInfo(CB122_tagSCHeroInfo.tagSCHero _scHeroInfo, ItemModel _itemHero)
     {
-        heroSkillMgr = new HeroSkillMgr(this);
+        scHeroInfo = _scHeroInfo;
+        itemHero = _itemHero;
+
+        InitConfigs();
         // HeroConfigUtility
-// 71 # 鑻遍泟澶╄祴ID鍒楄〃
-// 73 # 鑻遍泟澶╄祴ID绛夌骇鍒楄〃锛屽搴�71澶╄祴ID鐨勭瓑绾�
-// 75 # 鑻遍泟澶╄祴娲楃偧閿佸畾绱㈠紩鍒楄〃锛屽搴�71澶╄祴ID绱㈠紩
+
+        // 70 # 鑻遍泟绛夌骇
+        heroLevel = itemHero.GetUseData(70)[0];
+        // 72 # 鑻遍泟鏄熺骇
+        heroStar = itemHero.GetUseData(72)[0];
+        // 74 # 鑻遍泟绐佺牬绛夌骇
+        breakLevel = itemHero.GetUseData(74)[0];
+        // 76 # 鑻遍泟瑙夐啋绛夌骇
+        awakeLevel = itemHero.GetUseData(76)[0];
+        // 78 # 鑻遍泟浣跨敤鐨勭毊鑲ょ储寮�
+        SkinIndex = itemHero.GetUseData(78)[0];
+
+        // 71 # 鑻遍泟澶╄祴ID鍒楄〃
+        List<int> talentSkillList = itemHero.GetUseData(71);
+        // 73 # 鑻遍泟澶╄祴ID绛夌骇鍒楄〃锛屽搴�71澶╄祴ID鐨勭瓑绾�
+        List<int> talentLvList = itemHero.GetUseData(73);
+        // 75 # 鑻遍泟澶╄祴娲楃偧閿佸畾绱㈠紩鍒楄〃锛屽搴�71澶╄祴ID绱㈠紩
+        List<int> talentLockList = itemHero.GetUseData(75);
+
+        if (talentLockList.Count != talentLvList.Count || talentLvList.Count != talentSkillList.Count)
+        {
+            Debug.LogError("澶╄祴ID鍒楄〃鍙婂悗缁殑鏁版嵁鏁伴噺娌″涓�");
+        }
+
+        //  澶╄祴
+        talentList.Clear();
+        for (int i = 0; i < talentSkillList.Count; i++)
+        {
+            talentList.Add(new HeroTalentInfo(this, talentSkillList[i], talentLvList[i], talentLockList[i]));
+        }
+
+        //  缇佺粖
+        fetterInfoList.Clear();
+        for (int i = 0; i < heroConfig.FetterIDList.Length; i++)
+        {
+            fetterInfoList.Add(new HeroFetterInfo(this, heroConfig.FetterIDList[i]));
+        }
+
 // 77 # 鑻遍泟澶╄祴娲楃偧闅忔満ID鍒楄〃
 // 79 # 鑻遍泟瑙夐啋鏃堕殢鏈哄ぉ璧嬮�夐」ID鍒楄〃
-// 70 # 鑻遍泟绛夌骇
-// 72 # 鑻遍泟鏄熺骇
-// 74 # 鑻遍泟绐佺牬绛夌骇
-// 76 # 鑻遍泟瑙夐啋绛夌骇
-// 78 # 鑻遍泟浣跨敤鐨勭毊鑲ょ储寮�
 // 80 # 涓婚樀鍨嬩笂闃典綅缃�
 
-        #region 鐨偆
-        // skinConfig
-        #endregion 鐨偆
-
-
-        #region 澶╄祴
-
-        #endregion 澶╄祴
+        
     }
 
+    protected void InitConfigs()
+    {
+        //  姝﹀皢閰嶇疆
+        heroConfig = HeroConfig.Get(heroId);
 
+        //  瑙夐啋閰嶇疆 (婊$骇涓虹┖)
+        awakeConfig = HeroAwakeConfig.GetHeroAwakeConfig(heroId, awakeLevel);
+
+        //  绐佺牬閰嶇疆
+        breakConfig = HeroBreakConfig.GetHeroBreakConfig(heroId, breakLevel);
+
+        //  缇佺粖閰嶇疆 鍙兘闇�瑕乫etterid 鍘绘绱㈡晥鐜囧お浣�
+        // fetterConfig;
+
+        //  鍝佽川瑙夐啋閰嶇疆
+        qualityAwakeConfig = HeroQualityAwakeConfig.GetQualityAwakeConfig(Quality, awakeLevel);
+
+        //  鍝佽川閰嶇疆
+        qualityConfig = HeroQualityConfig.Get(Quality);
+
+        //  鍝佽川绐佺牬閰嶇疆
+        qualityBreakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(Quality, awakeLevel);
+
+    }
+
+    public int GetInheritRate(HeroAttrType attrType)
+    {
+        return heroConfig.GetInheritPercent(attrType);
+    }
 }
\ No newline at end of file
diff --git a/Main/System/Hero/HeroManager.cs b/Main/System/Hero/HeroManager.cs
index 07c49f1..63268ae 100644
--- a/Main/System/Hero/HeroManager.cs
+++ b/Main/System/Hero/HeroManager.cs
@@ -24,6 +24,38 @@
         
     }
 
+    public void UpdateHeroInfo()
+    {
+        
+    }
+
+    public List<HeroInfo> GetPowerfulHeroList()
+    {
+        List<HeroInfo> heroList = new List<HeroInfo>(heroInfoDict.Values);
+
+        heroList.Sort((a, b) => 
+        {
+            int power1 = a.CalculatePower();
+            int power2 = b.CalculatePower();
+
+            if (power1 == power2)
+            {
+                return 0;
+            }
+
+            return power1 > power2 ? -1 : 1;
+        });
+
+        List<HeroInfo> retList = new List<HeroInfo>();
+
+        for (int i = 0; i < TeamConst.MaxTeamHeroCount && i < heroList.Count; i++)
+        {
+            retList.Add(heroList[i]);
+        }
+
+        return retList;
+    }
+
     // public override bool IsNessaryDataReady()
     // {
     //     return true;
diff --git a/Main/System/Hero/HeroTalentInfo.cs b/Main/System/Hero/HeroTalentInfo.cs
new file mode 100644
index 0000000..e16d0bf
--- /dev/null
+++ b/Main/System/Hero/HeroTalentInfo.cs
@@ -0,0 +1,26 @@
+
+
+public class HeroTalentInfo
+{
+	public HeroTalentConfig config;
+
+	public HeroInfo heroInfo;
+
+	public int talentId;
+
+	public int talentLv;
+
+	public int lockIndex;
+
+	public HeroTalentInfo(HeroInfo _heroInfo, int _talentId, int _talentLv, int _lockIndex)
+	{
+		heroInfo = _heroInfo;
+		talentId = _talentId;
+		talentLv = _talentLv;
+		lockIndex = _lockIndex;
+
+		config = HeroTalentConfig.Get(talentId);
+	}
+
+
+}
\ No newline at end of file
diff --git a/Main/System/Hero/HeroTalentInfo.cs.meta b/Main/System/Hero/HeroTalentInfo.cs.meta
new file mode 100644
index 0000000..b34a6c2
--- /dev/null
+++ b/Main/System/Hero/HeroTalentInfo.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 262ca07cf60e33946bf5fc0a9a1007ab
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Team/TeamBase.Properties.cs b/Main/System/Team/TeamBase.Properties.cs
index e3dcbb3..65df025 100644
--- a/Main/System/Team/TeamBase.Properties.cs
+++ b/Main/System/Team/TeamBase.Properties.cs
@@ -6,10 +6,32 @@
 
     //  闃靛瀷鍐呭崱鐗岀殑缇佺粖澧炵泭
 
-    public void CalculateProperties(HeroInfo heroInfo)
-    {   
+	protected void UpdateProperties()
+	{
+		//	缇佺粖
+		for (int i = 0; i < teamHeros.Length; i++)
+		{
+			TeamHero hero = teamHeros[i];
+			if (null != hero)
+			{
+				for (int j = 0; j < hero.heroInfo.fetterInfoList.Count; j++)
+				{
+					hero.heroInfo.fetterInfoList[j].SetIsActiveFetter(this);
+				}
+			}
+		}
 
-    }
+		//	闃靛瀷
+
+
+		//	灞炴�ц绠�
+		for (int i = 0; i < teamHeros.Length; i++)
+		{
+			TeamHero hero = teamHeros[i];
+			if (null != hero)
+				hero.heroInfo.CalculateProperties();
+		}
+	}
 
     public void CalculatePower()
     {
diff --git a/Main/System/Team/TeamBase.cs b/Main/System/Team/TeamBase.cs
index 480dc6e..65f0538 100644
--- a/Main/System/Team/TeamBase.cs
+++ b/Main/System/Team/TeamBase.cs
@@ -1,3 +1,5 @@
+using System;
+using System.Collections.Generic;
 
 //  闃靛瀷鍩虹
 
@@ -35,6 +37,16 @@
         return true;
     }
 
+    public void AddTeamHeros(List<HeroInfo> heroInfos)
+    {
+        for (int i = 0; i < heroInfos.Count; i++)
+        {
+            AddTeamHero(heroInfos[i]);
+        }
+
+        UpdateProperties();
+    }
+
     public bool AddTeamHero(HeroInfo heroInfo)
     {
         if (heroInfo == null)
@@ -49,6 +61,7 @@
                 teamHeros[i] = new TeamHero();
                 teamHeros[i].heroInfo = heroInfo;
                 teamHeros[i].heroIndex = i;
+                UpdateProperties();
                 return true;    
             }
         }
diff --git a/Main/System/Team/TeamManager.cs b/Main/System/Team/TeamManager.cs
new file mode 100644
index 0000000..7639faf
--- /dev/null
+++ b/Main/System/Team/TeamManager.cs
@@ -0,0 +1,46 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+
+
+public class TeamManager : GameSystemManager<TeamManager>
+{
+	protected Dictionary<TeamType, TeamBase> teamDict = new Dictionary<TeamType, TeamBase>();
+
+    public override void Init()
+    {
+        base.Init();
+    }
+
+    public override void Release()
+    {
+        base.Release();
+    }
+
+	public TeamBase GetTeam(TeamType teamType)
+	{
+		TeamBase team = null;
+
+		if (!teamDict.TryGetValue(teamType, out team))
+		{
+			team = GetStoryTeam();
+			teamDict.Add(teamType, team);
+		}
+
+		return team;
+	}	
+
+	public TeamBase GetStoryTeam()
+	{
+		TeamBase team = null;
+
+		if (!teamDict.TryGetValue(TeamType.Story, out team))
+		{
+			team = new TeamBase();
+			team.AddTeamHeros(HeroManager.Instance.GetPowerfulHeroList());
+			teamDict.Add(TeamType.Story, team);
+		}
+
+		return team;
+	}
+}
\ No newline at end of file
diff --git a/Main/System/Team/TeamManager.cs.meta b/Main/System/Team/TeamManager.cs.meta
new file mode 100644
index 0000000..7caf5ac
--- /dev/null
+++ b/Main/System/Team/TeamManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b9e93ce1fa26cdf4fafced36fb2bd0de
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Team/TeamType.cs b/Main/System/Team/TeamType.cs
new file mode 100644
index 0000000..b63dd06
--- /dev/null
+++ b/Main/System/Team/TeamType.cs
@@ -0,0 +1,12 @@
+
+
+public enum TeamType
+{
+	None = 0,
+	//	PVE
+	Story = 1,
+	
+
+	//	PVP
+	Arena = 101,
+}
\ No newline at end of file
diff --git a/Main/System/Team/TeamType.cs.meta b/Main/System/Team/TeamType.cs.meta
new file mode 100644
index 0000000..b21ce1a
--- /dev/null
+++ b/Main/System/Team/TeamType.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 097080eb83a42b54bbc2b10bc100993b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

--
Gitblit v1.8.0