yyl
1 天以前 44611c79d167fda9d2c4ba05435a9d84bfd5a4a6
125 战斗 散射伤害有问题,会出现多次飘血,司马懿可测试
8个文件已修改
104 ■■■■ 已修改文件
Main/System/Battle/BattleField/BattleField.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/BulletCurve/BezierBulletCurve.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/BulletCurve/BounceBulletCurve.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/BulletCurve/BulletCurve.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/BulletCurve/BulletCurveFactory.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/BulletCurve/StraightBulletCurve.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/SkillEffect/BulletSkillEffect.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/BattleField.cs
@@ -543,6 +543,6 @@
    public void ForceFinish()
    {
        recordPlayer.HaveRest();
        recordPlayer.ForceFinish();
    }
}
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()
    {
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()
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坐标为caster.heroRectTrans的世界坐标转换到bulletTrans父节点下的本地坐标
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;
        }
Main/System/Battle/SkillEffect/BulletCurve/PenetrateBulletCurve.cs
@@ -9,8 +9,8 @@
    private Vector2 outPos;     // 屏幕外延长点(本地坐标)
    private bool hitTriggered = false; // 是否已触发onHit
    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>
    /// 初始化弹道参数
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)
    {
    }
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)
            {
                //  散射
                ShotEachTargets(index);
                ScatterShot(index);
            }
            else
            {
@@ -89,7 +90,7 @@
        {
            // 若TagCount目标个数为1~5个,代表随机作用于敌方或我方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)
    {
        // 处理散射逻辑
        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)
            {