From 778218d5d3562d8287f0612f83b8958daba8548e Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 10 十月 2025 18:21:27 +0800
Subject: [PATCH] 125 战斗 最后一击死亡处理
---
Main/System/Battle/BattleObject/BattleObject.cs | 24 +++++++++++++++++++++---
Main/System/Battle/Skill/SkillBase.cs | 27 +++++++++++++++------------
2 files changed, 36 insertions(+), 15 deletions(-)
diff --git a/Main/System/Battle/BattleObject/BattleObject.cs b/Main/System/Battle/BattleObject/BattleObject.cs
index ec4ec52..26f9384 100644
--- a/Main/System/Battle/BattleObject/BattleObject.cs
+++ b/Main/System/Battle/BattleObject/BattleObject.cs
@@ -268,14 +268,32 @@
return true;
}
- public virtual void Hurt(List<long> damageValues, long _totalDamage, HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, bool playAnimation = true)
+ public virtual void Hurt(List<long> damageValues, long _totalDamage,
+ HB427_tagSCUseSkill.tagSCUseSkillHurt hurt, SkillConfig skillConfig, bool isLastHit,
+ BattleDrops battleDrops, HB422_tagMCTurnFightObjDead deadPack)
{
BattleDmgInfo dmgInfo = PopDamage(damageValues, _totalDamage, hurt, skillConfig);
- if ((dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage()) && playAnimation)
+ bool isFatalAttack = (null != deadPack) && isLastHit;
+
+ if (isFatalAttack)
{
- motionBase.PlayAnimation(MotionName.hit, false);
+ if (null != battleDrops)
+ {
+ PushDropItems(battleDrops);
+ }
+ battleField.OnObjsDead(new List<HB422_tagMCTurnFightObjDead>() { deadPack });
+
}
+ else
+ {
+ if ((dmgInfo.IsType(DamageType.Damage) || dmgInfo.IsRealdamage()))
+ {
+ motionBase.PlayAnimation(MotionName.hit, false);
+ }
+ }
+
+
}
public void SuckHp(uint suckHP, SkillConfig skillConfig)
diff --git a/Main/System/Battle/Skill/SkillBase.cs b/Main/System/Battle/Skill/SkillBase.cs
index 41cfb7f..0b8d916 100644
--- a/Main/System/Battle/Skill/SkillBase.cs
+++ b/Main/System/Battle/Skill/SkillBase.cs
@@ -51,7 +51,6 @@
packList = _packList;
// Debug.LogError("start a skill id " + skillConfig.SkillID + " caster " + caster.teamHero.heroId + " pos " + caster.teamHero.positionNum + " camp " + caster.Camp);
-
}
public virtual void Run()
@@ -315,6 +314,7 @@
// 鎶�鑳藉紑濮�
public void OnSkillStart()
{
+ HandleDead();
skillEffect = SkillEffectFactory.CreateSkillEffect(
caster,
skillConfig,
@@ -361,7 +361,8 @@
{
skillEffect.OnFinalFrameEnd();
- HandleDead();
+ // 杞Щ鍒版浜″寘 battleobject.hurt 鏈�鍚庝竴鍑荤殑鏃跺�欐挱鏀�
+
}
@@ -461,17 +462,20 @@
// TODO YYL AttackTypes 瑕佽〃鐜版垚浠�涔堟牱鍛紵 鏀寔澶氱绫诲瀷骞跺瓨锛屽鏃犺闃插尽涓旀毚鍑诲悓鏃惰鏍兼尅锛屼簩杩涘埗鎴栬繍绠楁渶缁堝�硷紱0-澶辫触锛�1-鏅�氾紱2-鍥炶锛�5-鏍兼尅锛�6-鏃犺闃插尽锛�7-鏆村嚮锛�9-闂伩
- List<HB422_tagMCTurnFightObjDead> deadPacks = BattleUtility.FindDeadPack(packList);
- bool isTargetDead = deadPacks.Exists(p => p.ObjID == target.ObjID);
- bool notPlayHitAnime = isLastHit && isTargetDead;
- target.Hurt(damageList, totalDamage, hurt, skillConfig, !notPlayHitAnime);
+ int objID = (int)target.ObjID;
+ tempDropList.TryGetValue(objID, out BattleDrops battleDrops);
+ tempDeadPackList.TryGetValue(objID, out HB422_tagMCTurnFightObjDead deadPack);
+ target.Hurt(damageList, totalDamage, hurt, skillConfig, isLastHit, battleDrops, deadPack);
// TODO YYL 杩欓噷鏄鍋氱粺涓�璁$畻鍚庡啀hurt璺焥uckhp杩樻槸鎬庢牱
caster.SuckHp(hurt.SuckHP, skillConfig);// 鍚歌
caster.HurtByReflect(hurt.BounceHP, skillConfig);// 鍙嶅脊浼ゅ
}
+ private Dictionary<int, BattleDrops> tempDropList = new Dictionary<int, BattleDrops>();
+
+ private Dictionary<int, HB422_tagMCTurnFightObjDead> tempDeadPackList = new Dictionary<int, HB422_tagMCTurnFightObjDead>();
protected void HandleDead()
{
@@ -520,17 +524,17 @@
dropItemPackIndex = itemModelDropsIndexList,
expDrops = expAssign[i]
};
- deadTarget.PushDropItems(battleDrops);
+
+ tempDropList.Add((int)deadPackList[i].ObjID, battleDrops);
+ // deadTarget.PushDropItems(battleDrops);
}
- // 鍒嗗彂姝讳骸鍖�
-
- battleField.OnObjsDead(new List<HB422_tagMCTurnFightObjDead>(deadPackList));
+ // battleField.OnObjsDead(new List<HB422_tagMCTurnFightObjDead>(deadPackList));
foreach (var deadPack in deadPackList)
{
+ tempDeadPackList.Add((int)deadPack.ObjID, deadPack);
packList.Remove(deadPack);
}
- deadPackList.Clear();
}
@@ -693,7 +697,6 @@
otherSkillAction.ForceFinish();
otherSkillAction = null;
}
- HandleDead();
isFinished = true;
moveFinished = true;
isPlay = true;
--
Gitblit v1.8.0