yyl
2025-10-21 3bd7f56906e31e8fe0072108c9d4652707b51de8
Main/System/Battle/Buff/BattleObjectBuffMgr.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Spine.Unity;
using UnityEngine;
@@ -24,14 +25,33 @@
    public void Run()
    {
        List<int> removeEffectList = new List<int>();
        //  跟随BattleObject
        foreach (var kv in buffEffectDict)
        {
            // foreach (var kv2 in effectDict)
            BattleEffectPlayer effectPlayer = kv.Value.Key;
            if (null != effectPlayer)
            {
                BattleEffectPlayer effectPlayer = kv.Value.Key;
                if (effectPlayer.isBindBone)
                {
                    continue;
                }
                effectPlayer.transform.position = battleObject.heroRectTrans.position;
                var effectPos = effectPlayer.effectConfig.effectPos;
                if (null != effectPos && effectPos.Length >= 2)
                {
                    effectPlayer.rectTrans.anchoredPosition += new Vector2(effectPos[0], effectPos[1]);
                }
            }
            else
            {
                removeEffectList.Add(kv.Key);
            }
        }
        foreach (var effectId in removeEffectList)
        {
            buffEffectDict.Remove(effectId);
        }
    }
@@ -88,8 +108,15 @@
    }
    //  刷新buff
    public void RefreshBuff(HB428_tagSCBuffRefresh vNetData)
    public void RefreshBuff(HB428_tagSCBuffRefresh vNetData, bool insert = false)
    {
        if (battleObject.IsDead())
        {
            Debug.LogError("给死亡对象刷新buff 检查服务器代码");
            RemoveAllBuff();
            return;
        }
        SkillConfig skillConfig = SkillConfig.Get((int)vNetData.SkillID);
        if (null == skillConfig)
@@ -98,20 +125,20 @@
            return;
        }
        bool isNew = false;
        // bool isNew = false;
        if (buffDataDict.ContainsKey(vNetData.BuffID))
        {
            buffDataDict[vNetData.BuffID] = vNetData;
        }
        else
        {
            isNew = true;
            // isNew = true;
            buffDataDict.Add(vNetData.BuffID, vNetData);
        }
        if (isNew)
        if (vNetData.IsAdd != 0)
        {
            BuffMountAction buffMountAction = new BuffMountAction(battleObject.battleField, battleObject, vNetData, () =>
            BuffMountAction buffMountAction = new BuffMountAction(battleObject.battleField, new List<HB428_tagSCBuffRefresh>() { vNetData }, () =>
            {
                if (null != skillConfig && skillConfig.BuffEffect > 0)
                {
@@ -123,6 +150,11 @@
                    else
                    {
                        BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.BuffEffect, battleObject.heroRectTrans, battleObject.Camp);
                        BoneFollower boneFollower = effect.AddMissingComponent<BoneFollower>();
                        effect.BindBone(battleObject.motionBase.skeletonAnim, "hit");
                        HashSet<uint> buffIdSet = new HashSet<uint>();
                        buffIdSet.Add(vNetData.BuffID);
                        buffEffectDict.Add(skillConfig.BuffEffect, new KeyValuePair<BattleEffectPlayer, HashSet<uint>>(effect, buffIdSet));
@@ -130,7 +162,14 @@
                }
                battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
            });
            battleObject.battleField.recordPlayer.PlayRecord(buffMountAction);
            if (insert)
            {
                battleObject.battleField.recordPlayer.ImmediatelyPlay(buffMountAction);
            }
            else
            {
                battleObject.battleField.recordPlayer.PlayRecord(buffMountAction);
            }
        }
        else
        {
@@ -138,5 +177,14 @@
            battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
        }
    }
    public List<HB428_tagSCBuffRefresh> GetBuffList()
    {
        return buffDataDict.Values.ToList();
    }
    public void InsertBuff(HB428_tagSCBuffRefresh vNetData)
    {
        RefreshBuff(vNetData, true);
    }
}