少年修仙传客户端代码仓库
client_linchunjie
2019-05-20 188e999e9376d67a6bde1ce38d4ab387d98ccba8
Merge remote-tracking branch 'origin/master' into HazyRegion_1
17个文件已修改
608 ■■■■■ 已修改文件
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0608_tagNPCDie.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/ResModule/VideoLoader.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Skill/AttackHandler.cs 291 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Skill/SkillManager.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/Status/StatusMgr.cs 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/ClientCollectUtility.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/ClientDropItemUtility.cs 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_Hero.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GA_NpcClientFightBoss.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/GameActor/GActorInfo.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/Dungeon/DungeonStage.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/CreateRolePostProcess/CreateRolePostProcessor.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FakeDungeon/FakeDemonJarDungeonStage.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/ItemDrop/DropItem.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/BetterItemGetBehaviour.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/NewItemGetWin.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Utility/RuntimeLogUtility.cs 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0608_tagNPCDie.cs
@@ -17,7 +17,19 @@
        string _content = string.Format("DTC0608_tagNPCDie => S:{0} 死亡. 死亡原因: {1}, 杀死它的是: {2}", vNetData.ObjID, vNetData.Reason, vNetData.KillerID);
        RuntimeLogUtility.AddLog_Blue(_content, (uint)vNetData.ObjID);
#endif
        GActor _actor = GAMgr.Instance.GetBySID(vNetData.ObjID);
        GActor _actor = null;
        if (PersonalEnemy.m_SBindCDict.ContainsKey(vNetData.ObjID))
        {
            _actor = GAMgr.Instance.GetBySID(PersonalEnemy.m_SBindCDict[vNetData.ObjID]);
            GAMgr.Instance.ServerDie(_actor.ServerInstID);
            _actor.Die();
            GAMgr.Instance.DoDelayDie(_actor as GActorFight);
            return;
        }
        else
        {
            _actor = GAMgr.Instance.GetBySID(vNetData.ObjID);
        }
        if (_actor == null)
        {
Core/ResModule/VideoLoader.cs
@@ -8,7 +8,18 @@
    public static VideoClip Load(string name)
    {
        return  Resources.Load<VideoClip>(name);
#if UNITY_EDITOR
        if (Application.isEditor)
        {
            return UnityEditor.AssetDatabase.LoadAssetAtPath<VideoClip>(string.Format("Assets/Editor/Video/{0}.mp4", name));
        }
#endif
#if UNITY_STANDALONE && !UNITY_EDITOR
            return Resources.Load<VideoClip>(name);
#endif
        return null;
    }
}
Fight/Actor/Skill/AttackHandler.cs
@@ -187,6 +187,11 @@
                    {
                        _dungeon.AddHeroHurt(hurtValue);
                    }
                    var _cnpc = target as GA_NpcClientFightNorm;
                    if (_cnpc != null)
                    {
                        _cnpc.StartCantAtkedRotate();
                    }
                }
                else
                {
@@ -202,6 +207,7 @@
                    else if (target is GA_NpcClientFightNorm)
                    {
                        var _cnpc = target as GA_NpcClientFightNorm;
                        _cnpc.StartCantAtkedRotate();
                        if (_cnpc.NpcConfig.AIType == 198)
                        {
                            _doReduceHp = false;
@@ -374,6 +380,7 @@
        int _suppressValueRealmRate = 1;
        float _suppressFightPower = 0;
        float _suppressValueFP_0 = 0;
        float _superHitAdd = 0;
        #region 伤害替换
@@ -536,6 +543,51 @@
            }
        }
        #region 4094,4507 增加暴击概率
        if (skill.skillInfo.effectValue.TryGetValue(4094, out _effectValue))
        {
            bool _vaild = true;
            if (_effectValue.value2 != 0)
            {
                if (!target.ActorInfo.status4012.ContainsKey((byte)_effectValue.value2))
                {
                    _vaild = false;
                }
            }
            if (_vaild)
            {
                _aSuperHitRate += _effectValue.value1;
            }
        }
        if (skill.skillInfo.effectValue.TryGetValue(4507, out _effectValue))
        {
            bool _vaild = true;
            if (_effectValue.value2 == 1)
            {
                if (attacker.SelectTarget == null
                 || attacker.SelectTarget.ServerInstID != target.ServerInstID)
                {
                    _vaild = false;
                }
            }
            if (_effectValue.value3 == 0)
            {
                if (skill.skillInfo.config.FuncType != (int)E_SkillFuncType.NormalAttack)
                {
                    _vaild = false;
                }
            }
            if (_vaild)
            {
                if (_vaild)
                {
                    _aSuperHitRate += _effectValue.value1;
                }
            }
        }
        #endregion
        _isMiss = IsMiss(_hitRate, _missRate);
        _isCrit = IsCrit(_aSuperHitRate);
        _isLucky = IsLucky(_aLuckyHitRate);
@@ -597,7 +649,55 @@
#if UNITY_EDITOR
            Debug.LogFormat("技能: {0} 计算伤害的时候发生重击, 暴击伤害翻倍: {1}", skill.id, _aSuperHit);
#endif
            #region 4528,4083 增加重击伤害
            if (skill.skillInfo.effectValue.TryGetValue(4528, out _effectValue))
            {
                bool _vaild = true;
                if (_effectValue.value2 == 1)
                {
                    if (attacker.SelectTarget == null
                     || attacker.SelectTarget.ServerInstID != target.ServerInstID)
                    {
                        _vaild = false;
                    }
                }
                if (_effectValue.value3 == 1)
                {
                    if (skill.skillInfo.config.FuncType != (int)E_SkillFuncType.NormalAttack
                     && skill.skillInfo.config.FuncType != (int)E_SkillFuncType.FaBaoActiveSkill)
                    {
                        _vaild = false;
                    }
                }
                if (_vaild)
                {
                    if (_vaild)
                    {
                        _superHitAdd += _effectValue.value1;
                    }
                }
            }
            if (attacker.SkillMgr.TryGetPassiveEffectValue(4083, out _effectValue))
            {
                bool _vaild = true;
                if (_effectValue.value2 == 1)
                {
                    if (attacker.SelectTarget == null
                     || attacker.SelectTarget.ServerInstID != target.ServerInstID)
                    {
                        _vaild = false;
                    }
                }
                if (_vaild)
                {
                    _superHitAdd += _effectValue.value1;
                }
            }
            #endregion
        }
        // 4051 当发生会心伤害时, 增加会心一击伤害
        if (_isLucky
@@ -611,7 +711,7 @@
         || skill.skillInfo.config.HurtType == 0)
        {
            // 处理本身的技能
            CalculateSkillEffect(attacker, target, skill.skillInfo, ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _aSuperHit, _isCrit);
            CalculateSkillEffect(attacker, target, skill.skillInfo, ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _superHitAdd, _isCrit);
            // 处理sp技能
            List<SkillHelper.SkillInfo> _spSkillList = SkillHelper.Instance.GetSpSkill(skill.id);
@@ -620,7 +720,7 @@
            {
                for (int i = 0; i < _spSkillList.Count; ++i)
                {
                    CalculateSkillEffect(attacker, target, _spSkillList[i], ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _aSuperHit, _isCrit);
                    CalculateSkillEffect(attacker, target, _spSkillList[i], ref _aDamagePer, ref _aAtkSkillPer, ref _atkSkillValue, ref _aIceAtk, ref _aFinalHurt, ref _superHitAdd, _isCrit);
                }
            }
        }
