From 89343a7a0909e5244a3b69c4db1294de4536243b Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期一, 15 十二月 2025 18:15:22 +0800
Subject: [PATCH] 262 幻境阁系统-客户端 新增仅适用武将解锁的头像和形象的红点移除规则
---
Main/System/Battle/Skill/SkillBase.cs | 154 +++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 129 insertions(+), 25 deletions(-)
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index c60313e..dcc5639 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -34,7 +34,7 @@
private float MoveSpeed = 750f;
private Dictionary<int, BattleDrops> tempDropList = new Dictionary<int, BattleDrops>();
- private Dictionary<int, HB422_tagMCTurnFightObjDead> tempDeadPackList = new Dictionary<int, HB422_tagMCTurnFightObjDead>();
+ private Dictionary<int, BattleDeadPack> tempDeadPackList = new Dictionary<int, BattleDeadPack>();
protected List<HB428_tagSCBuffRefresh> buffCollections = new List<HB428_tagSCBuffRefresh>();
@@ -43,10 +43,6 @@
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;
@@ -141,8 +137,7 @@
bool safety = caster != null
&& skillConfig != null
&& tagUseSkillAttack != null
- && battleField != null
- && caster.IsDead() == false;
+ && battleField != null;
if (!safety)
@@ -235,6 +230,11 @@
TeamHero teamHero = caster.teamHero;
EventBroadcast.Instance.Broadcast<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, guid, skillConfig, teamHero);
+ if (skillConfig.SkinllSFX1 != 0)
+ {
+ battleField.soundManager.PlayEffectSound(skillConfig.SkinllSFX1, false);
+ }
+
if (caster != null)
{
// 鎴樻枟绫诲瀷 0-甯歌锛�1-杩炲嚮锛�2-鍙嶅嚮锛�3-杩藉嚮锛�4-瀛愭妧鑳斤紱5-琚姩瑙﹀彂鐨�
@@ -252,11 +252,9 @@
hintConfig = DamageNumConfig.Get(BattleConst.BattleChaseAttack);
}
- if (hintConfig != null)
- {
- caster.heroInfoBar.ShowTips(((char)hintConfig.prefix).ToString(), true, false, 1.25f);
- // Debug.Break();
- }
+ Hint(caster, hintConfig);
+
+
}
// 楂樹寒鎵�鏈夋湰娆℃妧鑳界浉鍏崇殑鐩爣
@@ -288,6 +286,14 @@
}
}
+ protected void Hint(BattleObject battleObject, DamageNumConfig hintConfig)
+ {
+ if (hintConfig != null)
+ {
+ battleObject.heroInfoBar.ShowTips(((char)hintConfig.prefix).ToString(), true, false, 1.25f);
+ }
+ }
+
// 鍐叉挒鏀诲嚮妯″紡锛堝緟瀹炵幇锛�
protected void DashCast(Action _onComplete)
{
@@ -301,12 +307,19 @@
RectTransform target = battleField.GetTeamNode(caster.GetEnemyCamp(), skillConfig);
ExecuteMoveAndCastSequence(target, () =>
{
- // ShadowIllutionCreate(true);
- MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, () =>
+ if (skillConfig.ClientTriggerTiming == 1)
{
- // ShadowIllutionCreate(false);
OnAttackFinish();
- }, MoveSpeed);
+ }
+ else
+ {
+ // ShadowIllutionCreate(true);
+ MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, () =>
+ {
+ // ShadowIllutionCreate(false);
+ OnAttackFinish();
+ }, MoveSpeed);
+ }
});
}
@@ -342,12 +355,19 @@
RectTransform target = battleField.GetTeamNode(caster.Camp, skillConfig);
ExecuteMoveAndCastSequence(target, () =>
{
- // ShadowIllutionCreate(true);
- MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, () =>
+ if (skillConfig.ClientTriggerTiming == 1)
{
- // ShadowIllutionCreate(false);
OnAttackFinish();
- }, MoveSpeed);
+ }
+ else
+ {
+ // ShadowIllutionCreate(true);
+ MoveToTarget(battleField.GetTeamNode(caster.Camp, caster.teamHero.positionNum), Vector2.zero, () =>
+ {
+ // ShadowIllutionCreate(false);
+ OnAttackFinish();
+ }, MoveSpeed);
+ }
});
}
@@ -357,9 +377,15 @@
ShadowIllutionCreate(true);
MoveToTarget(target, new Vector2(skillConfig.CastDistance, 0), () =>
{
+ if (skillConfig.CastDistance < 9999 && skillConfig.SkinllSFX2 != 0)
+ {
+ battleField.soundManager.PlayEffectSound(skillConfig.SkinllSFX2, false);
+ }
+
TurnBack(() =>
{
ShadowIllutionCreate(false);
+
CastImpl(() =>
{
TurnBack(() =>
@@ -578,6 +604,8 @@
// 鍛戒腑鐩爣鍥炶皟锛氬鐞嗘墍鏈夎鍛戒腑鐨勭洰鏍囷紙鍖呮嫭涓荤洰鏍囥�佸脊灏勭洰鏍囥�佹簠灏勭洰鏍囷級
protected virtual void OnHitTargets(int _hitIndex, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hitList)
{
+ // Debug.LogError($"Skill {skillConfig.SkillID} hit targets _hitIndex: {_hitIndex} hit {string.Join(", ", hitList.Select(h => h.ObjID + ":" + battleField.battleObjMgr.GetBattleObject((int)h.ObjID)?.teamHero.name))}");
+
// 閫犳垚浼ゅ鍓嶅厛澶勭悊琛�閲忓埛鏂板寘
HandleRefreshHP();
@@ -633,6 +661,45 @@
OnHitEachTargetEx(_hitIndex, exTarget, hurtEx);
}
}
+
+ if (0 == _hitIndex)
+ {
+ bool needhint = false;
+
+ for (int i = 0; i < hitList.Count; i++)
+ {
+ var hurt = hitList[i];
+
+ //8-鍑绘檿
+ if ((hurt.AttackTypes & (int)DamageType.Stunned) == (int)DamageType.Stunned)
+ {
+ needhint = true;
+ break;
+ }
+
+ for (int j = 0; j < hurt.HurtListEx?.Length; j++)
+ {
+ var hurtex = hurt.HurtListEx[j];
+ //8-鍑绘檿
+ if ((hurtex.AttackTypes & (int)ServerDamageType.Stunned) == (int)ServerDamageType.Stunned)
+ {
+ needhint = true;
+ break;
+ }
+ }
+
+ if (needhint)
+ break;
+ }
+
+ if (needhint)
+ {
+ DamageNumConfig hintConfig = DamageNumConfig.Get(BattleConst.BattleStun);
+ Hint(caster, hintConfig);
+ }
+ }
+
+
}
// 澶勭悊鍗曚釜鐩爣琚懡涓�:搴旂敤浼ゅ鍜屾柦娉曡�呮晥鏋�
@@ -641,7 +708,7 @@
// ============ 鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
int objID = (int)target.ObjID;
tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
- tempDeadPackList.TryGetValue(objID, out HB422_tagMCTurnFightObjDead deadPack);
+ tempDeadPackList.TryGetValue(objID, out BattleDeadPack deadPack);
// ============ 鍙傛暟鎵撳寘 ============
BattleHurtParam hurtParam = BattleUtility.CalcBattleHurtParam(this, _hitIndex, target, hurt, battleDrops, deadPack);
@@ -663,7 +730,7 @@
// ============ 鑾峰彇涓存椂鏁版嵁(鎺夎惤銆佹浜$瓑) ============
int objID = (int)target.ObjID;
tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
- tempDeadPackList.TryGetValue(objID, out HB422_tagMCTurnFightObjDead deadPack);
+ tempDeadPackList.TryGetValue(objID, out BattleDeadPack deadPack);
// ============ 鍙傛暟鎵撳寘锛堝皢 tagSCUseSkillHurtEx 杞崲涓� tagSCUseSkillHurt锛�============
HB427_tagSCUseSkill.tagSCUseSkillHurt hurt = new HB427_tagSCUseSkill.tagSCUseSkillHurt
@@ -748,7 +815,7 @@
// 澶勭悊姝讳骸鐩稿叧閫昏緫锛氬垎閰嶆帀钀藉拰缁忛獙
protected void HandleDead()
{
- var deadPackList = BattleUtility.FindDeadPack(packList);
+ List<BattleDeadPack> deadPackList = BattleUtility.FindDeadPack(packList);
if (deadPackList.Count <= 0) return;
CheckAfterDeadhPack();
@@ -772,7 +839,8 @@
// 鏋勯�燘attleDrops骞剁紦瀛�
for (int i = 0; i < deadPackList.Count; i++)
{
- int objID = (int)deadPackList[i].ObjID;
+ BattleDeadPack battleDeadPack = deadPackList[i];
+ int objID = (int)battleDeadPack.deadPack.ObjID;
BattleObject deadTarget = battleField.battleObjMgr.GetBattleObject(objID);
// 淇锛氭坊鍔犵┖鍊兼鏌�
@@ -814,7 +882,8 @@
}
// 淇锛氶伩鍏嶅湪閬嶅巻鏃朵慨鏀归泦鍚堬紝鍏堟敹闆嗗悗鍒犻櫎
- var deadPacksToRemove = new List<GameNetPackBasic>(deadPackList.Cast<GameNetPackBasic>());
+ var deadPacksToRemove = new List<GameNetPackBasic>(deadPackList.Select(d => d.deadPack));
+ deadPacksToRemove.AddRange(deadPackList.Where(d => d.deadTriggerSkill != null).Select(d => d.deadTriggerSkill));
foreach (var deadPack in deadPacksToRemove)
{
packList.Remove(deadPack);
@@ -908,6 +977,37 @@
packList.RemoveAt(removeIndexList[i]);
}
+
+ public virtual bool IsFinishedForJudge()
+ {
+ if (!isPlay) return false;
+
+ if (skillEffect != null)
+ {
+ if (!skillEffect.IsFinished()) return false;
+ }
+
+ if (otherSkillActionList.Count > 0)
+ {
+ foreach (var action in otherSkillActionList)
+ {
+ if (!action.IsFinishedForJudge()) return false;
+ }
+ }
+
+ if (isFinished && moveFinished)
+ {
+ if (packList.Count > 0)
+ {
+ return false;
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
// 妫�鏌ユ妧鑳芥槸鍚﹀畬鎴愶細缁煎悎妫�鏌ユ墍鏈夊畬鎴愭潯浠�
public virtual bool IsFinished()
{
@@ -966,6 +1066,9 @@
// 寮哄埗缁撴潫鎶�鑳斤細绔嬪嵆缁撴潫鎵�鏈夋妧鑳界浉鍏崇殑澶勭悊
public virtual void ForceFinished()
{
+ if (isFinished)
+ return;
+
skillEffect?.ForceFinished();
otherSkillActionList.ForEach(action => action.ForceFinish());
@@ -1127,4 +1230,5 @@
skillEffect = null;
packList = null;
}
+
}
\ No newline at end of file
--
Gitblit v1.8.0