hch
16 小时以前 364bb6a6623e49eec17075074a33121b6706fb31
Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_scripts
9个文件已修改
272 ■■■■ 已修改文件
Main/Component/UI/Common/PopupWindowsProcessor.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/ArenaBattleWin.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BaseBattleWin.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/BattleField.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BoneFieldBattleWin.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/StoryBossBattleWin.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/TianziBillboradBattleWin.cs 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Settlement/BattleSettlementManager.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Component/UI/Common/PopupWindowsProcessor.cs
@@ -27,12 +27,13 @@
    /// </summary>
    /// <param name="name">窗口名称</param>
    /// <param name="functionId">功能ID,用于指定窗口的具体功能或显示模式</param>
    public void Add(string name, bool isNeedHomeWin = true, int functionId = 0)
    public void Add(string name, bool isNeedHomeWin = true, string battleFieldName = "", int functionId = 0)
    {
        var popupWindow = new PopupWindow()
        {
            window = name,
            isNeedHomeWin = isNeedHomeWin,
            battleFieldName = battleFieldName,
            functionId = functionId,
        };
@@ -114,10 +115,10 @@
        // 等待x秒
        if (Time.realtimeSinceStartup - firstTime < stayTime)
            return;
        // 只在“没有战斗”和“主线战斗”时允许弹窗
        // 只在“没有战斗”和“主线战斗”和“自己的战场”时允许弹窗
        string activeBattleName = BattleManager.Instance.GetActiveBattleName();
        if (activeBattleName != "" && activeBattleName != "StoryBattleField")
        if (activeBattleName != "" && activeBattleName != "StoryBattleField" && activeBattleName != popupWindowQueue[0].battleFieldName)
            return;
        if (UIManager.Instance.IsOpened(popupWindowQueue[0].window))
@@ -158,6 +159,7 @@
        public int functionId;
        public bool isNeedHomeWin;
        public string battleFieldName;
    }
}
Main/System/Battle/ArenaBattleWin.cs
@@ -47,6 +47,7 @@
    {
        base.OnPreOpen();
        MainWin.TabChangeEvent += OnTabChangeEvent;
        UIManager.Instance.OnOpenWindow += OnOpenWindow;
        bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
        transButtons.localPosition = new Vector3(0, isOpenBattleChangeTab ? 130 : 0, 0);
        if (isOpenBattleChangeTab)
@@ -57,12 +58,14 @@
        {
            UIManager.Instance.CloseWindow<MainWin>();
        }
        isClickSkip = false;
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
        MainWin.TabChangeEvent -= OnTabChangeEvent;
        UIManager.Instance.OnOpenWindow -= OnOpenWindow;
        bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
        if (isOpenBattleChangeTab)
        {
@@ -72,8 +75,51 @@
        {
            UIManager.Instance.OpenWindow<MainWin>();
        }
        if (isClickSkip)
        {
            isClickSkip = false;
            TryPass();
        }
    }
    void OnOpenWindow(UIBase win)
    {
        if (win is ArenaBattleVictoryWin || win is ArenaBattleFailWin)
        {
            isClickSkip = false;
        }
    }
    bool isClickSkip = false;
    protected override void OnClickPass()
    {
        if (!IsPass())
            return;
        isClickSkip = true;
        clickTime = Time.time;  // 记录点击时间
        battleField.ForceFinish();
    }
    float stayTime = 2f;
    float clickTime = 0f;
    void LateUpdate()
    {
        if (isClickSkip && Time.time - clickTime >= stayTime)
        {
            isClickSkip = false;
            TryPass();
        }
    }
    private void TryPass()
    {
        if (UIManager.Instance.IsOpened<ArenaBattleVictoryWin>() ||
            UIManager.Instance.IsOpened<ArenaBattleFailWin>())
            return;
        CloseWindow();
        Debug.LogError($"OnBattleEnd 异常关闭");
        BattleSettlementManager.Instance.WinShowOver(BattleConst.ArenaBattleField);
    }
    private void OnTabChangeEvent()
    {
        UIManager.Instance.CloseWindow<ArenaBattleWin>();
Main/System/Battle/BaseBattleWin.cs
@@ -200,12 +200,24 @@
    public bool IsPass()
    {
        if (null == battleField)
            return false;
            return true;
        // 检查是否为永久特权卡玩家
        bool hasForeverPrivilege = InvestModel.Instance.IsInvested(InvestModel.foreverCardType);
        if (!hasForeverPrivilege && !FuncOpen.Instance.IsFuncOpen(BattleManager.Instance.passFuncId, true))
        string battleFieldName = battleField.ToString();
        if (!hasForeverPrivilege && !FuncOpen.Instance.IsFuncOpen(BattleManager.Instance.passFuncId))
        {
            if (battleFieldName != BattleConst.StoryBossBattleField)
            {
                //等级达到20级后解锁或开通终身特权解锁
                SysNotifyMgr.Instance.ShowTip("BattlePass2");
            }
            else
            {
                FuncOpen.Instance.ProcessorFuncErrorTip(BattleManager.Instance.passFuncId);
            }
            return false;
        }
        int passRound = BattleManager.Instance.defaultPassRound;
        var name = battleField.ToString();
@@ -254,7 +266,16 @@
            int realPassRound = passRound + 1;  // 配置是超过x回合可以跳,意味着x+1回合可以跳
            if (nowRound < realPassRound)
            {
                SysNotifyMgr.Instance.ShowTip("BattlePass", realPassRound - nowRound);
                if (battleFieldName != BattleConst.StoryBossBattleField)
                {
                    //%s0回合后可跳过,开通终身特权立即跳过
                    SysNotifyMgr.Instance.ShowTip("BattlePass1", realPassRound - nowRound);
                }
                else
                {
                    SysNotifyMgr.Instance.ShowTip("BattlePass", realPassRound - nowRound);
                }
                return false;
            }
        }
Main/System/Battle/BattleField/BattleField.cs
@@ -273,7 +273,7 @@
        // 清理死亡处理记录
        processingDeathObjIds.Clear();
        // 清空当前战场的血量记录
        if (BattleHeroInfoBar.largestPackUID.ContainsKey(guid))
        {
@@ -303,7 +303,7 @@
        }
        if (recordPlayer == null || battleObjMgr == null)
            return;
        recordPlayer.Run();
        battleObjMgr.Run();
        battleEffectMgr.Run();
@@ -315,7 +315,7 @@
        }
        operationAgent.Run();
        // 触发 UI 层的更新回调
        OnBattleRun?.Invoke();
    }
