少年修仙传客户端代码仓库
client_Hale
2018-08-29 39fcc884dad9b6b30b3fd97c426a45e8b483eb69
Fixed #3020 骑宠争夺,仙盟归属拾取逻辑
5个文件已修改
290 ■■■■■ 已修改文件
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/HeroAI_Auto.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Actor/AI/HeroAI_Base.cs 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Fight/Stage/Dungeon/DropItemManager.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
UI/Common/UI3DShowHero.cs 180 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/DTCFile/ServerPack/H06_PlayerVsNPC/DTC0614_tagUseSkillPos.cs
@@ -275,7 +275,8 @@
                            _cTarget.DoFlashWhite();
                        }
                        if (_sTarget.CurHP == 0)
                        // 2018年8月28日 20:11:06 角色有可能具有死而复生的能力 这里不在血量为0的时候调用死亡逻辑
                        if (_sTarget.CurHP == 0 && !(_cTarget is GActorPlayerBase))
                        {
                            _cTarget.ActorInfo.ResetHp((int)_sTarget.CurHP, (short)_sTarget.CurHPEx);
                            _cTarget.Die(vNetData.ObjID);
@@ -629,7 +630,8 @@
                    GAStaticDefine.PopHp(_attacker, _cTarget, _sTarget.AttackType, (int)_sTarget.HurtHP);
                }
                if (_sTarget.CurHP == 0)
                // 2018年8月28日 20:11:06 角色有可能具有死而复生的能力 这里不在血量为0的时候调用死亡逻辑
                if (_sTarget.CurHP == 0 && !(_cTarget is GActorPlayerBase))
                {
                    _cTarget.ActorInfo.ResetHp((int)_sTarget.CurHP, (short)_sTarget.CurHPEx);
                    _cTarget.Die(vNetData.ObjID);
Fight/Actor/AI/HeroAI_Auto.cs
@@ -267,7 +267,7 @@
        {
            return;
        }
        if (m_DecideSkill != null)
        {
            _skill = m_DecideSkill;
Fight/Actor/AI/HeroAI_Base.cs
@@ -182,51 +182,61 @@
    protected bool WaitForPickup()
    {
        if (Config.Instance.ContainKey<DungeonOpenTimeConfig>(PlayerDatas.Instance.baseData.MapID)) // 是副本
        {
            var _dungeonOpenTime = Config.Instance.Get<DungeonOpenTimeConfig>(PlayerDatas.Instance.baseData.MapID);
            if (_dungeonOpenTime.GuardPick == 1)// 守护可以拾取
            {
                var _singleModel = PlayerBackModel.GetSinglePackModel(PackType.rptEquip);
                if (_singleModel != null)
                {
                    // 如果有守护
                    var _itemModel = _singleModel.GetItemModelByIndex((int)RoleEquipType.retSpiritAnimal);
                    if (_itemModel != null // 有守护
                     && GeneralConfig.Instance.GuardianPickUpID.Contains(_itemModel.itemId))// 守护有拾取功能
                    {
                        return false;
                    }
                }
            }
        }
        else
        {
            var _singleModel = PlayerBackModel.GetSinglePackModel(PackType.rptEquip);
            if (_singleModel != null)
            {
                // 如果有守护
                var _itemModel = _singleModel.GetItemModelByIndex((int)RoleEquipType.retSpiritAnimal);
                if (_itemModel != null // 有守护
                 && GeneralConfig.Instance.GuardianPickUpID.Contains(_itemModel.itemId))// 守护有拾取功能
                {
                    return false;
                }
            }
        }
        GA_Hero _hero = PlayerDatas.Instance.hero;
        DropItemManager.DropObject _obj = null;
        if (DropItemManager.HandupTryGetHeroItem(out _obj))
        {
            _hero.StopRush();
            Vector3 _targetPosition = _obj.dropItem.transform.position;
            float _chkDistSqrt = MathUtility.DistanceSqrtXZ(_hero.Pos, _targetPosition);
            if (_chkDistSqrt > 0.5f)
            bool _needPickupSelf = true;
            // 有掉落物
            // 是否是强制守护不能拾取的
            if (_obj.ownerType != 7)
            {
                _hero.MoveToPosition(_targetPosition);
                if (Config.Instance.ContainKey<DungeonOpenTimeConfig>(PlayerDatas.Instance.baseData.MapID)) // 是副本
                {
                    var _dungeonOpenTime = Config.Instance.Get<DungeonOpenTimeConfig>(PlayerDatas.Instance.baseData.MapID);
                    if (_dungeonOpenTime.GuardPick == 1)// 守护可以拾取
                    {
                        var _singleModel = PlayerBackModel.GetSinglePackModel(PackType.rptEquip);
                        if (_singleModel != null)
                        {
                            // 如果有守护
                            var _itemModel = _singleModel.GetItemModelByIndex((int)RoleEquipType.retSpiritAnimal);
                            if (_itemModel != null // 有守护
                             && GeneralConfig.Instance.GuardianPickUpID.Contains(_itemModel.itemId))// 守护有拾取功能
                            {
                                _needPickupSelf = false;
                            }
                        }
                    }
                }
                else
                {
                    var _singleModel = PlayerBackModel.GetSinglePackModel(PackType.rptEquip);
                    if (_singleModel != null)
                    {
                        // 如果有守护
                        var _itemModel = _singleModel.GetItemModelByIndex((int)RoleEquipType.retSpiritAnimal);
                        if (_itemModel != null // 有守护
                         && GeneralConfig.Instance.GuardianPickUpID.Contains(_itemModel.itemId))// 守护有拾取功能
                        {
                            _needPickupSelf = false;
                        }
                    }
                }
            }
            return true;
            if (_needPickupSelf)
            {
                _hero.StopRush();
                Vector3 _targetPosition = _obj.dropItem.transform.position;
                float _chkDistSqrt = MathUtility.DistanceSqrtXZ(_hero.Pos, _targetPosition);
                if (_chkDistSqrt > 0.5f)
                {
                    _hero.MoveToPosition(_targetPosition);
                }
                return true;
            }
        }
        return false;
    }
Fight/Stage/Dungeon/DropItemManager.cs
@@ -383,6 +383,13 @@
                return false;
            }
        }
        else if (dropObject.ownerType == 7)
        {
            if (dropObject.ownerID != PlayerDatas.Instance.baseData.Family)
            {
                return false;
            }
        }
        ItemConfig _itemModel = Config.Instance.Get<ItemConfig>(dropObject.itemID);
