yyl
2 天以前 d0dfe302f42f680bd3a84a29b9d58947046403c7
Main/System/Battle/Skill/SkillBase.cs
@@ -19,6 +19,8 @@
    protected SkillEffect skillEffect;
    public HB427_tagSCUseSkill tagUseSkillAttack;
    public SkillConfig skillConfig;
    public SkillSkinConfig skillSkinConfig;
    protected bool isFinished = false;
    protected BattleField battleField = null; // 战场
    protected RectTransform targetNode = null; // 目标节点
@@ -57,6 +59,21 @@
        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();
        }
        // 注册正在释放的技能
        if (battleField != null && caster != null)
@@ -249,9 +266,9 @@
        // 命格释放技能时 teamHero 为 null,监听器会正确处理(已有 null 检查)
        EventBroadcast.Instance.Broadcast<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, guid, skillConfig, teamHero);
        if (skillConfig.SkinllSFX1 != 0)
        if (skillSkinConfig.SkinllSFX1 != 0)
        {
            battleField.soundManager.PlayEffectSound(skillConfig.SkinllSFX1, false);
            battleField.soundManager.PlayEffectSound(skillSkinConfig.SkinllSFX1, false);
        }
        if (caster != null)
@@ -280,7 +297,7 @@
        HighLightAllTargets();
        // 根据释放模式执行相应逻辑
        switch (skillConfig.castMode)
        switch (skillSkinConfig.castMode)
        {
            case SkillCastMode.None:
            case SkillCastMode.Self:
@@ -299,7 +316,7 @@
                DashCast(OnAttackFinish);
                break;
            default:
                Debug.LogError("强制结束技能 暂时不支持其他的方式释放 有需求please联系策划 技能id:" + skillConfig.SkillID + " cast position " + skillConfig.CastPosition);
                Debug.LogError("强制结束技能 暂时不支持其他的方式释放 有需求please联系策划 技能id:" + skillConfig.SkillID + " cast position " + skillSkinConfig.CastPosition);
                ForceFinished();
                break;
        }