@@ -634,6 +734,8 @@
                _aAtkSkillPer += (_per * Constants.F_DELTA);
            }
        }
        _aSuperHit *= (1 + _superHitAdd * Constants.F_DELTA);
        // -------------- 公式计算 --------------
        // PVE
@@ -743,6 +845,22 @@
            }
        }
        SkillHelper.EffectValue _effectValue;
        if (_hero.SkillMgr.TryGetPassiveEffectValue(4081, out _effectValue))
        {
            if (_effectValue.value2 == 1)
            {
                if (_hero.SelectTarget.ServerInstID == target.ServerInstID)
                {
                    _rate += _effectValue.value1;
                }
            }
            else
            {
                _rate += _effectValue.value1;
            }
        }
#if UNITY_EDITOR
        var _random = Random.Range(0, 10000);
        var _result = _random < _rate;
@@ -779,25 +897,11 @@
                                             ref int _atkSkillValue,
                                             ref int _aIceAtk,
                                             ref int _aFinalHurt,
                                             ref float _aSuperHit,
                                             ref float _aSuperHitAdd,
                                             bool _isCrit)
    {
        SkillHelper.EffectValue _effectValue;
        #region 伤害增加
        // 4002 目标血量低于XX百分比提高伤害xx
        if (skillInfo.effectValue.TryGetValue(4002, out _effectValue))
        {
            if (HpPer(target) < _effectValue.value2 * Constants.F_DELTA)
            {
                _aDamagePer += _effectValue.value1;
#if UNITY_EDITOR
                if (RuntimeLogUtility.s_SkillEffectLog)
                {
                    Debug.LogFormat("技能 {0} 触发了效果 {1} , aDamagePer 增加了 {2}", skillInfo.config.SkillID, 4002, _effectValue.value1);
                }
#endif
            }
        }
        if (skillInfo.effectValue.TryGetValue(1062, out _effectValue))
        {
@@ -819,22 +923,119 @@
            }
        }
        // 4003 目标处于XX状态提高伤害 _aDamagePer ???
        if (skillInfo.effectValue.TryGetValue(4003, out _effectValue))
        if (attacker is GA_Hero)
        {
            if (target.ActorInfo.status4012.ContainsKey((byte)_effectValue.value2)
             && target.ActorInfo.status4012[(byte)_effectValue.value2] > 0)
            if (attacker.SkillMgr.TryGetPassiveEffectValue(4086, out _effectValue))
            {
                _aDamagePer += _effectValue.value1;
#if UNITY_EDITOR
                if (RuntimeLogUtility.s_SkillEffectLog)
                bool _vaild = true;
                if (_effectValue.value3 == 1)
                {
                    Debug.LogFormat("技能 {0} 触发了效果 {1} , aDamagePer 增加了 {2}", skillInfo.config.SkillID, 4003, _effectValue.value1);
                    if (attacker.SelectTarget == null
                     || attacker.SelectTarget.ServerInstID != target.ServerInstID)
                    {
                        _vaild = false;
                    }
                }
#endif
                if (_vaild)
                {
                    int _limit = PlayerDatas.Instance.baseData.yinjiCount > _effectValue.value2 ?
                                 _effectValue.value2 : PlayerDatas.Instance.baseData.yinjiCount;
                    _aAtkSkillPer += _limit * _effectValue.value1;
                }
            }
            if (attacker.SkillMgr.TryGetPassiveEffectValue(4087, out _effectValue))
            {
                if (PlayerDatas.Instance.baseData.yinjiCount > _effectValue.value2)
                {
                    _aAtkSkillPer += _effectValue.value1;
                }
            }
            if (attacker.SkillMgr.TryGetPassiveEffectValue(4088, out _effectValue))
            {
                int _per = _effectValue.value1;
                int _needCount = _effectValue.value2;
                bool _valid = true;
                if (attacker.SkillMgr.TryGetPassiveEffectValue(4092, out _effectValue))
                {
                    if (_effectValue.value2 == 0)
                    {
                        if (PlayerDatas.Instance.baseData.yinjiCount != _needCount)
                        {
                            _valid = false;
                        }
                    }
                    else if (_effectValue.value2 == 1)
                    {
                        if (PlayerDatas.Instance.baseData.yinjiCount == 0
                         || PlayerDatas.Instance.baseData.yinjiCount < _effectValue.value1)
                        {
                            _valid = false;
                        }
                    }
                }
                if (_valid)
                {
                    _needCount = PlayerDatas.Instance.baseData.yinjiCount > _needCount ?
                                 _needCount : PlayerDatas.Instance.baseData.yinjiCount;
                    _aAtkSkillPer += _per * _needCount;
                }
            }
            if (attacker.SkillMgr.TryGetPassiveEffectValue(4015, out _effectValue))
            {
                if (target.ActorInfo.status4012.ContainsKey((byte)_effectValue.value2))
                {
                    uint _selfSID = _effectValue.value3 == 1 ? attacker.ServerInstID : 0;
                    if (StatusMgr.Instance.IsBurning(target.ServerInstID, _selfSID))
                    {
                        _aAtkSkillPer += _effectValue.value1;
                    }
                }
            }
            if (StatusMgr.Instance.TryGetSkillEffectValue(attacker.ServerInstID, 4505, out _effectValue))
            {
                if (target.ActorInfo.status4012.ContainsKey((byte)_effectValue.value2))
                {
                    uint _selfSID = _effectValue.value3 == 1 ? attacker.ServerInstID : 0;
                    if (StatusMgr.Instance.IsBurning(target.ServerInstID, _selfSID))
                    {
                        _aAtkSkillPer += _effectValue.value1;
                    }
                }
            }
            if (attacker.SkillMgr.TryGetPassiveEffectValue(4098, out _effectValue))
            {
                var _skillInfo = SkillHelper.Instance.Get(_effectValue.value2);
                if (_skillInfo != null)
                {
                    SkillHelper.EffectValue _tmpEffectValue;
                    if (_skillInfo.effectValue.TryGetValue(4012, out _tmpEffectValue))
                    {
                        if (target.ActorInfo.status4012.ContainsKey((byte)_tmpEffectValue.value1))
                        {
                            if (target.ActorInfo.GetStatusCount((byte)_tmpEffectValue.value1, attacker.ServerInstID) >= _effectValue.value3)
                            {
                                _aAtkSkillPer += _effectValue.value1;
                            }
                        }
                    }
                }
            }
            if (attacker.SkillMgr.TryGetPassiveEffectValue(4096, out _effectValue))
            {
                if (StatusMgr.Instance.IsExist(target.ServerInstID, _effectValue.value3))
                {
                    int _count = target.ActorInfo.GetStatusCount((byte)_effectValue.value2, attacker.ServerInstID);
                    _aAtkSkillPer += _effectValue.value1 * _count;
                }
            }
        }
        // 4005 概率增加攻击(技能)伤害万分率
        if (skillInfo.effectValue.TryGetValue(4005, out _effectValue))