@@ -475,7 +475,7 @@
        {
            // 过滤掉正在处理死亡的角色,避免重复处理
            List<BattleDeadPack> validDeadList = new List<BattleDeadPack>();
            foreach (var deadPack in deadPackList)
            {
                var objID = deadPack.deadPack.ObjID;
@@ -485,21 +485,21 @@
                    // Debug.LogWarning($"OnObjsDead: 角色正在处理死亡,忽略重复死亡消息 ObjID={objID}");
                    continue;
                }
                BattleObject battleObj = battleObjMgr.GetBattleObject((int)objID);
                if (battleObj == null)
                {
                    Debug.LogError($"OnObjsDead: 找不到角色 ObjID={objID}");
                    continue;
                }
                // 添加到处理中列表
                processingDeathObjIds.Add(objID);
                validDeadList.Add(deadPack);
            }
            // 只处理有效的死亡消息
            if (validDeadList.Count > 0)
            {
@@ -583,7 +583,7 @@
        {
            obj.layerMgr.UpdateLayer();
        }
        battleRootNode.SetSortingOrder();
        // RendererAdjuster[] adjusters = battleRootNode.GetComponentsInChildren<RendererAdjuster>(true);
        // if (null != adjusters)
@@ -681,7 +681,10 @@
            IsBattleFinish = true;
            if (!string.IsNullOrEmpty(guid))
            {
                Debug.Log($"OnBattleEnd guid {guid}");
            }
            //提供外部 胜利等奖励显示
            EventBroadcast.Instance.Broadcast<string, JsonData>(EventName.BATTLE_END, guid, turnFightStateData);
        });
@@ -698,10 +701,10 @@
        battleObjMgr.DestroyTeam(BattleCamp.Blue);
        SetBattleStartState();
        SetBattleMode(BattleMode.Stop);
        // 清理死亡处理记录
        processingDeathObjIds.Clear();
        // 清空当前战场的血量记录
        if (BattleHeroInfoBar.largestPackUID.ContainsKey(guid))
        {
@@ -730,7 +733,7 @@
        battleObjMgr.DestroyTeam(BattleCamp.Blue);
        BattleManager.Instance.ClearStoryQueue();
        SetBattleStartState();
        // 清理死亡处理记录
        processingDeathObjIds.Clear();
    }
@@ -764,7 +767,7 @@
    {
        recordPlayer.ForceFinish();
    }
    //暂停的原因有很多,需要检查各种状态
    protected virtual bool CanResumeGame()
Main/System/Battle/BattleField/RecordActions/BattleStartAction.cs
@@ -41,6 +41,10 @@
            UniTaskExtension.DelayTime((GameObject)null, 1f, () =>
            {
                if (battleField ==null|| battleField.battleRootNode == null|| battleField.battleRootNode.battleStartNode == null)
                {
                    return;
                }
                battleField.battleRootNode.battleStartNode.SetActive(false);
                StartBattleCallback();
            });
