From 30ba2ef747ced774bef177d5273cb5a3429cff49 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期二, 01 七月 2025 17:38:55 +0800
Subject: [PATCH] 130 子 【战斗】战斗系统 / 【战斗】战斗系统-客户端 部分战斗逻辑

---
 Main/System/Battle/Motion/MotionBase.cs                                        |   99 +-
 Main/System/Battle/Skill/DirectlyDamageSkill.cs.meta                           |   11 
 Main/Config/Configs/PlayerPropertyConfig.cs                                    |    2 
 Main/Config/Configs/TitleStarUpConfig.cs                                       |    2 
 Main/Config/Configs/SkillConfig.cs                                             |   29 
 Main/Config/Configs/EquipPlaceMapConfig.cs                                     |    2 
 Main/Config/Configs/EmojiPackConfig.cs                                         |    2 
 Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs      |   21 
 Main/System/Battle/Define/DamageType.cs                                        |   16 
 Main/Config/Configs/RealmLVUPTaskConfig.cs                                     |    2 
 Main/System/Battle/Define/DamageType.cs.meta                                   |   11 
 Main/Config/Configs/NPCExConfig.cs                                             |    2 
 Main/Config/Configs/TreasureSetConfig.cs                                       |    2 
 Main/System/Team/TeamConst.cs                                                  |    3 
 Main/Config/Configs/HeroBreakConfig.cs                                         |    2 
 Main/Config/Configs/TreasureItemLibConfig.cs                                   |   13 
 Main/Config/Configs/GuideConfig.cs                                             |    2 
 Main/System/Battle/RecordPlayer/RecordActionType.cs                            |    4 
 Main/Config/Configs/AppointItemConfig.cs                                       |    2 
 Main/Config/Configs/CTGSelectItemConfig.cs                                     |    2 
 Main/Config/Configs/FamilyConfig.cs                                            |    2 
 Main/Config/Configs/SuccessConfig.cs                                           |    2 
 Main/Config/Configs/HeroQualityAwakeConfig.cs                                  |    2 
 Main/System/Battle/Skill/SkillBase.cs                                          |   52 +
 Main/Config/Configs/PlayerFacePicStarConfig.cs                                 |   74 +
 Main/Config/Configs/HeroSkinConfig.cs                                          |    2 
 Main/System/Battle/BattleField/BattleRootNode.cs.meta                          |   11 
 Main/Config/Configs/RichTextMsgReplaceConfig.cs                                |    2 
 Main/Config/Configs/FamilyEmblemConfig.cs                                      |    2 
 Main/Config/Configs/HeroAwakeConfig.cs                                         |    2 
 Main/Config/Configs/PlayerFacePicConfig.cs                                     |    2 
 Main/Config/Configs/RuleConfig.cs                                              |    2 
 Main/System/Battle/Buff.meta                                                   |    8 
 Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs.meta         |   11 
 Main/System/Battle/BattleField/OperationAgent/AIOperationAgent.cs              |  171 +++
 Main/Config/Configs/TaskConfig.cs                                              |    2 
 Main/System/Team/TeamBase.Properties.cs                                        |    4 
 Main/Config/Configs/AudioConfig.cs                                             |    2 
 Main/System/Team/TeamManager.cs                                                |   15 
 Main/Config/Configs/DailyLivenessRewardConfig.cs                               |    2 
 Main/System/Hero/HeroManager.cs                                                |   45 
 Main/Config/Configs/KickOutReasonConfig.cs                                     |    2 
 Main/Config/Configs/RealmConfig.cs                                             |    2 
 Main/Config/Configs/StoreConfig.cs                                             |    2 
 Main/Config/Configs/HeroQualityBreakConfig.cs                                  |    2 
 Main/Config/Configs/InitialFunctionConfig.cs                                   |    2 
 Main/Config/Configs/ChestsConfig.cs                                            |    2 
 Main/System/Battle/Skill/DirectlyDamageSkill.cs                                |   49 +
 Main/System/Battle/Motion/MotionName.cs                                        |   19 
 Main/Config/Configs/GetItemWaysConfig.cs                                       |    2 
 Main/System/Battle/BattleField/OperationAgent.meta                             |    8 
 Main/System/Battle/Skill.meta                                                  |    8 
 Main/Config/Configs/DailyQuestOpenTimeConfig.cs                                |    2 
 Main/Config/Configs/PlayerFaceStarConfig.cs                                    |   74 +
 Main/System/Battle/Define/SkillTargetType.cs.meta                              |   11 
 Main/Config/Configs/EquipGSParamConfig.cs                                      |    2 
 Main/System/Battle/BattleObject/BattleObjMgr.cs                                |  198 ++++
 Main/System/Main/MainWin.cs                                                    |    2 
 Main/System/Team/TeamHero.cs                                                   |   14 
 Main/Utility/UniTaskExtension.cs                                               |   18 
 Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs        |   30 
 Main/Config/Configs/ChestsAwardConfig.cs                                       |    2 
 Main/Config/Configs/MailConfig.cs                                              |    2 
 Main/Config/Configs/PlayerFacePicStarConfig.cs.meta                            |   11 
 Main/System/Team/TeamHero.State.cs.meta                                        |   11 
 Main/System/Battle/BattleField/BattleRootNode.cs                               |   14 
 Main/Config/Configs/FirstGoldConfig.cs                                         |    2 
 Main/Config/Configs/XBGetItemConfig.cs                                         |    2 
 Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs        |   35 
 Main/System/Battle/BattleField/StoryBattleField.cs                             |   15 
 Main/Config/Configs/CTGConfig.cs                                               |    2 
 Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs.meta   |   11 
 Main/Config/Configs/DienstgradConfig.cs                                        |    2 
 Main/System/Hero/HeroInfo.Properties.cs                                        |   36 
 Main/Config/Configs/DirtyWordConfig.cs                                         |    2 
 Main/System/Battle/BattleObject/BattleObject.cs                                |  458 +++++++--
 Main/System/Battle/BattleField/RecordActions.meta                              |    8 
 Main/Config/Configs/ChatBubbleBoxConfig.cs                                     |    2 
 Main/Config/Configs/FunctionTeamSetConfig.cs                                   |    2 
 Main/Config/Configs/HeroConfig.cs                                              |   17 
 Main/Config/Configs/OrderInfoConfig.cs                                         |    2 
 Main/Config/Configs/EffectConfig.cs                                            |    2 
 Main/Config/Configs/FuncConfigConfig.cs                                        |    2 
 Main/System/Battle/Skill/SkillFactory.cs                                       |   70 +
 Main/Config/Configs/PlayerFaceConfig.cs                                        |    2 
 Main/Manager/UIManager.cs                                                      |    9 
 Main/System/Battle/BattleWin.cs                                                |   72 +
 Main/Config/Configs/LanguageConfig.cs                                          |    2 
 Main/Config/Configs/PlayerLVConfig.cs                                          |    2 
 Main/System/Team/TeamHero.Properties.cs.meta                                   |   11 
 Main/Config/Configs/DailyQuestConfig.cs                                        |    2 
 Main/System/Battle/BattleField/OperationAgent/IOperationAgent.cs               |   21 
 Main/System/Hero/HeroInfo.cs                                                   |   57 +
 Main/System/Team/TeamHero.State.cs                                             |   33 
 Main/Config/Configs/FaceConfig.cs                                              |    2 
 Main/Config/Configs/PriorLanguageConfig.cs                                     |    2 
 Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs              |   87 +
 Main/Config/Configs/HeroFetterConfig.cs                                        |    2 
 Main/System/Battle/Define.meta                                                 |    8 
 Main/Config/Configs/SysInfoConfig.cs                                           |    2 
 Main/Config/ConfigManager.cs                                                   |    8 
 Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs.meta |   11 
 Main/System/Battle/BattleObject/BattleObjectFactory.cs                         |   23 
 Main/System/Battle/Skill/SkillBase.cs.meta                                     |   11 
 Main/Config/Configs/NPCConfig.cs                                               |    2 
 Main/System/Battle/BattleField/BattleField.cs                                  |  136 ++
 Main/System/Battle/Skill/SkillFactory.cs.meta                                  |   11 
 Main/Utility/VesselExtension.cs                                                |   12 
 Main/Config/Configs/PlayerFaceStarConfig.cs.meta                               |   11 
 Main/Config/Configs/GmCmdConfig.cs                                             |    2 
 Main/Config/Configs/IconConfig.cs                                              |    2 
 Main/System/Battle/BattleField/OperationAgent/AIOperationAgent.cs.meta         |   11 
 Main/System/Battle/Define/SkillTargetType.cs                                   |   14 
 Main/Config/Configs/ItemConfig.cs                                              |    2 
 Main/Config/Configs/priorbundleConfig.cs                                       |    2 
 Main/Main.cs                                                                   |    3 
 Main/Config/Configs/FuncOpenLVConfig.cs                                        |    2 
 Main/System/Team/TeamBase.cs                                                   |   21 
 Main/Config/Configs/HeroQualityConfig.cs                                       |    2 
 Main/Config/Configs/TreasureCntAwardConfig.cs                                  |    2 
 Main/Config/Configs/HeroTalentConfig.cs                                        |    2 
 Main/System/Battle/BattleManager.cs                                            |   26 
 Main/System/Team/TeamHero.Properties.cs                                        |   57 +
 Main/System/Battle/Define/SkillTargetRangeType.cs.meta                         |   11 
 Main/System/Battle/RecordPlayer/RecordAction.cs                                |   18 
 Main/System/Battle/RecordPlayer/RecordPlayer.cs                                |   37 
 Main/System/Battle/BattleWin.cs.meta                                           |   11 
 Main/Config/Configs/DirtyNameConfig.cs                                         |    2 
 Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs.meta   |   11 
 Main/System/Battle/Define/SkillTargetRangeType.cs                              |   21 
 Main/System/Battle/BattleField/OperationAgent/IOperationAgent.cs.meta          |   11 
 131 files changed, 2,231 insertions(+), 381 deletions(-)

diff --git a/Main/Config/ConfigManager.cs b/Main/Config/ConfigManager.cs
index 273f00e..9574554 100644
--- a/Main/Config/ConfigManager.cs
+++ b/Main/Config/ConfigManager.cs
@@ -33,7 +33,7 @@
         isLoadFinished = false;
 
         // 鍔犺浇閰嶇疆鏂囦欢
-        int totalConfigs = 63;
+        int totalConfigs = 65;
         Type[] configTypes = new Type[] {
             typeof(AppointItemConfig),
             typeof(AudioConfig),
@@ -81,6 +81,8 @@
             typeof(OrderInfoConfig),
             typeof(PlayerFaceConfig),
             typeof(PlayerFacePicConfig),
+            typeof(PlayerFacePicStarConfig),
+            typeof(PlayerFaceStarConfig),
             typeof(PlayerLVConfig),
             typeof(PlayerPropertyConfig),
             typeof(priorbundleConfig),
@@ -286,6 +288,10 @@
         ClearConfigDictionary<PlayerFaceConfig>();
         // 娓呯┖ PlayerFacePicConfig 瀛楀吀
         ClearConfigDictionary<PlayerFacePicConfig>();
+        // 娓呯┖ PlayerFacePicStarConfig 瀛楀吀
+        ClearConfigDictionary<PlayerFacePicStarConfig>();
+        // 娓呯┖ PlayerFaceStarConfig 瀛楀吀
+        ClearConfigDictionary<PlayerFaceStarConfig>();
         // 娓呯┖ PlayerLVConfig 瀛楀吀
         ClearConfigDictionary<PlayerLVConfig>();
         // 娓呯┖ PlayerPropertyConfig 瀛楀吀
diff --git a/Main/Config/Configs/AppointItemConfig.cs b/Main/Config/Configs/AppointItemConfig.cs
index 331d65e..643617f 100644
--- a/Main/Config/Configs/AppointItemConfig.cs
+++ b/Main/Config/Configs/AppointItemConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/AudioConfig.cs b/Main/Config/Configs/AudioConfig.cs
index 0e5806b..e4540ba 100644
--- a/Main/Config/Configs/AudioConfig.cs
+++ b/Main/Config/Configs/AudioConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/CTGConfig.cs b/Main/Config/Configs/CTGConfig.cs
index 8c7a6fa..7a634f4 100644
--- a/Main/Config/Configs/CTGConfig.cs
+++ b/Main/Config/Configs/CTGConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/CTGSelectItemConfig.cs b/Main/Config/Configs/CTGSelectItemConfig.cs
index 779edb7..6206102 100644
--- a/Main/Config/Configs/CTGSelectItemConfig.cs
+++ b/Main/Config/Configs/CTGSelectItemConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/ChatBubbleBoxConfig.cs b/Main/Config/Configs/ChatBubbleBoxConfig.cs
index 491df6c..0502392 100644
--- a/Main/Config/Configs/ChatBubbleBoxConfig.cs
+++ b/Main/Config/Configs/ChatBubbleBoxConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�18鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/ChestsAwardConfig.cs b/Main/Config/Configs/ChestsAwardConfig.cs
index 583575e..c622f5c 100644
--- a/Main/Config/Configs/ChestsAwardConfig.cs
+++ b/Main/Config/Configs/ChestsAwardConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/ChestsConfig.cs b/Main/Config/Configs/ChestsConfig.cs
index e882a80..64bd72c 100644
--- a/Main/Config/Configs/ChestsConfig.cs
+++ b/Main/Config/Configs/ChestsConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/DailyLivenessRewardConfig.cs b/Main/Config/Configs/DailyLivenessRewardConfig.cs
index c0b1c08..848ac3a 100644
--- a/Main/Config/Configs/DailyLivenessRewardConfig.cs
+++ b/Main/Config/Configs/DailyLivenessRewardConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�18鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/DailyQuestConfig.cs b/Main/Config/Configs/DailyQuestConfig.cs
index b7f3917..c9e6967 100644
--- a/Main/Config/Configs/DailyQuestConfig.cs
+++ b/Main/Config/Configs/DailyQuestConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�18鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/DailyQuestOpenTimeConfig.cs b/Main/Config/Configs/DailyQuestOpenTimeConfig.cs
index 9c8539f..067e064 100644
--- a/Main/Config/Configs/DailyQuestOpenTimeConfig.cs
+++ b/Main/Config/Configs/DailyQuestOpenTimeConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�18鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/DienstgradConfig.cs b/Main/Config/Configs/DienstgradConfig.cs
index 1343779..7c0f977 100644
--- a/Main/Config/Configs/DienstgradConfig.cs
+++ b/Main/Config/Configs/DienstgradConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/DirtyNameConfig.cs b/Main/Config/Configs/DirtyNameConfig.cs
index fffd283..5551e4e 100644
--- a/Main/Config/Configs/DirtyNameConfig.cs
+++ b/Main/Config/Configs/DirtyNameConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Tuesday, June 17, 2025
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/DirtyWordConfig.cs b/Main/Config/Configs/DirtyWordConfig.cs
index 98b2377..2f10868 100644
--- a/Main/Config/Configs/DirtyWordConfig.cs
+++ b/Main/Config/Configs/DirtyWordConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/EffectConfig.cs b/Main/Config/Configs/EffectConfig.cs
index cce7f22..6cf5d89 100644
--- a/Main/Config/Configs/EffectConfig.cs
+++ b/Main/Config/Configs/EffectConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/EmojiPackConfig.cs b/Main/Config/Configs/EmojiPackConfig.cs
index f70d35d..369173e 100644
--- a/Main/Config/Configs/EmojiPackConfig.cs
+++ b/Main/Config/Configs/EmojiPackConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/EquipGSParamConfig.cs b/Main/Config/Configs/EquipGSParamConfig.cs
index 426109f..acd927b 100644
--- a/Main/Config/Configs/EquipGSParamConfig.cs
+++ b/Main/Config/Configs/EquipGSParamConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�17鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/EquipPlaceMapConfig.cs b/Main/Config/Configs/EquipPlaceMapConfig.cs
index f0fa345..4775e8d 100644
--- a/Main/Config/Configs/EquipPlaceMapConfig.cs
+++ b/Main/Config/Configs/EquipPlaceMapConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�17鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/FaceConfig.cs b/Main/Config/Configs/FaceConfig.cs
index 7cf29db..bbd01d1 100644
--- a/Main/Config/Configs/FaceConfig.cs
+++ b/Main/Config/Configs/FaceConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/FamilyConfig.cs b/Main/Config/Configs/FamilyConfig.cs
index c09d921..c9be850 100644
--- a/Main/Config/Configs/FamilyConfig.cs
+++ b/Main/Config/Configs/FamilyConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           Wednesday, June 18, 2025
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/FamilyEmblemConfig.cs b/Main/Config/Configs/FamilyEmblemConfig.cs
index a4a3fdf..8e223cb 100644
--- a/Main/Config/Configs/FamilyEmblemConfig.cs
+++ b/Main/Config/Configs/FamilyEmblemConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�18鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/FirstGoldConfig.cs b/Main/Config/Configs/FirstGoldConfig.cs
index 4d1cbff..6a4447b 100644
--- a/Main/Config/Configs/FirstGoldConfig.cs
+++ b/Main/Config/Configs/FirstGoldConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�15鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/FuncConfigConfig.cs b/Main/Config/Configs/FuncConfigConfig.cs
index 94b9c55..2d093ad 100644
--- a/Main/Config/Configs/FuncConfigConfig.cs
+++ b/Main/Config/Configs/FuncConfigConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/FuncOpenLVConfig.cs b/Main/Config/Configs/FuncOpenLVConfig.cs
index f61c80c..ff9cef5 100644
--- a/Main/Config/Configs/FuncOpenLVConfig.cs
+++ b/Main/Config/Configs/FuncOpenLVConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/FunctionTeamSetConfig.cs b/Main/Config/Configs/FunctionTeamSetConfig.cs
index d5dd0b1..2819d14 100644
--- a/Main/Config/Configs/FunctionTeamSetConfig.cs
+++ b/Main/Config/Configs/FunctionTeamSetConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/GetItemWaysConfig.cs b/Main/Config/Configs/GetItemWaysConfig.cs
index 9d47cb8..af31fba 100644
--- a/Main/Config/Configs/GetItemWaysConfig.cs
+++ b/Main/Config/Configs/GetItemWaysConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/GmCmdConfig.cs b/Main/Config/Configs/GmCmdConfig.cs
index 75cb94f..5a62577 100644
--- a/Main/Config/Configs/GmCmdConfig.cs
+++ b/Main/Config/Configs/GmCmdConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/GuideConfig.cs b/Main/Config/Configs/GuideConfig.cs
index a4b73de..d7d230f 100644
--- a/Main/Config/Configs/GuideConfig.cs
+++ b/Main/Config/Configs/GuideConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/HeroAwakeConfig.cs b/Main/Config/Configs/HeroAwakeConfig.cs
index 7365411..ea7db17 100644
--- a/Main/Config/Configs/HeroAwakeConfig.cs
+++ b/Main/Config/Configs/HeroAwakeConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�13鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/HeroBreakConfig.cs b/Main/Config/Configs/HeroBreakConfig.cs
index 490388f..1ffc811 100644
--- a/Main/Config/Configs/HeroBreakConfig.cs
+++ b/Main/Config/Configs/HeroBreakConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�13鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/HeroConfig.cs b/Main/Config/Configs/HeroConfig.cs
index 0d30f09..ebc43bf 100644
--- a/Main/Config/Configs/HeroConfig.cs
+++ b/Main/Config/Configs/HeroConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�16鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
@@ -24,6 +24,11 @@
 	public int HPInheritPer;
 	public string BatAttrDict;
 	public int[] FetterIDList;
+	public string Tachie;
+	public string SquareIcon;
+	public string RectangleIcon;
+	public string SpineRes;
+	public string BigSizeSpine;
 
     public override int LoadKey(string _key)
     {
@@ -80,6 +85,16 @@
 					 int.TryParse(FetterIDListStringArray[i],out FetterIDList[i]);
 				}
 			}
