少年修仙传客户端代码仓库
lcy
2025-05-14 2d8c175044ec415e6f2a7c5fce0120e49e454875
10366 【越南】【英语】【BT】【砍树】仙盟攻城战-客户端

1.修复普通攻击城池守卫时有概率自己攻击的表现数值错误
2.修复普通攻击仅播放C029 AtkRet=0的
3.查不到playerid的模型用job默认的模型,不用自己的镜像模型
4.城池血量防范除0导致的显示问题
5.修复城池被一击击杀了所有守卫时,同时显示了模型和已击毁图片
3个文件已修改
99 ■■■■ 已修改文件
System/FairySiege/FairySiegeActModel.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairySiege/FairySiegeAtkWin.cs 81 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairySiege/FairySiegeCityWin.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/FairySiege/FairySiegeActModel.cs
@@ -2868,16 +2868,17 @@
        public bool isClickCity = false;
        public bool isWaitC030Pack = false; // 是否等待C030包返回,避免多次点击按钮发送请求
        //我发起攻击前的内容
        public FairySiegeBatCityInfo myFairySiegeBatCityInfo = new FairySiegeBatCityInfo();
        //我发起攻击时的内容
        public FairySiegeBatCityInfo lastFairySiegeBatCityInfo = new FairySiegeBatCityInfo();
        //当前最新的结果
        //当前最新的信息
        public FairySiegeBatCityInfo nowFairySiegeBatCityInfo = new FairySiegeBatCityInfo();
        public event Action<FairySiegeBatCityInfo> UpdateFamilyGCZBatCityInfoEvent;
        //当前最新信息的上一次信息
        public FairySiegeBatCityInfo lastFairySiegeBatCityInfo = new FairySiegeBatCityInfo(); //当前的城池信息
        public event Action UpdateFamilyGCZBatCityInfoEvent;
        public void UpdateFamilyGCZBatCityInfo(HC029_tagGCFamilyGCZBatCityInfo vNetData)
        {
            DeepCopyFairySiegeBatCityInfo(nowFairySiegeBatCityInfo, lastFairySiegeBatCityInfo);
            nowFairySiegeBatCityInfo.CityID = vNetData.CityID;
            nowFairySiegeBatCityInfo.CityLV = vNetData.CityLV;
            nowFairySiegeBatCityInfo.FamilyID = vNetData.FamilyID;
@@ -2888,7 +2889,7 @@
            nowFairySiegeBatCityInfo.AtkRet = vNetData.AtkRet;
            nowFairySiegeBatCityInfo.KillCnt = vNetData.KillCnt;
            nowFairySiegeBatCityInfo.HurtValue = vNetData.HurtValueEx * oneHundredMillion + vNetData.HurtValue;
            UpdateFamilyGCZBatCityInfoEvent?.Invoke(nowFairySiegeBatCityInfo);
            UpdateFamilyGCZBatCityInfoEvent?.Invoke();
        }
        public void DeepCopyFairySiegeBatCityInfo(FairySiegeBatCityInfo source, FairySiegeBatCityInfo target)
System/FairySiege/FairySiegeAtkWin.cs
@@ -113,7 +113,6 @@
                {
                    SysNotifyMgr.Instance.ShowTip("FairySiege14");
                }
                model.DeepCopyFairySiegeBatCityInfo(model.nowFairySiegeBatCityInfo, model.lastFairySiegeBatCityInfo);
                model.SendAtk(1, model.showCityId, model.nowFairySiegeBatCityInfo.GuardID);
            });
        }