Main/System/Battle/BoneFieldBattleWin.cs
@@ -18,6 +18,7 @@
    {
        base.OnPreOpen();
        MainWin.TabChangeEvent += OnTabChangeEvent;
        UIManager.Instance.OnOpenWindow += OnOpenWindow;
        bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
        transButtons.localPosition = new Vector3(0, isOpenBattleChangeTab ? 130 : 0, 0);
        if (isOpenBattleChangeTab)
@@ -28,6 +29,7 @@
        {
            UIManager.Instance.CloseWindow<MainWin>();
        }
        isClickSkip = false;
    }
    protected override void OnPreClose()
@@ -35,6 +37,7 @@
        base.OnPreClose();
        MainWin.TabChangeEvent -= OnTabChangeEvent;
        UIManager.Instance.OnOpenWindow -= OnOpenWindow;
        bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
        if (isOpenBattleChangeTab)
        {
@@ -54,8 +57,53 @@
            bossBattleObject = null;
        }
        if (isClickSkip)
        {
            isClickSkip = false;
            TryPass();
        }
    }
    void OnOpenWindow(UIBase win)
    {
        if (win is BoneBattleVictoryWin || win is BoneBattleFailWin)
        {
            isClickSkip = false;
        }
    }
    bool isClickSkip = false;
    protected override void OnClickPass()
    {
        if (!IsPass())
            return;
        isClickSkip = true;
        clickTime = Time.time;  // 记录点击时间
        battleField.ForceFinish();
    }
    float stayTime = 2f;
    float clickTime = 0f;
    void LateUpdate()
    {
        if (isClickSkip && Time.time - clickTime >= stayTime)
        {
            isClickSkip = false;
            TryPass();
        }
    }
    private void TryPass()
    {
        if (UIManager.Instance.IsOpened<BoneBattleVictoryWin>() ||
            UIManager.Instance.IsOpened<BoneBattleFailWin>())
            return;
        CloseWindow();
        Debug.LogError($"OnBattleEnd 异常关闭");
        BattleSettlementManager.Instance.WinShowOver(BattleConst.BoneBattleField);
    }
    private void OnTabChangeEvent()
    {
        UIManager.Instance.CloseWindow<BoneFieldBattleWin>();
@@ -142,7 +190,7 @@
    {
        // Debug.LogError("OnDamageTaken 被调用 调用者是 " + info.battleHurtParam.caster.casterObj?.teamHero.name + " 对象 " + info.battleHurtParam.hurter.hurtObj?.teamHero.name);
        base.OnDamageTaken(info);
        if (battleField == null || info.battleFieldGuid != battleField.guid)
            return;
Main/System/Battle/StoryBossBattleWin.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
@@ -22,14 +23,15 @@
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        UIManager.Instance.OnOpenWindow += OnOpenWindow;
        UIManager.Instance.CloseWindow<MainWin>();
        isClickSkip = false;
    }
    protected override void OnPreClose()
    {
        base.OnPreClose();
        UIManager.Instance.OnOpenWindow -= OnOpenWindow;
        if (!UIManager.Instance.IsOpened<MainWin>())
            UIManager.Instance.OpenWindow<MainWin>();
@@ -38,8 +40,52 @@
            bossBattleObject.buffMgr.onBuffChanged -= OnBuffChanged;
            bossBattleObject = null;
        }
        if (isClickSkip)
        {
            isClickSkip = false;
            TryPass();
        }
    }
    bool isClickSkip = false;
    protected override void OnClickPass()
    {
        if (!IsPass())
            return;
        isClickSkip = true;
        clickTime = Time.time;  // 记录点击时间
        battleField.ForceFinish();
    }
    void OnOpenWindow(UIBase win)
    {
        if (win is BattleVictoryWin || win is BattleFailWin)
        {
            isClickSkip = false;
        }
    }
    float stayTime = 2f;
    float clickTime = 0f;
    void LateUpdate()
    {
        if (isClickSkip && Time.time - clickTime >= stayTime)
        {
            isClickSkip = false;
            TryPass();
        }
    }
    private void TryPass()
    {
        if (UIManager.Instance.IsOpened<BattleVictoryWin>() ||
            UIManager.Instance.IsOpened<BattleFailWin>())
            return;
        CloseWindow();
        Debug.LogError($"OnBattleEnd 异常关闭");
        BattleSettlementManager.Instance.WinShowOver(BattleConst.StoryBossBattleField);
    }
    protected override void OnCreateBattleField(string guid, BattleField field)
    {
        if (field is StoryBossBattleField)
Main/System/Battle/TianziBillboradBattleWin.cs
@@ -28,6 +28,7 @@
        TianziBillboradManager.Instance.OnUpdateBarInfoEvent += OnUpdateBarInfoEvent;
        TianziBillboradManager.Instance.PlayUiEffectAction += OnPlayUiEffectAction;
        MainWin.TabChangeEvent += OnTabChangeEvent;
        UIManager.Instance.OnOpenWindow += OnOpenWindow;
        bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
        transButtons.localPosition = new Vector3(0, isOpenBattleChangeTab ? 130 : 0, 0);
        if (isOpenBattleChangeTab)
@@ -55,6 +56,7 @@
        TianziBillboradManager.Instance.OnUpdateBarInfoEvent -= OnUpdateBarInfoEvent;
        TianziBillboradManager.Instance.PlayUiEffectAction -= OnPlayUiEffectAction;
        MainWin.TabChangeEvent -= OnTabChangeEvent;
        UIManager.Instance.OnOpenWindow -= OnOpenWindow;
        bool isOpenBattleChangeTab = IsOpenBattleChangeTab();
        if (isOpenBattleChangeTab)
        {
@@ -81,14 +83,23 @@
        }
    }
    void OnOpenWindow(UIBase win)
    {
        if (win is TianziBillboradVictoryWin)
        {
            isClickSkip = false;
        }
    }
    bool isClickSkip = false;
    protected override void OnClickPass()
    {
        if (!IsPass())
            return;
        battleField.ForceFinish();
        isClickSkip = true;
        clickTime = Time.time;  // 记录点击时间
        battleField.ForceFinish();
    }
    float stayTime = 2f;