@@ -896,8 +1097,7 @@
        // 4015 目标处于XX状态提高技能伤害
        if (skillInfo.effectValue.TryGetValue(4015, out _effectValue))
        {
            if (target.ActorInfo.status4012.ContainsKey((byte)_effectValue.value2)
             && target.ActorInfo.status4012[(byte)_effectValue.value2] > 0)
            if (target.ActorInfo.GetStatusCount((byte)_effectValue.value2, attacker.ServerInstID) > 0)
            {
                _aAtkSkillPer += _effectValue.value1;
@@ -908,19 +1108,6 @@
                }
#endif
            }
        }
        // 4024 攻击附加真实伤害百分比
        if (skillInfo.effectValue.TryGetValue(4024, out _effectValue))
        {
            _aIceAtk *= (int)((10000 + _effectValue.value1) * Constants.F_DELTA);
#if UNITY_EDITOR
            if (RuntimeLogUtility.s_SkillEffectLog)
            {
                Debug.LogFormat("技能 {0} 触发了效果 {1} , _aIceAtk 增加了 {2}", skillInfo.config.SkillID, 4024, _aIceAtk * _effectValue.value1 * Constants.F_DELTA);
            }
#endif
        }
        // 4025 攻击附加真实伤害
@@ -940,17 +1127,14 @@
        if (StatusMgr.Instance.TryGetSkillEffectValue(attacker.ServerInstID, 4501, out _effectValue))
        {
            int _rate = _effectValue.value2;
            SkillHelper.EffectValue _rateEffectValue;
            // 判断是否存在4030 有的话提高概率
            if (StatusMgr.Instance.TryGetSkillEffectValue(attacker.ServerInstID, 4030, out _rateEffectValue))
            // 基于目标状态
            if (_effectValue.value3 != 0)
            {
                _rate += _rateEffectValue.value1;
#if UNITY_EDITOR
                if (RuntimeLogUtility.s_SkillEffectLog)
                if (!target.ActorInfo.status4012.ContainsKey((byte)_effectValue.value3))
                {
                    Debug.LogFormat("技能 {0} 触发了效果 {1} , 增加了 4501 的概率", skillInfo.config.SkillID, 4030, _rateEffectValue.value1);
                    _rate = 0;
                }
#endif
            }
            if (Random.Range(0, 10000) < _rate)
@@ -969,8 +1153,7 @@
        // 4503 buff中攻击提高增加伤害,可附加目标处于XX状态
        if (StatusMgr.Instance.TryGetSkillEffectValue(attacker.ServerInstID, 4503, out _effectValue))
        {
            if (target.ActorInfo.status4012.ContainsKey((byte)_effectValue.value2)
             && target.ActorInfo.status4012[(byte)_effectValue.value2] > 0)
            if (target.ActorInfo.GetStatusCount((byte)_effectValue.value2, attacker.ServerInstID) > 0)
            {
                _aDamagePer += _effectValue.value1;
@@ -1019,12 +1202,12 @@
            // 是否可以执行
            if (_condition && _isCrit)
            {
                _aSuperHit += (_aSuperHit * _effectValue.value1 * Constants.F_DELTA);
                _aSuperHitAdd += _effectValue.value1;
#if UNITY_EDITOR
                if (RuntimeLogUtility.s_SkillEffectLog)
                {
                    Debug.LogFormat("技能 {0} 触发了效果 {1} , _aSuperHit 增加了 {2}", skillInfo.config.SkillID, 4007, (_aSuperHit * _effectValue.value1 * Constants.F_DELTA));
                    Debug.LogFormat("技能 {0} 触发了效果 {1} , _aSuperHitAdd 增加了 {2}", skillInfo.config.SkillID, 4007, _effectValue.value1 * Constants.F_DELTA);
                }
#endif
            }
Fight/Actor/Skill/SkillManager.cs
@@ -5,6 +5,7 @@
{
    private Dictionary<int, Skill> m_SkillDict;
    private List<int> m_SkillList;
    private List<int> m_PassiveSkill;
    private uint m_OwnerID;
@@ -39,6 +40,22 @@
        m_OwnerID = sid;
        m_SkillDict = new Dictionary<int, Skill>();
        m_SkillList = new List<int>();
        m_PassiveSkill = new List<int>();
    }
    public bool TryGetPassiveEffectValue(int id, out SkillHelper.EffectValue effectValue)
    {
        SkillHelper.SkillInfo _skill;
        foreach (var _id in m_PassiveSkill)
        {
            _skill = SkillHelper.Instance.Get(_id);
            if (_skill.effectValue.TryGetValue(id, out effectValue))
            {
                return true;
            }
        }
        effectValue = default(SkillHelper.EffectValue);
        return false;
    }
    public void ResetAllCD()
@@ -49,10 +66,10 @@
             && _skill.skillInfo != null
             && _skill.skillInfo.config != null)
            {
                if ( Skill.RefreshCD != null)
                if (Skill.RefreshCD != null)
                {
                    _skill.cd = 0;
                    Skill.RefreshCD( _skill.id,0, _skill.skillInfo.config.CoolDownTime * Constants.F_GAMMA);
                    Skill.RefreshCD(_skill.id, 0, _skill.skillInfo.config.CoolDownTime * Constants.F_GAMMA);
                }
            }
        }
@@ -71,6 +88,13 @@
            Skill _skill = new Skill(m_OwnerID, id);
            m_SkillDict[id] = _skill;
            m_SkillList.Add(id);
            if (_skill.skillInfo.config.FuncType == (int)E_SkillFuncType.FaBaoPassiveSkills)
            {
                if (!m_PassiveSkill.Contains(id))
                {
                    m_PassiveSkill.Add(id);
                }
            }
        }
        return m_SkillDict[id];