@@ -150,26 +149,34 @@
        }
        bool isPlaying = false;//自己正在攻击
        uint startGuardID = 0;//开始攻击前的守卫ID
        ulong startHPMax = 0;//开始攻击前的最大血量
        ulong myHurtValue = 0;//自己打出的伤害
        private void OnUpdateFamilyGCZBatCityInfoEvent(FairySiegeBatCityInfo nowInfo)
        private void OnUpdateFamilyGCZBatCityInfoEvent()
        {
            if (nowInfo == null)
            if (model.nowFairySiegeBatCityInfo == null)
                return;
            if (isPlaying)
                return;
            //不成功的攻击
            if (model.nowFairySiegeBatCityInfo.AtkRet != 0)
                return;
            //来自自己的攻击
            if (nowInfo.AtkPlayerID == PlayerDatas.Instance.baseData.PlayerID)
            if (model.nowFairySiegeBatCityInfo.AtkPlayerID == PlayerDatas.Instance.baseData.PlayerID)
            {
                isPlaying = true;
                model.DeepCopyFairySiegeBatCityInfo(nowInfo, model.myFairySiegeBatCityInfo);
                PlayEffectSeq(model.lastFairySiegeBatCityInfo, model.myFairySiegeBatCityInfo, nowInfo);
                startGuardID = model.lastFairySiegeBatCityInfo.GuardID;
                startHPMax = model.lastFairySiegeBatCityInfo.HPMax;
                myHurtValue = model.nowFairySiegeBatCityInfo.HurtValue;
                DebugEx.Log($"playerId{PlayerDatas.Instance.baseData.PlayerID} startGuardID {startGuardID} startHPMax {startHPMax} myHurtValue {myHurtValue}");
                PlayEffectSeq(startGuardID, startHPMax, myHurtValue);
            }
            else
            {
                SysNotifyMgr.Instance.ShowTip(nowInfo.GuardID <= 0 ? "FairySiege15" : "FairySiege16");
                model.DeepCopyFairySiegeBatCityInfo(nowInfo, model.lastFairySiegeBatCityInfo);
                UpdateEnemyInfo(nowInfo.GuardID, true);
                UpdateEnemyHP(nowInfo.HP, nowInfo.HPMax);
                SysNotifyMgr.Instance.ShowTip(model.nowFairySiegeBatCityInfo.GuardID <= 0 ? "FairySiege15" : "FairySiege16");
                UpdateEnemyInfo(model.nowFairySiegeBatCityInfo.GuardID, true);
                UpdateEnemyHP(model.nowFairySiegeBatCityInfo.HP, model.nowFairySiegeBatCityInfo.HPMax);
            }
        }