@@ -583,6 +590,13 @@
        {
            return false;
        }
        // 如果是仙盟归属的, 设定为守护不拾取
        if (_item.ownerType == 7)
        {
            return false;
        }
        return CheckCanPickUp(_item);
    }
    #endregion
UI/Common/UI3DShowHero.cs
@@ -49,25 +49,33 @@
            if (weaponId != 0)
            {
                prefab = InstanceResourcesLoader.LoadModelRes(weaponId);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                pool.Release(weaponModel);
                if (prefab)
                {
                    pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                    pool.Release(weaponModel);
                }
                weaponModel = null;
            }
            if (secondaryId != 0)
            {
                prefab = InstanceResourcesLoader.LoadModelRes(secondaryId);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                pool.Release(secondaryModel);
                secondaryModel.SetActive(true);
                if (prefab)
                {
                    pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                    pool.Release(secondaryModel);
                }
                secondaryModel = null;
            }
            if (wingsId != 0)
            {
                prefab = InstanceResourcesLoader.LoadModelRes(wingsId);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                pool.Release(wingsModel);
                if (prefab)
                {
                    pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                    pool.Release(wingsModel);
                }
                wingsModel = null;
                wingsAnimator = null;
            }
@@ -75,8 +83,11 @@
            if (clothesId != 0)
            {
                prefab = InstanceResourcesLoader.LoadModelRes(clothesId);
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                pool.Release(clothesModel);
                if (prefab)
                {
                    pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                    pool.Release(clothesModel);
                }
                clothesModel = null;
                if (clothesAnimator)
                {
@@ -102,7 +113,10 @@
            if (clothesModel != null)
            {
                var animator = clothesModel.GetComponent<Animator>();
                animator.Play(GAStaticDefine.State_IdleHash);
                if (animator)
                {
                    animator.Play(GAStaticDefine.State_IdleHash);
                }
            }
        }
@@ -111,13 +125,19 @@
            if (clothesModel != null)
            {
                var animator = clothesModel.GetComponent<Animator>();
                animator.Play(GAStaticDefine.State_SitDown);
                if (animator)
                {
                    animator.Play(GAStaticDefine.State_SitDown);
                }
            }
            if (weaponModel)
            {
                GameObject prefab = InstanceResourcesLoader.LoadModelRes(weaponId);
                GameObjectPoolManager.Instance.ReleaseGameObject(prefab, weaponModel);
                if (prefab)
                {
                    GameObjectPoolManager.Instance.ReleaseGameObject(prefab, weaponModel);
                }
                weaponModel = null;
            }
@@ -162,52 +182,57 @@
            LoadClothes(newClothes);
            clothesId = newClothes;
            if (weaponModel)
            if (clothesModel)
            {
                var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WeaponBindBoneName);
                weaponModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
            }
                if (weaponModel)
                {
                    var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WeaponBindBoneName);
                    weaponModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                }
            if (wingsModel)
            {
                var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WingBindBoneName);
                wingsModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
            }
                if (wingsModel)
                {
                    var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WingBindBoneName);
                    wingsModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                }
            if (secondaryModel)
            {
                var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
                wingsModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
            }
                if (secondaryModel)
                {
                    var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
                    wingsModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                }
            LoadClothesEffect(itemID, suitID);
                LoadClothesEffect(itemID, suitID);
            }
        }
        private void LoadClothes(int resID)
        {
            var prefab = InstanceResourcesLoader.LoadModelRes(resID);
            var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
            clothesModel = pool.Request();
            LayerUtility.SetLayer(clothesModel, LayerUtility.Player, false);
            var skinnedMeshRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>(true);
            LayerUtility.SetLayer(skinnedMeshRenderer.gameObject, LayerUtility.Player, false);
            clothesModel.SetActive(true);
            clothesModel.transform.SetParentEx(showPoint, Vector3.zero, Quaternion.identity, Vector3.one);
            clothesAnimator = clothesModel.GetComponent<Animator>();
            if (clothesAnimator == null)
            if (prefab)
            {
                DebugEx.LogErrorFormat("角色资源: {0} 没有动画控制器", resID);
            }
                var pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                clothesModel = pool.Request();
            // 动画状态机修改
            if (clothesAnimator)
            {
                cacheClothedAC = clothesAnimator.runtimeAnimatorController;
                RuntimeAnimatorController _controller = AnimatorControllerLoader.Load(AnimatorControllerLoader.controllerUISuffix, resID);
                clothesAnimator.runtimeAnimatorController = _controller;
                clothesAnimator.enabled = true;
                LayerUtility.SetLayer(clothesModel, LayerUtility.Player, false);
                var skinnedMeshRenderer = clothesModel.GetComponentInChildren<SkinnedMeshRenderer>(true);
                LayerUtility.SetLayer(skinnedMeshRenderer.gameObject, LayerUtility.Player, false);
                clothesModel.SetActive(true);
                clothesModel.transform.SetParentEx(showPoint, Vector3.zero, Quaternion.identity, Vector3.one);
                clothesAnimator = clothesModel.GetComponent<Animator>();
                // 动画状态机修改
                if (clothesAnimator)
                {
                    cacheClothedAC = clothesAnimator.runtimeAnimatorController;
                    RuntimeAnimatorController _controller = AnimatorControllerLoader.Load(AnimatorControllerLoader.controllerUISuffix, resID);
                    clothesAnimator.runtimeAnimatorController = _controller;
                    clothesAnimator.enabled = true;
                }
                else
                {
                    DebugEx.LogErrorFormat("角色资源: {0} 没有动画控制器", resID);
                }
            }
        }