Fight/Actor/Status/StatusMgr.cs
@@ -82,7 +82,7 @@
    private void OnServerPrepareOk()
    {
        if (!DTC0403_tagPlayerLoginLoadOK.neverLoginOk)
        if (DTC0403_tagPlayerLoginLoadOK.neverLoginOk)
        {
            ReleaseActor(PlayerDatas.Instance.baseData.PlayerID);
            ZhongJiDict.Clear();
@@ -98,13 +98,9 @@
            SkillHelper.EffectValue _effectValue;
            if (SkillHelper.Instance.Get(h0605.SkillID).effectValue.TryGetValue(4012, out _effectValue))
            {
                byte _count = 0;
                if (_actor.ActorInfo.status4012.ContainsKey((byte)_effectValue.value1))
                {
                    _count = _actor.ActorInfo.status4012[(byte)_effectValue.value1];
                }
                int _count = _actor.ActorInfo.GetStatusCount((byte)_effectValue.value1, h0605.OwnerID);
                _count += 1;
                _actor.ActorInfo.status4012[(byte)_effectValue.value1] = _count;
                _actor.ActorInfo.status4012[(byte)_effectValue.value1][h0605.OwnerID] = _count;
            }
        }
@@ -193,6 +189,10 @@
        {
            onReceiveStatus(h0605.SkillID);
        }
#if UNITY_EDITOR
        Debug.LogFormat("增加 {0} Buff: {1}", h0605.ObjID, h0605.SkillID);
#endif
    }
    public bool CanCastSkill(uint sid)
