From 871594462e82d6bc1341918d39e11ab036d59563 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 18 九月 2025 19:26:28 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts

---
 Main/System/Main/AutoFightModel.cs |  262 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 260 insertions(+), 2 deletions(-)

diff --git a/Main/System/Main/AutoFightModel.cs b/Main/System/Main/AutoFightModel.cs
index 1439254..0eb4c3a 100644
--- a/Main/System/Main/AutoFightModel.cs
+++ b/Main/System/Main/AutoFightModel.cs
@@ -2,25 +2,283 @@
 using System.Collections;
 using System.Collections.Generic;
 using System.Text;
+using LitJson;
 
 using UnityEngine;
 public class AutoFightModel : GameSystemManager<AutoFightModel>
 {
-    public int fightSpeed = 1; //鎴樻枟鍊嶆暟锛氬�艰秺澶ц秺蹇紝褰卞搷鎴樻枟琛ㄧ幇锛屾帀钀介�熷害绛�
+    //鎴樻枟鍊嶆暟锛氬�艰秺澶ц秺蹇紝褰卞搷鎴樻枟琛ㄧ幇锛屾帀钀介�熷害绛�
+    public int fightSpeed
+    {
+        get
+        {
+            int value = QuickSetting.Instance.GetQuickSettingValue<int>(QuickSettingType.AutoFight_Speed, 0);
+            return Math.Min(Math.Max(value, 1), maxSpeed);
+        }
+        set
+        {
+            QuickSetting.Instance.SetQuickSetting(QuickSettingType.AutoFight_Speed, value);
+        }
+    }
 
-    public bool isAutoAttack; //鑷姩鏀诲嚮
+    //娑堣�楀�嶆暟
+    public int fightCost
+    {
+        get
+        {
+            int value = QuickSetting.Instance.GetQuickSettingValue<int>(QuickSettingType.AutoFight_Cost, 0);
+            return Math.Min(Math.Max(value, 1), maxCost);
+        }
+        set
+        {
+            QuickSetting.Instance.SetQuickSetting(QuickSettingType.AutoFight_Cost, value);
+        }
+    }
+
+    //鑷姩妯″紡, 鐪熸鐐瑰嚮鎴橀敜娑堣�楀紑鍚紝鍜屼紤鎭紙鎴栨棤鏉愭枡锛夊仠姝�
+    public bool isPause = false;    //濡傛墦BOSS鐨勬儏鍐碉紝鏆傚仠鑷姩鎴樻枟 鍚庣画鍙互琛ュ厖姣廥绉掓娴嬩笅鏄惁鏈夊紓甯�
+    bool m_IsAutoAttack = false;
+    public bool isAutoAttack
+    {
+        get
+        {
+            return m_IsAutoAttack;
+        }
+        set
+        {
+            if (m_IsAutoAttack == value)
+                return;
+            m_IsAutoAttack = value;
+            Debug.Log("isAutoAttack:" + m_IsAutoAttack);
+        }
+    }
+
+    //鏄惁寮�鍚嚜鍔ㄦ垬鏂楄缃�
+    public bool isAutoAttackSet
+    {
+        get
+        {
+            return QuickSetting.Instance.GetQuickSettingBool(QuickSettingType.AutoFight_Open, 0);
+        }
+        set
+        {
+            QuickSetting.Instance.SetQuickSetting(QuickSettingType.AutoFight_Open, value);
+        }
+    }
+
+    //鏇村ソ瑁呭鍋滄鎴樻枟
+    public bool isStopFightByBetterEquip
+    {
+        get
+        {
+            return QuickSetting.Instance.GetQuickSettingBool(QuickSettingType.AutoFight_FightPower, 0);
+        }
+        set
+        {
+            QuickSetting.Instance.SetQuickSetting(QuickSettingType.AutoFight_FightPower, value);
+        }
+    }
+
+
+    public event Action ChangeAutoEvent;
+
+    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);
 
     }
 
     public override void Release()
     {
+        BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerInit;
+        
 
     }
 
     void ParseConfig()
     {
+        var config = FuncConfigConfig.Get("AutoGuaji");
+        autoCostWithBlessLV = JsonMapper.ToObject<int[]>(config.Numerical1);
+        speed2UnlockMissionID = int.Parse(config.Numerical2);
+        speed3UnlockCTGID = int.Parse(config.Numerical3);
+        maxCost = autoCostWithBlessLV.Length;
     }
 
