yyl
2025-08-29 e10813023f08c85454f575d3d388dac78e0e8ac2
Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts
9个文件已修改
359 ■■■■■ 已修改文件
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB425_tagSCTurnFightReportSign.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/BattleField.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleField/StoryBattleField.cs 112 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Battle/BattleManager.cs 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/KnapSack/Logic/ItemLogicUtility.cs 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/AutoFightModel.cs 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/System/Main/MainWin.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Main/Core/NetworkPackage/DTCFile/ServerPack/HB4_FightDefine/DTCB425_tagSCTurnFightReportSign.cs
@@ -29,7 +29,8 @@
        base.Done(vNetPack);
        HB425_tagSCTurnFightReportSign vNetData = vNetPack as HB425_tagSCTurnFightReportSign;
        //主线才有的包
        BattleManager.Instance.isWaitServerStory = false;
        //    截断 PackageRegedit Distribute 里的封包
        //    直到sign = 1;
Main/System/Battle/BattleField/BattleField.cs
@@ -60,6 +60,7 @@
    public BattleRootNode battleRootNode;
    private BattleMode battleMode;
    public event Action<BattleMode> ChangeBattleModeEvent;
    public Action<bool> OnBattlePause;
@@ -120,6 +121,12 @@
    {
        battleMode = _battleMode;
        CreateAgent();
        ChangeBattleModeEvent?.Invoke(battleMode);
    }
    public BattleMode GetBattleMode()
    {
        return battleMode;
    }
    public virtual void Release()
@@ -438,7 +445,7 @@
            {
                //  战斗失败
                Debug.LogError("战斗失败");
                HaveRest();
                // HaveRest();
            }
            IsBattleFinish = true;
Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs
@@ -3,33 +3,24 @@
public class AutoModeOperationAgent : IOperationAgent
{
    protected StoryBattleField storyBattleField;
    public AutoModeOperationAgent(BattleField battleField) : base(battleField)
    {
        storyBattleField = battleField as StoryBattleField;
    }
    float lastTime;
    public override void Run()
    {
        if (!battleField.IsBattleFinish)
        {
        //最低1秒
        if (Time.time - lastTime < 1f)
            return;
        }
        base.Run();
        if (!battleField.recordPlayer.IsPlaying())
        {
            DoNext();
        }
        lastTime = Time.time;
        DoNext();
    }
    public override void DoNext()
    {
        base.DoNext();
        if (!battleField.recordPlayer.IsPlaying())
        {
            //    ask for next action
        }
        storyBattleField.RequestFight();
    }
}
Main/System/Battle/BattleField/OperationAgent/HandModeOperationAgent.cs
@@ -23,75 +23,7 @@
        base.DoNext();
        //    当前没有在播放战斗录像
        if (!battleField.recordPlayer.IsPlaying())
        {
            BattleDebug.LogError("HandModeOperationAgent DoNext  1");
            // 没有下一个包可以发了
            if (!BattleManager.Instance.DistributeNextPackage())
            {
                //    请求下一个战斗包 或者检查战斗是否结束
                // ReqType; // 0-停止战斗回城;1-设置消耗倍值;2-挑战关卡小怪;3-挑战关卡boss;4-继续战斗;
                //    如果在休息 点一下之后应该是挑战小怪或者挑战关卡
                //  如果在战斗 战斗是否结束/战斗持续中 结束应该是挑战下一关 持续应该是继续战斗
                //    检查一下锤子的消耗
                //useHarmerCount            用于记录消耗战锤倍数,小于等于1时默认1倍,大于1时为对应消耗倍值,0418刷新类型22
                BattleDebug.LogError("HandModeOperationAgent DoNext  2");
                long costRate = PlayerDatas.Instance.GetPlayerDataByType(PlayerDataType.UseHarmerCount);
                long cost = (costRate > 1 ? costRate : 1) * 1; // 1是默认消耗
                BattleDebug.LogError("HandModeOperationAgent DoNext  3");
                byte reqType;
                if (storyBattleField.battleState == StoryBattleState.Break)
                {
                    reqType = 2;
                }
                else if (storyBattleField.battleState == StoryBattleState.Battle)
                {
                    if (battleField.IsBattleEnd())
                    {
                        reqType = 2; // 继续挑战小怪
                    }
                    else
                    {
                        reqType = 4; // 继续战斗
                    }
                }
                else
                {
                    BattleDebug.LogError("unknown battle state");
                    return;
                }
                BattleDebug.LogError("HandModeOperationAgent DoNext  4   reqType is " + reqType);
                //    检查一下锤子的消耗
                if (!ItemLogicUtility.CheckCurrencyCount(41, cost, true))
                {
                    return;
                }
                //    如果请求的是2 说明要初始化一下战场
                BattleManager.Instance.MainFightRequest(reqType);
                //  初始化战场后本来不会自动打 那么就需要再请求一次4继续战斗 来开始战斗
                if (reqType == 2)
                {
                    BattleManager.Instance.MainFightRequest(4);
                }
            }
        }
        else
        {
            BattleDebug.LogError("action doesnt finish, wait a moment please");
        }
        storyBattleField.RequestFight();
    }