@@ -231,19 +231,19 @@
                        SkillHelper.EffectValue _effectValue;
                        if (SkillHelper.Instance.Get(_list[i].h0605.SkillID).effectValue.TryGetValue(4012, out _effectValue))
                        {
                            byte _count = 0;
                            if (_actor.ActorInfo.status4012.TryGetValue((byte)_effectValue.value1, out _count))
                            {
                                _count -= 1;
                            }
                            int _count = _actor.ActorInfo.GetStatusCount((byte)_effectValue.value1, objID);
                            _count -= 1;
                            if (_count < 0)
                            {
                                _count = 0;
                                _actor.ActorInfo.status4012.Remove((byte)_effectValue.value1);
                                if (_actor.ActorInfo.status4012[(byte)_effectValue.value1].ContainsKey(objID))
                                {
                                    _actor.ActorInfo.status4012[(byte)_effectValue.value1].Remove(objID);
                                }
                            }
                            else
                            {
                                _actor.ActorInfo.status4012[(byte)_effectValue.value1] = _count;
                                _actor.ActorInfo.status4012[(byte)_effectValue.value1][objID] = _count;
                            }
                        }
                    }
@@ -269,16 +269,20 @@
            SkillHelper.EffectValue _effectValue;
            if (SkillHelper.Instance.Get(h0606.SkillID).effectValue.TryGetValue(4012, out _effectValue))
            {
                byte _count = 0;
                if (_actor.ActorInfo.status4012.TryGetValue((byte)_effectValue.value1, out _count))
                {
                    _count -= 1;
                }
                int _count = _actor.ActorInfo.GetStatusCount((byte)_effectValue.value1, h0606.ObjID);
                _count -= 1;
                if (_count < 0)
                {
                    _count = 0;
                    if (_actor.ActorInfo.status4012[(byte)_effectValue.value1].ContainsKey(h0606.ObjID))
                    {
                        _actor.ActorInfo.status4012[(byte)_effectValue.value1].Remove(h0606.ObjID);
                    }
                }
                _actor.ActorInfo.status4012[(byte)_effectValue.value1] = _count;
                else
                {
                    _actor.ActorInfo.status4012[(byte)_effectValue.value1][h0606.ObjID] = _count;
                }
            }
        }
