From 2dd1841d03a730d3d369092c2a3ad656cee4bf64 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期四, 07 五月 2026 15:11:38 +0800
Subject: [PATCH] 512 跨服演武场
---
Main/System/Battle/Skill/SkillBase.cs | 1109 +++++++++++++--------------------------------------------
1 files changed, 260 insertions(+), 849 deletions(-)
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 22c3082..3f64d78 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -1,12 +1,22 @@
-using System.Collections.Generic;
+锘縰sing System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using Spine;
using System.Linq;
using System;
-public class SkillBase
+// SkillBase锛氭妧鑳借繍琛屾椂鍩虹被銆�
+// 鏈被浣跨敤 partial 鎷嗗垎涓哄涓枃浠讹紝鎸夎亴璐e垎缁勶細
+// SkillBase.cs 瀛楁銆佹瀯閫犮�佸叕鍏卞叆鍙o紙Cast/Run/OnSkillStart/鍚� Frame 鍥炶皟 绛夛級
+// SkillBase.Cast.cs 鏂芥硶闃舵锛氱Щ鍔ㄣ�佸姩鐢汇�佹畫褰便�侀珮浜�佹敾鍑诲洖鍚堢粨鏉�
+// SkillBase.Hit.cs 鍛戒腑闃舵锛歄nHit 鍒嗗彂鍒颁富鐩爣 / 婧呭皠鐩爣 / 鍛戒腑鎻愮ず
+// SkillBase.SubSkill.cs 鍓嶇疆鍐呭祵瀛愭妧鑳界殑鏀堕泦涓庢姇閫�
+// SkillBase.Death.cs 姝讳骸鍖呬笌鎺夎惤/缁忛獙鍒嗛厤
+// SkillBase.Buff.cs Buff 鍖咃紙HB428/HB429锛夌殑鏀堕泦涓庡垎鍙�
+// SkillBase.Finish.cs 瀹屾垚鍒ゅ畾涓庡己鍒剁粨鏉�
+public partial class SkillBase
{
+ // ===== 甯搁噺 =====
const float moveTime = 0.5f;
private static readonly Color colorGreen = new Color(33f / 255f,
@@ -16,41 +26,252 @@
87f / 255f,
189f / 255f);
- protected SkillEffect skillEffect;
- protected HB427_tagSCUseSkill tagUseSkillAttack;
+ // ===== 鏍稿績寮曠敤 =====
+ public HB427_tagSCUseSkill tagUseSkillAttack;
public SkillConfig skillConfig;
- protected bool isFinished = false;
+ public SkillSkinConfig skillSkinConfig;
+ public BattleObject caster = null; // 鏂芥硶鑰�
protected BattleField battleField = null; // 鎴樺満
protected RectTransform targetNode = null; // 鐩爣鑺傜偣
- protected BattleObject caster = null; // 鏂芥硶鑰�
protected List<GameNetPackBasic> packList;
- protected List<SkillRecordAction> otherSkillActionList = new List<SkillRecordAction>();
+
+ // ===== 鍛戒腑鏁堟灉 =====
+ protected SkillEffect skillEffect;
+
+ // ===== 瀛愭妧鑳�/瀛愬姩浣滅瓑寰呭垪琛� =====
+ protected List<RecordAction> currentWaitingSkill = new List<RecordAction>();
+
+ // ===== 姝讳骸鐩稿叧涓存椂鏁版嵁 =====
protected List<H0704_tagRolePackRefresh> dropPackList = new List<H0704_tagRolePackRefresh>();
protected List<HB405_tagMCAddExp> expPackList = new List<HB405_tagMCAddExp>();
- protected bool moveFinished = false;
- public int fromSkillId;
- public bool isPlay = false;
+ private Dictionary<int, BattleDrops> tempDropList = new Dictionary<int, BattleDrops>();
+ private Dictionary<int, BattleDeadPack> tempDeadPackList = new Dictionary<int, BattleDeadPack>();
+ // ===== Buff 鐩稿叧鍖呴泦鍚堬紝鏀寔 HB428(鍒锋柊) 鍜� HB429(鍒犻櫎) =====
+ protected List<GameNetPackBasic> buffPackCollections = new List<GameNetPackBasic>();
+
+ // ===== 鐢熷懡鍛ㄦ湡鐘舵�侊紙4 涓苟琛岄噷绋嬬浣嶏紝鍚堝苟鍒板悓涓� Flags 瀛楁锛� =====
+ // Started : 宸茶繘鍏ユ柦娉曢樁娈碉紙OnSkillStart 璋冪敤鍚庯級
+ // MoveCompleted : 浣嶇Щ宸叉敹灏撅紙OnAllAttackMoveFinished锛�
+ // MotionCompleted: 鎶�鑳藉姩鐢诲凡鎾斁瀹岋紙OnFinalFrameEnd锛�
+ // Finished : 鍖呭垪琛ㄥ凡澶勭悊瀹岋紙OnSkillFinished / ForceFinished 缁撳熬锛�
+ // 4 涓噷绋嬬鐩镐簰鐙珛锛岄潪绾挎�ч樁娈碉紝涓嶈兘鐢ㄥ崟涓� state 琛ㄨ揪銆�
+ [System.Flags]
+ protected enum SkillStateFlags
+ {
+ None = 0,
+ Started = 1 << 0,
+ MoveCompleted = 1 << 1,
+ MotionCompleted = 1 << 2,
+ Finished = 1 << 3,
+ }
+
+ private SkillStateFlags _stateFlags = SkillStateFlags.None;
+
+ /// <summary>褰撳墠鎶�鑳界姸鎬佷綅锛堝彧璇伙紝璋冭瘯鐢級銆�</summary>
+ protected SkillStateFlags StateFlags => _stateFlags;
+
+#if UNITY_EDITOR
+ /// <summary>渚涘閮ㄨ皟璇�/璇婃柇鎵撳嵃鐢紝闈炵紪杈戝櫒涓嬩笉缂栬瘧銆�</summary>
+ public string StateFlagsForDebug => _stateFlags.ToString();
+#endif
+
+ /// <summary>鏄惁宸茶繘鍏ユ柦娉曢樁娈碉紙OnSkillStart 璋冪敤鍚庝负 true锛夈��</summary>
+ public bool isPlay
+ {
+ get => (_stateFlags & SkillStateFlags.Started) != 0;
+ set => SetFlag(SkillStateFlags.Started, value);
+ }
+
+ /// <summary>鍖呭垪琛ㄦ槸鍚﹀凡鍏ㄩ儴澶勭悊瀹屻��</summary>
+ protected bool isFinished
+ {
+ get => (_stateFlags & SkillStateFlags.Finished) != 0;
+ set => SetFlag(SkillStateFlags.Finished, value);
+ }
+
+ /// <summary>浣嶇Щ鏄惁宸叉敹灏俱��</summary>
+ protected bool moveFinished
+ {
+ get => (_stateFlags & SkillStateFlags.MoveCompleted) != 0;
+ set => SetFlag(SkillStateFlags.MoveCompleted, value);
+ }
+
+ /// <summary>鎶�鑳藉姩鐢绘槸鍚﹀凡鎾斁瀹屻��</summary>
+ protected bool isMotionCompleted
+ {
+ get => (_stateFlags & SkillStateFlags.MotionCompleted) != 0;
+ set => SetFlag(SkillStateFlags.MotionCompleted, value);
+ }
+
+ private void SetFlag(SkillStateFlags flag, bool value)
+ {
+#if UNITY_EDITOR
+ // 璁板綍鐘舵�佸彉鏇达細鍗℃/鍗℃椿鐨勬帓鏌ュ埄鍣ㄣ��
+ // 缂栬緫鍣ㄤ笅鍙湪鍊肩湡姝e彂鐢熸敼鍙樻椂鎵撳嵃锛岄伩鍏嶅埛灞忋��
+ bool oldValue = (_stateFlags & flag) != 0;
+ if (oldValue != value)
+ {
+ int skillId = skillConfig != null ? skillConfig.SkillID : 0;
+ ulong casterId = tagUseSkillAttack != null ? tagUseSkillAttack.ObjID : 0UL;
+ BattleDebug.LogError(
+ $"SkillBase.StateFlags 鍙樻洿:skillId={skillId} caster={casterId} " +
+ $"{flag}: {oldValue} -> {value} (before={_stateFlags})");
+ }
+#endif
+
+ if (value) _stateFlags |= flag;
+ else _stateFlags &= ~flag;
+ }
+
+ // ===== 鐖跺瓙鍏崇郴 =====
+ public SkillBase fromSkill;
+ // 鐖禦ecordAction锛圫killRecordAction锛夛紝鐢ㄤ簬瀛愭妧鑳藉缓绔嬬埗瀛愬叧绯�
+ protected SkillRecordAction ownRecordAction;
+
+ // ===== 绉诲姩閫熷害锛堟畫褰卞姞閫熸椂浼氭敼鍙橈級 =====
private float MoveSpeed = 750f;
- private Dictionary<int, BattleDrops> tempDropList = new Dictionary<int, BattleDrops>();
- private Dictionary<int, HB422_tagMCTurnFightObjDead> tempDeadPackList = new Dictionary<int, HB422_tagMCTurnFightObjDead>();
-
- protected List<HB428_tagSCBuffRefresh> buffCollections = new List<HB428_tagSCBuffRefresh>();
-
+#if UNITY_EDITOR
+ public static Dictionary<string, string> changeListDict = new Dictionary<string, string>();
+#endif
// 鏋勯�犲嚱鏁帮細鍒濆鍖栨妧鑳藉熀纭�鏁版嵁
public SkillBase(BattleObject _caster, SkillConfig _skillCfg, HB427_tagSCUseSkill vNetData, List<GameNetPackBasic> _packList, BattleField _battleField = null)
{
caster = _caster;
- if (null == caster)
- {
- throw new Exception("SkillBase caster is null ");
- }
skillConfig = _skillCfg;
tagUseSkillAttack = vNetData;
battleField = _battleField;
packList = _packList;
+
+ if (_caster is HeroBattleObject heroBattleObject)
+ {
+ skillSkinConfig = skillConfig.GetSkillSkinConfig(heroBattleObject.teamHero.SkinID);
+
+ if (null == skillSkinConfig)
+ {
+ Debug.LogError("鎵句笉鍒版妧鑳界毊鑲よ〃 " + "skillId: " + skillConfig.SkillID + " skinId: " + heroBattleObject.teamHero.SkinID);
+ }
+ }
+ else
+ {
+ skillSkinConfig = skillConfig.GetOriginSkinConfig();
+ }
+
+
+ // 娉ㄥ唽姝e湪閲婃斁鐨勬妧鑳�
+ if (battleField != null && caster != null)
+ {
+ battleField.AddCastingSkill(caster.ObjID, this);
+ }
+
+ SafetyCheck();
+ }
+
+ public virtual void AfterAddToQueue()
+ {
+
+ }
+
+ // 璁剧疆鐖禦ecordAction
+ public void SetOwnRecordAction(SkillRecordAction recordAction)
+ {
+ ownRecordAction = recordAction;
+ }
+
+ private void PinrtHB427Hp()
+ {
+#if UNITY_EDITOR
+ string skillDetail = "SkillCaster : " + tagUseSkillAttack.ObjID + " -> cast SkillID: " + skillConfig.SkillID + "\n";
+
+ skillDetail += "------------------ HurtList ------------------\n";
+ for (int i = 0; i < tagUseSkillAttack.HurtCount; i++)
+ {
+ var Hurt = tagUseSkillAttack.HurtList[i];
+ BattleObject battleObject = caster.battleField.battleObjMgr.GetBattleObject((int)Hurt.ObjID);
+
+ string targetName = battleObject != null ? battleObject.GetName() : "Unknown";
+ long hurtHp = GeneralDefine.GetFactValue(Hurt.HurtHP, Hurt.HurtHPEx);
+ long curHp = GeneralDefine.GetFactValue(Hurt.CurHP, Hurt.CurHPEx);
+
+ skillDetail += $" [{i}] Target: {targetName} (ObjID:{Hurt.ObjID})\n";
+ skillDetail += $" HurtHP: {hurtHp}\n";
+ skillDetail += $" CurHP: {curHp}\n";
+ skillDetail += $" SuckHP: {Hurt.SuckHP}\n";
+ skillDetail += $" BounceHP: {Hurt.BounceHP}\n";
+ skillDetail += $" AttackTypes: {Hurt.AttackTypes}\n";
+
+ if (Hurt.HurtListEx != null && Hurt.HurtListEx.Length > 0)
+ {
+ skillDetail += $" HurtListEx ({Hurt.HurtListEx.Length}):\n";
+ for (int j = 0; j < Hurt.HurtListEx.Length; j++)
+ {
+ var hurtEx = Hurt.HurtListEx[j];
+ long hurtExHp = GeneralDefine.GetFactValue(hurtEx.HurtHP, hurtEx.HurtHPEx);
+ long curExHp = GeneralDefine.GetFactValue(hurtEx.CurHP, hurtEx.CurHPEx);
+
+ skillDetail += $" [{j}] ObjID:{hurtEx.ObjID} HurtHP:{hurtExHp} CurHP:{curExHp} SuckHP:{hurtEx.SuckHP} AttackTypes:{hurtEx.AttackTypes}\n";
+ }
+ }
+ }
+
+ skillDetail += "------------------ HurtListEx ------------------\n";
+ if (tagUseSkillAttack.HurtListEx != null)
+ {
+ for (int i = 0; i < tagUseSkillAttack.HurtListEx.Length; i++)
+ {
+ var HurtEx = tagUseSkillAttack.HurtListEx[i];
+ BattleObject battleObject = caster.battleField.battleObjMgr.GetBattleObject((int)HurtEx.ObjID);
+
+ string targetName = battleObject != null ? battleObject.GetName() : "Unknown";
+ long hurtHp = GeneralDefine.GetFactValue(HurtEx.HurtHP, HurtEx.HurtHPEx);
+ long curHp = GeneralDefine.GetFactValue(HurtEx.CurHP, HurtEx.CurHPEx);
+
+ skillDetail += $" [{i}] Target: {targetName} (ObjID:{HurtEx.ObjID})\n";
+ skillDetail += $" HurtHP: {hurtHp}\n";
+ skillDetail += $" CurHP: {curHp}\n";
+ skillDetail += $" SuckHP: {HurtEx.SuckHP}\n";
+ skillDetail += $" AttackTypes: {HurtEx.AttackTypes}\n";
+ }
+ }
+
+ skillDetail += "------------------ END ------------------\n";
+
+ if (changeListDict.ContainsKey(caster.battleField.guid))
+ {
+ string origin = changeListDict[caster.battleField.guid];
+ origin += skillDetail;
+ changeListDict[caster.battleField.guid] = origin;
+
+ }
+ else
+ changeListDict.Add(caster.battleField.guid, skillDetail);
+
+ Debug.LogError("skillDetail : " + skillDetail);
+#endif
+ }
+
+ private void SafetyCheck()
+ {
+#if UNITY_EDITOR
+ if (Launch.Instance.isOpenSkillLogFile)
+ {
+ PinrtHB427Hp();
+ }
+#endif
+
+ bool safety = caster != null
+ && skillConfig != null
+ && tagUseSkillAttack != null
+ && battleField != null;
+
+
+ if (!safety)
+ {
+ Debug.LogError("SkillBase SafetyCheck failed! Caster or SkillConfig or TagUseSkillAttack or BattleField is null, or Caster is dead.");
+ ForceFinished();
+ }
}
// 鎶�鑳借繍琛屼富閫昏緫锛氬鐞嗘妧鑳芥晥鏋滃拰鍏朵粬鎶�鑳藉姩浣�
@@ -69,287 +290,31 @@
}
return;
}
-
- if (otherSkillActionList.Count > 0)
- {
- for (int i = otherSkillActionList.Count - 1; i >= 0; i--)
- {
- var action = otherSkillActionList[i];
- if (action.IsFinished())
- {
- otherSkillActionList.RemoveAt(i);
- OnSkillFinished();
- }
- else if (moveFinished)
- {
- action.Run();
- }
- }
- }
- }
-
- protected void ShadowIllutionCreate(bool create)
- {
- if (create)
- {
- Color color = Color.white;
- //1-杩炲嚮锛�2-鍙嶅嚮锛�3-杩藉嚮
- // 鍙嶅嚮钃濊壊
- // 杩藉嚮杩炲嚮缁胯壊
- bool change = false;
- if (tagUseSkillAttack.BattleType == 1)
- {
- color = colorGreen;
- change = true;
- }
- else if (tagUseSkillAttack.BattleType == 2)
- {
- color = colorBlue;
- change = true;
- }
- else if (tagUseSkillAttack.BattleType == 3)
- {
- color = colorGreen;
- change = true;
- }
-
- if (change)
- {
- MoveSpeed = 1125f;
- caster.motionBase.ShowIllusionShadow(true, color);
- }
- }
- else
- {
- MoveSpeed = 750f;
- caster.motionBase.ShowIllusionShadow(false);
- }
- }
-
- // 鎶�鑳介噴鏀句富閫昏緫锛氬箍鎾簨浠躲�侀珮浜洰鏍囥�佹墽琛岄噴鏀�
- public virtual void Cast()
- {
- // 骞挎挱鎶�鑳介噴鏀句簨浠�
- string guid = battleField.guid;
- TeamHero teamHero = caster.teamHero;
- EventBroadcast.Instance.Broadcast<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, guid, skillConfig, teamHero);
-
- if (caster != null)
- {
- // 鎴樻枟绫诲瀷 0-甯歌锛�1-杩炲嚮锛�2-鍙嶅嚮锛�3-杩藉嚮锛�4-瀛愭妧鑳斤紱5-琚姩瑙﹀彂鐨�
- DamageNumConfig hintConfig = null;
- if (tagUseSkillAttack.BattleType == 1)
- {
- hintConfig = DamageNumConfig.Get(BattleConst.BattleComboAttack);
- }
- else if (tagUseSkillAttack.BattleType == 2)
- {
- hintConfig = DamageNumConfig.Get(BattleConst.BattleCounterAttack);
- }
- else if (tagUseSkillAttack.BattleType == 3)
- {
- hintConfig = DamageNumConfig.Get(BattleConst.BattleChaseAttack);
- }
-
- if (hintConfig != null)
- {
- caster.heroInfoBar.ShowTips(((char)hintConfig.prefix).ToString(), true, false, 1.25f);
- // Debug.Break();
- }
- }
-
- // 楂樹寒鎵�鏈夋湰娆℃妧鑳界浉鍏崇殑鐩爣
- HighLightAllTargets();
-
- // 鏍规嵁閲婃斁妯″紡鎵ц鐩稿簲閫昏緫
- switch (skillConfig.castMode)
- {
- case SkillCastMode.None:
- case SkillCastMode.Self:
- CastImpl(OnAttackFinish);
- break;
- case SkillCastMode.Enemy:
- CastToEnemy();
- break;
- case SkillCastMode.Target:
- CastToTarget();
- break;
- case SkillCastMode.Allies:
- CastToAllies();
- break;
- case SkillCastMode.DashCast:
- DashCast(OnAttackFinish);
- break;
- default:
- Debug.LogError("寮哄埗缁撴潫鎶�鑳� 鏆傛椂涓嶆敮鎸佸叾浠栫殑鏂瑰紡閲婃斁 鏈夐渶姹俻lease鑱旂郴绛栧垝 鎶�鑳絠d:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition);
- ForceFinished();
- break;
- }
- }
-
- // 鍐叉挒鏀诲嚮妯″紡锛堝緟瀹炵幇锛�
- protected void DashCast(Action _onComplete)
- {
- Debug.LogError("DashCast 杩樻病瀹炵幇");
- ForceFinished();
- }
-
- // 瀵规晫鏂归噴鏀炬妧鑳斤細绉诲姩鍒版晫鏂瑰尯鍩熻繘琛屾敾鍑�
- protected void CastToEnemy()
- {
- RectTransform target = battleField.GetTeamNode(caster.GetEnemyCamp(), skillConfig);
- ExecuteMoveAndCastSequence(target, () =>
- {
- // ShadowIllutionCreate(true);
- MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, () =>
- {
- // ShadowIllutionCreate(false);
- OnAttackFinish();
- }, MoveSpeed);
- });
- }
-
- // 瀵规寚瀹氱洰鏍囬噴鏀炬妧鑳斤細绉诲姩鍒颁富瑕佺洰鏍囦綅缃繘琛屾敾鍑�
- protected void CastToTarget()
- {
- if (tagUseSkillAttack.HurtCount <= 0)
- {
- Debug.LogError("鎶�鑳芥敾鍑诲寘娌℃湁鐩爣 HurtCount <= 0");
- OnSkillFinished();
- return;
- }
-
- int mainTargetPosNum = BattleUtility.GetMainTargetPositionNum(caster, tagUseSkillAttack.HurtList.ToList(), skillConfig);
- BattleCamp battleCamp = skillConfig.TagFriendly != 0 ? caster.Camp : caster.GetEnemyCamp();
- RectTransform targetTrans = battleField.GetTeamNode(battleCamp, mainTargetPosNum);
-
- ExecuteMoveAndCastSequence(targetTrans, () =>
- {
- RectTransform rectTransform = battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum);
- // ShadowIllutionCreate(true);
- MoveToTarget(rectTransform, Vector2.zero, () =>
- {
- // ShadowIllutionCreate(false);
- OnAttackFinish();
- }, MoveSpeed);
- });
- }
-
- // 瀵瑰弸鏂归噴鏀炬妧鑳斤細绉诲姩鍒板弸鏂瑰尯鍩熻繘琛屾不鐤楁垨澧炵泭
- protected void CastToAllies()
- {
- RectTransform target = battleField.GetTeamNode(caster.Camp, skillConfig);
- ExecuteMoveAndCastSequence(target, () =>
- {
- // ShadowIllutionCreate(true);
- MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, () =>
- {
- // ShadowIllutionCreate(false);
- OnAttackFinish();
- }, MoveSpeed);
- });
- }
-
- // 鎵ц绉诲姩-鏂芥硶-杩斿洖搴忓垪锛氶�氱敤鐨勭Щ鍔ㄦ敾鍑绘祦绋�
- private void ExecuteMoveAndCastSequence(RectTransform target, Action onReturnComplete)
- {
- ShadowIllutionCreate(true);
- MoveToTarget(target, new Vector2(skillConfig.CastDistance, 0), () =>
- {
- TurnBack(() =>
- {
- ShadowIllutionCreate(false);
- CastImpl(() =>
- {
- TurnBack(() =>
- {
- try
- {
- onReturnComplete?.Invoke(); // 娣诲姞寮傚父澶勭悊闃叉鍥炶皟寮傚父瀵艰嚧鐘舵�佷笉瀹屾暣
- }
- catch (Exception ex)
- {
- Debug.LogError($"ExecuteMoveAndCastSequence鍥炶皟寮傚父: {ex.Message}");
- throw;
- }
- }, -1f);
- });
- }, -1f);
- });
- }
-
- // 绉诲姩鍒扮洰鏍囦綅缃細澶勭悊瑙掕壊鐨勭Щ鍔ㄥ姩鐢诲拰閫昏緫
- protected void MoveToTarget(RectTransform target, Vector2 offset, Action _onComplete = null, float speed = 750f)
- {
- if (skillConfig.CastDistance >= 9999)
- {
- _onComplete?.Invoke();
- return;
- }
-
- caster.motionBase.PlayAnimation(MotionName.run, true);
- var tweener = BattleUtility.MoveToTarget(caster.heroRectTrans, target, offset, () =>
- {
- caster.motionBase.PlayAnimation(MotionName.idle, true);
- _onComplete?.Invoke();
- }, speed);
- battleField.battleTweenMgr.OnPlayTween(tweener);
- }
-
- // 杞韩閫昏緫锛氭牴鎹妧鑳介厤缃鐞嗚鑹茶浆鍚�
- protected void TurnBack(Action _onComplete, float forward)
- {
- if (skillConfig.CastDistance < 0)
- {
- Vector3 scale = caster.heroGo.transform.localScale;
- scale.x = Mathf.Abs(scale.x) * forward;
- caster.heroGo.transform.localScale = scale;
- }
- _onComplete?.Invoke();
- }
-
- // 鏀诲嚮瀹屾垚鍚庣殑澶勭悊锛氳浆韬�佹仮澶嶇姸鎬併�佹挱鏀惧緟鏈哄姩鐢�
- protected void OnAttackFinish()
- {
- TurnBack(null, 1f);
- OnAllAttackMoveFinished();
- caster.motionBase.PlayAnimation(MotionName.idle, true);
- }
-
- // 鎵�鏈夋敾鍑荤Щ鍔ㄥ畬鎴愬悗鐨勫鐞嗭細鎭㈠UI鏄剧ず鐘舵��
- protected virtual void OnAllAttackMoveFinished()
- {
- moveFinished = true;
- List<BattleObject> allList = battleField.battleObjMgr.allBattleObjDict.Values.ToList<BattleObject>();
- foreach (BattleObject bo in allList)
- {
- bo.layerMgr.SetFront();
- bo.heroInfoBar.SetActive(true);
- }
- battleField.battleRootNode.skillMaskNode.SetActive(false);
- }
-
- // 鎵ц鎶�鑳介噴鏀惧姩鐢诲拰閫昏緫锛氭挱鏀炬柦娉曞姩浣滃苟鎻愪緵鍥炶皟
- protected TrackEntry CastImpl(Action onComplete = null)
- {
- return caster.motionBase.PlaySkillAnimation(skillConfig, this, tagUseSkillAttack.BattleType == 4, onComplete);
}
// 鎶�鑳藉紑濮嬪洖璋冿細澶勭悊姝讳骸銆佸瓙鎶�鑳姐�佹妧鑳芥晥鏋滃垵濮嬪寲
public void OnSkillStart()
{
- HandleDead();
-
- skillEffect = SkillEffectFactory.CreateSkillEffect(caster, skillConfig, tagUseSkillAttack);
- skillEffect.Play(OnHitTargets);
- foreach (var subSkillPack in tagUseSkillAttack.subSkillList)
+ if (isPlay)
{
- SkillRecordAction recordAction = CustomHB426CombinePack.CreateSkillAction(battleField.guid, new List<GameNetPackBasic>() { subSkillPack });
- otherSkillActionList.Add(recordAction);
- battleField.recordPlayer.ImmediatelyPlay(recordAction);
+ Debug.LogError(" play twice OnSkillStart skillId :" + skillConfig.SkillID);
+ return;
}
+
+ // 鍏堟妸姝讳骸鍖呮敹闆嗕簡
+ HandleDead();
+
+ // 鍐嶅鐞� 鍐呭祵鎶�鑳�
+ ProcessSubSkill();
+
+ skillEffect = SkillEffectFactory.CreateSkillEffect(this, caster, skillConfig, skillSkinConfig, tagUseSkillAttack);
+ skillEffect.Play(OnHitTargets);
+
+
isPlay = true;
}
+
+ // ===== 鎶�鑳借妭鎷嶅洖璋� =====
// 鎶�鑳藉墠鎽囩粨鏉熷洖璋�
public virtual void OnStartSkillFrameEnd() { }
@@ -375,564 +340,10 @@
// 鎶�鑳藉悗鎽囩粨鏉熷洖璋冿細閫氱煡鎶�鑳芥晥鏋滃鐞嗗悗鎽囩粨鏉�
public virtual void OnFinalFrameEnd()
{
-
+ // 鏍囪鍔ㄧ敾鎾斁瀹屾垚
+ isMotionCompleted = true;
+ BattleDebug.LogError($"SkillBase.OnFinalFrameEnd: 鎶�鑳� {skillConfig?.SkillID} 鍔ㄧ敾鎾斁瀹屾垚");
+
skillEffect?.OnFinalFrameEnd(); // 淇锛氭坊鍔犵┖鍊兼鏌�
- }
-
- // 楂樹寒鎵�鏈夌浉鍏崇洰鏍囷細璁剧疆鏂芥硶鑰呭拰鐩爣鐨勬樉绀哄眰绾�
- protected void HighLightAllTargets()
- {
- caster.layerMgr.SetSortingOrder(BattleConst.ActiveHeroActionSortingOrder);
-
- if (skillConfig.FuncType != 2)
- return;
-
- List<BattleObject> targetList = battleField.battleObjMgr.GetBattleObjList(tagUseSkillAttack);
- List<BattleObject> highlightList = new List<BattleObject>(targetList) { caster };
- List<BattleObject> allList = battleField.battleObjMgr.allBattleObjDict.Values.ToList<BattleObject>();
-
- // 淇锛氫娇鐢℉ashSet浼樺寲鎬ц兘锛岄伩鍏嶉噸澶嶈缃�
- var targetSet = new HashSet<BattleObject>(targetList);
- var highlightSet = new HashSet<BattleObject>(highlightList);
-
- caster.heroInfoBar.SetActive(false);
-
- foreach (BattleObject bo in allList)
- {
- bool isHighlight = highlightSet.Contains(bo);
- bool isTarget = targetSet.Contains(bo);
-
- if (isHighlight)
- {
- bo.layerMgr.SetFront();
- }
- else
- {
- bo.layerMgr.SetBack();
- }
-
- bo.heroInfoBar.SetActive(isTarget);
- }
-
- battleField.battleRootNode.skillMaskNode.SetActive(true);
- // battleField.battleRootNode.SetSortingOrder();
- }
-
- // 鍛戒腑鐩爣鍥炶皟锛氬鐞嗘墍鏈夎鍛戒腑鐨勭洰鏍�
- protected virtual void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
- {
- // 閫犳垚浼ゅ鍓嶅厛澶勭悊琛�閲忓埛鏂板寘
- HandleRefreshHP();
-
- foreach (var hurt in hitList)
- {
- BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
- if (target == null)
- {
- Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
- continue;
- }
-
- OnHitEachTarget(_hitIndex, target, hurt);
- }
- }
-
- // 澶勭悊鍗曚釜鐩爣琚懡涓�:搴旂敤浼ゅ鍜屾柦娉曡�呮晥鏋�
- protected virtual void OnHitEachTarget(int _hitIndex, BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt)
- {
- // ============ 绗竴姝�:璁$畻浼ゅ鍒嗗竷 ============
- List<int> damageDivide = new List<int>();
- if (_hitIndex == 0 && skillConfig.DamageDivide.Length <= 0)
- {
- damageDivide.Add(10000);
- }
- else
- {
- if (skillConfig.DamageDivide.Length <= _hitIndex)
- {
- Debug.LogError("鎶�鑳戒激瀹冲垎甯冮厤缃敊璇� skillId: " + skillConfig.SkillID + " hitIndex: " + _hitIndex);
- damageDivide.Add(10000);
- }
- else
- {
- damageDivide = skillConfig.DamageDivide[_hitIndex].ToList();
- }
- }
-
- // 璁$畻鎬讳激瀹冲拰鍒嗘浼ゅ鍒楄〃
- long totalDamage = GeneralDefine.GetFactValue(hurt.HurtHP, hurt.HurtHPEx);
- List<long> damageList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, totalDamage);
-
- // ============ 绗簩姝�:鍒锋柊瀹為檯琛�閲� ============
- long fromHp = target.teamHero.curHp;
-
-
-
- // ============澶勭悊鍚歌璺熷弽浼� ===============
- // 涔熻鎸夋瘡涓�鍑诲钩鍧囩畻 鏈�鍚庤琛ラ綈浼ゅ
- long suckHp = hurt.SuckHP;
- long reflectHp = hurt.BounceHP;
-
- List<long> suckHpList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, suckHp);
-
- List<long> reflectHpList = BattleUtility.DivideDamageToList(skillConfig.DamageDivide, _hitIndex, hurt.BounceHP);
- // long currentSuckHp = suckHp / tagUseSkillAttack.HurtCount;
-
- // 璁$畻褰撳墠杩欎竴鍑荤殑瀹為檯浼ゅ(鎵�鏈夊垎娈典激瀹充箣鍜�)
- long currentHitDamage = 0;
- foreach (long dmg in damageList)
- {
- currentHitDamage += dmg;
- }
-
- long currentHitSuckHp = 0;
- foreach (long suck in suckHpList)
- {
- currentHitSuckHp += suck;
- }
-
- long currentHitReflectHp = 0;
- foreach (long reflect in reflectHpList)
- {
- currentHitReflectHp += reflect;
- }
-
- long toHp = Math.Max(0, fromHp - currentHitDamage + currentHitSuckHp - currentHitReflectHp);
-
-
- // 鏇存柊鐩爣琛�閲�
- target.teamHero.curHp = toHp;
-
-#if UNITY_EDITOR
- BattleDebug.LogError(
- (caster.Camp == BattleCamp.Red ? "銆愮孩鏂硅鍔ㄣ��" : "銆愯摑鏂硅鍔ㄣ��") + "\n" +
- $"鏀诲嚮鑰�: {caster.teamHero.name}\n" +
- $"鐩爣: {target.teamHero.name}\n" +
- $"鎶�鑳�: {skillConfig.SkillName} (绗瑊_hitIndex}鍑�)\n" +
- $"浼ゅ: {currentHitDamage} (鎬讳激瀹�: {totalDamage})\n" +
- $"鍚歌: {currentHitSuckHp}\n" +
- $"鍙嶄激: {currentHitReflectHp}\n" +
- $"琛�閲忓彉鍖�: {fromHp} -> {toHp}"
- );
-#endif
-
-
- bool isLastHit = _hitIndex >= skillConfig.DamageDivide.Length - 1;
-
- // ============ 绗笁姝�:鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
- int objID = (int)target.ObjID;
- tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
- tempDeadPackList.TryGetValue(objID, out HB422_tagMCTurnFightObjDead deadPack);
-
-
- // 鍙傛暟鎵撳寘
- BattleHurtParam hurtParam = new BattleHurtParam()
- {
- casterObj = caster,
- hurtObj = target,
- damageList = damageList,
- suckHpList = suckHpList,
- reflectHpList = reflectHpList,
- fromHp = fromHp,
- toHp = toHp,
- battleDrops = battleDrops,
- hurt = hurt,
- hitIndex = _hitIndex,
- deadPack = deadPack,
- skillConfig = skillConfig
- };
-
- // ============ 绗洓姝�:鎵ц琛ㄧ幇(椋樺瓧銆佸姩鐢荤瓑) ============
- target.Hurt(hurtParam);
-
-
- }
-
- // 澶勭悊HP鍒锋柊鍖咃紙绠�鍖栭�昏緫锛�
- private void HandleRefreshHP()
- {
- // 鏌ユ壘HP鍒锋柊鍖�
- HB419_tagSCObjHPRefresh refreshPack = BattleUtility.FindObjHPRefreshPack(packList);
-
- if (refreshPack != null)
- {
- // 鍒嗗彂HP鍒锋柊鍖�
- PackageRegedit.Distribute(refreshPack);
- packList.Remove(refreshPack);
- }
- }
-
- // 澶勭悊姝讳骸鐩稿叧閫昏緫锛氬垎閰嶆帀钀藉拰缁忛獙
- protected void HandleDead()
- {
- var deadPackList = BattleUtility.FindDeadPack(packList);
- if (deadPackList.Count <= 0) return;
-
- CheckAfterDeadhPack();
-
- // 淇锛氬厛鏀堕泦瑕佸垹闄ょ殑鍖咃紝閬垮厤鍦╢oreach涓慨鏀归泦鍚�
- var dropPacksToRemove = new List<H0704_tagRolePackRefresh>(dropPackList);
- foreach (var _dropPack in dropPacksToRemove)
- {
- PackageRegedit.Distribute(_dropPack);
- packList.Remove(_dropPack);
- }
-
- // 鑾峰彇骞跺垎閰嶆帀钀界墿鍝佸拰缁忛獙
- var dropPack = PackManager.Instance.GetSinglePack(PackType.DropItem);
- var itemDict = dropPack.GetAllItems();
- List<ItemModel> itemList = new List<ItemModel>(itemDict.Values.Where(item => item != null && item.isAuction));
-
- var dropAssign = AssignDrops(itemList, deadPackList.Count);
- var expAssign = AssignExp(expPackList, deadPackList.Count);
-
- // 鏋勯�燘attleDrops骞剁紦瀛�
- for (int i = 0; i < deadPackList.Count; i++)
- {
- int objID = (int)deadPackList[i].ObjID;
- BattleObject deadTarget = battleField.battleObjMgr.GetBattleObject(objID);
-
- // 淇锛氭坊鍔犵┖鍊兼鏌�
- if (deadTarget == null)
- {
- Debug.LogError($"鎵句笉鍒版浜$洰鏍囷紝ObjID: {objID}");
- continue;
- }
-
- List<int> itemIndexList = dropAssign[i].Select(item => item.gridIndex).ToList();
-
- BattleDrops battleDrops = new BattleDrops()
- {
- rectTransform = deadTarget.heroRectTrans,
- dropItemPackIndex = itemIndexList,
- expDrops = expAssign[i]
- };
-
- // 淇锛氶伩鍏嶅瓧鍏搁敭鍐茬獊锛屼娇鐢ㄥ畨鍏ㄧ殑娣诲姞鏂瑰紡
- if (!tempDropList.ContainsKey(objID))
- {
- tempDropList.Add(objID, battleDrops);
- }
- else
- {
- Debug.LogWarning($"tempDropList涓凡瀛樺湪ObjID={objID}鐨勮褰曪紝灏嗚鐩栧師鍊�");
- tempDropList[objID] = battleDrops; // 瑕嗙洊鐜版湁鍊�
- }
-
- if (!tempDeadPackList.ContainsKey(objID))
- {
- tempDeadPackList.Add(objID, deadPackList[i]);
- }
- else
- {
- Debug.LogWarning($"tempDeadPackList涓凡瀛樺湪ObjID={objID}鐨勮褰曪紝灏嗚鐩栧師鍊�");
- tempDeadPackList[objID] = deadPackList[i]; // 瑕嗙洊鐜版湁鍊�
- }
- }
-
- // 淇锛氶伩鍏嶅湪閬嶅巻鏃朵慨鏀归泦鍚堬紝鍏堟敹闆嗗悗鍒犻櫎
- var deadPacksToRemove = new List<GameNetPackBasic>(deadPackList.Cast<GameNetPackBasic>());
- foreach (var deadPack in deadPacksToRemove)
- {
- packList.Remove(deadPack);
- }
- }
-
- // 鍒嗛厤鎺夎惤鐗╁搧锛氬皢鎺夎惤鐗╁搧骞冲潎鍒嗛厤缁欐浜″璞�
- protected List<List<ItemModel>> AssignDrops(List<ItemModel> itemList, int deadCount)
- {
- var dropAssign = new List<List<ItemModel>>();
- for (int i = 0; i < deadCount; i++)
- dropAssign.Add(new List<ItemModel>());
- for (int i = 0; i < itemList.Count; i++)
- dropAssign[i % deadCount].Add(itemList[i]);
- return dropAssign;
- }
-
- // 鍒嗛厤缁忛獙鍊硷細灏嗙粡楠屽寘骞冲潎鍒嗛厤缁欐瘡涓浜″璞�
- protected List<List<HB405_tagMCAddExp>> AssignExp(List<HB405_tagMCAddExp> expList, int deadCount)
- {
- var expAssign = new List<List<HB405_tagMCAddExp>>();
- for (int i = 0; i < deadCount; i++)
- expAssign.Add(new List<HB405_tagMCAddExp>());
-
- // 淇锛氭鏌ラ櫎闆堕闄�
- if (deadCount == 0)
- {
- Debug.LogWarning("AssignExp: deadCount涓�0锛屾棤娉曞垎閰嶇粡楠�");
- return expAssign;
- }
-
- // 淇锛氬厛鏀堕泦瑕佸垹闄ょ殑鍖咃紝閬垮厤鍦╢oreach涓慨鏀筽ackList
- var expPacksToRemove = new List<HB405_tagMCAddExp>();
-
- foreach (var expPack in expList)
- {
- long totalExp = GeneralDefine.GetFactValue(expPack.Exp, expPack.ExpPoint);
- long avgExp = totalExp / deadCount;
- long remain = totalExp % deadCount;
-
- for (int i = 0; i < deadCount; i++)
- {
- long assignExp = avgExp + (i < remain ? 1 : 0);
- var newPack = new HB405_tagMCAddExp
- {
- Exp = (uint)(assignExp % Constants.ExpPointValue),
- ExpPoint = (uint)(assignExp / Constants.ExpPointValue),
- Source = expPack.Source
- };
- expAssign[i].Add(newPack);
- }
- expPacksToRemove.Add(expPack);
- }
-
- // 缁熶竴鍒犻櫎鏀堕泦鐨勫寘
- foreach (var pack in expPacksToRemove)
- {
- packList.Remove(pack);
- }
-
- return expAssign;
- }
-
- // 妫�鏌ユ浜″悗鐨勫寘澶勭悊锛氬鐞嗘妧鑳藉寘銆佹帀钀藉寘銆佺粡楠屽寘
- protected void CheckAfterDeadhPack()
- {
- List<int> removeIndexList = new List<int>();
-
- for (int i = 0; i < packList.Count; i++)
- {
- var pack = packList[i];
-
- // 澶嶆椿鍩烘湰閮介潬鎶�鑳藉寘
- if (pack is CustomHB426CombinePack combinePack && combinePack.startTag.Tag.StartsWith("Skill_"))
- break;
-
- if (pack is H0704_tagRolePackRefresh h0704Pack && h0704Pack.PackType == (byte)PackType.DropItem && h0704Pack.IsBind == 1)
- {
- dropPackList.Add(h0704Pack);
- removeIndexList.Add(i);
- }
-
- if (pack is HB405_tagMCAddExp h405Pack && h405Pack.Source == 2)
- {
- expPackList.Add(h405Pack);
- removeIndexList.Add(i);
- }
- }
-
- for (int i = removeIndexList.Count - 1; i >= 0; i--)
- packList.RemoveAt(removeIndexList[i]);
- }
-
- // 妫�鏌ユ妧鑳芥槸鍚﹀畬鎴愶細缁煎悎妫�鏌ユ墍鏈夊畬鎴愭潯浠�
- public virtual bool IsFinished()
- {
- if (!isPlay) return false;
-
-
- // 妫�鏌ユ妧鑳芥晥鏋滄槸鍚﹀畬鎴�
- if (skillEffect != null)
- {
- if (!skillEffect.IsFinished()) return false;
- skillEffect = null;
- OnSkillFinished();
- return false;
- }
-
- // 妫�鏌ュ叾浠栨妧鑳藉姩浣滄槸鍚﹀畬鎴�
- if (otherSkillActionList.Count > 0)
- {
- for (int i = otherSkillActionList.Count - 1; i >= 0; i--)
- {
- var action = otherSkillActionList[i];
- if (action.IsFinished())
- {
- otherSkillActionList.RemoveAt(i);
- OnSkillFinished();
- }
- }
- if (otherSkillActionList.Count > 0) return false;
- }
-
- // 妫�鏌ユ渶缁堝畬鎴愮姸鎬�
- if (isFinished && moveFinished)
- {
- if (packList.Count > 0)
- {
- OnSkillFinished();
- return false;
- }
-
- return true;
- }
-
- return false;
- }
-
-
- // 寮哄埗缁撴潫鎶�鑳斤細绔嬪嵆缁撴潫鎵�鏈夋妧鑳界浉鍏崇殑澶勭悊
- public virtual void ForceFinished()
- {
- skillEffect?.ForceFinished();
-
- otherSkillActionList.ForEach(action => action.ForceFinish());
- otherSkillActionList.Clear();
-
- isFinished = true;
- moveFinished = true;
- isPlay = true;
-
- // 澶勭悊鎵�鏈夊墿浣欏寘
- while (packList.Count > 0)
- {
- var pack = packList[0];
- packList.RemoveAt(0);
-
- if (pack is CustomHB426CombinePack combinePack && combinePack.startTag.Tag.StartsWith("Skill_"))
- {
- var otherSkillAction = combinePack.CreateSkillAction();
- otherSkillAction.fromSkillId = skillConfig.SkillID;
- otherSkillAction.ForceFinish();
- }
- else
- {
- if (pack is CustomB421ActionPack actionPack)
- actionPack.Distribute();
- PackageRegedit.Distribute(pack);
- }
- }
- }
-
- // 鎶�鑳藉畬鎴愬鐞嗭細姝e父瀹屾垚鏃剁殑娓呯悊宸ヤ綔
- public void OnSkillFinished()
- {
- // 淇锛氫娇鐢ㄥ惊鐜唬鏇块�掑綊锛岄伩鍏嶆爤婧㈠嚭椋庨櫓
- // try
- // {
- while (true)
- {
- // 楠岃瘉鎶�鑳芥晥鏋滄槸鍚﹀畬鎴�
- if (skillEffect != null && !skillEffect.IsFinished())
- return;
-
- if (skillEffect != null)
- {
- skillEffect = null;
- continue; // 浣跨敤continue浠f浛閫掑綊璋冪敤
- }
-
- // 楠岃瘉鍏朵粬鎶�鑳藉姩浣滄槸鍚﹀畬鎴�
- if (otherSkillActionList.Count > 0)
- {
- bool hasFinishedAction = false;
- for (int i = otherSkillActionList.Count - 1; i >= 0; i--)
- {
- var action = otherSkillActionList[i];
- if (action.IsFinished())
- {
- otherSkillActionList.RemoveAt(i);
- hasFinishedAction = true;
- }
- }
- if (hasFinishedAction)
- {
- continue; // 浣跨敤continue浠f浛閫掑綊璋冪敤
- }
- return;
- }
-
- break; // 娌℃湁鏇村闇�瑕佸鐞嗙殑锛岄��鍑哄惊鐜�
- }
-
- // 澶勭悊鍓╀綑鍖�
- if (!ResolvePackList())
- {
- return;
- }
- // }
- // catch (Exception ex)
- // {
- // Debug.LogError($"OnSkillFinished寮傚父: {ex.Message}锛屾妧鑳絀D={skillConfig.SkillID}");
- // // 纭繚鐘舵�佷竴鑷存�э紝鍗充娇鍑虹幇寮傚父涔熻鏍囪瀹屾垚
- // isFinished = true;
- // throw; // 閲嶆柊鎶涘嚭寮傚父渚涗笂灞傚鐞�
- // }
-
- isFinished = true;
- }
-
- protected virtual bool ResolvePackList()
- {
- while (packList.Count > 0)
- {
- var pack = packList[0];
- packList.RemoveAt(0);
-
- if (pack is CustomHB426CombinePack combinePack && combinePack.startTag.Tag.StartsWith("Skill_"))
- {
- BattleDebug.LogError("other skill casting " + combinePack.startTag.Tag);
- var otherSkillAction = combinePack.CreateSkillAction();
- otherSkillAction.fromSkillId = skillConfig.SkillID;
- otherSkillActionList.Add(otherSkillAction);
- return false;
- }
- else if (pack is HB428_tagSCBuffRefresh buffRefresh)
- {
- // 浠庢壘鍒扮涓�涓狧B428寮�濮� 鎵惧嚭杩炵画鐨凥B428_tagSCBuffRefresh鍖� 濡傛灉鎵惧埌涓�涓狟428鍚� 涔嬪悗纰板埌闈濰B428鍖呭氨鍋滄
- buffCollections.Add(buffRefresh);
- while (packList.Count > 0)
- {
- var nextPack = packList[0];
- if (nextPack is HB428_tagSCBuffRefresh nextBuffRefresh)
- {
- buffCollections.Add(nextBuffRefresh);
- packList.RemoveAt(0);
- }
- else
- {
- break;
- }
- }
-
- // 鍚屾椂鍒锋柊鎵�鏈夊璞$殑buff锛屼笉鍒嗙粍
- foreach (var buff in buffCollections)
- {
- BattleObject battleObj = battleField.battleObjMgr.GetBattleObject((int)buff.ObjID);
- if (battleObj != null)
- {
- battleObj.buffMgr.RefreshBuff(buff, true);
- }
- }
-
- // 娓呯┖宸插鐞嗙殑buff闆嗗悎
- buffCollections.Clear();
- continue;
- }
-
- if (pack is CustomB421ActionPack actionPack)
- {
- actionPack.Distribute();
- }
- else
- {
- PackageRegedit.Distribute(pack);
- }
- }
-
- return true;
- }
-
- // 娣诲姞娓呯悊鏂规硶锛氶槻姝㈠唴瀛樻硠婕�
- public virtual void Cleanup()
- {
- tempDropList?.Clear();
- tempDeadPackList?.Clear();
- otherSkillActionList?.Clear();
- dropPackList?.Clear();
- expPackList?.Clear();
-
- skillEffect = null;
- packList = null;
}
}
\ No newline at end of file
--
Gitblit v1.8.0