@@ -255,8 +262,7 @@
            StopEffectAtk();
        }
        //lastInfo 玩家发起攻击前的数据 myInfo 玩家发起攻击的返回数据 nowInfo 当前的最新数据
        public void PlayEffectSeq(FairySiegeBatCityInfo lastInfo, FairySiegeBatCityInfo myInfo, FairySiegeBatCityInfo nowInfo)
        public void PlayEffectSeq(uint startGuardID, ulong startHPMax, ulong hurtValue)
        {
            ResetEffectSeq();
            UI3DModelExhibition.Instance.PlayAnim(GAStaticDefine.State_Attack1Hash);
@@ -266,43 +272,40 @@
                .OnComplete(() =>
                {
                    StopEffectAtk();
                    ShowDamage((long)myInfo.HurtValue);
                    ShowDamage((long)hurtValue);
                    //城池被击毁
                    if (nowInfo.GuardID <= 0)
                    if (model.nowFairySiegeBatCityInfo.GuardID <= 0)
                    {
                        UpdateEnemyInfo(nowInfo.GuardID);
                        model.DeepCopyFairySiegeBatCityInfo(nowInfo, model.lastFairySiegeBatCityInfo);
                        UpdateEnemyInfo(model.nowFairySiegeBatCityInfo.GuardID);
                        isPlaying = false;
                        return;
                    }
                    //打死了
                    if (nowInfo.GuardID != lastInfo.GuardID)
                    if (model.nowFairySiegeBatCityInfo.GuardID != startGuardID)
                    {
                        UI3DModelExhibition.InstanceClone1.PlayAnim(GAStaticDefine.State_DeadHash);
                        UpdateEnemyHP(0, model.lastFairySiegeBatCityInfo.HPMax);
                        model.DeepCopyFairySiegeBatCityInfo(nowInfo, model.lastFairySiegeBatCityInfo);
                        UpdateEnemyHP(0, startHPMax);
                        Clock.AlarmAfter(0.4f, () =>
                        {
                            UpdateEnemyInfo(nowInfo.GuardID, true);
                            UpdateEnemyInfo(model.nowFairySiegeBatCityInfo.GuardID, true);
                        });
                        Clock.AlarmAfter(1.2f, () =>
                        {
                            UpdateEnemyHP(nowInfo.HP, nowInfo.HPMax);
                            UpdateEnemyHP(model.nowFairySiegeBatCityInfo.HP, model.nowFairySiegeBatCityInfo.HPMax);
                            isPlaying = false;
                        });
                    }
                    else
                    {
                        UI3DModelExhibition.InstanceClone1.PlayAnim(GAStaticDefine.State_HurtHash);
                        model.DeepCopyFairySiegeBatCityInfo(nowInfo, model.lastFairySiegeBatCityInfo);
                        Clock.AlarmAfter(0.4f, () =>
                        {
                            UpdateEnemyInfo(nowInfo.GuardID, true);
                            UpdateEnemyInfo(model.nowFairySiegeBatCityInfo.GuardID, true);
                        });
                        Clock.AlarmAfter(1.2f, () =>
                        {
                            UpdateEnemyHP(nowInfo.HP, nowInfo.HPMax);
                            UpdateEnemyHP(model.nowFairySiegeBatCityInfo.HP, model.nowFairySiegeBatCityInfo.HPMax);
                            isPlaying = false;
                        });
                    }
@@ -464,6 +467,9 @@
        private void OnRevPackage(int viewType, int playerID, RoleParticularModel.ViewPlayerData data)
        {
            //城池被击毁
            if (model.nowFairySiegeBatCityInfo.GuardID <= 0)
                return;
            UpdateEnemyInfo(data);
        }
@@ -474,19 +480,6 @@
            myData = new UI3DPlayerExhibitionData
            {
                job = PlayerDatas.Instance.baseData.Job,
                fashionClothesId = apperance.fashionClothes,
                fashionWeaponId = apperance.fashionWeapon,
                fashionSecondaryId = apperance.fashionSecondary,
                clothesId = apperance.clothes,
                weaponId = apperance.weapon,
                secondaryId = apperance.secondary,
                wingsId = apperance.wings,
                suitLevel = apperance.isSuit ? 1 : 0,
                reikiRootEffectId = reikiRootEffectId,
                isDialogue = false,
                equipLevel = PlayerDatas.Instance.baseData.suitLevel,
                scale = 1,
                titleID = PlayerDatas.Instance.baseData.TitleID
            };
            UI3DModelExhibition.InstanceClone1.ShowPlayer(rawImgHost, myData);
            UI3DModelExhibition.InstanceClone1.ChangeModelEulerAngles(hostEulerAngles);
@@ -532,9 +525,15 @@
        private void UpdateEnemyHP(ulong HP, ulong HPMax)
        {
            if (HPMax == 0)
            {
                slidHP.value = 0;
                txtHP.text = string.Empty;
                return;
            }
            float fillAmount = Mathf.Round((float)HP / HPMax * 1000f) / 1000f;
            string info = model.CalculateDamagePercentage(HP, HPMax);
            slidHP.value = fillAmount;
            slidHP.value = Mathf.Clamp01(fillAmount);
            txtHP.text = info;
        }
@@ -632,10 +631,10 @@
            DisplayEnergyRegenCountdown();
            DisplayFamilyInfo();
            DisplayMyInfo();
            if (model.lastFairySiegeBatCityInfo != null)
            if (model.nowFairySiegeBatCityInfo != null)
            {
                UpdateEnemyInfo(model.lastFairySiegeBatCityInfo.GuardID, false);
                UpdateEnemyHP(model.lastFairySiegeBatCityInfo.HP, model.lastFairySiegeBatCityInfo.HPMax);
                UpdateEnemyInfo(model.nowFairySiegeBatCityInfo.GuardID, false);
                UpdateEnemyHP(model.nowFairySiegeBatCityInfo.HP, model.nowFairySiegeBatCityInfo.HPMax);
            }
        }
System/FairySiege/FairySiegeCityWin.cs
@@ -400,7 +400,7 @@
            DisplayMyFamily();
        }
        private void OnUpdateFamilyGCZBatCityInfoEvent(FairySiegeBatCityInfo nowInfo)
        private void OnUpdateFamilyGCZBatCityInfoEvent()
        {
            model.isWaitC030Pack = false;
            if (model.isClickCity)
@@ -408,7 +408,6 @@
                model.isClickCity = false;
                if (WindowCenter.Instance.IsOpen<FairySiegeAtkWin>())
                    return;
                model.DeepCopyFairySiegeBatCityInfo(nowInfo, model.lastFairySiegeBatCityInfo);
                WindowCenter.Instance.Open<FairySiegeAtkWin>();
            }
        }