@@ -333,6 +337,9 @@
        //         PlayerDatas.Instance.ReCheckAttackTarget();
        //     }
        // }
#if UNITY_EDITOR
        Debug.LogFormat("删除 {0} 的Buff: {1}", h0606.ObjID, h0606.SkillID);
#endif
    }
    public void ReleaseActor(uint sid)
@@ -353,6 +360,7 @@
            m_StatusDict[sid].Clear();
            m_StatusDict.Remove(sid);
            Debug.LogFormat("删除:{0} 所有Buff", sid);
        }
        if (m_OwnerList.Contains(sid))
@@ -708,4 +716,29 @@
        return false;
    }
    public bool IsBurning(uint targetSID, uint attackSID = 0)
    {
        List<Status_Base> _list = null;
        if (m_StatusDict.TryGetValue(targetSID, out _list))
        {
            for (int i = 0; i < _list.Count; ++i)
            {
                if (SkillHelper.Instance.Get(_list[i].h0605.SkillID).effectValue.ContainsKey(1043))
                {
                    if (attackSID > 0)
                    {
                        if (_list[i].h0605.ObjID == attackSID)
                        {
                            return true;
                        }
                    }
                    else
                    {
                        return true;
                    }
                }
            }
        }
        return false;
    }
}
Fight/ClientCollectUtility.cs
@@ -160,6 +160,8 @@
                    if (_model.CanCollectClientNpc(_npc.NpcConfig.NPCID))
                    {
                        StartCollect(_npc);
                        var _dir = MathUtility.ForwardXZ(_npc.Pos, _hero.Pos);
                        _hero.Forward = _dir;
                    }
                    else
                    {
Fight/ClientDropItemUtility.cs
@@ -67,6 +67,8 @@
                Release(_item);
            }
        }
        CheckAndRemoveOutdatedFakeDropInfo();
    }
    public void ReleaseAll()
@@ -132,6 +134,8 @@
        {
            _time = 3f;
        }
        RecordFakeDrop(itemID, Time.time);
        DropItem.DropFake(itemID, m_DropPos, CameraController.Instance.CameraObject, _time);
    }
@@ -214,4 +218,48 @@
            DropNext(itemIds);
        }
    }
    List<FakeDropInfo> fakeDropInfos = new List<FakeDropInfo>();
    void RecordFakeDrop(int itemId, float time)
    {
        fakeDropInfos.Add(new FakeDropInfo() { itemId = itemId, dropTime = time });
    }
    public float GetFakeDropItemShowDelay(float itemId)
    {
        if (fakeDropInfos.IsNullOrEmpty())
        {
            return 0f;
        }
        var info = fakeDropInfos.Find(x => { return x.itemId == itemId; });
        if (info.itemId != 0 && info.dropTime + 2.5f > Time.time)
        {
            return info.dropTime + 2.5f - Time.time;
        }
        else
        {
            return 0f;
        }
    }
    void CheckAndRemoveOutdatedFakeDropInfo()
    {
        for (var i = fakeDropInfos.Count - 1; i >= 0; i--)
        {
            var info = fakeDropInfos[i];
            if (Time.time - info.dropTime > 5f)
            {
                fakeDropInfos.RemoveAt(i);
            }
        }
    }
    public struct FakeDropInfo
    {
        public int itemId;
        public float dropTime;
    }
}
Fight/GameActor/GA_Hero.cs
@@ -97,14 +97,14 @@
#if UNITY_EDITOR
            // if (m_LockTarget is GA_Player && value != null && !(value is GA_Player))
            // {
            if (value != null)
            {
                Debug.LogFormat("更换了锁定目标: {0} ", value.ServerInstID);
            }
            else
            {
                Debug.LogFormat("清空了锁定目标: null");
            }
            // if (value != null)
            // {
            //     Debug.LogFormat("更换了锁定目标: {0} ", value.ServerInstID);
            // }
            // else
            // {
            //     Debug.LogFormat("清空了锁定目标: null");
            // }
            // }
#endif
            m_LockTarget = value;
Fight/GameActor/GA_NpcClientFightBoss.cs
@@ -15,20 +15,13 @@
    protected sealed override void InitAI()
    {
        if (NpcConfig.NPCID == 30902001)
        if (NpcConfig.AIType == 186)// 封魔坛boss
        {
            m_AIHandler = new AI_Boss_HYQ(this, BornPos);
            m_AIHandler = new AI_BossFMT(this, BornPos);
        }
        else
        {
            if (NpcConfig.AIType == 186)// 封魔坛boss
            {
                m_AIHandler = new AI_BossFMT(this, BornPos);
            }
            else
            {
                m_AIHandler = new AI_Npc_200(this, BornPos);
            }
            m_AIHandler = new AI_Npc_200(this, BornPos);
        }
    }
