From 35e1332c385226a4f57c4294c19045a8aed9abe6 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期三, 10 九月 2025 17:09:52 +0800
Subject: [PATCH] 125 【战斗】战斗系统 目标选择规则&bug修复

---
 Main/System/Battle/BattleUtility.cs |  108 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 78 insertions(+), 30 deletions(-)

diff --git a/Main/System/Battle/BattleUtility.cs b/Main/System/Battle/BattleUtility.cs
index c37887b..23774fe 100644
--- a/Main/System/Battle/BattleUtility.cs
+++ b/Main/System/Battle/BattleUtility.cs
@@ -176,68 +176,116 @@
         // 3    鍚庢帓
         // 4    绾垫帓锛屾寜瀵逛綅瑙勫垯閫夋嫨绾垫帓
         // 5    鑷繁锛岄粯璁ゅ彧閫夎嚜宸�
-        // 6    缁ф壙涓绘妧鑳�/鏉ユ簮鎶�鑳界洰鏍�
-        //      涓�鑸槸棰濆瑙﹀彂鐨勬妧鑳戒娇鐢紝濡傛鐜囬檮鍔犳煇buff
-        //      棰濆瑙﹀彂鐨勬妧鑳藉鏋滅洰鏍囦笌涓绘妧鑳戒笉涓�鑷达紝鍒欓噸鏂拌瀹氱洰鏍囧嵆鍙�
-        //      鎴栬鍔ㄨЕ鍙戠殑鎶�鑳斤紝鍙户鎵胯Е鍙戞潵婧愭妧鑳界殑鏀婚槻鍙屾柟鍏崇郴
 
         switch (skillConfig.TagAim)
         {
             case 0:
-                //  鍏ㄩ儴鑼冨洿
-                //鍏ㄩ儴鑼冨洿+鏁屾垜+鐩爣鏁伴噺涓�6
-                //灏辨槸鍙栨晫鎴戠珯浣嶄腑鐨�2鍙蜂綅
-                returnIndex = 1;
-                break;
-            case 1:
-                returnIndex = caster.teamHero.positionNum;
-                //  瀵绘壘瀵逛綅鏄惁鏈変汉 娌℃湁鐨勮瘽閫夋嫨鏈�灏忕殑
-                List<BattleObject> opposite = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.teamHero.positionNum == returnIndex select bo);
-                if (opposite.Count > 0)
+                // 0   鍏ㄩ儴鑼冨洿锛�
+                // 鑻agCount鐩爣涓暟涓�0鎴�6锛屾牴鎹甌agFriendly鏁屾垜閰嶇疆锛屼唬琛ㄤ綔鐢ㄤ簬鏁屾柟鍏ㄤ綋鎴栨垜鏂瑰叏浣擄紝姝ゆ椂涓荤洰鏍囦负鏁屾垜绔欎綅涓殑2鍙蜂綅缃�
+                // 鑻agCount鐩爣涓暟涓�1~5涓紝鏍规嵁TagFriendly鏁屾垜+TagAffect缁嗗垎鐩爣閰嶇疆锛屼唬琛ㄩ殢鏈轰綔鐢ㄤ簬鏁屾柟鎴栨垜鏂箈涓灏嗭紝绗竴涓负涓荤洰鏍�
+                if (skillConfig.TagCount == 0 || skillConfig.TagCount == 6)
                 {
-                    returnIndex = opposite[0].teamHero.positionNum;
+                    returnIndex = 1;
                 }
                 else
                 {
-                    opposite = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() select bo);
-                    opposite.Sort((a, b) => a.teamHero.positionNum.CompareTo(b.teamHero.positionNum));
-                    returnIndex = opposite.Count > 0 ? opposite[0].teamHero.positionNum : returnIndex;
+                    uint objId = targetList[0].ObjID;
+                    BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)objId);
+                    return target.teamHero.positionNum;
+                }
+                break;
+            case 1:
+                // 1    瀵逛綅锛�
+                // 榛樿鍙��1涓紝瀵逛綅瑙勫垯涓篈1浼樺厛鎵揃1锛孉2浼樺厛鎵揃2锛孉3浼樺厛鎵揃3锛屽浣嶇洰鏍囨浜℃椂锛屼紭鍏堝墠鎺掞紝姣斿B2宸茬粡姝讳骸锛岄偅涔圓2灏嗕紭鍏堟墦B1锛屽墠鎺�1銆�2銆�3鍙蜂綅缃叏閮ㄦ浜′箣鍚庢墠寮�濮嬮�夋嫨鍚庢帓4銆�5銆�6鍙蜂綅缃紝瀵逛綅鍙彲閫�1涓洰鏍囷紝鍗充富鐩爣
+                if (targetList.Count > 0)
+                {
+                    BattleObject battleObject = caster.battleField.battleObjMgr.GetBattleObject((int)targetList[0].ObjID);
+                    if (battleObject != null)
+                    {
+                        returnIndex = battleObject.teamHero.positionNum;
+                    }
+                    else
+                    {
+                        Debug.LogError("GetMainTargetPositionNum 鎵句笉鍒扮洰鏍� ObjId : " + targetList[0].ObjID);
+                        returnIndex = 0;
+                    }
+                }
+                else
+                {
+                    Debug.LogError("targetList 鐩爣鍒楄〃涓虹┖");
+                    returnIndex = 0;
                 }
                 break;
             case 2:
-                //  鐪嬬湅瀵归潰鍓嶆帓鏄惁閮芥椿鐫�
-                List<BattleObject> front = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.teamHero.positionNum < 3 select bo);
-                if (front.Count > 0)
+                //  1銆�2銆�3鍙蜂綅涓哄墠鎺掞紝榛樿2鍙蜂綅缃负涓荤洰鏍囷紝褰�1銆�2銆�3鍙蜂綅缃鑹插叏閮ㄦ浜★紝鍓嶆帓灏嗘浛鎹㈡垚鍚庢帓锛�5鍙蜂綅缃彉鏇翠负涓荤洰鏍囷紝
+                //  鑻ラ厤缃甌agAffect缁嗗垎鐩爣锛屼笖浜烘暟灏忎簬3锛屽垯鎵�鏈夎閫夋嫨鐩爣鍧囦负涓荤洰鏍囷紙鏂芥硶浣嶇疆浼氱敤瀹㈡埛绔厤缃級
+                // 锛堝嵆鍓嶆帓榛樿2鍙蜂綅鎴�5鍙蜂綅瑙勫垯鏃犳晥锛屽疄闄呬綔鐢ㄥ灏戜汉灏辨槸澶氬皯涓富鐩爣锛� (YL : TagAffect>0 && TagAffect != 3灏辨槸鍏ㄤ綋閮芥槸涓荤洰鏍� 鍚庢帓涓�鏍� )
+                if (skillConfig.TagAffect != 0 && skillConfig.TagAffect != 3 && skillConfig.TagCount < 3)
                 {
-                    returnIndex = 1;
+                    uint objId = targetList[0].ObjID;
+                    BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)objId);
+                    returnIndex = target.teamHero.positionNum;
                 }
                 else
                 {
-                    returnIndex = 4;
+                    //  鐪嬬湅瀵归潰鍓嶆帓鏄惁閮芥椿鐫�
+                        List<BattleObject> front = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.teamHero.positionNum < 3 select bo);
+                    if (front.Count > 0)
+                    {
+                        returnIndex = 1;
+                    }
+                    else
+                    {
+                        returnIndex = 4;
+                    }
                 }
                 break;
             case 3:
-                //  鐪嬬湅瀵归潰鍚庢帓鏄惁閮芥椿鐫�
-                List<BattleObject> back = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.teamHero.positionNum >= 3 select bo);
-                if (back.Count > 0)
+                if (skillConfig.TagAffect != 0 && skillConfig.TagAffect != 3 && skillConfig.TagCount < 3)
                 {
-                    returnIndex = 4;
+                    uint objId = targetList[0].ObjID;
+                    BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)objId);
+                    returnIndex = target.teamHero.positionNum;
                 }
                 else
                 {
-                    returnIndex = 1;
+                    //  鐪嬬湅瀵归潰鍚庢帓鏄惁閮芥椿鐫�
+                    List<BattleObject> back = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && bo.teamHero.positionNum >= 3 select bo);
+                    if (back.Count > 0)
+                    {
+                        returnIndex = 4;
+                    }
+                    else
+                    {
+                        returnIndex = 1;
+                    }
                 }
                 break;
             // 4    绾垫帓锛屾寜瀵逛綅瑙勫垯閫夋嫨绾垫帓
             case 4:
-                List<BattleObject> vertical = new List<BattleObject>(from bo in targetObjList where !bo.IsDead() && (bo.teamHero.positionNum - caster.teamHero.positionNum) % 3 == 0 select bo);
-                //  TODO YYL
+                returnIndex = int.MaxValue;
+                for (int i = 0; i < targetList.Count; i++)
+                {
+                    var hurt = targetList[i];
+                    BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+                    if (target == null)
+                    {
+                        Debug.LogError("GetMainTargetPositionNum 鎵句笉鍒扮洰鏍� ObjId : " + hurt.ObjID);
+                        continue;
+                    }
+                    else
+                    {
+                        returnIndex = Mathf.Min(returnIndex, target.teamHero.positionNum);
+                    }
+                }
                 break;
             // 5    鑷繁锛岄粯璁ゅ彧閫夎嚜宸�
             case 5:
                 returnIndex = caster.teamHero.positionNum;
                 break;
             default:
+                Debug.LogError("鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閫夋嫨涓荤洰鏍� 鏈夐渶姹傝鑱旂郴绛栧垝 鎶�鑳絠d:" + skillConfig.SkillID + " TagAim " + skillConfig.TagAim);
+                returnIndex = 0;
                 break;
         }
 

--
Gitblit v1.8.0