+
+    void BeforePlayerInit()
+    {
+        fightingHeroSkinID = 0;
+        heroGuid = "";
+    }
+
+    public void SaveAutoFightSetting()
+    {
+        if (PlayerDatas.Instance.baseData.UseHarmerCount != fightCost)
+        {
+            PlayerDatas.Instance.baseData.UseHarmerCount = fightCost;
+            BattleManager.Instance.MainFightRequest(1, (uint)fightCost);
+        }
+
+        StoryBattleField storyBattleField = BattleManager.Instance.storyBattleField;
+
+        if (storyBattleField != null && storyBattleField.GetBattleMode() != BattleMode.Stop)
+        {
+            //鎴樻枟涓敼鍙樻ā寮�
+            isAutoAttack = isAutoAttackSet;
+            storyBattleField.AutoSetBattleMode();
+        }
+
+        QuickSetting.Instance.SendPackage();
+        ChangeAutoEvent?.Invoke();
+    }
+
+
+    //鑷姩澶勭悊瑁呭锛岄渶瑕佺瓑寰呯┛鎴磋繑鍥瀎alse锛屽叾浠栨儏鍐佃繑鍥瀟rue
+    public bool TryAutoFightDoEquip(ItemModel item)
+    {
+        if (!isAutoAttack)
+            return false;
+
+        if (item == null)
+            return true;
+
+        long showFightPower = FightPowerManager.Instance.GetFightPowerChange(item);
+
+        if (showFightPower < 0)
+        {
+            EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)item.gridIndex }, 1);
+            return true;
+        }
+        else
+        {
+            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 (!ItemLogicUtility.CheckCurrencyCount(41, PlayerDatas.Instance.baseData.UseHarmerCount, 2))
+        {
+            if (storyBattleField.GetBattleMode() != BattleMode.Stop)
+                storyBattleField.HaveRest();
+            return;
+        }
+
+
+        isAutoAttack = isAutoAttackSet;
+
+        //鎵嬪姩浼氫竴鐩磋繘鍏ヨ繖涓�昏緫, 鑷姩瑙﹀彂涓�娆�
+        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;
+        }
+        OnFightEvent?.Invoke(false);
+    }
+
+    public int fightingHeroSkinID;  //褰撳墠鎴樻枟鐨勮嫳闆勭毊鑲D
+    public string heroGuid; //鎴樻枟涓殑姝﹀皢
+    public event Action<bool> OnFightEvent; //鎴樻枟妯″紡鍙樻洿閫氱煡 鎴樻枟閲婃斁鎶�鑳介�氱煡
+
+
+    /// <summary>
+    /// 鎶�鑳介噴鏀� 閫氱煡UI澶勭悊
+    /// </summary>
+    /// <param name="guid">绌轰负涓荤嚎</param>
+    /// <param name="skillConfig">鐢ㄤ簬鎬掓皵绛夋樉绀�</param>
+    /// <param name="teamHero">鎴樻枟涓殑姝﹀皢</param>
+    void OnSkillCast(string guid, SkillConfig skillConfig, TeamHero teamHero)
+    {
+        if (!string.IsNullOrEmpty(guid))
+            return;
+
+        //闃茶寖鍥炴敹鎶ラ敊
+        if (teamHero == null)
+            return;
+
+        //鍙�氱煡鐜╁姝﹀皢鐨勬垬鏂�
+        if (teamHero.NPCID != 0)
+            return;
+
+        fightingHeroSkinID = teamHero.SkinID;
+        //鎴樻枟鏃舵病鏈塆UID 锛岄�氳繃heroid鏌ユ壘
+        var hero = TeamManager.Instance.GetTeam(TeamType.Story).GetHeroByHeroID(teamHero.heroId);
+        if (hero != null)
+        {
+            heroGuid = hero.guid;
+        }
+        else
+        {
+            heroGuid = "";
+        }
+        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
+
+
 }

--
Gitblit v1.8.0