Main/System/Battle/BattleField/StoryBattleField.cs
@@ -49,7 +49,7 @@
            battleState = StoryBattleState.Battle;
        }
        LoadBattleMode();
        // LoadBattleMode();
        chapter = FuncLineID / 10000;
        wave = MapID == 1 ? FuncLineID % 100 : 1;//第几波怪
@@ -70,18 +70,23 @@
    protected void LoadBattleMode()
    {
        string savedStr = LocalSave.GetString("StoryBattleFieldBattleMode");
        if (string.IsNullOrEmpty(savedStr))
        //主线模式:stop休息 无怪;Hand/Auto 有怪 等待指令
        BattleMode mode = BattleMode.Hand;
        if (AutoFightModel.Instance.isAutoAttackSet)
        {
            savedStr = "Hand";
            mode = BattleMode.Auto;
        }
        SetBattleMode((BattleMode)Enum.Parse(typeof(BattleMode), savedStr));
        if (GetBattleMode() == mode)
            return;
        SetBattleMode(mode);
    }
    public override void AutoSetBattleMode()
    {
        LoadBattleMode();
    }
    public override void TurnFightState(int TurnNum, int State,
        uint FuncLineID, JsonData extendData)
@@ -149,18 +154,99 @@
    //     // HaveRest();
    // }
    // public override void Run()
    // {
    //     //  一定要记住这个
    //     if (IsPause)
    //         return;
    //     base.Run();
    // }
    public override void Run()
    {
        if (operationAgent == null)
        {
            //防范异常
            HaveRest();
            return;
        }
        base.Run();
    }
    public override void DistributeNextPackage()
    {
        //  不要调用base的函数
        BattleManager.Instance.DistributeNextPackage();
    }
    //请求单次战斗
    public void RequestFight()
    {
        if (IsPause)
        {
            //还需考虑其他不可战斗状况,主线的BOSS战斗也是另外一个场景且不能切出来 等跳过或者结束
            //外部统一控制 IsPause
            return;
        }
        if (BattleManager.Instance.isWaitServerStory)
            return;
        //    当前没有在播放战斗录像
        if (!recordPlayer.IsPlaying())
        {
            BattleDebug.LogError("HandModeOperationAgent DoNext  1");
            // 没有下一个包可以发了
            if (!BattleManager.Instance.DistributeNextPackage())
            {
                BattleDebug.LogError("HandModeOperationAgent DoNext  2");
                //    检查一下锤子的消耗
                if (!ItemLogicUtility.CheckCurrencyCount(41, PlayerDatas.Instance.baseData.UseHarmerCount, 2))
                {
                    //多次防范
                    if (GetBattleMode() != BattleMode.Stop)
                        HaveRest();
                    return;
                }
                //    请求下一个战斗包 或者检查战斗是否结束
                // ReqType; // 0-停止战斗回城;1-设置消耗倍值;2-挑战关卡小怪;3-挑战关卡boss;4-继续战斗;
                //  如果在战斗 战斗是否结束/战斗持续中 结束应该是挑战下一关 持续应该是继续战斗
                BattleDebug.LogError("HandModeOperationAgent DoNext  3");
                byte reqType;
                if (battleState == StoryBattleState.Break)
                {
                    reqType = 2;
                }
                else if (battleState == StoryBattleState.Battle)
                {
                    if (IsBattleEnd())
                    {
                        reqType = 2; // 继续挑战小怪
                    }
                    else
                    {
                        reqType = 4; // 继续战斗
                    }
                }
                else
                {
                    BattleDebug.LogError("unknown battle state");
                    return;
                }
                BattleDebug.LogError("HandModeOperationAgent DoNext  4   reqType is " + reqType);
                //    如果请求的是2 说明要初始化一下战场
                BattleManager.Instance.MainFightRequest(reqType);
                //  初始化战场后本来不会自动打 那么就需要再请求一次4继续战斗 来开始战斗
                if (reqType == 2)
                {
                    BattleManager.Instance.MainFightRequest(4);
                }
            }
        }
        // else
        // {
        //     BattleDebug.LogError("action doesnt finish, wait a moment please");
        // }
    }
}
Main/System/Battle/BattleManager.cs
@@ -15,12 +15,16 @@
    public Action<string, BattleField> onBattleFieldDestroy;
    public bool isWaitServerStory = false;  //主线等服务端回报 0425
    public override void Init()
    {
        base.Init();
        LogicEngine.Instance.OnUpdate += Run;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerInit;
    }
    public override void Release()
