From 44611c79d167fda9d2c4ba05435a9d84bfd5a4a6 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期二, 07 十月 2025 16:17:49 +0800
Subject: [PATCH] 125 战斗 散射伤害有问题,会出现多次飘血,司马懿可测试
---
Main/System/Battle/BattleField/BattleField.cs | 2
Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs | 4 +-
Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs | 4 +-
Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs | 6 +-
Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs | 4 +-
Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs | 4 +-
Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs | 12 +++---
Main/System/Battle/SkillEffect/BulletSkillEffect.cs | 68 ++++++++++++++++++++++++++++++++--
8 files changed, 82 insertions(+), 22 deletions(-)
diff --git a/Main/System/Battle/BattleField/BattleField.cs b/Main/System/Battle/BattleField/BattleField.cs
index 06bd394..7f4353d 100644
--- a/Main/System/Battle/BattleField/BattleField.cs
+++ b/Main/System/Battle/BattleField/BattleField.cs
@@ -543,6 +543,6 @@
public void ForceFinish()
{
- recordPlayer.HaveRest();
+ recordPlayer.ForceFinish();
}
}
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs
index 2e3cb94..d307197 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs
@@ -9,8 +9,8 @@
private Vector2 control;
public BezierBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer effectPlayer,
- RectTransform target, HB427_tagSCUseSkill tagUseSkillAttack, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
- : base(caster, skillConfig, effectPlayer, target, tagUseSkillAttack, bulletIndex, onHit) { }
+ RectTransform target, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hurtList, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
+ : base(caster, skillConfig, effectPlayer, target, hurtList, bulletIndex, onHit) { }
public override void Reset()
{
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs
index f935e49..1f20599 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs
@@ -15,10 +15,10 @@
private float bounceElapsed = 0f;
public BounceBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer effectPlayer,
- RectTransform target, HB427_tagSCUseSkill tagUseSkillAttack, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
- : base(caster, skillConfig, effectPlayer, target, tagUseSkillAttack, bulletIndex, onHit)
+ RectTransform target, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hurtList, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
+ : base(caster, skillConfig, effectPlayer, target, hurtList, bulletIndex, onHit)
{
- this.hurtList = new List<HB427_tagSCUseSkill.tagSCUseSkillHurt>(tagUseSkillAttack.HurtList);
+ this.hurtList = hurtList;
}
public override void Reset()
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs
index cf68b6b..974b025 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs
@@ -21,7 +21,7 @@
protected List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hurts = new List<HB427_tagSCUseSkill.tagSCUseSkillHurt>();
public BulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer bulletEffect, RectTransform target,
- HB427_tagSCUseSkill tagUseSkillAttack, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
+ List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hurtList, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
{
this.caster = caster;
this.skillConfig = skillConfig;
@@ -29,7 +29,7 @@
this.target = target;
this.onHit = onHit;
this.bulletTrans = bulletEffect.transform as RectTransform;
- this.hurts = tagUseSkillAttack.HurtList.ToList();
+ this.hurts = hurtList;
this.mBulletIndex = bulletIndex;
// 璁剧疆bulletTrans鍧愭爣涓篶aster.heroRectTrans鐨勪笘鐣屽潗鏍囪浆鎹㈠埌bulletTrans鐖惰妭鐐逛笅鐨勬湰鍦板潗鏍�
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs b/Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs
index 7da9f26..b5c3202 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs
@@ -15,7 +15,7 @@
SkillConfig skillConfig,
BattleEffectPlayer bulletEffect,
RectTransform target,
- HB427_tagSCUseSkill tagUseSkillAttack,
+ List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hurtList,
int bulletIndex,
Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
{
@@ -23,19 +23,19 @@
switch (skillConfig.BulletPath)
{
case 1: // 鐩寸嚎娑堝け浜庣洰鏍�
- curve = new StraightBulletCurve(caster, skillConfig, bulletEffect, target, tagUseSkillAttack, bulletIndex, onHit);
+ curve = new StraightBulletCurve(caster, skillConfig, bulletEffect, target, hurtList, bulletIndex, onHit);
break;
case 2: // 鐩寸嚎璐┛娑堝け鍦ㄥ睆骞曞
- curve = new PenetrateBulletCurve(caster, skillConfig, bulletEffect, target, tagUseSkillAttack, bulletIndex, onHit);
+ curve = new PenetrateBulletCurve(caster, skillConfig, bulletEffect, target, hurtList, bulletIndex, onHit);
break;
case 3: // 鎶涚墿绾垮姬绾�
- curve = new BezierBulletCurve(caster, skillConfig, bulletEffect, target, tagUseSkillAttack, bulletIndex, onHit);
+ curve = new BezierBulletCurve(caster, skillConfig, bulletEffect, target, hurtList, bulletIndex, onHit);
break;
case 4: // 寮瑰皠
- curve = new BounceBulletCurve(caster, skillConfig, bulletEffect, target, tagUseSkillAttack, bulletIndex, onHit);
+ curve = new BounceBulletCurve(caster, skillConfig, bulletEffect, target, hurtList, bulletIndex, onHit);
break;
default:
- curve = new BulletCurve(caster, skillConfig, bulletEffect, target, tagUseSkillAttack, bulletIndex, onHit);
+ curve = new BulletCurve(caster, skillConfig, bulletEffect, target, hurtList, bulletIndex, onHit);
break;
}
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs
index 35ace1a..33db2ab 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs
@@ -9,8 +9,8 @@
private Vector2 outPos; // 灞忓箷澶栧欢闀跨偣锛堟湰鍦板潗鏍囷級
private bool hitTriggered = false; // 鏄惁宸茶Е鍙憃nHit
- public PenetrateBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer effectPlayer, RectTransform target, HB427_tagSCUseSkill tagUseSkillAttack, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
- : base(caster, skillConfig, effectPlayer, target, tagUseSkillAttack, bulletIndex, onHit) { }
+ public PenetrateBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer effectPlayer, RectTransform target, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hurtList, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
+ : base(caster, skillConfig, effectPlayer, target, hurtList, bulletIndex, onHit) { }
/// <summary>
/// 鍒濆鍖栧脊閬撳弬鏁�
diff --git a/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs b/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs
index d0933fb..1ab621f 100644
--- a/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs
+++ b/Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs
@@ -7,8 +7,8 @@
private Vector2 start;
private Vector2 end;
- public StraightBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer bulletEffect, RectTransform target, HB427_tagSCUseSkill tagUseSkillAttack, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
- : base(caster, skillConfig, bulletEffect, target, tagUseSkillAttack, bulletIndex, onHit)
+ public StraightBulletCurve(BattleObject caster, SkillConfig skillConfig, BattleEffectPlayer bulletEffect, RectTransform target, List<HB427_tagSCUseSkill.tagSCUseSkillHurt> hurtList, int bulletIndex, Action<int, List<HB427_tagSCUseSkill.tagSCUseSkillHurt>> onHit)
+ : base(caster, skillConfig, bulletEffect, target, hurtList, bulletIndex, onHit)
{
}
diff --git a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
index a70f0cd..3d014c9 100644
--- a/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
+++ b/Main/System/Battle/SkillEffect/BulletSkillEffect.cs
@@ -19,6 +19,7 @@
{
}
+
public override void OnMiddleFrameEnd(int times, int index)
@@ -43,7 +44,7 @@
if (skillConfig.Scattering == 1)
{
// 鏁e皠
- ShotEachTargets(index);
+ ScatterShot(index);
}
else
{
@@ -89,7 +90,7 @@
{
// 鑻agCount鐩爣涓暟涓�1~5涓紝浠h〃闅忔満浣滅敤浜庢晫鏂规垨鎴戞柟x涓灏嗭紝姝ゆ椂鎵�鏈夎闅忔満鍒扮殑瀵硅薄閮戒负涓荤洰鏍囷紙鏂芥硶浣嶇疆浼氱敤瀹㈡埛绔厤缃級
ShotEachTargets(index);
- }
+ }
}
// 1 瀵逛綅锛�
@@ -171,7 +172,7 @@
RectTransform effectTrans = effectPlayer.transform as RectTransform;
- var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, targetTransform, tagUseSkillAttack, bulletIndex, (index, hitList) =>
+ var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, targetTransform, tagUseSkillAttack.HurtList.ToList(), bulletIndex, (index, hitList) =>
{
if (isFinish)
return;
@@ -293,11 +294,70 @@
ShotToIndex(caster.Camp, caster.teamHero.positionNum, index);
}
+
+ private void ScatterShot(int index)
+ {
+ // 澶勭悊鏁e皠閫昏緫
+ for (int i = 0; i < tagUseSkillAttack.HurtList.Length; i++)
+ {
+ var hurt = tagUseSkillAttack.HurtList[i];
+ BattleObject target = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (target == null)
+ {
+ Debug.LogError("鐗规晥鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ continue;
+ }
+ ScatterShot(target, hurt, index, i);
+ }
+ }
+
+ private void ScatterShot(BattleObject target, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, int index, int order)
+ {
+ BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
+
+ var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, new List<HB427_tagSCUseSkill.tagSCUseSkillHurt> { hurt }, index, (index, hitList) =>
+ {
+ foreach (var hurt in hitList)
+ {
+ BattleObject targetObj = caster.battleField.battleObjMgr.GetBattleObject((int)hurt.ObjID);
+ if (targetObj == null)
+ {
+ Debug.LogError("鐩爣涓虹┖ target == null ObjId : " + hurt.ObjID);
+ continue;
+ }
+
+ PlayExplosionEffect(skillConfig.ExplosionEffectId, targetObj.heroGo.transform, caster.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect2, targetObj.heroGo.transform, caster.Camp);
+ PlayExplosionEffect(skillConfig.ExplosionEffect3, targetObj.heroGo.transform, caster.Camp);
+ }
+
+ // 琛ㄧ幇瀛愬脊椋炶鍒扮洰鏍囦綅缃�
+ onHit?.Invoke(index, hitList);
+ // 鍑讳腑灏遍攢姣佸瓙寮�
+ caster.battleField.battleEffectMgr.RemoveEffect(skillConfig.BulletEffectId, effectPlayer);
+
+ if (isFinish)
+ return;
+
+ // 澶氫釜瀛愬脊鐨勬渶鍚庝竴鍙�
+ if (index >= skillConfig.ActiveFrames.Length - 1)
+ {
+ // 澶氳鑹茬殑鏈�鍚庝竴涓鑹�
+ if (order >= tagUseSkillAttack.HurtList.Length - 1)
+ {
+ isFinish = true;
+ }
+ }
+ });
+
+ bulletCurves.Add(bulletCurve);
+ }
+
protected void ShotToTarget(BattleObject target, int bulletIndex)
{
BattleEffectPlayer effectPlayer = caster.battleField.battleEffectMgr.PlayEffect(caster, skillConfig.BulletEffectId, caster.heroRectTrans, caster.Camp);
- var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack, bulletIndex, (index, hitList) =>
+ var bulletCurve = BulletCurveFactory.CreateBulletCurve(caster, skillConfig, effectPlayer, target.heroRectTrans, tagUseSkillAttack.HurtList.ToList(), bulletIndex, (index, hitList) =>
{
foreach (var hurt in hitList)
{
--
Gitblit v1.8.0