@@ -274,12 +299,16 @@
                prefab = InstanceResourcesLoader.LoadModelRes(newWeapon);
            }
            pool = GameObjectPoolManager.Instance.RequestPool(prefab);
            weaponModel = pool.Request();
            if (prefab)
            {
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                weaponModel = pool.Request();
            LayerUtility.SetLayer(weaponModel, LayerUtility.Player, false);
            var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WeaponBindBoneName);
            weaponModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                LayerUtility.SetLayer(weaponModel, LayerUtility.Player, false);
                var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WeaponBindBoneName);
                weaponModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
            }
            weaponId = newWeapon;
        }
@@ -323,11 +352,15 @@
                    newSecondary = config.BaseEquip[2];
                    prefab = InstanceResourcesLoader.LoadModelRes(newSecondary);
                }
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                secondaryModel = pool.Request();
                var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
                secondaryModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                if (prefab)
                {
                    pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                    secondaryModel = pool.Request();
                    var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.SecondaryBindBoneName[job - 1]);
                    secondaryModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                }
            }
            secondaryId = newSecondary;
@@ -371,26 +404,29 @@
                    prefab = InstanceResourcesLoader.LoadModelRes(newWings);
                }
                pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                wingsModel = pool.Request();
                wingsModel.layer = LayerUtility.Player;
                SkinnedMeshRenderer _renderer = wingsModel.GetComponentInChildren<SkinnedMeshRenderer>();
                if (_renderer)
                if (prefab)
                {
                    _renderer.gameObject.layer = LayerUtility.Player;
                }
                    pool = GameObjectPoolManager.Instance.RequestPool(prefab);
                    wingsModel = pool.Request();
                var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WingBindBoneName);
                wingsModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                    wingsModel.layer = LayerUtility.Player;
                    SkinnedMeshRenderer _renderer = wingsModel.GetComponentInChildren<SkinnedMeshRenderer>();
                    if (_renderer)
                    {
                        _renderer.gameObject.layer = LayerUtility.Player;
                    }
                wingsAnimator = wingsModel.GetComponent<Animator>();
                if (wingsAnimator == null)
                {
                    DebugEx.LogErrorFormat("翅膀资源{0}没有动画控制器", itemID);
                    var parent = clothesModel.transform.GetChildTransformDeeply(GAStaticDefine.WingBindBoneName);
                    wingsModel.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one);
                    wingsAnimator = wingsModel.GetComponent<Animator>();
                    if (wingsAnimator == null)
                    {
                        DebugEx.LogErrorFormat("翅膀资源{0}没有动画控制器", itemID);
                    }
                    wingsAnimator.enabled = true;
                    wingsAnimator.Play("UI_Idle", 0);
                }
                wingsAnimator.enabled = true;
                wingsAnimator.Play("UI_Idle", 0);
            }
            wingsId = newWings;