@@ -28,6 +32,7 @@
        base.Release();
        LogicEngine.Instance.OnUpdate -= Run;
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerInit;
    }
    protected void OnPlayerLoginOk()
@@ -39,6 +44,11 @@
        int FuncLineID = (int)exAttr2;
        CreateStoryBattle(MapID, FuncLineID, null, null);
    }
    void BeforePlayerInit()
    {
        isWaitServerStory = false;  //后续考虑断线重连
    }
    //  上游戏的时候 等战斗阵容更新完毕 创建主线副本 敌方的数据可以暂时不显示 己方表现为睡觉
@@ -322,22 +332,34 @@
    {
        BattleField battleField = null;
        bool isCreate = true;
        if (battleFields.TryGetValue(guid, out battleField))
        {
            BattleDebug.LogError("战场已存在 先进行销毁");
            battleField.Destroy();
            //主线战场需一直存在
            if (string.IsNullOrEmpty(guid))
            {
                isCreate = false;
            }
            else
            {
                BattleDebug.LogError("战场已存在 先进行销毁");
                battleField.Destroy();
            }
        }
        battleField = BattleFieldFactory.CreateBattleField(guid, MapID, FuncLineID, extendData, redTeamList, blueTeamList);
        if (isCreate)
        {
            battleField = BattleFieldFactory.CreateBattleField(guid, MapID, FuncLineID, extendData, redTeamList, blueTeamList);
            onBattleFieldCreate?.Invoke(guid, battleField);
        onBattleFieldCreate?.Invoke(guid, battleField);
        if (string.IsNullOrEmpty(guid))
        {
            storyBattleField = (StoryBattleField)battleField;
            if (string.IsNullOrEmpty(guid))
            {
                storyBattleField = (StoryBattleField)battleField;
            }
            battleFields.Add(guid, battleField);
        }
        battleFields.Add(guid, battleField);
        battleField.Init(MapID, FuncLineID, extendData, redTeamList, blueTeamList);
@@ -383,6 +405,8 @@
        req.ReqValue = reqValue;
        GameNetSystem.Instance.SendInfo(req);
        if (reqType >= 2)
            isWaitServerStory = true;
    }
Main/System/KnapSack/Logic/ItemLogicUtility.cs
@@ -296,7 +296,8 @@
        return isEnough;
    }
    public static bool CheckCurrencyCount(int moneyType, long needCount, bool needTips = false)
    /// <param name="needTips">0 不响应 1 弹提示 2 弹获取途径tips</param>
    public static bool CheckCurrencyCount(int moneyType, long needCount, int needTips = 0)
    {
        if (needCount <= 0)
        {
@@ -307,9 +308,16 @@
        bool isEnough = haveCount >= needCount;
        if (!isEnough && needTips)
        if (!isEnough)
        {
            SysNotifyMgr.Instance.ShowTip("LackMoney", moneyType);
            if (needTips == 1)
            {
                SysNotifyMgr.Instance.ShowTip("LackMoney", moneyType);
            }
            else if (needTips == 2)
            {
                ItemTipUtility.ShowMoneyTip(moneyType);
            }
        }
        return isEnough;
Main/System/Main/AutoFightModel.cs
@@ -76,11 +76,15 @@
    {
        ParseConfig();
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
        BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField;
    }
    public override void Release()
    {
        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
        BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField;
    }
    void ParseConfig()
@@ -104,6 +108,15 @@
            PlayerDatas.Instance.baseData.UseHarmerCount = fightCost;
            BattleManager.Instance.MainFightRequest(1, (uint)fightCost);
        }
        StoryBattleField storyBattleField = BattleManager.Instance.storyBattleField;
        if (storyBattleField != null && storyBattleField.GetBattleMode() != BattleMode.Stop)
        {
            //战斗中改变模式
            storyBattleField.AutoSetBattleMode();
        }
        QuickSetting.Instance.SendPackage();
        ChangeAutoEvent?.Invoke();
    }