Fight/GameActor/GActorInfo.cs
@@ -43,7 +43,29 @@
    public int faction;// 阵营, 用来和主角判断是否在同个阵营
    public uint horseItemID;// 坐骑ID
    public Vector2 serverBornPos;// 服务端坐标, 目前至对NPC有赋值, 玩家的没有赋值
    public Dictionary<byte, byte> status4012 = new Dictionary<byte, byte>(); // buff给角色增加的状态
    public Dictionary<byte, Dictionary<uint, int>> status4012 = new Dictionary<byte, Dictionary<uint, int>>(); // buff给角色增加的状态
    public int GetStatusCount(byte status, uint sid = 0)
    {
        int _count = 0;
        if (status4012.ContainsKey(status))
        {
            if (sid != 0)
            {
                if (status4012[status].ContainsKey(sid))
                {
                    _count = status4012[status][sid];
                }
            }
            else
            {
                foreach (var _c in status4012[status].Values)
                {
                    _count += _c;
                }
            }
        }
        return _count;
    }
    #endregion
    #region 血量
Fight/Stage/Dungeon/DungeonStage.cs
@@ -55,20 +55,20 @@
            CameraController.Instance.ResetOriginal();
        }
        WindowCenter.Instance.Open<MainInterfaceWin>(true);
        if (PlayerDatas.Instance.baseData.LV == 1 && !CreateRolePostProcessor.HasPlayMovie((int)PlayerDatas.Instance.baseData.PlayerID))
        {
            WindowCenter.Instance.Close<MainInterfaceWin>();
            CameraController.Instance.CameraObject.enabled = false;
            CreateRolePostProcessor.Begin(() =>
            {
                CreateRolePostProcessor.RecordPlayMovie((int)PlayerDatas.Instance.baseData.PlayerID);
                WindowCenter.Instance.Open<MainInterfaceWin>(true);
                WindowCenter.Instance.Open<MainInterfaceWin>(false);
                var taskModel = ModelCenter.Instance.GetModel<TaskModel>();
                taskModel.AutomaticTripToTask(taskModel.currentMission);
            });
        }
        else
        {
            WindowCenter.Instance.Open<MainInterfaceWin>(true);
        }
        GA_Hero.forceAutoFight = false;
System/CreateRolePostProcess/CreateRolePostProcessor.cs
@@ -42,12 +42,25 @@
    {
        isSkiped = true;
        MoviePlayer.Instance.Stop();
        PlayCameraAnimation();
    }
    static void PlayMovie()
    {
        MoviePlayer.Instance.Play("CreateRoleMovie", PlayCameraAnimation);
        switch (Application.platform)
        {
            case RuntimePlatform.Android:
            case RuntimePlatform.IPhonePlayer:
                Handheld.PlayFullScreenMovie("CreateRoleMovie.mp4", Color.black, FullScreenMovieControlMode.CancelOnInput, FullScreenMovieScalingMode.AspectFit);
                Clock.AlarmAfter(0.1f, () => { PlayCameraAnimation(); });
                break;
            case RuntimePlatform.WindowsPlayer:
                MoviePlayer.Instance.Play("CreateRoleMovie", PlayCameraAnimation);
                break;
            case RuntimePlatform.WindowsEditor:
            case RuntimePlatform.OSXEditor:
                MoviePlayer.Instance.Play("CreateRoleMovie", PlayCameraAnimation);
                break;
        }
    }
    static void PlayCameraAnimation()
System/FakeDungeon/FakeDemonJarDungeonStage.cs
@@ -259,7 +259,7 @@
    private void CreateBoss()
    {
        boss = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightBoss>((uint)bossNpcId, E_ActorGroup.Enemy);
        boss.Pos = SCENE_CENTER;
        boss.Pos = boss.BornPos = SCENE_CENTER;
        boss.LockTargetSID = PlayerDatas.Instance.baseData.PlayerID;
    }
System/ItemDrop/DropItem.cs
@@ -1,13 +1,13 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Snxxz.UI;
using System;
public class DropItem : HUDBehaviour
{
    public static event Action<Vector3> onDropItemDisappear;
    public static DropItem Drop(int _id, Vector3 _position, Camera _camera)
@@ -277,4 +277,11 @@
            }
        }
    }
    public struct FakeDropInfo
    {
        public int itemId;
        public float dropTime;
    }
}
System/KnapSack/BetterItemGetBehaviour.cs
@@ -26,6 +26,7 @@
        [SerializeField] Button m_Puton;
        [SerializeField] Button m_BetterEquipDetail;
        Clock clock;
        PackModel playerPack { get { return ModelCenter.Instance.GetModel<PackModel>(); } }
        BetterEquipGetModel model { get { return ModelCenter.Instance.GetModel<BetterEquipGetModel>(); } }
        EquipModel equipModel { get { return ModelCenter.Instance.GetModel<EquipModel>(); } }
