hch
2025-11-21 eb27e5fd31f73b998a4bbd85511a31e40b8c61b7
Main/System/Main/AutoFightModel.cs
@@ -7,7 +7,7 @@
using UnityEngine;
public class AutoFightModel : GameSystemManager<AutoFightModel>
{
    //战斗倍数:值越大越快,影响战斗表现,掉落速度等
    //战斗倍数:值越大越快,影响战斗表现,掉落速度等,这里的倍数是索引,对应配置里的实际速率
    public int fightSpeed
    {
        get
@@ -17,7 +17,9 @@
        }
        set
        {
            QuickSetting.Instance.SetQuickSetting(QuickSettingType.AutoFight_Speed, value);
            var num = Math.Max(1, value);
            BattleManager.Instance.storyBattleField.SetSpeedRatio(BattleManager.Instance.speedGear[num - 1]);
            QuickSetting.Instance.SetQuickSetting(QuickSettingType.AutoFight_Speed, num);
        }
    }
@@ -36,6 +38,7 @@
    }
    //自动模式, 真正点击战锤消耗开启,和休息(或无材料)停止
    public bool isPause = false;    //如打BOSS的情况,暂停自动战斗 后续可以补充每X秒检测下是否有异常
    bool m_IsAutoAttack = false;
    public bool isAutoAttack
    {
@@ -81,18 +84,20 @@
    public event Action ChangeAutoEvent;
    public int maxSpeed = 3; //最高速度
    public int maxSpeed = 3; //最高速度 索引
    public int maxCost; //最高消耗
    public int[] autoCostWithBlessLV; //自动战斗消耗倍数关联祝福等级
    public int speed2UnlockMissionID;
    public int speed3UnlockCTGID;
    public override void Init()
    {
        ParseConfig();
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerInit;
        BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField;
        EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
        BlessLVManager.Instance.OnBlessLVUpdateEvent += UpdateRedpint;
        TaskManager.Instance.OnTaskUpdate += OnTaskUpdate;
        InvestModel.Instance.onInvestUpdate += OnInvestUpdate;
    }
@@ -100,7 +105,10 @@
    {
        BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField;
        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerInit;
        EventBroadcast.Instance.RemoveListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
        BlessLVManager.Instance.OnBlessLVUpdateEvent -= UpdateRedpint;
        TaskManager.Instance.OnTaskUpdate -= OnTaskUpdate;
        InvestModel.Instance.onInvestUpdate -= OnInvestUpdate;
    }
@@ -109,7 +117,6 @@
        var config = FuncConfigConfig.Get("AutoGuaji");
        autoCostWithBlessLV = JsonMapper.ToObject<int[]>(config.Numerical1);
        speed2UnlockMissionID = int.Parse(config.Numerical2);
        speed3UnlockCTGID = int.Parse(config.Numerical3);
        maxCost = autoCostWithBlessLV.Length;
    }
@@ -183,14 +190,14 @@
            return;
        }
        if (!ItemLogicUtility.CheckCurrencyCount(41, PlayerDatas.Instance.baseData.UseHarmerCount, 2))
        if (!UIHelper.CheckMoneyCount(41, PlayerDatas.Instance.baseData.UseHarmerCount, 2))
        {
            if (storyBattleField.GetBattleMode() != BattleMode.Stop)
                storyBattleField.HaveRest();
            return;
        }
        BattleManager.Instance.storyBattleField.SetSpeedRatio(BattleManager.Instance.speedGear[fightSpeed - 1]);
        isAutoAttack = isAutoAttackSet;
        //手动会一直进入这个逻辑, 自动触发一次
@@ -256,28 +263,96 @@
        OnFightEvent?.Invoke(true);
    }
    public bool CanChallengeBoss()
    {
        //最后一波通过,且当前波还是最后一波;倒退只倒退波不会倒退关卡
        if (PlayerDatas.Instance.baseData.ExAttr2 != PlayerDatas.Instance.baseData.ExAttr1)
        {
            return false;
        }
        var value = PlayerDatas.Instance.baseData.ExAttr2;
        var chapterID = value / 10000;
        var levelNum = value % 10000 / 100;
        var waveID = value % 100;
        var config = MainLevelConfig.GetMainLevelConfig(chapterID, levelNum);
        if (waveID < MainLevelConfig.GetwaveCount(config))
        {
            return false;
        }
        return true;
    }
    #endregion
    //新增消耗倍数红点
    Redpoint redpoint1 = new Redpoint(MainRedDot.RedPoint_AutoBattleKey, MainRedDot.RedPoint_AutoBattleKey * 10 + 1);
    //新增战斗倍数红点
    Redpoint redpoint2 = new Redpoint(MainRedDot.RedPoint_AutoBattleKey, MainRedDot.RedPoint_AutoBattleKey * 10 + 2);
    void UpdateRedpint()
    {
        //提示红点记录到第几个索引,每次解锁新的消耗红点都提示
        var costIndex = LocalSave.GetInt("redcost" + PlayerDatas.Instance.baseData.PlayerID);
        if (costIndex + 1 < autoCostWithBlessLV.Length)
        {
            redpoint1.state = autoCostWithBlessLV[Math.Min(costIndex + 1, autoCostWithBlessLV.Length - 1)] <= BlessLVManager.Instance.m_TreeLV ?
                                RedPointState.Simple : RedPointState.None;
        }
        else
        {
            redpoint1.state = RedPointState.None;
        }
        var speedIndex = LocalSave.GetInt("redspeed" + PlayerDatas.Instance.baseData.PlayerID);
        redpoint2.state = RedPointState.None;
        if (speedIndex == 0 && TaskManager.Instance.mainTask.TaskID > speed2UnlockMissionID &&
            !InvestModel.Instance.IsActiveFightSpeed(3))
        {
            redpoint2.state = RedPointState.Simple;
        }
        else if (speedIndex < 2 && InvestModel.Instance.IsActiveFightSpeed(3))
        {
            redpoint2.state = RedPointState.Simple;
        }
    }
    public void ClickCostRed()
    {
        int index = 0;
        for (int i = 0; i < autoCostWithBlessLV.Length; i++)
        {
            if (autoCostWithBlessLV[i] <= BlessLVManager.Instance.m_TreeLV)
            {
                index = i;
            }
            else
            {
                break;
            }
        }
        LocalSave.SetInt("redcost" + PlayerDatas.Instance.baseData.PlayerID, index);
        UpdateRedpint();
    }
    public void ClickSpeedRed()
    {
        int index = 0;
        if (!InvestModel.Instance.IsActiveFightSpeed(3))
        {
            if (TaskManager.Instance.mainTask.TaskID > speed2UnlockMissionID)
            {
                index = 1;
            }
        }
        else
        {
            index = 2;
        }
        LocalSave.SetInt("redspeed" + PlayerDatas.Instance.baseData.PlayerID, index);
        UpdateRedpint();
    }
    void OnTaskUpdate()
    {
        //任务刷新比较频繁
        if (TaskManager.Instance.mainTask.TaskID < speed2UnlockMissionID)
        {
            return;
        }
        if (LocalSave.GetInt("redspeed" + PlayerDatas.Instance.baseData.PlayerID) > 0)
            return;
        if (redpoint2.state == RedPointState.Simple)
            return;
        UpdateRedpint();
    }
    void OnInvestUpdate(int type)
    {
        if (type > 2)
            return;
        UpdateRedpint();
    }
}