@@ -114,7 +127,7 @@
    {
        if (!isAutoAttack)
            return false;
        if (item == null)
            return true;
@@ -129,11 +142,63 @@
        {
            if (isStopFightByBetterEquip)
                return false;
            EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)item.gridIndex }, 1);
            return true;
        }
    }
    #region 战斗
    public void StartFight()
    {
        if (isAutoAttack)
            return;
        StoryBattleField storyBattleField = BattleManager.Instance.storyBattleField;
        if (storyBattleField == null)
        {
            return;
        }
        if (UIHelper.GetMoneyCnt(41) < PlayerDatas.Instance.baseData.UseHarmerCount)
        {
            if (storyBattleField.GetBattleMode() != BattleMode.Stop)
                storyBattleField.HaveRest();
            return;
        }
        if (isAutoAttackSet)
        {
            isAutoAttack = true;
        }
        //手动会一直进入这个逻辑, 自动触发一次
        storyBattleField.AutoSetBattleMode();
        storyBattleField.operationAgent.DoNext();
    }
    void OnCreateBattleField(string guid, BattleField battleField)
    {
        if (string.IsNullOrEmpty(guid) && BattleManager.Instance.storyBattleField != null)
        {
            BattleManager.Instance.storyBattleField.ChangeBattleModeEvent -= ChangeBattleModeEvent;
            BattleManager.Instance.storyBattleField.ChangeBattleModeEvent += ChangeBattleModeEvent;
        }
    }
    void ChangeBattleModeEvent(BattleMode _battleMode)
    {
        if (_battleMode == BattleMode.Stop)
        {
            isAutoAttack = false;
        }
    }
    #endregion
}
Main/System/Main/MainWin.cs
@@ -132,17 +132,8 @@
        {
            if (currentSubUI != null && currentSubUI.name == "HomeWin")
            {
                Debug.Log("点击主界面按钮");
                //打开主界面的情况下再点击按钮,执行攻击逻辑
                if (AutoFightModel.Instance.isAutoAttackSet)
                {
                    AutoFightModel.Instance.isAutoAttack = true;
                }
                StoryBattleField storyBattleField = BattleManager.Instance.storyBattleField;
                if (storyBattleField != null)
                {
                    storyBattleField.operationAgent.DoNext();
                }
                //手动自动一起处理
                AutoFightModel.Instance.StartFight();
            }
        }
        SelectBottomTab(index);