@@ -40,6 +41,11 @@
        private void OnDisable()
        {
            if (clock != null)
            {
                Clock.Stop(clock);
                clock = null;
            }
            m_Close.RemoveAllListeners();
            m_Puton.RemoveAllListeners();
            m_BetterEquipDetail.RemoveAllListeners();
@@ -77,10 +83,33 @@
                    DrawBetterEquip(betterEquip);
                    m_ContainerBetterEquip.gameObject.SetActive(true);
                    var coolData = KnapsackTimeCDMgr.Instance.GetItemCoolById(model.currentEquipGuid);
                    if (model.CheckIsAutoEquip(betterEquip) && coolData == null)
                    var delayTime = ClientDropItemUtility.Instance.GetFakeDropItemShowDelay(betterEquip.itemId);
                    if (delayTime > 0f)
                    {
                        KnapsackTimeCDMgr.Instance.Register(betterEquip.guid, betterEquip.itemId, model.autoEquipCoolTime);
                        if (clock != null)
                        {
                            Clock.Stop(clock);
                            clock = null;
                        }
                        m_ContainerBetterEquip.localScale = Vector3.zero;
                        clock = Clock.AlarmAfter(delayTime, () =>
                        {
                            m_ContainerBetterEquip.localScale = Vector3.one;
                            var coolData = KnapsackTimeCDMgr.Instance.GetItemCoolById(model.currentEquipGuid);
                            if (model.CheckIsAutoEquip(betterEquip) && coolData == null)
                            {
                                KnapsackTimeCDMgr.Instance.Register(betterEquip.guid, betterEquip.itemId, model.autoEquipCoolTime);
                            }
                        });
                    }
                    else
                    {
                        var coolData = KnapsackTimeCDMgr.Instance.GetItemCoolById(model.currentEquipGuid);
                        if (model.CheckIsAutoEquip(betterEquip) && coolData == null)
                        {
                            KnapsackTimeCDMgr.Instance.Register(betterEquip.guid, betterEquip.itemId, model.autoEquipCoolTime);
                        }
                    }
                }
            }
@@ -110,7 +139,7 @@
                WindowCenter.Instance.Close<MainInterfaceWin>();
                equipModel.SelectSet(betterEquip.config.LV);
                WindowCenter.Instance.Open<RealmEquipWin>();
                StartCoroutine(Co_Delay(model.currentEquipGuid));
                StartCoroutine(Co_OpenRealmEquipDelay(model.currentEquipGuid));
            }
            else
            {
@@ -121,7 +150,7 @@
                    WindowCenter.Instance.Close<MainInterfaceWin>();
                    equipModel.SelectSet(betterEquip.config.LV);
                    WindowCenter.Instance.Open<RealmEquipWin>();
                    StartCoroutine(Co_Delay(model.currentEquipGuid));
                    StartCoroutine(Co_OpenRealmEquipDelay(model.currentEquipGuid));
                }
                else
                {
@@ -157,7 +186,7 @@
            UpdateCoolTime(betterModel.guid);
        }
        IEnumerator Co_Delay(string _guid)
        IEnumerator Co_OpenRealmEquipDelay(string _guid)
        {
            yield return null;
            yield return null;
@@ -166,6 +195,7 @@
            ItemTipUtility.Show(_guid);
            model.ReportConfirmBetterEquip(model.currentEquipGuid);
        }
    }
}
System/KnapSack/NewItemGetWin.cs
@@ -83,7 +83,7 @@
                }
                while (model == null && newItemQueue.Count > 0);
                if (model != null)
                if (model != null && ClientDropItemUtility.Instance.GetFakeDropItemShowDelay(model.itemId) == 0f)
                {
                    int itemId = model.itemId;
                    var itemBehaviour = RequireBehaviour();
Utility/RuntimeLogUtility.cs
@@ -257,9 +257,11 @@
        RuntimeLogUtility.s_ForceLuckHit = EditorGUILayout.Toggle("强制会心一击", RuntimeLogUtility.s_ForceLuckHit);
        RuntimeLogUtility.s_LogProcessInfo = EditorGUILayout.Toggle("输出AI流程控制", RuntimeLogUtility.s_LogProcessInfo);
        _triggerID = EditorGUILayout.IntField("NPCID", _triggerID);
        if (GUILayout.Button("创建PVP敌方"))
        {
            var _npc = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightBoss>(20000, E_ActorGroup.Enemy);
            var _npc = GAMgr.Instance.ReqClntFightNpc<GA_NpcClientFightBoss>((uint)_triggerID, E_ActorGroup.Enemy);
            _npc.BornPos = _npc.Pos = PlayerDatas.Instance.hero.Pos;
            PersonalEnemy.Bind(_npc);