@@ -104,12 +115,12 @@
    private void TryPass()
    {
        if (!UIManager.Instance.IsOpened<TianziBillboradVictoryWin>())
        {
            CloseWindow();
            BattleSettlementManager.Instance.WinShowOver(BattleConst.TianziBillboradBattleField);
            TianziBillboradManager.Instance.isSweepVictory = false;
        }
        if (UIManager.Instance.IsOpened<TianziBillboradVictoryWin>())
            return;
        CloseWindow();
        Debug.LogError($"OnBattleEnd 异常关闭");
        BattleSettlementManager.Instance.WinShowOver(BattleConst.TianziBillboradBattleField);
        TianziBillboradManager.Instance.isSweepVictory = false;
    }
    private void OnUpdateBarInfoEvent(ulong loaclNowHunt, ulong loaclMaxHp, int loaclHpNum)
Main/System/Settlement/BattleSettlementManager.cs
@@ -42,16 +42,16 @@
        switch (battleName)
        {
            case BattleConst.ArenaBattleField:
                PopupWindowsProcessor.Instance.Add(isWin ? "ArenaBattleVictoryWin" : "ArenaBattleFailWin", false);
                PopupWindowsProcessor.Instance.Add(isWin ? "ArenaBattleVictoryWin" : "ArenaBattleFailWin", false, BattleConst.ArenaBattleField);
                break;
            case BattleConst.BoneBattleField:
                PopupWindowsProcessor.Instance.Add(isWin ? "BoneBattleVictoryWin" : "BoneBattleFailWin", false);
                PopupWindowsProcessor.Instance.Add(isWin ? "BoneBattleVictoryWin" : "BoneBattleFailWin", false, BattleConst.BoneBattleField);
                break;
            case BattleConst.TianziBillboradBattleField:
                PopupWindowsProcessor.Instance.Add("TianziBillboradVictoryWin", false);
                PopupWindowsProcessor.Instance.Add("TianziBillboradVictoryWin", false, BattleConst.TianziBillboradBattleField);
                break;
            default:
                PopupWindowsProcessor.Instance.Add(isWin ? "BattleVictoryWin" : "BattleFailWin", false);
                PopupWindowsProcessor.Instance.Add(isWin ? "BattleVictoryWin" : "BattleFailWin", false, BattleConst.StoryBossBattleField);
                break;
        }
    }
@@ -108,20 +108,29 @@
    {
        if (string.Empty == _guid)
            return;
        Debug.Log($"OnBattleEnd 结算 guid {_guid}");
        var battle = BattleManager.Instance.GetBattleField(_guid);
        if (battle == null)
            return;
        var battleName = battle.ToString();
        battleSettlementDic[battleName] = _data;
        if (battleAwardDic.ContainsKey(battleName))
        try
        {
            //合并战报和结算数据
            JsonData extendData = battleAwardDic[battleName];
            foreach (var key in extendData.Keys)
            battleSettlementDic[battleName] = _data;
            if (battleAwardDic.ContainsKey(battleName))
            {
                _data[key] = extendData[key];
                //合并战报和结算数据
                JsonData extendData = battleAwardDic[battleName];
                foreach (var key in extendData.Keys)
                {
                    _data[key] = extendData[key];
                }
            }
        }
        catch (Exception e)
        {
            Debug.LogError(e.ToString());
        }
        string activeBattleName = BattleManager.Instance.GetActiveBattleName();