From dc7922d80c1d133b6261b8af1d521567d2c0a35d Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期四, 30 十月 2025 16:51:39 +0800
Subject: [PATCH] Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_scripts

---
 Main/System/Battle/BattleObject/BattleObject.cs |   94 ++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 80 insertions(+), 14 deletions(-)

diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index ec4ec52..f868dee 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -87,6 +87,8 @@
         buffMgr = new BattleObjectBuffMgr();
         buffMgr.Init(this);
 
+        buffMgr.onIsControlChanged += OnControledChange;
+
         layerMgr = new BattleObjectLayerMgr();
         layerMgr.Init(this);
 
@@ -127,6 +129,9 @@
 
         motionBase.Release();
         motionBase = null;
+        buffMgr.onIsControlChanged -= OnControledChange;
+        buffMgr.Release();
+        buffMgr = null;
         teamHero = null;
         ObjID = 0;
 
@@ -134,6 +139,24 @@
         {
             GameObject.DestroyImmediate(heroGo);
             heroGo = null;
+        }
+    }
+
+    //  鏈夊彉鍖栦簡鎵嶄細璋冪敤杩欎釜鍑芥暟
+    private void OnControledChange(int groupType, bool value)
+    {
+        //  杩欓噷鏄彈鍒扮‖鎺ф椂鍊� 闇�瑕佽〃鐜扮殑鍔ㄧ敾
+        if (groupType == BattleConst.HardControlGroup)
+        {
+            //  浠庢病琚‖鎺у埌琚‖鎺�
+            if (value)
+            {
+                motionBase.SetControledAnimation();
+            }
+            else
+            {
+                motionBase.CancelControledAnimation();
+            }
         }
     }
 
@@ -268,14 +291,63 @@
         return true;
     }
 
-    public virtual void Hurt(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, bool playAnimation = true)
+    public virtual void Hurt(List<long> damageValues, long _totalDamage,
+        HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, int hitIndex,
+        BattleDrops battleDrops, HB422_tagMCTurnFightObjDead deadPack)
     {
-        BattleDmgInfo dmgInfo = PopDamage(damageValues, _totalDamage, hurt, skillConfig);
+        bool isLastHit = hitIndex >= skillConfig.DamageDivide.Length - 1;
+        bool firstHit = hitIndex == 0;
+        BattleDmgInfo dmgInfo = PopDamage(damageValues, _totalDamage, hurt, skillConfig, isLastHit);
 
-        if ((dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage()) && playAnimation)
+
+        //  杩欓噷
+        if (dmgInfo.IsType(DamageType.Dodge) && !buffMgr.isControled[BattleConst.HardControlGroup])
         {
-            motionBase.PlayAnimation(MotionName.hit, false);
+            if (isLastHit)
+            {
+                DodgeFinishAction dodgeFinish = new DodgeFinishAction(battleField, this);
+                battleField.recordPlayer.InsertRecord(dodgeFinish);
+            }
+
+            if (firstHit)
+            {
+                OnDodgeBegin();
+            }
         }
+
+
+
+        bool isFatalAttack = (null != deadPack) && isLastHit;
+
+        if (isFatalAttack)
+        {
+            if (null != battleDrops)
+            {
+                PushDropItems(battleDrops);
+            }
+            battleField.OnObjsDead(new List<HB422_tagMCTurnFightObjDead>() { deadPack });
+            
+        }
+        else
+        {
+            if (dmgInfo.IsType(DamageType.Block))
+            {
+                battleField.battleEffectMgr.PlayEffect(this, 19999, heroRectTrans, Camp);
+            }
+            else
+            {
+                if ((dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage()))
+                {
+                    if (!buffMgr.isControled[BattleConst.HardControlGroup])
+                    {
+                        motionBase.PlayAnimation(MotionName.hit, false);
+                    }
+                }
+            }
+
+        }
+
+
     }
 
     public void SuckHp(uint suckHP, SkillConfig skillConfig)
@@ -289,7 +361,7 @@
     }
 
 
-    const float pingpongTime = 0.2f;
+    const float pingpongTime = 0.4f;
     //  闂伩寮�濮�
     public virtual void OnDodgeBegin()
     {
@@ -350,16 +422,9 @@
     }
 
     // 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
-    protected virtual BattleDmgInfo PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig)
+    protected virtual BattleDmgInfo PopDamage(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, bool isLastHit)
     {
-        BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, damageValues, this, hurt, skillConfig);
-
-        if (battleDmgInfo.IsType(DamageType.Dodge))
-        {
-            OnDodgeBegin();
-            DodgeFinishAction dodgeFinish = new DodgeFinishAction(battleField, this);
-            battleField.recordPlayer.InsertRecord(dodgeFinish);
-        }
+        BattleDmgInfo battleDmgInfo = new BattleDmgInfo(battleField.guid, damageValues, this, hurt, skillConfig, isLastHit);
 
         int currentHurtHp = 0;
         for (int i = 0; i < damageValues.Count; i++)
@@ -439,6 +504,7 @@
     public void SetSpeedRatio(float ratio)
     {
         motionBase.SetSpeedRatio(ratio);
+        heroInfoBar.SetSpeedRatio(ratio);
     }
 
 

--
Gitblit v1.8.0