+
+			Tachie = tables[11];
+
+			SquareIcon = tables[12];
+
+			RectangleIcon = tables[13];
+
+			SpineRes = tables[14];
+
+			BigSizeSpine = tables[15];
         }
         catch (Exception exception)
         {
diff --git a/Main/Config/Configs/HeroFetterConfig.cs b/Main/Config/Configs/HeroFetterConfig.cs
index e1973a0..fdb2ad0 100644
--- a/Main/Config/Configs/HeroFetterConfig.cs
+++ b/Main/Config/Configs/HeroFetterConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�16鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/HeroQualityAwakeConfig.cs b/Main/Config/Configs/HeroQualityAwakeConfig.cs
index 590770d..b89b396 100644
--- a/Main/Config/Configs/HeroQualityAwakeConfig.cs
+++ b/Main/Config/Configs/HeroQualityAwakeConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�13鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/HeroQualityBreakConfig.cs b/Main/Config/Configs/HeroQualityBreakConfig.cs
index c61e147..8d7ab6a 100644
--- a/Main/Config/Configs/HeroQualityBreakConfig.cs
+++ b/Main/Config/Configs/HeroQualityBreakConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�13鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/HeroQualityConfig.cs b/Main/Config/Configs/HeroQualityConfig.cs
index 64ff313..af2ce0c 100644
--- a/Main/Config/Configs/HeroQualityConfig.cs
+++ b/Main/Config/Configs/HeroQualityConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�13鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/HeroSkinConfig.cs b/Main/Config/Configs/HeroSkinConfig.cs
index cd19f68..a46d967 100644
--- a/Main/Config/Configs/HeroSkinConfig.cs
+++ b/Main/Config/Configs/HeroSkinConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�13鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/HeroTalentConfig.cs b/Main/Config/Configs/HeroTalentConfig.cs
index 57851e6..eae288d 100644
--- a/Main/Config/Configs/HeroTalentConfig.cs
+++ b/Main/Config/Configs/HeroTalentConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�13鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/IconConfig.cs b/Main/Config/Configs/IconConfig.cs
index deafd07..7545724 100644
--- a/Main/Config/Configs/IconConfig.cs
+++ b/Main/Config/Configs/IconConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/InitialFunctionConfig.cs b/Main/Config/Configs/InitialFunctionConfig.cs
index c8b376d..283d2ef 100644
--- a/Main/Config/Configs/InitialFunctionConfig.cs
+++ b/Main/Config/Configs/InitialFunctionConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/ItemConfig.cs b/Main/Config/Configs/ItemConfig.cs
index 70e9cae..7b7e656 100644
--- a/Main/Config/Configs/ItemConfig.cs
+++ b/Main/Config/Configs/ItemConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/KickOutReasonConfig.cs b/Main/Config/Configs/KickOutReasonConfig.cs
index 90cad18..3ecb6d0 100644
--- a/Main/Config/Configs/KickOutReasonConfig.cs
+++ b/Main/Config/Configs/KickOutReasonConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/LanguageConfig.cs b/Main/Config/Configs/LanguageConfig.cs
index d6f476f..86c0f99 100644
--- a/Main/Config/Configs/LanguageConfig.cs
+++ b/Main/Config/Configs/LanguageConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/MailConfig.cs b/Main/Config/Configs/MailConfig.cs
index 14be290..fcae028 100644
--- a/Main/Config/Configs/MailConfig.cs
+++ b/Main/Config/Configs/MailConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/NPCConfig.cs b/Main/Config/Configs/NPCConfig.cs
index a19878b..b643e3b 100644
--- a/Main/Config/Configs/NPCConfig.cs
+++ b/Main/Config/Configs/NPCConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/NPCExConfig.cs b/Main/Config/Configs/NPCExConfig.cs
index fc8ac8e..3cd51a5 100644
--- a/Main/Config/Configs/NPCExConfig.cs
+++ b/Main/Config/Configs/NPCExConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/OrderInfoConfig.cs b/Main/Config/Configs/OrderInfoConfig.cs
index 42e9716..307a10f 100644
--- a/Main/Config/Configs/OrderInfoConfig.cs
+++ b/Main/Config/Configs/OrderInfoConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/PlayerFaceConfig.cs b/Main/Config/Configs/PlayerFaceConfig.cs
index 5e907ea..08995f7 100644
--- a/Main/Config/Configs/PlayerFaceConfig.cs
+++ b/Main/Config/Configs/PlayerFaceConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/PlayerFacePicConfig.cs b/Main/Config/Configs/PlayerFacePicConfig.cs
index b02a01e..404dbba 100644
--- a/Main/Config/Configs/PlayerFacePicConfig.cs
+++ b/Main/Config/Configs/PlayerFacePicConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/PlayerFacePicStarConfig.cs b/Main/Config/Configs/PlayerFacePicStarConfig.cs
new file mode 100644
index 0000000..681de9a
--- /dev/null
+++ b/Main/Config/Configs/PlayerFacePicStarConfig.cs
@@ -0,0 +1,74 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           Friday, June 27, 2025
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class PlayerFacePicStarConfig : ConfigBase<int, PlayerFacePicStarConfig>
+{
+
+    public int index;
+	public int FacePicID;
+	public int FacePicStar;
+	public int[][] StarUpNeedItemList;
+	public int[] StarAttrType;
+	public int[] StarAttrValue;
+
+    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 index); 
+
+			int.TryParse(tables[1],out FacePicID); 
+
+			int.TryParse(tables[2],out FacePicStar); 
+
+			StarUpNeedItemList = JsonMapper.ToObject<int[][]>(tables[3].Replace("(", "[").Replace(")", "]")); 
+
+			if (tables[4].Contains("["))
+			{
+				StarAttrType = JsonMapper.ToObject<int[]>(tables[4]);
+			}
+			else
+			{
+				string[] StarAttrTypeStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				StarAttrType = new int[StarAttrTypeStringArray.Length];
+				for (int i=0;i<StarAttrTypeStringArray.Length;i++)
+				{
+					 int.TryParse(StarAttrTypeStringArray[i],out StarAttrType[i]);
+				}
+			}
+
+			if (tables[5].Contains("["))
+			{
+				StarAttrValue = JsonMapper.ToObject<int[]>(tables[5]);
+			}
+			else
+			{
+				string[] StarAttrValueStringArray = tables[5].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				StarAttrValue = new int[StarAttrValueStringArray.Length];
+				for (int i=0;i<StarAttrValueStringArray.Length;i++)
+				{
+					 int.TryParse(StarAttrValueStringArray[i],out StarAttrValue[i]);
+				}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/PlayerFacePicStarConfig.cs.meta b/Main/Config/Configs/PlayerFacePicStarConfig.cs.meta
new file mode 100644
index 0000000..ece512d
--- /dev/null
+++ b/Main/Config/Configs/PlayerFacePicStarConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 71543467d1c8a4544b1e0441440327cb
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/Configs/PlayerFaceStarConfig.cs b/Main/Config/Configs/PlayerFaceStarConfig.cs
new file mode 100644
index 0000000..7690c58
--- /dev/null
+++ b/Main/Config/Configs/PlayerFaceStarConfig.cs
@@ -0,0 +1,74 @@
+锘�//--------------------------------------------------------
+//    [Author]:           YYL
+//    [  Date ]:           Friday, June 27, 2025
+//--------------------------------------------------------
+
+using System.Collections.Generic;
+using System.IO;
+using System.Threading;
+using System;
+using UnityEngine;
+using LitJson;
+
+public partial class PlayerFaceStarConfig : ConfigBase<int, PlayerFaceStarConfig>
+{
+
+    public int index;
+	public int FaceID;
+	public int FaceStar;
+	public int[][] StarUpNeedItemList;
+	public int[] StarAttrType;
+	public int[] StarAttrValue;
+
+    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 index); 
+
+			int.TryParse(tables[1],out FaceID); 
+
+			int.TryParse(tables[2],out FaceStar); 
+
+			StarUpNeedItemList = JsonMapper.ToObject<int[][]>(tables[3].Replace("(", "[").Replace(")", "]")); 
+
+			if (tables[4].Contains("["))
+			{
+				StarAttrType = JsonMapper.ToObject<int[]>(tables[4]);
+			}
+			else
+			{
+				string[] StarAttrTypeStringArray = tables[4].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				StarAttrType = new int[StarAttrTypeStringArray.Length];
+				for (int i=0;i<StarAttrTypeStringArray.Length;i++)
+				{
+					 int.TryParse(StarAttrTypeStringArray[i],out StarAttrType[i]);
+				}
+			}
+
+			if (tables[5].Contains("["))
+			{
+				StarAttrValue = JsonMapper.ToObject<int[]>(tables[5]);
+			}
+			else
+			{
+				string[] StarAttrValueStringArray = tables[5].Trim().Split(StringUtility.splitSeparator,StringSplitOptions.RemoveEmptyEntries);
+				StarAttrValue = new int[StarAttrValueStringArray.Length];
+				for (int i=0;i<StarAttrValueStringArray.Length;i++)
+				{
+					 int.TryParse(StarAttrValueStringArray[i],out StarAttrValue[i]);
+				}
+			}
+        }
+        catch (Exception exception)
+        {
+            Debug.LogError(exception);
+        }
+    }
+}
diff --git a/Main/Config/Configs/PlayerFaceStarConfig.cs.meta b/Main/Config/Configs/PlayerFaceStarConfig.cs.meta
new file mode 100644
index 0000000..c7311ca
--- /dev/null
+++ b/Main/Config/Configs/PlayerFaceStarConfig.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ccdffb3c82145e64cb12c26fccdfa818
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/Config/Configs/PlayerLVConfig.cs b/Main/Config/Configs/PlayerLVConfig.cs
index 42a8c16..788d647 100644
--- a/Main/Config/Configs/PlayerLVConfig.cs
+++ b/Main/Config/Configs/PlayerLVConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�25鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/PlayerPropertyConfig.cs b/Main/Config/Configs/PlayerPropertyConfig.cs
index 856601f..4aae232 100644
--- a/Main/Config/Configs/PlayerPropertyConfig.cs
+++ b/Main/Config/Configs/PlayerPropertyConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�17鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/PriorLanguageConfig.cs b/Main/Config/Configs/PriorLanguageConfig.cs
index 55e85fc..ca18099 100644
--- a/Main/Config/Configs/PriorLanguageConfig.cs
+++ b/Main/Config/Configs/PriorLanguageConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/RealmConfig.cs b/Main/Config/Configs/RealmConfig.cs
index 5fa4b44..03e53c1 100644
--- a/Main/Config/Configs/RealmConfig.cs
+++ b/Main/Config/Configs/RealmConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�25鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/RealmLVUPTaskConfig.cs b/Main/Config/Configs/RealmLVUPTaskConfig.cs
index 00e6964..f259861 100644
--- a/Main/Config/Configs/RealmLVUPTaskConfig.cs
+++ b/Main/Config/Configs/RealmLVUPTaskConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�25鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/RichTextMsgReplaceConfig.cs b/Main/Config/Configs/RichTextMsgReplaceConfig.cs
index 6a1317f..07e786f 100644
--- a/Main/Config/Configs/RichTextMsgReplaceConfig.cs
+++ b/Main/Config/Configs/RichTextMsgReplaceConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/RuleConfig.cs b/Main/Config/Configs/RuleConfig.cs
index 859e477..eedd912 100644
--- a/Main/Config/Configs/RuleConfig.cs
+++ b/Main/Config/Configs/RuleConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/SkillConfig.cs b/Main/Config/Configs/SkillConfig.cs
index cdf1a43..037b71b 100644
--- a/Main/Config/Configs/SkillConfig.cs
+++ b/Main/Config/Configs/SkillConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
@@ -80,17 +80,14 @@
 	public int ExAttr3;
 	public int ExAttr4;
 	public int ExAttr5;
-	public int WarnInfo;
-	public int CtrlActionID;
 	public int BuffEffectID;
 	public int EffectName;
 	public string IconName;
-	public string SkillNameIcon;
 	public string Description;
 	public string BuffDescription;
-	public string Skillsource;
 	public int Skillactmark;
 	public int BuffDisplay;