@@ -323,7 +340,7 @@
    // 对敌方释放技能:移动到敌方区域进行攻击
    protected void CastToEnemy()
    {
        RectTransform target = battleField.GetTeamNode(caster.GetEnemyCamp(), skillConfig);
        RectTransform target = battleField.GetTeamNode(caster.GetEnemyCamp(), skillSkinConfig);
        ExecuteMoveAndCastSequence(target, () =>
        {
            if (skillConfig.ClientTriggerTiming == 1)
@@ -371,7 +388,7 @@
    // 对友方释放技能:移动到友方区域进行治疗或增益
    protected void CastToAllies()
    {
        RectTransform target = battleField.GetTeamNode(caster.Camp, skillConfig);
        RectTransform target = battleField.GetTeamNode(caster.Camp, skillSkinConfig);
        ExecuteMoveAndCastSequence(target, () =>
        {
            if (skillConfig.ClientTriggerTiming == 1)
@@ -394,11 +411,11 @@
    private void ExecuteMoveAndCastSequence(RectTransform target, Action onReturnComplete)
    {
        ShadowIllutionCreate(true);
        MoveToTarget(target, new Vector2(skillConfig.CastDistance, 0), () =>
        MoveToTarget(target, new Vector2(skillSkinConfig.CastDistance, 0), () =>
        {
            if (skillConfig.CastDistance < 9999 && skillConfig.SkinllSFX2 != 0)
            if (skillSkinConfig.CastDistance < 9999 && skillSkinConfig.SkinllSFX2 != 0)
            {
                battleField.soundManager.PlayEffectSound(skillConfig.SkinllSFX2, false);
                battleField.soundManager.PlayEffectSound(skillSkinConfig.SkinllSFX2, false);
            }
            TurnBack(() =>
@@ -427,7 +444,7 @@
    // 移动到目标位置:处理角色的移动动画和逻辑
    protected void MoveToTarget(RectTransform target, Vector2 offset, Action _onComplete = null, float speed = 750f)
    {
        if (skillConfig.CastDistance >= 9999)
        if (skillSkinConfig.CastDistance >= 9999)
        {
            _onComplete?.Invoke();
            return;
@@ -445,7 +462,7 @@
    // 转身逻辑:根据技能配置处理角色转向
    protected void TurnBack(Action _onComplete, float forward)
    {
        if (skillConfig.CastDistance < 0)
        if (skillSkinConfig.CastDistance < 0)
        {
            caster.SetFacing(forward);
        }
@@ -476,7 +493,7 @@
    // 执行技能释放动画和逻辑:播放施法动作并提供回调
    protected TrackEntry CastImpl(Action onComplete = null)
    {
        return caster.PlaySkillAnimation(skillConfig, this, tagUseSkillAttack.BattleType == 4, onComplete);
        return caster.PlaySkillAnimation(skillConfig, skillSkinConfig, this, tagUseSkillAttack.BattleType == 4, onComplete);
    }
    // 技能开始回调:处理死亡、子技能、技能效果初始化
@@ -494,7 +511,7 @@
        //  再处理 内嵌技能
        ProcessSubSkill();
        skillEffect = SkillEffectFactory.CreateSkillEffect(this, caster, skillConfig, tagUseSkillAttack);
        skillEffect = SkillEffectFactory.CreateSkillEffect(this, caster, skillConfig, skillSkinConfig, tagUseSkillAttack);
        skillEffect.Play(OnHitTargets);
        
@@ -513,7 +530,8 @@
            if (pack is HB427_tagSCUseSkill skillPack)
            {
                SkillConfig ssc = SkillConfig.Get((int)skillPack.SkillID);
                if (!string.IsNullOrEmpty(ssc.SkillMotionName))
                SkillSkinConfig sscSkin = ssc.GetOriginSkinConfig();
                if (!string.IsNullOrEmpty(sscSkin.SkillMotionName))
                {
                    break;
                }
@@ -533,8 +551,8 @@
            {
                HB427_tagSCUseSkill sp = combinePack.GetMainHB427SkillPack();
                SkillConfig ssc = SkillConfig.Get((int)sp.SkillID);
                if (!string.IsNullOrEmpty(ssc.SkillMotionName))
                SkillSkinConfig sscSkin = ssc.GetOriginSkinConfig();
                if (!string.IsNullOrEmpty(sscSkin.SkillMotionName))
                {
                    break;
                }
@@ -883,7 +901,7 @@
#if UNITY_EDITOR
    private void PrintHurtParamDebugInfo(BattleHurtParam hurtParam)
    {
        bool isLastHit = hurtParam.hitIndex >= hurtParam.skillConfig.DamageDivide.Length - 1;
        bool isLastHit = hurtParam.hitIndex >= hurtParam.skillSkinConfig.DamageDivide.Length - 1;
        
        long currentHitDamage = hurtParam.hurter.damageList != null ? hurtParam.hurter.damageList.Sum() : 0;
        long currentHitSuckHp = hurtParam.caster.suckHpList != null ? hurtParam.caster.suckHpList.Sum() : 0;
@@ -898,7 +916,7 @@
            $"攻击者: {hurtParam.caster.casterObj.GetName()} (ObjID:{hurtParam.caster.casterObj.ObjID})\n" +
            $"目标: {hurtParam.hurter.hurtObj.GetName()} (ObjID:{hurtParam.hurter.hurtObj.ObjID})\n" +
            $"技能: {hurtParam.skillConfig.SkillName} (ID:{hurtParam.skillConfig.SkillID})\n" +
            $"击数: 第{hurtParam.hitIndex + 1}击 / 共{hurtParam.skillConfig.DamageDivide.Length}击" + (isLastHit ? " [最后一击]" : " [中间击]") + "\n" +
            $"击数: 第{hurtParam.hitIndex + 1}击 / 共{hurtParam.skillSkinConfig.DamageDivide.Length}击" + (isLastHit ? " [最后一击]" : " [中间击]") + "\n" +
            $"\n" +
            $"========== 目标受伤数据 ==========\n" +
            $"伤害: {currentHitDamage} / 总伤害: {totalDamage}\n" +
@@ -1204,7 +1222,7 @@
        if (moveFinished)
        {
            //  如果技能有动画(SkillMotionName不为空),需要等待动画播放完成
            if (skillConfig != null && !string.IsNullOrEmpty(skillConfig.SkillMotionName))
            if (skillSkinConfig != null && !string.IsNullOrEmpty(skillSkinConfig.SkillMotionName))
            {
                if (!isMotionCompleted)
                {
@@ -1608,7 +1626,7 @@
            return false;
        }
        if (string.IsNullOrEmpty(skillConfig.SkillMotionName))
        if (string.IsNullOrEmpty(skillSkinConfig.SkillMotionName))
        {
            return true;
        }