From 83ff2cfc367d3227449fa8414a25541374929ecb Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 29 一月 2026 15:43:50 +0800
Subject: [PATCH] 125 战斗 命格复活支持

---
 Main/System/Battle/BattleObject/HeroBattleObject.cs |   82 ++++++++++++++++++++++++++++++++++++++--
 1 files changed, 77 insertions(+), 5 deletions(-)

diff --git a/Main/System/Battle/BattleObject/HeroBattleObject.cs b/Main/System/Battle/BattleObject/HeroBattleObject.cs
index 9218667..363f3e9 100644
--- a/Main/System/Battle/BattleObject/HeroBattleObject.cs
+++ b/Main/System/Battle/BattleObject/HeroBattleObject.cs
@@ -15,6 +15,11 @@
     public GameObject heroGo => _heroGo;
 
     public MotionBase motionBase;
+    
+    public TeamHero teamHero { get; private set; }
+    
+    // Buff 绠$悊鍣紙鍙湁 Hero 鏈� buff 绯荤粺锛�
+    public BattleObjectBuffMgr buffMgr;
 
     private RectTransform m_heroRectTrans;
 
@@ -53,13 +58,15 @@
     public void Init(GameObject _heroGo, TeamHero _teamHero, BattleCamp _camp)
     {
         this._heroGo = _heroGo;
-        Init(_teamHero, _camp);
-    }
-
-    public override void Init(TeamHero _teamHero, BattleCamp _camp)
-    {
         teamHero = _teamHero;
         Camp = _camp;
+        ObjID = _teamHero.ObjID;
+        InitInternal();
+    }
+
+    
+    private void InitInternal()
+    {
         motionBase = new MotionBase();
         motionBase.Init(_heroGo.GetComponentInChildren<SkeletonAnimation>(true));
         buffMgr = new BattleObjectBuffMgr();
@@ -89,6 +96,41 @@
             heroInfoBar.SetActive(true);
         }
         SetFront();
+
+        if (battleField.ToString() != BattleConst.StoryBattleField &&
+            battleField.ToString() != BattleConst.TianziBillboradBattleField)
+        {
+            var hitArea = heroGo.GetComponent<Image>();
+            if (hitArea == null)
+            {
+                hitArea = heroGo.AddComponent<Image>();
+                hitArea.color = new Color(0, 0, 0, 0); //璁╁皠绾挎娴嬪埌
+            }
+
+            var btn = heroGo.GetComponent<ButtonEx>();
+            if (btn == null)
+            {
+                btn = heroGo.AddComponent<ButtonEx>();
+                btn.interval = 0.5f;// 闃叉棰戠箒杩炵画鐐瑰嚮
+            }
+
+            btn.AddListener(() =>
+            {
+                // 鍒ゆ柇鐐瑰嚮鐨勬槸鎴戞柟闃佃惀杩樻槸鏁屾柟闃佃惀锛岀洰鍓嶅乏杈归兘鏄垜鏂归樀钀�
+                bool isMySide = Camp == BattleCamp.Red;
+                EventBroadcast.Instance.Broadcast(EventName.BATTLE_CLICK_HERO, new BattleClickHeroData()
+                {
+                    battleName = battleField.ToString(),
+                    isMySide = isMySide,
+                    mapID = battleField.MapID,
+                    funcLineID = battleField.FuncLineID,
+                    npcID = teamHero.NPCID,
+                    posNum = teamHero.positionNum,
+                    heroID = teamHero.heroId,
+                    teams = battleField?.battleObjMgr.GetBattleObjList(isMySide ? BattleCamp.Red : BattleCamp.Blue),
+                });
+            });
+        }
     }
 
     public override void Run()
@@ -481,6 +523,36 @@
         motionBase.ResetForReborn(false);
         isReborning = false;
     }
+    
+    // ============ 瀹炵幇鎶借薄璁块棶鏂规硶 ============
+    
+    public override BattleObjectBuffMgr GetBuffMgr() => buffMgr;
+    
+    public override int GetPositionNum() => teamHero.positionNum;
+    public override float GetModelScale() => teamHero.modelScale;
+    public override string GetName() => teamHero.name;
+    
+    protected override bool GetIsStunned() => teamHero.isStunned;
+    protected override bool GetIsFrozen() => teamHero.isFrozen;
+    protected override bool GetIsStoned() => teamHero.isStoned;
+    protected override bool GetIsSlient() => teamHero.isSlient;
+    protected override bool GetIsDisarmed() => teamHero.isDisarmed;
+    protected override bool GetIsInvincible() => teamHero.isInvinceble;
+    protected override bool GetIsDead() => teamHero.isDead;
+    public override int GetRage() => teamHero.rage;
+    
+    protected override void ApplyCasterHpChange(long newHp)
+    {
+        teamHero.curHp = newHp;
+    }
+    
+    public override long GetCurHp() => teamHero.curHp;
+    public override long GetMaxHp() => teamHero.maxHp;
+    public override void SetCurHp(long value) { teamHero.curHp = value; }
+    public override void SetIsDead(bool value) { teamHero.isDead = value; }
+    
+    public override int GetNPCID() => teamHero.NPCID;
+    public override long GetFightPower() => teamHero.fightPower;
 
     // 浼ゅ杩樿鐪� 鏄惁闂伩 鏆村嚮 and so on 闇�瑕佹湁涓�涓狣amageType 鏈嶅姟鍣ㄥ簲璇ヤ細缁�
     protected override BattleDmgInfo PopDamage(BattleHurtParam battleHurtParam)

--
Gitblit v1.8.0