+	public int CastPosition;
 
     public override int LoadKey(string _key)
     {
@@ -236,27 +233,21 @@
 
 			int.TryParse(tables[66],out ExAttr5); 
 
-			int.TryParse(tables[67],out WarnInfo); 
+			int.TryParse(tables[67],out BuffEffectID); 
 
-			int.TryParse(tables[68],out CtrlActionID); 
+			int.TryParse(tables[68],out EffectName); 
 
-			int.TryParse(tables[69],out BuffEffectID); 
+			IconName = tables[69];
 
-			int.TryParse(tables[70],out EffectName); 
+			Description = tables[70];
 
-			IconName = tables[71];
+			BuffDescription = tables[71];
 
-			SkillNameIcon = tables[72];
+			int.TryParse(tables[72],out Skillactmark); 
 
-			Description = tables[73];
+			int.TryParse(tables[73],out BuffDisplay); 
 
-			BuffDescription = tables[74];
-
-			Skillsource = tables[75];
-
-			int.TryParse(tables[76],out Skillactmark); 
-
-			int.TryParse(tables[77],out BuffDisplay); 
+			int.TryParse(tables[74],out CastPosition); 
         }
         catch (Exception exception)
         {
diff --git a/Main/Config/Configs/StoreConfig.cs b/Main/Config/Configs/StoreConfig.cs
index 4864938..a56dd90 100644
--- a/Main/Config/Configs/StoreConfig.cs
+++ b/Main/Config/Configs/StoreConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/SuccessConfig.cs b/Main/Config/Configs/SuccessConfig.cs
index a55e25a..1c10cd5 100644
--- a/Main/Config/Configs/SuccessConfig.cs
+++ b/Main/Config/Configs/SuccessConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/SysInfoConfig.cs b/Main/Config/Configs/SysInfoConfig.cs
index 6ad80e9..db52954 100644
--- a/Main/Config/Configs/SysInfoConfig.cs
+++ b/Main/Config/Configs/SysInfoConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/TaskConfig.cs b/Main/Config/Configs/TaskConfig.cs
index 0dd4368..e2d2fea 100644
--- a/Main/Config/Configs/TaskConfig.cs
+++ b/Main/Config/Configs/TaskConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�26鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/TitleStarUpConfig.cs b/Main/Config/Configs/TitleStarUpConfig.cs
index abdb658..4e345d9 100644
--- a/Main/Config/Configs/TitleStarUpConfig.cs
+++ b/Main/Config/Configs/TitleStarUpConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/TreasureCntAwardConfig.cs b/Main/Config/Configs/TreasureCntAwardConfig.cs
index 0f7912d..0bb6253 100644
--- a/Main/Config/Configs/TreasureCntAwardConfig.cs
+++ b/Main/Config/Configs/TreasureCntAwardConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�17鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/TreasureItemLibConfig.cs b/Main/Config/Configs/TreasureItemLibConfig.cs
index 4d612b5..1a7d4f8 100644
--- a/Main/Config/Configs/TreasureItemLibConfig.cs
+++ b/Main/Config/Configs/TreasureItemLibConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�17鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
@@ -13,7 +13,8 @@
 public partial class TreasureItemLibConfig : ConfigBase<int, TreasureItemLibConfig>
 {
 
-    public int LibID;
+    public int ID;
+	public int LibID;
 	public int ItemID;
 	public int ItemCount;
 
@@ -27,11 +28,13 @@
     {
         try {
         string[] tables = input.Split('\t');
-        int.TryParse(tables[0],out LibID); 
+        int.TryParse(tables[0],out ID); 
 
-			int.TryParse(tables[1],out ItemID); 
+			int.TryParse(tables[1],out LibID); 
 
-			int.TryParse(tables[2],out ItemCount); 
+			int.TryParse(tables[2],out ItemID); 
+
+			int.TryParse(tables[3],out ItemCount); 
         }
         catch (Exception exception)
         {
diff --git a/Main/Config/Configs/TreasureSetConfig.cs b/Main/Config/Configs/TreasureSetConfig.cs
index afdf86c..f3b4f19 100644
--- a/Main/Config/Configs/TreasureSetConfig.cs
+++ b/Main/Config/Configs/TreasureSetConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�17鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/XBGetItemConfig.cs b/Main/Config/Configs/XBGetItemConfig.cs
index 5c947d4..db4d028 100644
--- a/Main/Config/Configs/XBGetItemConfig.cs
+++ b/Main/Config/Configs/XBGetItemConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�6鏈�17鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Config/Configs/priorbundleConfig.cs b/Main/Config/Configs/priorbundleConfig.cs
index 9223ecd..326426a 100644
--- a/Main/Config/Configs/priorbundleConfig.cs
+++ b/Main/Config/Configs/priorbundleConfig.cs
@@ -1,6 +1,6 @@
 锘�//--------------------------------------------------------
 //    [Author]:           YYL
-//    [  Date ]:           2025骞�5鏈�22鏃�
+//    [  Date ]:           Friday, June 27, 2025
 //--------------------------------------------------------
 
 using System.Collections.Generic;
diff --git a/Main/Main.cs b/Main/Main.cs
index abc05e0..38c6032 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -93,7 +93,8 @@
 
     public static void OnSwitchToLoginScene()
     {
-        ReleaseMgrs();
+        //  鍓嶉潰鏈夐噸鏂癐nitManagers浜� 杩欓噷灏变笉鍦ㄥ仛娓呴櫎
+        // ReleaseMgrs();
     }
 
     private static void ReleaseMgrs()
diff --git a/Main/Manager/UIManager.cs b/Main/Manager/UIManager.cs
index b7a1d14..a3bee2c 100644
--- a/Main/Manager/UIManager.cs
+++ b/Main/Manager/UIManager.cs
@@ -30,8 +30,13 @@
     private Transform loadingTrans;
 
     // UI瀛楀吀锛屽瓨鍌ㄦ墍鏈夊凡鍔犺浇鐨刄I锛岄敭涓篣I鍚嶇О锛屽�间负UI瀹炰緥
-    private Dictionary<string, List<UIBase>> uiDict = new Dictionary<string, List<UIBase>>();
-    
+#if UNITY_EDITOR
+    public
+#else
+    private
+#endif 
+    Dictionary<string, List<UIBase>> uiDict = new Dictionary<string, List<UIBase>>();
+
     // 瀛樺偍鍏抽棴浣嗘湭閿�姣佺殑UI锛岄敭涓篣I鍚嶇О锛屽�间负UI瀹炰緥
     private Dictionary<string, List<UIBase>> closedUIDict = new Dictionary<string, List<UIBase>>();
 
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 35b1bd5..f6ff0a6 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -1,22 +1,82 @@
 using System.Collections.Generic;
+using UnityEngine;
 
 public class BattleField
 {
-    public BattleMode battleMode;
-
     public BattleObjMgr battleObjMgr;
 
     public RecordPlayer recordPlayer;
 
+    public IOperationAgent operationAgent;
+
     public int round = 0;
+
+    public bool IsActive
+    {
+        get;
+        protected set;
+    }
+
+    public bool IsBattleFinish
+    {
+        get;
+        protected set;
+    }
+
+    public virtual bool IsPvp
+    {
+        get
+        {
+            return false;
+        }
+    }
+
+    private bool m_IsPause = false;
+
+    public bool IsPause
+    {
+        get
+        {
+            return m_IsPause;
+        }
+        protected set
+        {
+            m_IsPause = value;
+
+            if (m_IsPause)
+            {
+                PauseGame();
+            }
+            else
+            {
+                ResumeGame();
+            }
+        }
+    }
+
+    public BattleRootNode battleRootNode;
+
+    private BattleMode battleMode;
 
     public virtual void Init(TeamBase _redTeam, TeamBase _blueTeam)
     {
+        GameObject go = ResManager.Instance.LoadAsset<GameObject>("Battle/Prefabs", "BattleRootNode");
+        GameObject battleRootNodeGO = GameObject.Instantiate(go);
+        battleRootNode = battleRootNodeGO.GetComponent<BattleRootNode>();
+        battleRootNodeGO.name = this.GetType().Name;
+
         battleObjMgr = new BattleObjMgr();
-        battleObjMgr.Init(_redTeam, _blueTeam);
+        battleObjMgr.Init(this, _redTeam, _blueTeam);
 
         recordPlayer = new RecordPlayer();
         recordPlayer.Init(this);
+    }
+
+    //  鍦≧un涔嬪墠瑕佽缃畬姣� 瑕佸垱寤篈gent
+    public void SetBattleMode(BattleMode _battleMode)
+    {
+        battleMode = _battleMode;
+        CreateAgent();
     }
 
     public virtual void Release()
@@ -26,13 +86,47 @@
 
     public virtual void Run()
     {
+        if (IsPause)
+            return;
+
+        if (IsRoundReachLimit())
+        {
+            return;
+        }
+
         recordPlayer.Run();
         battleObjMgr.Run();
+
+        if (operationAgent == null)
+        {
+            Debug.LogError("you should SetBattleMode before Run");
+            return;
+        }
+
+        operationAgent.Run();
     }
 
-    public void SetBattleMode(BattleMode _battleMode)
+
+    protected virtual void CreateAgent()
     {
-        battleMode = _battleMode;
+        // Hand,//鎵嬪姩鎴樻枟
+        // Auto,//鑷姩鎴樻枟
+        // Record,//鎴樻姤
+        switch (battleMode)
+        {
+            case BattleMode.Hand:
+                operationAgent = new HandModeOperationAgent(this);
+                break;
+            case BattleMode.Auto:
+                operationAgent = new AutoModeOperationAgent(this);
+                break;
+            case BattleMode.Record:
+                operationAgent = new RecordModeOperationAgent(this);
+                break;
+            default:
+                operationAgent = new HandModeOperationAgent(this);
+                break;
+        }
     }
 
     public virtual void PlayRecord(RecordAction recordAction)
@@ -45,33 +139,21 @@
         recordPlayer.PlayRecord(recordList);
     }
 
-    public virtual void OnActionOver(int attackId)
-    {
-        //
-// 鎵嬪姩鎺ㄧ偣涓�涓嬪彂涓�涓寘 鏀朵竴涓寘 鎾斁涓�娆℃姤鏂� 涔嬪悗灏卞仠浣� 鐩村埌鎴樻枟缁撴潫鐨勫寘鏂�
-// 鑷姩鐨勮瘽 鑷姩鍙戝寘 鎾斁鎶ユ枃 鍚� 璇锋眰涓嬩竴涓寘 寰幆 鐩村埌鎴樻枟缁撴潫鐨勫寘鏂�
-// 鎴樻姤鎾斁灏辨槸涓�鐩存挱鏀炬垬鎶� 鐭ラ亾鎴樻枟缁撴潫鐨勫寘鏂�
-        if (battleMode == BattleMode.Auto)
-        {
-            // Request next action
-        }
-        else if (battleMode == BattleMode.Record)
-        {
-            // Play next record
-        }
-        else
-        {
-            // Wait for user input
-        }
-    }
-
-    public virtual void ResumeGame()
+    protected virtual void ResumeGame()
     {
         battleObjMgr.ResumeGame();
+        recordPlayer.ResumeGame();
     }
 
-    public virtual void PauseGame()
+    protected virtual void PauseGame()
     {
         battleObjMgr.PauseGame();
+        recordPlayer.PauseGame();
+    }
+
+    public bool IsRoundReachLimit()
+    {
+        // return round > xxx;
+        return false;
     }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/BattleRootNode.cs b/Main/System/Battle/BattleField/BattleRootNode.cs
new file mode 100644
index 0000000..22d5534
--- /dev/null
+++ b/Main/System/Battle/BattleField/BattleRootNode.cs
@@ -0,0 +1,14 @@
+using UnityEngine;
+using System.Collections.Generic;
+using UnityEngine.UI;
+
+public class BattleRootNode : MonoBehaviour
+{
+	public List<GameObject> redTeamNodeList = new List<GameObject>();
+
+	public List<GameObject> blueTeamNodeList = new List<GameObject>();
+
+	public RawImage imgBackground;
+
+
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/BattleRootNode.cs.meta b/Main/System/Battle/BattleField/BattleRootNode.cs.meta
new file mode 100644
index 0000000..764059f
--- /dev/null
+++ b/Main/System/Battle/BattleField/BattleRootNode.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7ff74171c89d45d46995ac2dd01acd80
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/OperationAgent.meta b/Main/System/Battle/BattleField/OperationAgent.meta
new file mode 100644
index 0000000..5388cee
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7659a019bc5e73b45b9d0cea3bba2e4a
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/OperationAgent/AIOperationAgent.cs b/Main/System/Battle/BattleField/OperationAgent/AIOperationAgent.cs
new file mode 100644
index 0000000..e0b29a3
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/AIOperationAgent.cs
@@ -0,0 +1,171 @@
+
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+
+// 鑷繁鎺ㄨ繘鎴樻枟鐨� Editor涓嬩娇鐢ㄥ氨濂�
+public class AIOperationAgent : IOperationAgent
+{
+
+	protected List<BattleObject> attackList = new List<BattleObject>();
+
+	public AIOperationAgent(BattleField _battleField) : base (_battleField)
+	{
+		
+	}
+
+	public override void Run()
+	{
+		base.Run();
+
+		bool isBattleBegin = battleField.round == 0 && attackList.Count <= 0;
+
+		bool isRoundBegin = attackList.Count <= 0;
+
+		if (attackList.Count <= 0 && !battleField.recordPlayer.IsPlaying())
+		{
+
+			// 鎴樻枟寮�濮嬪墠,鏍规嵁鍚勮嚜涓婇樀姝﹀皢鎴樺姏涔嬪拰鍐冲畾璋佷负鍏堟敾鏂�,鎴樺姏涔嬪拰楂樼殑涓哄厛鏀讳富,鍏堟敾鏂逛紭鍏堟敾鍑�,纭畾鍏堟敾鏂瑰悗寮�濮嬫垬鏂椼��
+
+
+			attackList.AddRange(battleField.battleObjMgr.redCampList);
+			attackList.AddRange(battleField.battleObjMgr.blueCampList);
+
+			// //	鎺掑簭 鎴樻枟鍔涢珮鐨勯潬鍓�
+			// attackList.Sort((a, b) => {
+			// 	int power1 = a.teamHero.GetPower();
+			// 	int power2 = b.teamHero.GetPower();
+			// 	return power2.CompareTo(power1);
+			// });
+
+			battleField.round++;
+		}
+
+		if (!battleField.recordPlayer.IsPlaying() && attackList.Count > 0)
+		{
+			List<RecordAction> playList = new List<RecordAction>();
+			if (isBattleBegin)
+			{
+				playList.AddRange(CreateBattleBeginActionList());
+			}
+			else
+			{
+				if (isRoundBegin)
+				{
+					playList.AddRange(CreateRoundBeginActionList());
+				}
+				else
+				{
+					playList.AddRange(CreateActions(attackList[0]));
+					attackList.RemoveAt(0);
+				}
+			}
+
+			battleField.recordPlayer.PlayRecord(playList);
+		}
+	}
+
+	protected List<RecordAction> CreateBattleBeginActionList()
+	{
+		//	鎴樻枟寮�濮嬪墠鐨勮疆娆$殑鎿嶄綔
+		List<RecordAction> returnList = new List<RecordAction>();
+		// attackList
+		return returnList;
+	}
+
+	protected List<RecordAction> CreateRoundBeginActionList()
+	{
+		//	姣忚疆寮�濮嬪墠鐨勬搷浣�
+		List<RecordAction> returnList = new List<RecordAction>();
+		// attackList
+		return returnList;
+	}
+
+	protected List<RecordAction> CreateActions(BattleObject _battleObj)
+	{
+		List<RecordAction> returnList = new List<RecordAction>();
+
+		List<RecordAction> beforeActionList = CreateBeforeActionActionList(_battleObj);
+		List<RecordAction> actionList = CreateActionList(_battleObj);
+		List<RecordAction> afterActionList = CreateAfterActionList(_battleObj);
+		List<RecordAction> afterDeathActionList = CreateAfterDeathActionList(_battleObj);
+
+		returnList.AddRange(beforeActionList);
+		returnList.AddRange(actionList);
+		returnList.AddRange(afterActionList);
+		returnList.AddRange(afterDeathActionList);
+
+		return returnList;
+	}
+
+	protected List<RecordAction> CreateBeforeActionActionList(BattleObject _battleObj)
+	{
+		// 瑙e紓甯� 鍔犲噺buff 
+		List<RecordAction> returnList = new List<RecordAction>();
+		return returnList;
+	}
+
+	protected List<RecordAction> CreateActionList(BattleObject _battleObj)
+	{
+		//	鏀炬妧鑳� 鎴栬�呰鐪╂檿
+		List<RecordAction> returnList = new List<RecordAction>();
+
+
+		// //	鑳借鍔�
+		// if (_battleObj.IsCanDoActions())
+		// {
+		// 	//	鑳芥斁鎶�鑳�
+		// 	if (_battleObj.IsCanCastSkill())
+		// 	{
+		// 		SkillRecordAction action = new SkillRecordAction(_battleObj.teamHero.heroInfo.heroConfig.AngerSkillID, 
+		// 			battleField, _battleObj);
+
+		// 		// 鍦ㄨ繖閲屼富鍔ㄥ仛涓�涓嬩激瀹宠绠� 姝e父閮芥槸鏈嶅姟鍣ㄧ粰鐨�
+
+
+		// 		returnList.Add(action);
+		// 	}
+		// 	else
+		// 	{
+		// 		//鏅敾
+		// 	}
+		// }
+		// else
+		// {
+		// 	//	涓嶈兘琛屽姩 椋樺瓧 杩�
+
+		// }
+
+		return returnList;
+	}
+
+	protected List<RecordAction> CreateAfterActionList(BattleObject _battleObj)
+	{
+		//	鍏朵粬瑙掕壊鍙兘鏈夎繛鎼烘敾鍑� 鏈夊彲鑳芥瘡鍥炲悎buff鏈変釜dot
+		List<RecordAction> returnList = new List<RecordAction>();
+		return returnList;
+	}
+
+	protected List<RecordAction> CreateAfterDeathActionList(BattleObject _battleObj)
+	{
+		//	澶嶆椿 缁欏叾浠栬鑹插姞buff涔嬬被鐨勬搷浣�
+		List<RecordAction> returnList = new List<RecordAction>();
+		return returnList;
+	}
+
+	protected void OnHeroDeath(BattleObject _battleObj)
+	{
+
+	}
+
+	protected void OnReviveHero(BattleObject _battleObj)
+	{
+
+	}
+
+	public override void DoNext()
+	{
+		base.DoNext();
+	}
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/OperationAgent/AIOperationAgent.cs.meta b/Main/System/Battle/BattleField/OperationAgent/AIOperationAgent.cs.meta
new file mode 100644
index 0000000..22e3c7a
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/AIOperationAgent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 90516a907f902eb4b9fd00896d54f896
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs b/Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs
new file mode 100644
index 0000000..b950d2c
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs
@@ -0,0 +1,35 @@
+using UnityEngine;
+
+
+public class AutoModeOperationAgent : IOperationAgent
+{
+	public AutoModeOperationAgent(BattleField battleField) : base(battleField)
+	{
+		
+	}
+
+	public override void Run()
+	{
+		if (!battleField.IsBattleFinish)
+		{
+			return;
+		}
+
+		base.Run();
+
+		if (!battleField.recordPlayer.IsPlaying())
+		{
+			DoNext();
+		}
+	}
+
+	public override void DoNext()
+	{
+		base.DoNext();
+
+		if (!battleField.recordPlayer.IsPlaying())
+		{
+			//	ask for next action
+		}
+	}
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs.meta b/Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs.meta
new file mode 100644
index 0000000..0177558
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3c8b7e2da006e7e4bb1274bb6818582c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs b/Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs
new file mode 100644
index 0000000..9216cdf
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs
@@ -0,0 +1,30 @@
+using UnityEngine;
+
+
+public class HandModeOperationAgent : IOperationAgent
+{
+	public HandModeOperationAgent(BattleField battleField) : base(battleField)
+	{
+		
+	}
+
+	public override void Run()
+	{
+		base.Run();
+	}
+
+	//	閫氳繃涓荤晫闈㈢殑鎸夐挳鎺ㄥ姩(璋冪敤)DoNext
+	public override void DoNext()
+	{
+		base.DoNext();
+
+		if (!battleField.recordPlayer.IsPlaying())
+		{
+			//	ask for next action
+		}
+		else
+		{
+			Debug.LogError("action doesnt finish, wait a moment please");
+		}
+	}
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs.meta b/Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs.meta
new file mode 100644
index 0000000..8c015d5
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4693561ca16ed084baf04d0e7734f77d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/OperationAgent/IOperationAgent.cs b/Main/System/Battle/BattleField/OperationAgent/IOperationAgent.cs
new file mode 100644
index 0000000..4a1f1aa
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/IOperationAgent.cs
@@ -0,0 +1,21 @@
+
+
+public class IOperationAgent
+{
+	protected BattleField battleField;
+
+	public IOperationAgent(BattleField _battleField)
+	{
+		battleField = _battleField;
+	}
+
+	public virtual void Run()
+	{
+
+	}
+
+	public virtual void DoNext()
+	{
+
+	}
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/OperationAgent/IOperationAgent.cs.meta b/Main/System/Battle/BattleField/OperationAgent/IOperationAgent.cs.meta
new file mode 100644
index 0000000..21e9f5e
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/IOperationAgent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 137d74c25e4a988499579eb125835572
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs b/Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs
new file mode 100644
index 0000000..e1e325e
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs
@@ -0,0 +1,21 @@
+using UnityEngine;
+
+//	record鐩存帴鍏ㄧ▼鎾斁灏卞ソ浜� 涓嶉渶瑕佸叾浠栨搷浣�
+
+public class RecordModeOperationAgent : IOperationAgent
+{
+	public RecordModeOperationAgent(BattleField battleField) : base(battleField)
+	{
+		
+	}
+
+	public override void Run()
+	{
+		base.Run();
+	}
+
+	public override void DoNext()
+	{
+		base.DoNext();
+	}
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs.meta b/Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs.meta
new file mode 100644
index 0000000..13a7549
--- /dev/null
+++ b/Main/System/Battle/BattleField/OperationAgent/RecordModeOperationAgent.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 53b0f76e227371a46bc723a879c9953e
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/RecordActions.meta b/Main/System/Battle/BattleField/RecordActions.meta
new file mode 100644
index 0000000..81a4a11
--- /dev/null
+++ b/Main/System/Battle/BattleField/RecordActions.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 919949b557d0dc44ea63f47262263f21
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
new file mode 100644
index 0000000..80e4092
--- /dev/null
+++ b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs
@@ -0,0 +1,87 @@
+using UnityEngine;
+using System.Collections.Generic;
+
+public class SkillRecordAction : RecordAction
+{
+	public int SkillId;
+
+	public SkillConfig skillConfig;
+
+	protected SkillBase skillBase;
+
+	protected List<Dictionary<int, List<int>>> damageList = new List<Dictionary<int, List<int>>>();
+	
+	private bool isCast = false;
+
+
+	public SkillRecordAction(int _SkillId, BattleField _battleField, BattleObject _battleObj)
+		: base(RecordActionType.Skill, _battleField, _battleObj)
+	{
+		SkillId = _SkillId;
+
+		skillConfig = SkillConfig.Get(SkillId);
+
+		if (null == skillConfig)
+		{
+			Debug.LogError("鎵句笉鍒版妧鑳介厤缃� " + SkillId);
+		}
+
+		skillBase = SkillFactory.CreateSkill(skillConfig);
+
+		// _battleObj浣跨敤浜哠killId鐨勬妧鑳�
+		damageList = skillBase.GetDamageList(battleObject, battleField);
+	}
+
+	public SkillRecordAction(int _SkillId, BattleField _battleField, BattleObject _battleObj, List<Dictionary<int, List<int>>> _damageList)
+		: base(RecordActionType.Skill, _battleField, _battleObj)
+	{
+		SkillId = _SkillId;
+
+		skillConfig = SkillConfig.Get(SkillId);
+
+		if (null == skillConfig)
+		{
+			Debug.LogError("鎵句笉鍒版妧鑳介厤缃� " + SkillId);
+		}
+
+		skillBase = SkillFactory.CreateSkill(skillConfig);
+
+		damageList = _damageList;
+		// _battleObj浣跨敤浜哠killId鐨勬妧鑳�
+	}
+
+	public override bool IsFinished()
+	{
+		return skillBase.IsFinished();
+	}
+
+
+    public override void Run()
+    {
+        base.Run();
+
+		if (null == skillBase)
+		{
+			return;
+		}
+
+		if (!skillBase.IsFinished())
+		{
+			skillBase.Run();
+		}
+
+		if (isCast)
+			return;
+
+		if (damageList.Count > 0)
+		{
+			skillBase.Cast(battleObject, battleField, damageList);
+		}
+		else
+		{
+			skillBase.ForceFinished();
+		}
+
+		isCast = true;
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs.meta b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs.meta
new file mode 100644
index 0000000..8e43083
--- /dev/null
+++ b/Main/System/Battle/BattleField/RecordActions/SkillRecordAction.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c72895dea8c70844c9019d54023fbeb0
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/BattleField/StoryBattleField.cs b/Main/System/Battle/BattleField/StoryBattleField.cs
index c5434f4..d65b54e 100644
--- a/Main/System/Battle/BattleField/StoryBattleField.cs
+++ b/Main/System/Battle/BattleField/StoryBattleField.cs
@@ -6,15 +6,22 @@
 {
     public override void Init(TeamBase _redTeam, TeamBase _blueTeam)
     {
+        base.Init(_redTeam, _blueTeam);
+
         string savedStr = LocalSave.GetString("StoryBattleFieldBattleMode");
         if (string.IsNullOrEmpty(savedStr))
         {
             savedStr = "Hand";
         }
-        battleMode = (BattleMode)Enum.Parse(typeof(BattleMode), savedStr);
-
-        base.Init(_redTeam, _blueTeam);
-
+        SetBattleMode((BattleMode)Enum.Parse(typeof(BattleMode), savedStr));
     }
 
+    // public override void Run()
+    // {
+    //     //  涓�瀹氳璁颁綇杩欎釜
+    //     if (IsPause)
+    //         return;
+
+    //     base.Run();
+    // }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleManager.cs b/Main/System/Battle/BattleManager.cs
index 017432e..054f5ae 100644
--- a/Main/System/Battle/BattleManager.cs
+++ b/Main/System/Battle/BattleManager.cs
@@ -5,18 +5,24 @@
 
 public class BattleManager : GameSystemManager<BattleManager>
 {
-    public StoryBattleField storyBattleField = new StoryBattleField();//涓荤嚎鎴樺満
+    public StoryBattleField storyBattleField = null;
 
     protected Dictionary<int, BattleField> battleFields = new Dictionary<int, BattleField>();
+
+    protected LogicUpdate logicUpdate = new LogicUpdate();
 
     public override void Init()
     {
         base.Init();
+        StartStoryBattle();
+        logicUpdate.Start(Run);
     }
 
     public override void Release()
     {
+        Debug.LogError("who release this one");
         base.Release();
+        logicUpdate.Destroy();
     }
 
     public void StartStoryBattle()
@@ -25,9 +31,27 @@
         {
             storyBattleField = new StoryBattleField();
 
+            TeamBase redTeam = GetStoryTeam();//TeamManager.Instance.GetTeam(TeamType.Story);
+            TeamBase blueTeam = GetStoryTeam();
+            storyBattleField.Init(/*杩欓噷瑕佸姞涓垱寤鸿儗鏅殑*/redTeam, blueTeam);
+            // storyBattleField.Start();
+            storyBattleField.battleRootNode.transform.SetParent(Launch.Instance.transform);
         }
     }
 
+    private TeamBase GetStoryTeam()
+    {
+        TeamBase teamBase = new TeamBase();
+        #if UNITY_EDITOR
+        teamBase.FillWithFakeData();
+        #else
+        //  YYL TODO
+        //  鏍规嵁閰嶈〃濉炶嫳闆� 鍚庨潰鍙兘杩樿濉炲叾浠栦笢瑗� 鍏堟斁鍦ㄨ繖閲屽弽姝� 鍋氫富绾夸簡鍐嶈浆绉�
+        #endif
+
+        return teamBase;
+    }
+
     public void Run()
     {
         if (null != storyBattleField)
diff --git a/Main/System/Battle/BattleObject/BattleObjMgr.cs b/Main/System/Battle/BattleObject/BattleObjMgr.cs
index 8a95deb..ec938e1 100644
--- a/Main/System/Battle/BattleObject/BattleObjMgr.cs
+++ b/Main/System/Battle/BattleObject/BattleObjMgr.cs
@@ -2,21 +2,28 @@
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
+using System.Linq;
 
-public class BattleObjMgr : Singleton<BattleObjMgr>
+public class BattleObjMgr
 {
-    private List<BattleObject> redCampList => new List<BattleObject>(redCampDict.Values);
-    private List<BattleObject> blueCampList => new List<BattleObject>(blueCampDict.Values);
+    //  姝讳骸涓嶅彲浠ュ皢BattleObject绉诲嚭瀛楀吀/鍒楄〃
+    public List<BattleObject> redCampList => new List<BattleObject>(redCampDict.Values);
+    public List<BattleObject> blueCampList => new List<BattleObject>(blueCampDict.Values);
     private Dictionary<int, BattleObject> redCampDict = new Dictionary<int, BattleObject>();
     private Dictionary<int, BattleObject> blueCampDict = new Dictionary<int, BattleObject>();
 
-    public void Init(TeamBase _redTeam, TeamBase _blueTeam)
+    protected Dictionary<int, BattleObject> allBattleObjDict = new Dictionary<int, BattleObject>();
+
+    protected BattleField battleField;
+
+    public void Init(BattleField _battleField, TeamBase _redTeam, TeamBase _blueTeam)
     {
-        CreateTeam(redCampDict, _redTeam);
-        CreateTeam(blueCampDict, _blueTeam);
+        battleField = _battleField;
+        CreateTeam(battleField.battleRootNode.redTeamNodeList, redCampDict, _redTeam, BattleCamp.Red);
+        CreateTeam(battleField.battleRootNode.blueTeamNodeList, blueCampDict, _blueTeam, BattleCamp.Blue);
     } 
 
-    protected void CreateTeam(Dictionary<int, BattleObject> campDict, TeamBase teamBase)
+    protected void CreateTeam(List<GameObject> posNodeList, Dictionary<int, BattleObject> campDict, TeamBase teamBase, BattleCamp _Camp)
     {
         DestroyTeam(campDict);
         for (int i = 0; i < teamBase.teamHeros.Length; i++)
@@ -24,11 +31,20 @@
             TeamHero teamHero = teamBase.teamHeros[i];
             if (teamHero != null)
             {
-                BattleObject battleObj = BattleObjectFactory.CreateBattleObject(teamHero);
-                battleObj.Init(teamHero);
+                BattleObject battleObj = BattleObjectFactory.CreateBattleObject(battleField, posNodeList, teamHero, _Camp);
+                allBattleObjDict.Add(battleObj.BattleObjectId, battleObj);
                 campDict.Add(teamHero.heroIndex, battleObj);
             }
         }
+    }
+    
+    public BattleObject GetBattleObject(int battleObjId)
+    {
+        if (allBattleObjDict.TryGetValue(battleObjId, out BattleObject battleObj))
+        {
+            return battleObj;
+        }
+        return null;
     }
 
     protected void DestroyTeam(Dictionary<int, BattleObject> campDict)
@@ -36,12 +52,14 @@
         foreach (var item in campDict)
         {
             BattleObject battleObj = item.Value;
-            if (battleObj!= null)
+            if (battleObj != null)
             {
-                BattleObjectFactory.DestroyBattleObject(battleObj);
+                allBattleObjDict.Remove(battleObj.BattleObjectId);
+                BattleObjectFactory.DestroyBattleObject(item.Key, battleObj);
             }
         }
         campDict.Clear();
+
     }
 
     public void Release()
@@ -55,7 +73,6 @@
         foreach (var item in redCampDict)
         {
             item.Value.Run();
-            
         }
 
         foreach (var item in blueCampDict)
@@ -64,29 +81,166 @@
         }
     }
 
-    public void ResumeGame()
+    public virtual void ResumeGame()
     {
-        foreach (var item in redCampList)
+        foreach (var obj in redCampDict.Values)
         {
-            item.ResumeGame();
+            obj.Resume();
         }
 
-        foreach (var item in blueCampList)
+        foreach(var obj in blueCampDict.Values)
         {
-            item.ResumeGame();
+            obj.Resume();
         }
     }
 
-    public void PauseGame()
+    public virtual void PauseGame()
     {
-        foreach (var item in redCampList)
+        foreach (var obj in redCampDict.Values)
         {
-            item.PauseGame();
+            obj.Pause();
         }
 
-        foreach (var item in blueCampList)
+        foreach(var obj in blueCampDict.Values)
         {
-            item.PauseGame();
+            obj.Pause();
         }
     }
+
+    public List<BattleObject> GetEnemyList(BattleObject _battleObj)
+    {
+        if (_battleObj.Camp == BattleCamp.Red)
+        {
+            return blueCampList;
+        }
+
+        return redCampList;
+    }
+
+    public List<BattleObject> GetFriendlyList(BattleObject _battleObj)
+    {
+        if (_battleObj.Camp == BattleCamp.Red)
+        {
+            return redCampList;
+        }
+
+        return blueCampList;
+    }
+
+#if UNITY_EDITOR
+    public void ReviveAll()
+    {
+        foreach (var kv in allBattleObjDict)
+        {
+            kv.Value.EditorRevive();
+        }
+    }
+
+    public List<BattleObject> GetTargetList(BattleObject battleObj, SkillTargetType targetType, SkillTargetRangeType rangeType)
+    {
+        List<BattleObject> returnList = new List<BattleObject>();
+
+        switch (targetType)
+        {
+            case SkillTargetType.Self:
+                returnList.Add(battleObj);
+                break;
+            case SkillTargetType.Own:
+                returnList.AddRange(GetFriendlyList(battleObj));
+                break;
+            case SkillTargetType.Enemy:
+                returnList.AddRange(GetEnemyList(battleObj));
+                break;
+            case SkillTargetType.OwnExceptSelf:
+                List<BattleObject> friendlyList = GetFriendlyList(battleObj);
+                friendlyList.Remove(battleObj);
+                returnList.AddRange(friendlyList);
+                break;
+            default:
+                break;
+        }
+
+        //鏅敾涓虹兢鏀绘椂,浠ュ綋鍓嶅崟浣撴椂榛樿鏀诲嚮瀵硅薄涓轰富瀵硅薄,鍏跺畠涓烘簠灏勫崟浣嶏紱
+
+        switch (rangeType)
+        {
+            case SkillTargetRangeType.Front:
+                //鏆傛椂娌℃湁鍙敜鐗�
+                // 鏀惧湪绗�7鏍肩殑BOSS鍚庢帓鐨勩�傘�備綅缃斁鍦ㄦ涓棿
+                // a)鍓嶆帓,1銆�2銆�3鍙蜂负鍓嶆帓,鍓嶆帓鍏ㄩ儴闃典骸鍚�,4銆�5銆�6鍙峰嵆鏄墠鎺掍篃鏄悗鎺� 7鍏跺疄涔熸槸鍚庢帓
+                List<BattleObject> frontList = new List<BattleObject>(from BO in returnList where BO.teamHero.heroIndex < 3 && !BO.IsDead() select BO);
+                if (frontList.Count == 0)
+                {
+                    frontList.AddRange(returnList);
+                }
+                returnList = frontList;                
+                break;
+            case SkillTargetRangeType.Back:
+                List<BattleObject> backList = new List<BattleObject>(from BO in returnList where BO.teamHero.heroIndex >= 3 && !BO.IsDead() select BO);
+                if (backList.Count == 0)
+                {
+                    backList.AddRange(returnList);
+                }
+                returnList = backList;     
+                break;
+            case SkillTargetRangeType.Random:
+
+                int randomNumber = 3;
+                returnList = new List<BattleObject>(from BO in returnList where !BO.IsDead() select BO);
+                returnList = returnList.Shuffle();
+                while (returnList.Count > randomNumber)
+                {
+                    returnList.RemoveAt(0);
+                }
+                break;
+            case SkillTargetRangeType.All:
+                break;
+            case SkillTargetRangeType.HighestAttack:
+                returnList = new List<BattleObject>(from BO in returnList where !BO.IsDead() select BO);
+                BattleObject mostHighestAttckObj = null;
+                for (int i = 0; i < returnList.Count; i++)
+                {
+                    if (mostHighestAttckObj == null)
+                    {
+                        mostHighestAttckObj = returnList[i];
+                        continue;
+                    }
+                    if (returnList[i].teamHero.attack > mostHighestAttckObj.teamHero.attack)
+                    {
+                        mostHighestAttckObj = returnList[i];
+                    }
+                }
+                returnList.Clear();
+                if (mostHighestAttckObj != null)
+                    returnList.Add(mostHighestAttckObj);
+                break;
+            case SkillTargetRangeType.LowestHP:
+                returnList = new List<BattleObject>(from BO in returnList where !BO.IsDead() select BO);
+                BattleObject loweastHpObj = null;
+                for (int i = 0; i < returnList.Count; i++)
+                {
+                    if (loweastHpObj == null)
+                    {
+                        loweastHpObj = returnList[i];
+                        continue;
+                    }
+                    if (returnList[i].teamHero.curHp < loweastHpObj.teamHero.curHp)
+                    {
+                        loweastHpObj = returnList[i];
+                    }
+                }
+                returnList.Clear();
+                if (null != loweastHpObj)
+                    returnList.Add(loweastHpObj);
+                break;
+            case SkillTargetRangeType.Deadman:
+                returnList = new List<BattleObject>(from BO in returnList where BO.IsDead() select BO);
+                break;
+            default:
+                break;
+        }
+
+        return returnList;
+    }
+#endif
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index 42caec7..b4f0057 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -5,11 +5,14 @@
 using DG.Tweening;
 using DG.Tweening.Core;
 using DG.Tweening.Plugins.Options;
+using Spine.Unity;
+using UnityEngine.UI;
+using System.Linq;
 
 public enum BattleCamp
 {
-    Friendly,
-    Enemy
+    Red,
+    Blue
 }
 
 public enum BattleState
@@ -25,141 +28,360 @@
 
 public class BattleObject
 {
-    public string BattleObjectId { get; protected set; }
-    
-    public BattleCamp Camp { get; protected set; } = BattleCamp.Friendly;
-    
+    public BattleField battleField;
+
+    public int BattleObjectId { get; set; }
+
+    public BattleCamp Camp { get; protected set; }
+
     public TeamHero teamHero { get; protected set; }
+
+    // public BuffMgr buffMgr;
 
     protected MotionBase motionBase;
 
-    protected GameObject cardGO;
-    
-    public virtual void Init(TeamHero _teamHero)
+    protected GameObject heroGo;
+
+    public BattleObject(BattleField _battleField)
     {
-        this.teamHero = _teamHero;
+        battleField = _battleField;
+    }
+
+    public virtual void Init(GameObject _heroGo, TeamHero _teamHero, BattleCamp _camp)
+    {
+        heroGo = _heroGo;
+        teamHero = _teamHero;
+        Camp = _camp;
         motionBase = new MotionBase();
+        motionBase.Init(heroGo.GetComponentInChildren<SkeletonGraphic>(true));
     }
 
-    protected void LoadHero()
-    {
-        
-    }
-    
-    
-    #region 鎴樻枟鐩稿叧鍑芥暟
-    
-    public virtual void AttackTarget(List<BattleObject> targets)
-    {
-        // 鎵剧鑷繁鏈�杩戠殑
 
-        if (0 == targets.Count) return;
-
-        BattleObject target = targets[0];
-
-        if (1 != targets.Count)
-        {
-            for (int i = 1; i < targets.Count; i++)
-            {
-                if (Vector3.Distance(cardGO.transform.position, targets[i].cardGO.transform.position) < Vector3.Distance(cardGO.transform.position, target.cardGO.transform.position))
-                {
-                    target = targets[i];
-                }
-            }
-        }
-
-        Vector3 tempPos = cardGO.transform.position;
-
-        motionBase.OnAttackAnimationComplete = () => {
-            // 鏀诲嚮鍔ㄧ敾缁撴潫涔嬪悗 鍥炲埌鍘熸潵鐨勪綅缃�
-
-            cardGO.transform.DOMove(tempPos, 1f).OnComplete(() => {
-                // motionBase.ClearEvent();// = null;
-
-                //  閫氱煡鏈鏀诲嚮琛屽姩缁撴潫
-                //  閫氳繃battleFieldId鏉ュ憡鐭attleFieldMgr
-            });  
-        };
-
-        cardGO.transform.DOMove(target.cardGO.transform.position, 1f).OnComplete(() => {
-            // 鎾斁鏀诲嚮鍔ㄧ敾
-            motionBase.OnAttackHitEvent = (int attackIndex) => {
-                for (int i = 0; i < targets.Count; i++)
-                {
-                    targets[i].UnderAttack(this);
-                }
-            };
-
-            //鏅敾鏄痟it1
-
-            motionBase.PlayAnimationEx(MotionName.atk1, false, new List<int>(){
-                5//鍋囪鏄�5甯� 鐩墠杩樻病鏈夋暟鎹�
-            });
-        });
-    }
-
-    public virtual void CastSkill(List<BattleObject> targets)
-    {
-        //  闇�涓嶉渶瑕乵ove 鏀诲嚮鐩爣鏄皝 
-    }
-    
-    public virtual float UnderAttack(BattleObject attacker)
-    {
-        return 0;
-    }
-    
-    public virtual float HealTargets(List<BattleObject> targets)
-    {
-        return 0;
-    }
-    
-    public virtual float BeHealed(BattleObject healer, float healAmount)
-    {
-        return 0;
-    }
-    
-    public virtual bool Revive(BattleObject target)
-    {
-        return false;
-    }
-    
-    public virtual bool BeRevived(BattleObject reviver, float healthPercent = 0.5f)
-    {
-        return false;
-    }
-    
-    #endregion
-    
-    #region 杈呭姪鍑芥暟
-    
-    public virtual bool IsEnemy(BattleObject other)
-    {
-        if (other == null) return false;
-        
-        return Camp != other.Camp;
-    }
-    
-    public virtual bool IsFriendly(BattleObject other)
-    {
-        if (other == null) return false;
-        
-        return Camp == other.Camp;
-    }
 
     public virtual void Run()
     {
         motionBase.Run();
     }
 
-    public virtual void PauseGame()
+    public virtual void Pause()
     {
-        
+        motionBase.Pause();
     }
 
-    public virtual void ResumeGame()
+    public virtual void Resume()
     {
-        
+        motionBase.Resume();
     }
 
-    #endregion
+    public virtual void Destroy()
+    {
+        if (heroGo != null)
+        {
+            GameObject.DestroyImmediate(heroGo);
+            heroGo = null;
+        }
+
+        motionBase.Release();
+        motionBase = null;
+        teamHero = null;
+        BattleObjectId = 0;
+    }
+
+    //  鐪╂檿
+    public bool IsStunned()
+    {
+        return teamHero.isStunned;
+    }
+
+    //  鍐板喕
+    public bool IsFrozen()
+    {
+        return teamHero.isFrozen;
+    }
+
+    //  鐭冲寲
+    public bool IsStoned()
+    {
+        return teamHero.isStoned;
+    }
+
+    // //   绂侀敘
+    // public bool IsConfined()
+    // {
+    //     return false;
+    // }
+
+    //  琚矇榛�
+    public bool IsSlient()
+    {
+        return teamHero.isSlient;
+    }
+
+    //  琚即姊�
+    public bool IsDisarmed()
+    {
+        return teamHero.isDisarmed;
+    }
+
+    //  鏄惁鏃犳晫
+    public bool IsInvincable()
+    {
+        return teamHero.isInvinceble;
+    }
+
+    //  鏄惁姝讳骸
+    public bool IsDead()
+    {
+        return teamHero.isDead;
+    }
+
+    //  鏄惁琚帶浣忎簡
+    public bool IsCrowdControlled()
+    {
+        return IsStunned() || IsStoned() || IsFrozen();
+    }
+
+    public virtual bool IsCanCastSkill()
+    {
+        //  琚帶浣�
+        if (IsCrowdControlled())
+        {
+            return false;
+        }
+
+        //  琚矇榛�
+        if (IsSlient())
+        {
+            return false;
+        }
+
+        //  鐪嬬湅鎬掓皵鏄惁杈惧埌閲婃斁瑕佹眰
+        return teamHero.rage >= 100;
+    }
+
+    public virtual bool IsCanNormalAttack()
+    {
+        //  琚帶浣�
+        if (IsCrowdControlled())
+        {
+            return false;
+        }
+
+        //  缂存
+        if (IsDisarmed())
+        {
+            return false;
+        }
+
+        return true;
+    }
+    
+    public virtual void TakeDamage(List<int> damageValues)
+    {
+        if (IsDead())
+            return;
+
+        PopDamage(damageValues);
+
+        motionBase.PlayAnimation(MotionName.hit, false);
+
+        //  璁$畻浼ゅ
+        int totalDamage = 0;
+        foreach (var damage in damageValues)
+        {
+            totalDamage += damage;
+        }
+
+        //  鎵h
+        teamHero.curHp -= totalDamage;
+
+        //  鍏跺疄杩欓噷搴旇鏄瓑鏈嶅姟鍣ㄥ彂death鐨刟ction
+        // if (IsDead())
+        // {
+        //     OnDeath();
+        // }
+    }
+
+    //  闂伩寮�濮�
+    public virtual void OnDodgeBegin()
+    {
+        float pingpongTime = 0.2f;
+        RectTransform rectTrans = heroGo.GetComponent<RectTransform>();
+        rectTrans.DOAnchorPos(new Vector3(-50, 50, 0), pingpongTime)
+            .SetEase(Ease.OutCubic);
+    }
+
+    //  闂伩缁撴潫
+    public virtual void OnDodgeEnd()
+    {
+        float pingpongTime = 0.2f;
+        RectTransform rectTrans = heroGo.GetComponent<RectTransform>();
+        rectTrans.DOAnchorPos(Vector3.zero, pingpongTime)
+                            .SetEase(Ease.OutCubic);
+    }
+
+    protected virtual void OnDeath()
+    {
+        motionBase.OnOtherAnimationComplete = OnOtherAnimationComplete;
+        motionBase.PlayAnimation(MotionName.dead, false);
+    }
+
+    protected virtual void OnOtherAnimationComplete(MotionName motionName)
+    {
+        if (motionName == MotionName.dead)
+        {
+            OnDeadAnimationComplete();
+        }
+    }
+
+    protected virtual void OnDeadAnimationComplete()
+    {
+        //  鎴栬鐪嬬湅婧惰В鐗规晥锛� YYL TODO
+        heroGo.SetActive(false);
+    }
+
+     // 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
+    protected virtual void PopDamage(List<int> damageValues)
+    {
+        //  鍏跺疄搴旇閫氱煡鍑哄幓缁橴I鐣岄潰瑙h�� 璁︰I鐣岄潰鑷繁鏉ユ樉绀虹殑 YYL TODO
+        //  鎾斁浼ゅ鏁板瓧
+        //  杩欓噷鍙互瀹炵幇涓�涓激瀹虫暟瀛楃殑寮瑰嚭鏁堟灉
+        //  姣斿浣跨敤涓�涓猆I缁勪欢鏉ユ樉绀轰激瀹虫暟瀛�
+        foreach (var damage in damageValues)
+        {
+            Debug.Log($"Damage: {damage}");
+        }
+    }
+
+    public void PlaySkill(SkillConfig skillConfig, List<Dictionary<int, List<int>>> damageList, Action _onComplete)
+    {
+        bool moveToTarget = true;
+
+        if (moveToTarget)
+        {
+            int targetId = damageList[0].First().Key;
+            BattleObject _targetObj = battleField.battleObjMgr.GetBattleObject(targetId);
+
+            RectTransform selfRect = heroGo.GetComponent<RectTransform>();
+            RectTransform targetRect = _targetObj.heroGo.GetComponent<RectTransform>();
+            Vector2 curAnchoredPos = selfRect.anchoredPosition;
+
+            MoveToTargetUI(selfRect, targetRect, new Vector2(100f, 0f), () =>
+            {
+                PlaySkillAnimation(skillConfig, damageList, () =>
+                {
+                    // 鍥炲埌鍘熶綅缃�
+                    selfRect.DOAnchorPos(curAnchoredPos, 0.2f)
+                        .SetEase(Ease.Linear)
+                        .OnComplete(() => {
+                            _onComplete?.Invoke();
+                        });
+                });
+            });
+        }
+        else
+        {
+            PlaySkillAnimation(skillConfig, damageList, _onComplete);
+        }
+    }
+
+    protected void MoveToTargetUI(RectTransform selfRect, RectTransform targetRect, Vector2 offset, Action _onComplete)
+    {
+        // 1. 鐩爣鐨勬湰鍦板潗鏍囪浆涓轰笘鐣屽潗鏍�
+        Vector3 targetWorldPos = targetRect.TransformPoint(targetRect.anchoredPosition + offset);
+
+        // 2. 涓栫晫鍧愭爣杞负鑷繁鐖惰妭鐐逛笅鐨勬湰鍦板潗鏍�
+        RectTransform parentRect = selfRect.parent as RectTransform;
+        Vector2 targetAnchoredPos;
+        RectTransformUtility.ScreenPointToLocalPointInRectangle(
+            parentRect,
+            RectTransformUtility.WorldToScreenPoint(null, targetWorldPos),
+            null,
+            out targetAnchoredPos);
+
+        // 3. DOTween 绉诲姩
+        selfRect.DOAnchorPos(targetAnchoredPos, 0.2f)
+            .SetEase(Ease.Linear)
+            .OnComplete(() => _onComplete?.Invoke());
+    }
+
+
+    protected void PlaySkillAnimation(SkillConfig skillConfig, List<Dictionary<int, List<int>>> damageList, Action _onComplete)
+    {
+
+        //  鍏抽敭甯у垪琛�
+        List<int> keyFrameList = new List<int>() { 15 };
+        motionBase.OnAttackHitEvent = (int _frame) =>
+        {
+            Dictionary<int, List<int>> oneRoundDamage = damageList[keyFrameList.IndexOf(_frame)];
+
+            foreach (var kvp in oneRoundDamage)
+            {
+                int targetId = kvp.Key;
+                List<int> damageValues = kvp.Value;
+
+                BattleObject targetObj = battleField.battleObjMgr.GetBattleObject(targetId);
+                if (targetObj != null && !targetObj.IsDead())
+                {
+                    targetObj.TakeDamage(damageValues);
+                }
+            }
+        };
+
+        motionBase.OnAttackAnimationComplete = () =>
+        {
+            _onComplete?.Invoke();
+
+            motionBase.OnAttackHitEvent = null;
+            motionBase.OnAttackAnimationComplete = null;
+
+            //  姝讳骸纭畾鍏跺疄涓嶅簲璇ュ湪杩欓噷杩涜瑙﹀彂 搴旇鐢辨湇鍔″櫒涓嬪彂 YYL TODO
+
+#if UNITY_EDITOR
+            //  鏆傛椂鐨勫鐞�
+            HashSet<int> hitTargets = new HashSet<int>();
+
+            foreach (var dmgDict in damageList)
+            {
+                foreach (var kvp in dmgDict)
+                {
+                    int targetId = kvp.Key;
+                    hitTargets.Add(targetId);
+                }
+            }
+
+            foreach (int targetId in hitTargets)
+            {
+                BattleObject targetObj = battleField.battleObjMgr.GetBattleObject(targetId);
+                if (targetObj != null && targetObj.IsDead())
+                {
+                    targetObj.OnDeath();
+                }
+            }
+#endif
+        };
+
+        motionBase.PlayAnimationEx(MotionName.attack, false, keyFrameList);
+    }
+
+#if UNITY_EDITOR
+    public void EditorRevive()
+    {
+        teamHero.curHp = 100;
+        heroGo.SetActive(true);
+        motionBase.PlayAnimation(MotionName.idle, true);
+    }
+
+    public List<int> TryAttack(BattleObject obj, SkillConfig skillConfig)
+    {
+        List<int> damageList = new List<int>();
+
+        int totalDamage = teamHero.attack - obj.teamHero.defense;
+
+        damageList.Add(totalDamage);
+
+        return damageList;
+    }
+#endif
+
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleObject/BattleObjectFactory.cs b/Main/System/Battle/BattleObject/BattleObjectFactory.cs
index a42b300..f7d9304 100644
--- a/Main/System/Battle/BattleObject/BattleObjectFactory.cs
+++ b/Main/System/Battle/BattleObject/BattleObjectFactory.cs
@@ -5,19 +5,24 @@
 
 public class BattleObjectFactory
 {
-    public static BattleObject CreateBattleObject(TeamHero teamHero)
+    //  鏈剰鏄鍦ㄨ繖閲屽仛姹犵殑鍐呭鐨� 浣嗘槸鎯充簡涓�涓� 鍒╃敤鏁堢巼鏈夌偣宸� 鏈�澶氬仛涓�涓嬬孩鑹叉柟鐨勭紦瀛� 钃濊壊鏂圭殑鍗虫椂鐢� 鍗虫椂鍒犻櫎 鎴栬�呯紦瀛樹笂涓�娆℃垬鏂楃殑灏辫
+    private static int AutoIncrementID = 100000;
+
+    public static BattleObject CreateBattleObject(BattleField _battleField, List<GameObject> posNodeList, TeamHero teamHero, BattleCamp _Camp)
     {
-        BattleObject battleObject = null;
-        // switch (teamCard.cardInfo.cardConfig.)
-        // {
-
-        // }
-
+        HeroSkinConfig skinCfg = teamHero.heroInfo.skinConfig;
+        GameObject battleGO = ResManager.Instance.LoadAsset<GameObject>("Hero/SpineRes", "Hero_001"/*skinCfg.SpineRes*/);
+        GameObject goParent = posNodeList[teamHero.heroIndex];
+        BattleObject battleObject = new BattleObject(_battleField);
+        battleObject.BattleObjectId = AutoIncrementID++;
+        battleGO.name = battleObject.BattleObjectId.ToString();
+        battleObject.Init(GameObject.Instantiate(battleGO, goParent.transform), teamHero, _Camp);
         return battleObject;
     }
 
-    public static void DestroyBattleObject(BattleObject battleObj)
+    public static void DestroyBattleObject(int key, BattleObject battleObj)
     {
-        
+        battleObj.Destroy();
+        battleObj = null;
     }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/BattleWin.cs b/Main/System/Battle/BattleWin.cs
new file mode 100644
index 0000000..4fdb5cb
--- /dev/null
+++ b/Main/System/Battle/BattleWin.cs
@@ -0,0 +1,72 @@
+锘縰sing UnityEngine;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine.UI;
+using DG.Tweening;
+using Cysharp.Threading.Tasks;
+
+public class BattleWin : UIBase
+{
+    // 缁勪欢寮曠敤
+    public Transform mountPoint;
+
+    private BattleRootNode battleRootNode = null;
+
+    // 鐢熷懡鍛ㄦ湡
+    protected override void InitComponent()
+    {
+        base.InitComponent();
+        // 鍒濆鍖栫粍浠跺紩鐢� 缁戝畾鎸夐挳绛塙I缁勪欢浜嬩欢
+    }
+
+    protected override void OnPreOpen()
+    {
+        base.OnPreOpen();
+
+        SetBattleField(BattleManager.Instance.storyBattleField);
+    }
+
+    protected override void OnPreClose()
+    {
+        base.OnPreClose();
+    }
+
+    protected override void OnOpen()
+    {
+        base.OnOpen();
+    }
+
+    protected override void OnClose()
+    {
+        base.OnClose();
+
+        if (battleRootNode != null)
+        {
+            battleRootNode.transform.SetParent(null);
+        }
+    }
+
+    protected override void NextFrameAfterOpen()
+    {
+        base.NextFrameAfterOpen();
+    }
+
+    protected override void CompleteClose()
+    {
+        base.CompleteClose();
+    }
+
+    public void SetBattleField(BattleField battleField)
+    {
+        if (battleRootNode != null)
+        {
+            battleRootNode.transform.SetParent(Launch.Instance.transform);
+        }
+
+        battleRootNode = battleField.battleRootNode;
+
+        battleRootNode.transform.SetParent(mountPoint);
+        battleRootNode.transform.localPosition = Vector3.zero;
+        battleRootNode.transform.localScale = Vector3.one;
+    }
+}
diff --git a/Main/System/Battle/BattleWin.cs.meta b/Main/System/Battle/BattleWin.cs.meta
new file mode 100644
index 0000000..7e3a12f
--- /dev/null
+++ b/Main/System/Battle/BattleWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9436c20bbc05d7443a4a55bdd8225747
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/Buff.meta b/Main/System/Battle/Buff.meta
new file mode 100644
index 0000000..557930a
--- /dev/null
+++ b/Main/System/Battle/Buff.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: fe16e4ea643c0f141869bc215e72e46f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/Define.meta b/Main/System/Battle/Define.meta
new file mode 100644
index 0000000..90d8872
--- /dev/null
+++ b/Main/System/Battle/Define.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: d98f48e6efd31894f920108e541b4f69
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/Define/DamageType.cs b/Main/System/Battle/Define/DamageType.cs
new file mode 100644
index 0000000..11b4805
--- /dev/null
+++ b/Main/System/Battle/Define/DamageType.cs
@@ -0,0 +1,16 @@
+
+
+
+public enum DamageType
+{
+	Normal,	//鏅�氫激瀹�
+	Dodge, 	//闂伩
+	Heal,	//娌荤枟
+	Continuous,//鎸佺画浼ゅ
+	Block,	//鏍兼尅
+	ReverseInjury,//鍙嶄激
+	Recovery,	//鍚歌
+	Crit,	//鏆村嚮
+	Combo,	//杩炲嚮
+	Stuned,	//鍑绘檿
+}
\ No newline at end of file
diff --git a/Main/System/Battle/Define/DamageType.cs.meta b/Main/System/Battle/Define/DamageType.cs.meta
new file mode 100644
index 0000000..277a850
--- /dev/null
+++ b/Main/System/Battle/Define/DamageType.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d7487e4b249bbbb4b8504bbc03f47c82
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/Define/SkillTargetRangeType.cs b/Main/System/Battle/Define/SkillTargetRangeType.cs
new file mode 100644
index 0000000..551deb5
--- /dev/null
+++ b/Main/System/Battle/Define/SkillTargetRangeType.cs
@@ -0,0 +1,21 @@
+
+// 2銆佺洰鏍囩被鍨�2
+// a)鍓嶆帓,1銆�2銆�3鍙蜂负鍓嶆帓,鍓嶆帓鍏ㄩ儴闃典骸鍚�,4銆�5銆�6鍙峰嵆鏄墠鎺掍篃鏄悗鎺�
+// b)鍚庢帓,4銆�5銆�6鍙蜂负鍚庢帓,鍚庢帓鍏ㄩ儴闃典骸鍚�,1銆�2銆�3鍙峰嵆鏄墠鎺掍篃鏄悗鎺�
+// c)闅忔満
+// d)鍏ㄤ綋
+// e)鏀诲嚮鏈�楂橈細鏈夊涓洰鏍�,浼樺厛瀵逛綅瀵瑰簲鍙蜂綅鐩爣,鎸夐『搴忎粠1鍙峰紑濮嬮�夋嫨
+// f)鐢熷懡鏈�浣庯細鏈夊涓洰鏍�,浼樺厛瀵逛綅瀵瑰簲鍙蜂綅鐩爣,鎸夐『搴忎粠1鍙峰紑濮嬮�夋嫨
+// g)姝讳骸鐩爣锛氭湁澶氫釜鐩爣,鎸夐『搴忎粠1鍙峰紑濮嬮�夋嫨
+
+
+public enum SkillTargetRangeType
+{
+	Front,
+	Back,
+	Random,
+	All,
+	HighestAttack,
+	LowestHP,
+	Deadman
+}
\ No newline at end of file
diff --git a/Main/System/Battle/Define/SkillTargetRangeType.cs.meta b/Main/System/Battle/Define/SkillTargetRangeType.cs.meta
new file mode 100644
index 0000000..f60998d
--- /dev/null
+++ b/Main/System/Battle/Define/SkillTargetRangeType.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d7a05b1f4236c944585478475734d089
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/Define/SkillTargetType.cs b/Main/System/Battle/Define/SkillTargetType.cs
new file mode 100644
index 0000000..8be85ce
--- /dev/null
+++ b/Main/System/Battle/Define/SkillTargetType.cs
@@ -0,0 +1,14 @@
+
+// 鎶�鑳介噴鏀�,闇�瑕佹牴鎹妧鑳介厤缃�,閫夋嫨鐩爣杩涜閲婃斁
+// 1銆佺洰鏍囩被鍨�1
+// a)鑷韩
+// b)宸辨柟
+// c)鏁屾柟
+// d)闄よ嚜韬鐨勫繁鏂�
+public enum SkillTargetType
+{
+	Self = 0,	//鑷繁
+	Own,	//宸辨柟
+	Enemy,	//鍦版柟
+	OwnExceptSelf, //闄よ嚜韬鐨勫繁鏂�
+}
\ No newline at end of file
diff --git a/Main/System/Battle/Define/SkillTargetType.cs.meta b/Main/System/Battle/Define/SkillTargetType.cs.meta
new file mode 100644
index 0000000..6ec6340
--- /dev/null
+++ b/Main/System/Battle/Define/SkillTargetType.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1af57ceed7e65c549897d7220d060c61
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/Motion/MotionBase.cs b/Main/System/Battle/Motion/MotionBase.cs
index 9c2fddb..e59f90a 100644
--- a/Main/System/Battle/Motion/MotionBase.cs
+++ b/Main/System/Battle/Motion/MotionBase.cs
@@ -19,7 +19,7 @@
 
         public WaitingTask(List<int> triggerFrame, MotionName motionName, Action<MotionName, int> _callback)
         {
-            this.triggerFrame = triggerFrame;
+            this.triggerFrame = new List<int>(triggerFrame);
             this.motionName = motionName;
             this.currentFrame = 0;
             this.callback = _callback;
@@ -38,8 +38,9 @@
                 
                 if (currentFrame >= triggerFrame[0])
                 {
+                    int frame = triggerFrame[0];
                     triggerFrame.RemoveAt(0);
-                    callback?.Invoke(motionName, currentFrame);
+                    callback?.Invoke(motionName, frame);
                 }
             }
         }
@@ -48,6 +49,7 @@
     // 鍔ㄧ敾浜嬩欢
     public Action OnAttackAnimationComplete;
     public Action OnHitAnimationComplete;
+    public Action<MotionName> OnOtherAnimationComplete;
     public Action<int> OnAttackHitEvent; //trigger index
 
     #region 缁勪欢寮曠敤
@@ -61,12 +63,14 @@
     #region 鍔ㄧ敾璁剧疆
     
     // 鍔ㄧ敾娣峰悎鏃堕棿
-    protected float defaultMixDuration = 0.2f;
+    protected float defaultMixDuration = 0f;
     
     #endregion
     
     protected List<WaitingTask> waitingTaskList = new List<WaitingTask>();
     protected List<WaitingTask> removeList = new List<WaitingTask>();
+
+    private Spine.TrackEntry currentTrackEntry;
 
     #region 鍒濆鍖栨柟娉�
     
@@ -101,10 +105,27 @@
         }
     }
     
+    public virtual void Release()
+    {
+        if (spineAnimationState != null)
+        {
+            spineAnimationState.Complete -= OnAnimationComplete;
+            spineAnimationState.ClearTracks();
+            spineAnimationState = null;
+        }
+        
+        skeletonGraphic = null;
+        skeleton = null;
+        currentTrackEntry = null;
+        
+        waitingTaskList.Clear();
+        removeList.Clear();
+    }
+    
     #endregion
-    
+
     #region 鍔ㄧ敾鎺у埗
-    
+
     /// <summary>
     /// 鎾斁鎸囧畾鍔ㄧ敾
     /// </summary>
@@ -114,51 +135,10 @@
     public virtual Spine.TrackEntry PlayAnimation(MotionName motionName, bool loop)
     {
         if (spineAnimationState == null) return null;
-        
+
         // 鐩存帴浣跨敤 ToString() 鑰屼笉鏄皟鐢� GetAnimationName
-        return spineAnimationState.SetAnimation(0, motionName.ToString(), loop);
-    }
-    
-    /// <summary>
-    /// 鎾斁鎸囧畾鍔ㄧ敾锛堜娇鐢ㄥ瓧绗︿覆鍚嶇О锛�
-    /// </summary>
-    /// <param name="animationName">鍔ㄧ敾鍚嶇О</param>
-    /// <param name="loop">鏄惁寰幆</param>
-    /// <returns>鍔ㄧ敾杞ㄩ亾鏉$洰</returns>
-    public virtual Spine.TrackEntry PlayAnimation(string animationName, bool loop)
-    {
-        if (spineAnimationState == null) return null;
-        
-        return spineAnimationState.SetAnimation(0, animationName, loop);
-    }
-    
-    /// <summary>
-    /// 娣诲姞鍔ㄧ敾鍒伴槦鍒�
-    /// </summary>
-    /// <param name="motionName">鍔ㄧ敾鏋氫妇</param>
-    /// <param name="loop">鏄惁寰幆</param>
-    /// <param name="delay">寤惰繜鏃堕棿</param>
-    /// <returns>鍔ㄧ敾杞ㄩ亾鏉$洰</returns>
-    public virtual Spine.TrackEntry AddAnimation(MotionName motionName, bool loop, float delay)
-    {
-        if (spineAnimationState == null) return null;
-        
-        // 鐩存帴浣跨敤 ToString() 鑰屼笉鏄皟鐢� GetAnimationName
-        return spineAnimationState.AddAnimation(0, motionName.ToString(), loop, delay);
-    }
-    
-    /// <summary>
-    /// 娣诲姞鍔ㄧ敾鍒伴槦鍒楋紙浣跨敤瀛楃涓插悕绉帮級
-    /// </summary>
-    /// <param name="animationName">鍔ㄧ敾鍚嶇О</param>
-    /// <param name="loop">鏄惁寰幆</param>
-    /// <param name="delay">寤惰繜鏃堕棿</param>
-    /// <returns>鍔ㄧ敾杞ㄩ亾鏉$洰</returns>
-    public virtual Spine.TrackEntry AddAnimation(string animationName, bool loop, float delay)
-    {
-        if (spineAnimationState == null) return null;
-        
-        return spineAnimationState.AddAnimation(0, animationName, loop, delay);
+        currentTrackEntry = spineAnimationState.SetAnimation(0, motionName.ToString(), loop);
+        return currentTrackEntry;
     }
     
     /// <summary>
@@ -180,8 +160,8 @@
         string animation = trackEntry.Animation.Name;
         
         // 鏀诲嚮鍔ㄧ敾瀹屾垚鍚庢仮澶嶅埌寰呮満鐘舵��
-        if (animation == MotionName.atk1.ToString() || 
-            animation == MotionName.atk2.ToString())
+        if (animation == MotionName.attack.ToString() || 
+            animation == MotionName.angerSkill.ToString())
         {
             OnAttackAnimationComplete?.Invoke();
             PlayAnimation(MotionName.idle, true);
@@ -191,6 +171,10 @@
         {
             OnHitAnimationComplete?.Invoke();
             PlayAnimation(MotionName.idle, true);
+        }
+        else
+        {
+            OnOtherAnimationComplete?.Invoke((MotionName)Enum.Parse(typeof(MotionName), animation));
         }
     }
     
@@ -242,6 +226,19 @@
 
         removeList.Clear();
     }
+
+    public virtual void Pause()
+    {
+        if (currentTrackEntry != null)
+            currentTrackEntry.TimeScale = 0f;
+    }
+
+    public virtual void Resume()
+    {
+        if (currentTrackEntry != null)
+            currentTrackEntry.TimeScale = 1f;
+    }
+
     #endregion
     
 }
\ No newline at end of file
diff --git a/Main/System/Battle/Motion/MotionName.cs b/Main/System/Battle/Motion/MotionName.cs
index 7035d63..fa8796f 100644
--- a/Main/System/Battle/Motion/MotionName.cs
+++ b/Main/System/Battle/Motion/MotionName.cs
@@ -1,10 +1,19 @@
 
+// 姣忎釜姝﹀皢閮介渶鏈夛細
+// 寰呮満
+// 璺戞
+// 琚嚮
+// 姝讳骸
+// 鎬掓皵鎶�鑳藉姩浣�
+// 鏅敾鍔ㄤ綔
+
 
 public enum MotionName
 {
-    atk1,
-    atk2,
-    hit,
-    idle,
-    run,
+    idle,//寰呮満
+    run,//璺戞
+    hit,//琚嚮
+    dead,//姝讳骸 
+    angerSkill,//鎬掓皵鎶�鑳�
+    attack,//鏅敾
 }
\ No newline at end of file
diff --git a/Main/System/Battle/RecordPlayer/RecordAction.cs b/Main/System/Battle/RecordPlayer/RecordAction.cs
index e657280..a7e4cfd 100644
--- a/Main/System/Battle/RecordPlayer/RecordAction.cs
+++ b/Main/System/Battle/RecordPlayer/RecordAction.cs
@@ -5,15 +5,25 @@
 
 public class RecordAction
 {
-    public RecordActionType actionType;
-    public int casterId;
+    protected BattleField battleField;
 
-    public bool IsFinished()
+    protected BattleObject battleObject;
+
+	public RecordAction(RecordActionType _actionType, BattleField _battleField, BattleObject _battleObj)
+	{
+		actionType = _actionType;
+        battleField = _battleField;
+        battleObject = _battleObj;
+	}
+
+    public RecordActionType actionType;
+
+    public virtual bool IsFinished()
     {
         return false;
     }
 
-    public void Run()
+    public virtual void Run()
     {
         
     }
diff --git a/Main/System/Battle/RecordPlayer/RecordActionType.cs b/Main/System/Battle/RecordPlayer/RecordActionType.cs
index e680559..413f658 100644
--- a/Main/System/Battle/RecordPlayer/RecordActionType.cs
+++ b/Main/System/Battle/RecordPlayer/RecordActionType.cs
@@ -2,9 +2,7 @@
 public enum RecordActionType
 {
     None,
-    Attack,//鏀诲嚮
-    Heal,//娌荤枟
-    Buff,//澧炵泭&鍑忕泭
     Guard,//鏍兼尅
     Skill,//鎶�鑳�
+    Death,//姝讳骸
 }
diff --git a/Main/System/Battle/RecordPlayer/RecordPlayer.cs b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
index 54891c2..402df21 100644
--- a/Main/System/Battle/RecordPlayer/RecordPlayer.cs
+++ b/Main/System/Battle/RecordPlayer/RecordPlayer.cs
@@ -15,6 +15,11 @@
         battleField = _battleField;
     }
 
+    public bool IsPlaying()
+    {
+        return currentRecordAction != null || recordActionQueue.Count > 0;
+    }
+
     public void PlayRecord(RecordAction recordAction)
     {
         recordActionQueue.Enqueue(recordAction);
@@ -30,20 +35,42 @@
 
     public virtual void Run()
     {
-        if (recordActionQueue.Count == 0)
+        if (currentRecordAction == null)
         {
+            if (recordActionQueue.Count <= 0)
+            {
+                return;
+            }
+        }
+
+        if (currentRecordAction != null && !currentRecordAction.IsFinished())
+        {
+            currentRecordAction.Run();
             return;
         }
 
-        if (currentRecordAction == null || currentRecordAction.IsFinished())
+        if (currentRecordAction != null && currentRecordAction.IsFinished())
         {
-            currentRecordAction = recordActionQueue.Dequeue();
+            currentRecordAction = null;
         }
 
-        if (currentRecordAction != null)
+        if (currentRecordAction == null)
         {
-            currentRecordAction.Run();
+            if (recordActionQueue.Count > 0)
+            {
+                currentRecordAction = recordActionQueue.Dequeue();
+            }
         }
+    }
+
+    //  鍏堥鐣� 鎰熻鐢ㄧ殑涓�
+    public virtual void ResumeGame()
+    {
+
+    }
+
+    public virtual void PauseGame()
+    {
 
     }
 }
\ No newline at end of file
diff --git a/Main/System/Battle/Skill.meta b/Main/System/Battle/Skill.meta
new file mode 100644
index 0000000..030bbb7
--- /dev/null
+++ b/Main/System/Battle/Skill.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a1576f20f23a41249a6fd9f71fa49efa
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/Skill/DirectlyDamageSkill.cs b/Main/System/Battle/Skill/DirectlyDamageSkill.cs
new file mode 100644
index 0000000..d26c3e6
--- /dev/null
+++ b/Main/System/Battle/Skill/DirectlyDamageSkill.cs
@@ -0,0 +1,49 @@
+
+using System.Collections.Generic;
+
+public class DirectlyDamageSkill : SkillBase
+{
+
+	public DirectlyDamageSkill(SkillConfig _skillCfg) : base(_skillCfg)
+	{
+		
+	}
+
+	public override void Run()
+	{	
+		base.Run();
+	}
+
+	public override void Cast(BattleObject _caster, BattleField _battleField, List<Dictionary<int, List<int>>> damageList)
+	{
+		_caster.PlaySkill(skillConfig, damageList, OnSkillAnimationFinished);
+	}
+
+	protected void OnSkillAnimationFinished()
+	{
+		isFinished = true;
+	}
+
+#if UNITY_EDITOR
+	//	浼ゅ鍒楄〃鐞嗗簲鐢辨湇鍔″櫒鍙戠粰瀹㈡埛绔� 杩欒竟鍙仛绮楁祬妯℃嫙
+	public override List<Dictionary<int, List<int>>> GetDamageList(BattleObject _caster, BattleField battleField)
+	{
+		List<Dictionary<int, List<int>>> damageList = new List<Dictionary<int, List<int>>>();
+
+		List<BattleObject> affectList = GetTargetList(_caster, battleField);
+
+		Dictionary<int, List<int>> oneRoundDamage = new Dictionary<int, List<int>>();
+
+		for (int j = 0; j < affectList.Count; j++)
+		{
+			BattleObject obj = affectList[j];
+			List<int> tryDmgList = _caster.TryAttack(obj, skillConfig);
+			oneRoundDamage.Add(obj.BattleObjectId, tryDmgList);
+		}
+
+		damageList.Add(oneRoundDamage);
+
+		return damageList;
+	}
+#endif
+}
\ No newline at end of file
diff --git a/Main/System/Battle/Skill/DirectlyDamageSkill.cs.meta b/Main/System/Battle/Skill/DirectlyDamageSkill.cs.meta
new file mode 100644
index 0000000..56ad7e5
--- /dev/null
+++ b/Main/System/Battle/Skill/DirectlyDamageSkill.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6c38b8acedc80dc4594072a10e7df9d2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
new file mode 100644
index 0000000..6c8a691
--- /dev/null
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -0,0 +1,52 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+
+public class SkillBase
+{
+	protected SkillConfig skillConfig;
+
+	protected bool isFinished = false;
+
+	public SkillBase(SkillConfig _skillCfg)
+	{
+		skillConfig = _skillCfg;
+	}
+
+	public virtual void Run()
+	{
+		
+	}
+
+	public virtual void Cast(BattleObject _caster, BattleField battleField, List<Dictionary<int, List<int>>> damageList)
+	{
+		Debug.LogError("SkillBase Cast should be overridden by derived class");
+	}
+
+	public virtual bool IsFinished()
+	{
+		return isFinished;
+	}
+
+	public virtual void ForceFinished()
+	{
+		isFinished = true;
+	}
+
+#if UNITY_EDITOR
+	public virtual List<BattleObject> GetTargetList(BattleObject _caster, BattleField battleField)
+	{
+		SkillTargetType targetType = SkillTargetType.Enemy;
+		SkillTargetRangeType rangeType = SkillTargetRangeType.LowestHP;
+
+		List<BattleObject> affectList = battleField.battleObjMgr.GetTargetList(_caster, targetType, rangeType);
+		return affectList;
+	}
+	
+	public virtual List<Dictionary<int, List<int>>> GetDamageList(BattleObject _caster, BattleField battleField)
+	{
+		Debug.LogError("SkillBase GetDamageList should be overridden by derived class");
+		return null;
+	}
+#endif
+}
\ No newline at end of file
diff --git a/Main/System/Battle/Skill/SkillBase.cs.meta b/Main/System/Battle/Skill/SkillBase.cs.meta
new file mode 100644
index 0000000..a120d10
--- /dev/null
+++ b/Main/System/Battle/Skill/SkillBase.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 29aa0d4b5b5830a4990d8538740b9355
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Battle/Skill/SkillFactory.cs b/Main/System/Battle/Skill/SkillFactory.cs
new file mode 100644
index 0000000..9a6a009
--- /dev/null
+++ b/Main/System/Battle/Skill/SkillFactory.cs
@@ -0,0 +1,70 @@
+
+using UnityEngine;
+
+
+public static class SkillFactory
+{
+// SkillType	
+// 鎶�鑳界被鍨�	瀹氫箟
+// 鐗规畩   0	
+// 鏀诲嚮绫�   1	涓诲姩浼氶�犳垚鐬棿浼ゅ鎶�鑳界被鍨嬩负1
+// 鎭㈠绫�   2	涓诲姩浼氭仮澶嶇敓鍛藉�肩殑鎶�鑳界被鍨嬩负2
+// 鎸佺画澧炵泭BUFF  3	涓诲姩涓�娈垫椂闂村唴闂撮殧鏃堕棿缁欎簣澧炵泭buff鎶�鑳界被鍨嬩负3锛屾瘮濡傛寔缁洖琛�
+// 鎸佺画鍑忕泭BUFF  4	涓诲姩涓�娈垫椂闂村唴闂撮殧鏃堕棿缁欎簣鍑忕泭buff鎶�鑳界被鍨嬩负4锛屾瘮濡備腑姣�
+// 澧炵泭BUFF 5	涓诲姩鎸佺画涓�娈垫椂闂寸粰浜堝鐩奲uff锛屼笉浼氬嚭鐜伴棿闅旀椂闂碽uff绫诲瀷涓�5锛屾瘮濡傞簰楹熺浘
+// 鍑忕泭BUFF 6	涓诲姩鎸佺画涓�娈垫椂闂寸粰浜堝噺鐩奲uff锛屼笉浼氬嚭鐜伴棿闅旀椂闂碽uff绫诲瀷涓�6锛屾瘮濡傚噺閫�
+// 琚姩鎶�   7	琚姩瑙﹀彂鐨勬妧鑳界被鍨嬩负7
+// 澶嶆椿     8	鐗у笀澶嶆椿闃熷弸鎶�鑳斤紝鏆傛椂鏃犵敤
+// 澧炲�兼妧鑳斤紙涓嶅彲娓呴櫎锛�9  	鍜屽鐩婃妧鑳界被浼硷紝鏃犳硶鐐瑰嚮鍥炬爣鍙栨秷锛屾殏鏃舵棤鐢�
+// 鍏夌幆鎶�鑳�  10	闃熷弸鍏变韩璇ユ妧鑳界殑鍏夌幆锛岀被浼奸瓟鍏戒簤闇哥殑寮哄嚮鍏夌幆锛岃崋妫樺厜鐜紝鏆傛椂鏃犺繖鏍锋妧鑳�
+// 瑁呭鎶�鑳�  11	瑁呭涓婇檮鍔犱簡鎶�鑳斤紝姣斿濂楄闄勫姞鏀诲嚮+50%锛屾殏鏃舵棤杩欐牱鎶�鑳�
+// 鍖哄煙鎶�鑳�  12	"甯冩�櫒閲� 鏈変釜閰嶇疆鎶�鑳絀D  姣斿閰嶄釜鐏尯鍩熺伡鐑�
+// "
+// 鍙敜      13	涓诲姩鍙敜鍑轰竴涓�墿锛屽垯閰嶇疆涓�13锛屾殏鏃舵棤杩欐牱鐨勬妧鑳�
+// 鎺у埗鍨婤UFF 14	姣斿鐪╂檿锛屽畾韬妧鑳介渶瑕侀厤缃帶鍒跺瀷buff
+// 澶氭浼ゅbuff鏀诲嚮绫诲瀷锛堢被xp鎶�鑳斤級 15	澶氭浼ゅ涓诲姩姣忕浼ゅbuff鎶�鑳界被鍨嬩负15
+// 琚姩瑙﹀彂澧炵泭绫籦uff 16	琚姩瑙﹀彂鎸佺画涓�娈垫椂闂寸粰浜堝鐩奲uff锛屼笉浼氬嚭鐜伴棿闅旀椂闂碽uff绫诲瀷涓�16锛屽锛�50065鐤鹃锛�
+// 琚姩瑙﹀彂鍑忕泭绫籦uff 17	琚姩瑙﹀彂鎸佺画涓�娈垫椂闂寸粰浜堝噺鐩奲uff锛屼笉浼氬嚭鐜伴棿闅旀椂闂碽uff绫诲瀷涓�17锛屽锛�50235璐熶激锛�
+// 琚姩瑙﹀彂鐨勬帶鍒剁被buff 18	琚姩瑙﹀彂鎸佺画涓�娈垫椂闂寸殑鎺у埗鎶�鑳戒负17锛屽锛�50365婵�鎬掞級
+// 灞炴�х被鎶�鑳� 20锛堝鍧愰獞灞炴�э紝瀹犵墿灞炴�э級	琚姩澧炲姞浜嗗睘鎬ф晥鏋滃�硷紝闀挎湡鐨勬妧鑳戒负20锛屽锛�50605瀹堟姢锛�
+// 琚姩buff 19锛堟殏鏃朵笉鐭ラ亾骞插暐鐨勶級	
+// 琚姩瑙﹀彂鎸佺画绫诲鐩婄被buff 21	琚姩涓�娈垫椂闂村唴闂撮殧鏃堕棿缁欎簣澧炵泭buff鎶�鑳界被鍨嬩负3锛屾瘮濡傦紙50635绁濈锛�
+// 琚姩瑙﹀彂鎸佺画绫诲噺鐩婄被buff 22	琚姩涓�娈垫椂闂村唴闂撮殧鏃堕棿缁欎簣鍑忕泭buff鎶�鑳界被鍨嬩负4锛屾瘮濡傛瘨榫欏棞澶�
+
+
+// 鏀诲嚮鎶�鑳斤細鏈洖鍚堝鏁屼汉姝﹀皢閫犳垚浼ゅ
+// 娌荤枟鎶�鑳斤細鏈洖鍚堝宸叉柟姝﹀皢鍥炲鐢熷懡鍊�,鍥炲鐢熷懡鍊间笉鍙秴杩囩敓鍛戒笂闄�
+// 杈呭姪鎶�鑳斤細澧炲姞鎬掓皵銆佸彫鍞ゃ�佸厜鐜瓑
+// BUFF鎶�鑳斤細鎻愬崌宸叉柟灞炴�х殑澧炵泭BUFF(鍔犳敾銆佸姞琛�銆佸姞鐘舵�佺瓑),闄嶄綆鏁屾柟灞炴�х殑鍑忕泭BUFF(鍑忔敾銆佸噺琛�銆佹帶鍒剁瓑),鎸佺画澶氬洖鍚�
+// 澶嶆椿鎶�鑳斤細澶嶆椿宸叉柟宸叉姝﹀皢骞跺洖澶峏鐢熷懡鍊�,澶嶆椿锛氱户鎵挎浜″墠鐨勬墍鏈夌姸鎬�(鍚勭鐘舵�併�佸悇绉岯UFF銆佹�掓皵鍊肩瓑),澶嶆椿鍚庨敊杩囨湰鍥炲悎鏀诲嚮鏃舵満鍒欎笅涓�鍥炲悎鎵嶈兘鍑烘墜
+
+
+
+	public static SkillBase CreateSkill(SkillConfig _skillConfig)
+	{
+		SkillBase skill = null;
+		switch (_skillConfig.SkillType)
+		{
+			case 1:
+				skill = new DirectlyDamageSkill(_skillConfig);
+				break;
+			case 2:
+				// skill = new DirectlyHealSkill(_skillConfig);
+				break;
+			case 3:
+				// skill = new SupportSkill(_skillConfig);
+				break;
+			case 4:
+				// skill = new MountBuffSkill(_skillConfig);
+				break;
+			case 5:
+				// skill = new ReviveSkill(_skillConfig);
+				break;
+			default:
+				Debug.LogError("瓒呭嚭浜嗘妧鑳界被鍨嬭寖鍥� 璇锋鏌ラ厤缃�");
+				break;
+		}
+
+		return skill;
+	}
+}
\ No newline at end of file
diff --git a/Main/System/Battle/Skill/SkillFactory.cs.meta b/Main/System/Battle/Skill/SkillFactory.cs.meta
new file mode 100644
index 0000000..697f50b
--- /dev/null
+++ b/Main/System/Battle/Skill/SkillFactory.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e2a0e020a4b71ca48aa80d5cb0536792
+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 3f40b99..6bc70de 100644
--- a/Main/System/Hero/HeroInfo.Properties.cs
+++ b/Main/System/Hero/HeroInfo.Properties.cs
@@ -47,6 +47,42 @@
     public int recoverResist = 0;
 
     //  鐗规畩灞炴��(寰呰ˉ鍏�)
+    //  鏈�缁堜激瀹�
+    public int finalDamageIncrease = 0;
+    //  鏈�缁堝厤浼�
+    public int finalDamageReduce;
+    //  鐖嗕激
+    public int critDamageIncrease;
+    //  鍑忓皯鐖嗕激
+    public int critDamageReduce;
+    //  娌荤枟澧炵泭
+    public int healIncrease;
+    //  娌荤枟鍑忕泭
+    public int healReduce;
+    //  鐗╃悊澧炰激
+    public int damageIncrease;
+    //  鍑忓皯鐗╀激
+    public int damageReduce;
+    //  娉曟湳澧炰激
+    public int magicIncrease;
+    //  鍑忓皯娉曚激
+    public int magicReduce;
+    //  鏅敾澧炰激
+    public int normalAttackIncrease;
+    //  鍑忓皯鏅敾浼ゅ
+    public int normalAttackReduce;
+    //  澧炲姞鎶�鑳戒激瀹�
+    public int rageSkillAttackIncrease;
+    //  鍑忓皯鎶�鑳戒激瀹�
+    public int rageSkillAttackReduce;
+    //  澧炲姞鎸佺画浼ゅ鐨勭櫨鍒嗘瘮
+    public int continousSkillIncrease;
+    //  鍑忓皯鎸佺画浼ゅ鐨勭櫨鍒嗘瘮
+    public int continousSkillReduce;
+    //  澧炲姞鎶ょ浘鐧惧垎姣�
+    public int shieldSkillIncrease;
+    //  鍑忓皯鎶ょ浘鐧惧垎姣�
+    public int shieldSkillReduce;
 
 
     //璁$畻涓汉/鑱屼笟/绉嶆棌鍏绘垚灞炴�у姞鎴�
diff --git a/Main/System/Hero/HeroInfo.cs b/Main/System/Hero/HeroInfo.cs
index fae1795..9e36344 100644
--- a/Main/System/Hero/HeroInfo.cs
+++ b/Main/System/Hero/HeroInfo.cs
@@ -1,5 +1,6 @@
 using System.Collections.Generic;
 using UnityEngine;
+using LitJson;
 
 public partial class HeroInfo
 {
@@ -11,6 +12,13 @@
     {
         get
         {
+            #if UNITY_EDITOR
+            if (null == itemHero)
+            {
+                return 520001;
+            }
+            #endif
+
             return itemHero.config.ID;
         }
     }
@@ -44,9 +52,9 @@
         }
     }
 
-    public readonly ItemModel itemHero;
+    public ItemModel itemHero;
 
-    public readonly CB122_tagSCHeroInfo.tagSCHero scHeroInfo;
+    // public readonly CB122_tagSCHeroInfo.tagSCHero scHeroInfo;
 
     //  姝﹀皢閰嶇疆
     public HeroConfig heroConfig;
@@ -67,12 +75,44 @@
     public List<HeroTalentInfo> talentList = new List<HeroTalentInfo>();
 
 
-    public HeroInfo(CB122_tagSCHeroInfo.tagSCHero _scHeroInfo, ItemModel _itemHero)
+    public HeroInfo(/*CB122_tagSCHeroInfo.tagSCHero _scHeroInfo, */ItemModel _itemHero)
     {
-        scHeroInfo = _scHeroInfo;
-        itemHero = _itemHero;
+        // scHeroInfo = _scHeroInfo;
+        UpdateHero(_itemHero);
+        
 
-        InitConfigs();
+        
+    }
+
+    #if UNITY_EDITOR
+    public HeroInfo()
+    {
+        heroLevel = 1;
+        heroStar = 1;
+        breakLevel = 1;
+        awakeLevel = 1;
+        SkinIndex = 0;
+        heroConfig = HeroConfig.Get(heroId);
+        awakeConfig = HeroAwakeConfig.GetHeroAwakeConfig(heroId, awakeLevel);
+        breakConfig = HeroBreakConfig.GetHeroBreakConfig(heroId, breakLevel);
+        qualityAwakeConfig = HeroQualityAwakeConfig.GetQualityAwakeConfig(Quality, awakeLevel);
+        qualityConfig = HeroQualityConfig.Get(Quality);
+        qualityBreakConfig = HeroQualityBreakConfig.GetQualityBreakConfig(Quality, awakeLevel);
+        CalculateProperties();
+    }
+    #endif
+
+    // public HeroInfo Clone() => JsonMapper.ToObject<HeroInfo>(JsonMapper.ToJson(this));
+
+    //  鍥鹃壌淇℃伅
+    public void UpdateSCHero(CB122_tagSCHeroInfo.tagSCHero _scHeroInfo)
+    {
+
+    }
+
+    public void UpdateHero(ItemModel _itemHero)
+    {
+        itemHero = _itemHero;
         // HeroConfigUtility
 
         // 70 # 鑻遍泟绛夌骇
@@ -86,12 +126,15 @@
         // 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);
+
+        InitConfigs();
 
         if (talentLockList.Count != talentLvList.Count || talentLvList.Count != talentSkillList.Count)
         {
@@ -115,8 +158,6 @@
 // 77 # 鑻遍泟澶╄祴娲楃偧闅忔満ID鍒楄〃
 // 79 # 鑻遍泟瑙夐啋鏃堕殢鏈哄ぉ璧嬮�夐」ID鍒楄〃
 // 80 # 涓婚樀鍨嬩笂闃典綅缃�
-
-        
     }
 
     protected void InitConfigs()
diff --git a/Main/System/Hero/HeroManager.cs b/Main/System/Hero/HeroManager.cs
index 63268ae..d54640f 100644
--- a/Main/System/Hero/HeroManager.cs
+++ b/Main/System/Hero/HeroManager.cs
@@ -1,20 +1,27 @@
 using System.Collections.Generic;
 using UnityEngine;
+using System;
 
 public class HeroManager : GameSystemManager<HeroManager>
 {
-    protected Dictionary<long, HeroInfo> heroInfoDict = new Dictionary<long, HeroInfo>();
+    protected Dictionary<string, HeroInfo> heroInfoDict = new Dictionary<string, HeroInfo>();
+
+    public Action<HeroInfo> onNewHeroEvent;
+
+    public Action<HeroInfo> onHeroChangeEvent;
 
     public override void Init()
     {
         base.Init();
 
         //  娉ㄥ唽涓�鐐逛簨浠�
+        PackManager.Instance.refrechPackEvent += refrechPackEvent;
     }
 
     public override void Release()
     {
         base.Release();
+        PackManager.Instance.refrechPackEvent -= refrechPackEvent;
     }
 
     public override void RequestNessaryData()
@@ -24,9 +31,41 @@
         
     }
 
-    public void UpdateHeroInfo()
+    public void refrechPackEvent(PackType packType)
     {
-        
+        if (packType == PackType.Hero)
+        {
+            // bool change = false;
+            bool isNew = false;
+            //  濡傛灉鏈夊垎鎵规鍒濆鍖栧彲鑳借繕瑕侀夯鐑︿竴鐐�?鍏堢湅鐪�
+            bool isInit = heroInfoDict.Count >= 0;
+
+            SinglePack heroPack = PackManager.Instance.GetSinglePack(packType);
+
+            Dictionary<int, ItemModel> heroes = heroPack.GetAllItems();
+
+            foreach (ItemModel hero in heroes.Values)
+            {
+                HeroInfo heroInfo = null;
+                if (!heroInfoDict.TryGetValue(hero.guid, out heroInfo))
+                {
+                    heroInfo = new HeroInfo(hero);
+                    heroInfoDict.Add(hero.guid, heroInfo);
+                    if (!isInit)
+                    {
+                        isNew = true;
+                        onNewHeroEvent?.Invoke(heroInfo);
+                    }
+                }
+                else
+                {
+                    heroInfo.UpdateHero(hero);
+                    //  涔熸湁鍙兘涓嶆槸change
+                    // change = true;
+                    // onHeroChangeEvent?.Invoke(heroInfo);
+                }
+            }
+        }
     }
 
     public List<HeroInfo> GetPowerfulHeroList()
diff --git a/Main/System/Main/MainWin.cs b/Main/System/Main/MainWin.cs
index 49e70e7..dfb7b81 100644
--- a/Main/System/Main/MainWin.cs
+++ b/Main/System/Main/MainWin.cs
@@ -180,6 +180,8 @@
             case 4:
                 //currentSubUI = UIManager.Instance.OpenWindow<PlaceWin>();
                 Debug.Log("鎵撳紑鍐掗櫓鐣岄潰");
+                BattleWin battleWin = UIManager.Instance.OpenWindow<BattleWin>();
+                currentSubUI = battleWin;
                 break;
             default:
                 Debug.LogWarning("鏈煡鐨勬爣绛剧储寮�: " + index);
diff --git a/Main/System/Team/TeamBase.Properties.cs b/Main/System/Team/TeamBase.Properties.cs
index 65df025..9eec33b 100644
--- a/Main/System/Team/TeamBase.Properties.cs
+++ b/Main/System/Team/TeamBase.Properties.cs
@@ -6,6 +6,8 @@
 
     //  闃靛瀷鍐呭崱鐗岀殑缇佺粖澧炵泭
 
+    public int fightPower = 0;
+
 	protected void UpdateProperties()
 	{
 		//	缇佺粖
@@ -35,6 +37,6 @@
 
     public void CalculatePower()
     {
-        
+        // fightPower//鐨勮绠�
     }
 }
\ No newline at end of file
diff --git a/Main/System/Team/TeamBase.cs b/Main/System/Team/TeamBase.cs
index 65f0538..8060149 100644
--- a/Main/System/Team/TeamBase.cs
+++ b/Main/System/Team/TeamBase.cs
@@ -5,7 +5,7 @@
 
 public partial class TeamBase
 {
-    public TeamHero[] teamHeros = new TeamHero[TeamConst.MaxTeamHeroCount];
+    public TeamHero[] teamHeros = new TeamHero[TeamConst.MaxTeamSlotCount];
 
     public int GetTeamHeroCount()
     {
@@ -19,7 +19,7 @@
         }
 
         return count;
-    } 
+    }
 
     public bool SwapTeamHero(int index1, int index2)
     {
@@ -93,4 +93,21 @@
     {
         
     }
+
+#if UNITY_EDITOR
+    public void FillWithFakeData()
+    {
+        for (int i = 0; i < TeamConst.MaxTeamHeroCount; i++)
+        {
+            TeamHero hero = new TeamHero();
+            hero.curHp = 100;
+            hero.attack = UnityEngine.Random.Range(300, 500);
+            hero.defense = UnityEngine.Random.Range(80, 100);
+            hero.heroInfo = new HeroInfo();
+            hero.teamBase = this;
+            hero.heroIndex = i;
+            teamHeros[i] = hero;
+        }
+    }
+#endif
 }
\ No newline at end of file
diff --git a/Main/System/Team/TeamConst.cs b/Main/System/Team/TeamConst.cs
index b2835ea..19c59f8 100644
--- a/Main/System/Team/TeamConst.cs
+++ b/Main/System/Team/TeamConst.cs
@@ -2,5 +2,6 @@
 
 public class TeamConst
 {
-    public const int MaxTeamHeroCount = 6;
+    public const int MaxTeamHeroCount = 6;//鏈�澶у竷闃垫暟閲�
+    public const int MaxTeamSlotCount = 7;//鏈�澶фЫ浣嶆暟閲�
 }
\ No newline at end of file
diff --git a/Main/System/Team/TeamHero.Properties.cs b/Main/System/Team/TeamHero.Properties.cs
new file mode 100644
index 0000000..231e31e
--- /dev/null
+++ b/Main/System/Team/TeamHero.Properties.cs
@@ -0,0 +1,57 @@
+
+
+public partial class TeamHero
+{
+	// 鍩虹灞炴��
+    // 鐢熷懡
+    public int hp = 0;
+    // 鏀诲嚮鍔�
+    public int attack = 0;
+    // 闃插尽鍔�
+    public int defense = 0;
+
+
+    //鎴樻枟灞炴�� 鍑绘檿銆佹毚鍑汇�佽繛鍑汇�佹牸鎸°�佸弽鍑汇�佸惛琛�
+    //鐪╂檿姒傜巼
+    public int stunRate = 0;
+    //鏆村嚮姒傜巼
+    public int critRate = 0;
+    //杩炲嚮姒傜巼
+    public int comboRate = 0;
+    //鏍兼尅姒傜巼
+    public int blockRate = 0;
+    //鍙嶅嚮姒傜巼
+    public int counterAttackRate = 0;
+    //鏀诲嚮鐩爣鏃讹紝閫犳垚浼ゅ杞寲鎴愮敓鍛界殑鐧惧垎姣旀暟鍊兼彁鍗�
+    public int recoverRate = 0;
+
+    //鎴樻枟鎶垫姉灞炴��
+    //鐪╂檿鎶垫姉
+    public int stunResist = 0;
+    //鏆村嚮鎶垫姉
+    public int critResist = 0;
+    //杩炲嚮鎶垫姉
+    public int comboResist = 0;
+    //鏍兼尅鎶垫姉
+    public int blockResist = 0;
+    //鍙嶅嚮鎶垫姉
+    public int counterAttackResist = 0;
+    //鍑忓皯鏀诲嚮鏃跺惛琛�杞寲鎴愮敓鍛界殑鐧惧垎姣旀暟鍊�
+    public int recoverResist = 0;
+
+
+    
+   
+    //  褰撳墠灞炴��
+
+    // 鎬掓皵鍊�
+    public int rage = 0;
+
+    //  褰撳墠琛�閲�
+    public int curHp;
+
+    //  鏈�澶ц閲�
+    public int maxHp;
+
+    
+}
\ No newline at end of file
diff --git a/Main/System/Team/TeamHero.Properties.cs.meta b/Main/System/Team/TeamHero.Properties.cs.meta
new file mode 100644
index 0000000..e8c481d
--- /dev/null
+++ b/Main/System/Team/TeamHero.Properties.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2f2a7e0a26d12c945829628eb982b0e4
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Team/TeamHero.State.cs b/Main/System/Team/TeamHero.State.cs
new file mode 100644
index 0000000..17d64d6
--- /dev/null
+++ b/Main/System/Team/TeamHero.State.cs
@@ -0,0 +1,33 @@
+
+
+public partial class TeamHero
+{
+// 飦姸鎬佽鏄�
+// 姝e父鐘舵�侊細鍙互姝e父杩涜鎴樻枟銆�
+// 鎺у埗鐘舵�侊細鏈夌湬鏅曘�佺煶鍖栥�佸啺鍐荤瓑鐘舵��,鎸佺画X鍥炲悎锛涘叾涓啺鍐荤姸鎬佷腑琚敾鍑籜娆�,鍙彁鍓嶈В闄ゆ帶鍒剁姸鎬侊紱 褰撹鑹插浜庢帶鍒剁姸鎬佹椂,姝﹀皢鏃犳硶杩涜鏅敾銆佹棤娉曢噴鎶�鑳姐�佷笉鍙Е鍙戦噴鍙嶅嚮銆佽拷鍑荤瓑
+// 娌夐粯鐘舵�侊細涓嶅彲閲婃斁鎶�鑳斤紝鍙櫘鏀�
+// 缂存鐘舵�侊細鏃犳硶杩涜鏅敾銆佽拷鍑汇�佽繛鍑伙紝鍙噴鏀炬妧鑳�
+// 鏃犳晫鐘舵�侊細姝﹀皢鎵�鍙楃殑浼ゅ涓嶆墸琛�,鍙鏀诲嚮銆佹不鐤椼�佹坊鍔燘UFF
+// 姝讳骸鐘舵�侊細姝﹀皢鐢熷懡鍊间负0鏃�,浠庢垬鏂楁秷澶�,鏃犳硶缁х画鎴樻枟銆�
+
+	public bool isStunned = false;
+
+	public bool isStoned = false;
+
+	public bool isFrozen = false;
+
+	public bool isSlient = false;
+
+	public bool isDisarmed = false;
+
+	public bool isInvinceble = false;
+
+	public bool isDead
+	{
+		get
+		{
+			return curHp <= 0;
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/Main/System/Team/TeamHero.State.cs.meta b/Main/System/Team/TeamHero.State.cs.meta
new file mode 100644
index 0000000..117efd5
--- /dev/null
+++ b/Main/System/Team/TeamHero.State.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 61b6dabe91e01264984e600d39ee34fe
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Team/TeamHero.cs b/Main/System/Team/TeamHero.cs
index 91cf827..e545671 100644
--- a/Main/System/Team/TeamHero.cs
+++ b/Main/System/Team/TeamHero.cs
@@ -1,17 +1,15 @@
 
 
-public class TeamHero
+public partial class TeamHero
 {
     public HeroInfo heroInfo;
     public TeamBase teamBase;
     public int heroIndex;
 
-    public void MergeProperties()
-    {
-        if (heroInfo == null)
-        {
-            return;
-        }
+    //  鏈�缁堝睘鎬� 褰撳墠灞炴�у簲璇ユ槸瑕佸湪杩欎竴灞傜殑
 
-    }
+	public int GetPower()
+	{
+		return heroInfo.CalculatePower();
+	}    
 }
\ No newline at end of file
diff --git a/Main/System/Team/TeamManager.cs b/Main/System/Team/TeamManager.cs
index 7639faf..4bf5ce6 100644
--- a/Main/System/Team/TeamManager.cs
+++ b/Main/System/Team/TeamManager.cs
@@ -23,22 +23,9 @@
 
 		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);
+			teamDict.Add(teamType, team);
 		}
 
 		return team;
diff --git a/Main/Utility/UniTaskExtension.cs b/Main/Utility/UniTaskExtension.cs
index ccade90..58ff6bd 100644
--- a/Main/Utility/UniTaskExtension.cs
+++ b/Main/Utility/UniTaskExtension.cs
@@ -6,17 +6,27 @@
 {
 	public static void DelayFrame(this GameObject go, Action action)
     {
-        DelayFrameInternal(action);
+        DelayFrameInternal(1, action);
     }
 
 	public static void DelayFrame(this Component cmp, Action action)
     {
-        DelayFrameInternal(action);
+        DelayFrameInternal(1, action);
     }
 
-    private async static UniTask DelayFrameInternal(Action action)
+    private async static UniTask DelayFrameInternal(int frame, Action action)
     {
-        await UniTask.DelayFrame(1);
+        await UniTask.DelayFrame(frame);
         action?.Invoke();
     }
+
+    public static void DelayFrames(this Component cmp, int frames, Action action)
+    {
+        DelayFrameInternal(frames, action);
+    }
+
+    public static void DelayFrames(this GameObject go, int frames, Action action)
+    {
+        DelayFrameInternal(frames, action);
+    }
 }
\ No newline at end of file
diff --git a/Main/Utility/VesselExtension.cs b/Main/Utility/VesselExtension.cs
index a98b3f9..cbeb8a7 100644
--- a/Main/Utility/VesselExtension.cs
+++ b/Main/Utility/VesselExtension.cs
@@ -6,6 +6,8 @@
 public static class VesselExtension
 {
 
+    public static System.Random rng = new System.Random();
+
     public static bool IsNullOrEmpty<T>(this List<T> vessel)
     {
         return vessel == null || vessel.Count == 0;
@@ -102,4 +104,14 @@
         return list[randomIndex];
     }
 
+    public static List<T> Shuffle<T>(this IList<T> list)
+    {
+        var shuffled = new List<T>(list); // 鍒涘缓鍓湰
+        for (int i = shuffled.Count - 1; i > 0; i--)
+        {
+            int j = rng.Next(i + 1);
+            (shuffled[i], shuffled[j]) = (shuffled[j], shuffled[i]);
+        }
+        return shuffled;
+    }
 }

--
Gitblit v1.8.0