From bface07b5ea879e40f5be8d082bfa77fb873b0bd Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期四, 15 一月 2026 18:07:44 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts

---
 Main/System/Equip/EquipModel.cs                                         |   17 +
 Main/System/Main/AutoFightModel.cs                                      |   81 ++++++
 Main/System/Guild/GuildBossManager.cs                                   |   13 +
 Main/System/Main/EquipRecordManager.cs                                  |  175 ++++++++++++++
 Main/System/Main/EquipRecordManager.cs.meta                             |   11 
 Main/System/Setting/QuickSetting.cs                                     |    9 
 Main/System/Store/StoreWin.cs                                           |   10 
 Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs |   35 ++
 Main/System/Main/AutoFightWin.cs                                        |  151 +++++++++++
 Main/System/Redpoint/MainRedDot.cs                                      |    2 
 Main/System/Guild/GuildBossWin.cs                                       |   34 ++
 Main/System/Main/EquipRecordWin.cs.meta                                 |   11 
 Main/System/Main/EquipRecordItem.cs.meta                                |   11 
 Main/System/Settlement/BattleSettlementManager.cs                       |    6 
 Main/System/Main/EquipRecordCell.cs                                     |   13 +
 Main/System/Main/EquipRecordWin.cs                                      |   33 ++
 Main/System/Main/HomeWin.cs                                             |    8 
 Main/System/UIBase/UIJumpManager.cs                                     |   14 +
 Main/Main.cs                                                            |    1 
 Main/System/Main/EquipRecordCell.cs.meta                                |   11 
 Main/System/Main/EquipRecordItem.cs                                     |   16 +
 Main/System/Store/StoreModel.cs                                         |    2 
 22 files changed, 633 insertions(+), 31 deletions(-)

diff --git a/Main/Main.cs b/Main/Main.cs
index 0f72ce9..63fbce6 100644
--- a/Main/Main.cs
+++ b/Main/Main.cs
@@ -100,6 +100,7 @@
         managers.Add(GubaoManager.Instance);
         managers.Add(WarlordPavilionManager.Instance);
         managers.Add(ViewNPCManager.Instance);
+        managers.Add(EquipRecordManager.Instance);
         foreach (var manager in managers)
         {
             manager.Init();
diff --git a/Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs b/Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs
index 4c2b3a7..d72f5d3 100644
--- a/Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs
+++ b/Main/System/Battle/BattleField/OperationAgent/AutoModeOperationAgent.cs
@@ -10,6 +10,7 @@
 	}
 
 	float lastTime;
+	float lastSendTime;
 	public override void Run()
 	{
 		//鏈�浣�1绉�
@@ -18,6 +19,33 @@
 		lastTime = Time.time;
 		if (AutoFightModel.Instance.isPause)
 			return;
+
+		// 鑷姩鎸戞垬boss
+		if (AutoFightModel.Instance.isAutoChallengeBoss)
+		{
+			if (!MainLevelManager.Instance.CanChallengeBoss())
+			{
+				DoNext();
+				return;
+			}
+			//涓婃鎸戞垬boss澶辫触浜嗭紝鍐嶆灏濊瘯瑕佺瓑CD
+			if (AutoFightModel.Instance.nowChallengeCount > 0 &&
+				Time.time - AutoFightModel.Instance.lastChallengeTime < AutoFightModel.Instance.maxTryChallengeCD)
+			{
+				DoNext();
+				return;
+			}
+			//宸茬粡寮�濮媌oss鎴樻枟
+			BattleField battleField = BattleManager.Instance.GetActiveBattleFieldByName(BattleConst.StoryBossBattleField);
+			if (battleField != null)
+				return;
+			if (Time.time - lastSendTime < 1.0f)
+				return;
+			lastSendTime = Time.time;
+			Debug.Log($"寮�濮嬫寫鎴榖oss ServerNow{TimeUtility.ServerNow}");
+			FightBoss();
+			return;
+		}
 		DoNext();
 	}
 
@@ -25,4 +53,11 @@
 	{
 		storyBattleField.RequestFight();
 	}
+
+	void FightBoss()
+	{
+		BattleManager.Instance.SendTurnFight(2);
+		BattleManager.Instance.storyBattleField.CleanBattle();
+		AutoFightModel.Instance.isPause = true;
+	}
 }
\ No newline at end of file
diff --git a/Main/System/Equip/EquipModel.cs b/Main/System/Equip/EquipModel.cs
index 9cfc208..ab0c807 100644
--- a/Main/System/Equip/EquipModel.cs
+++ b/Main/System/Equip/EquipModel.cs
@@ -10,7 +10,7 @@
 {
     public const int TotleEquip = 12;  //瑁呭鏍忓ぇ灏�
     public bool waitEquipOPPack = false;    // 绌挎埓瑁呭鐨勬搷浣� 涓嶅惈鍒嗚В
-    public float waitEquipOPTime = 0;    
+    public float waitEquipOPTime = 0;
     public event Action<bool, int> OnEquipOPResultAction;    //鏄惁鎹笂浜嗘柊瑁呭涓斿垎瑙d簡 瑁呭绱㈠紩
     public event Action<BattleDrops> OnItemDropEvent;
 
@@ -304,6 +304,17 @@
             waitEquipOPTime = Time.time;
             Debug.LogWarning("绌挎埓瑁呭锛屽悜鏈嶅姟鍣ㄨ姹�");
         }
+
+        //鍦ㄨ褰曢攢姣佹垨鏇挎崲鍓嶇殑瑁呭
+        if ((opType == 1 || opType == 2) && !itemIndexList.IsNullOrEmpty())
+        {
+            foreach (var index in itemIndexList)
+            {
+                var oldEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, index);
+                EquipRecordManager.Instance.oldEquipDic[index] = oldEquip;
+            }
+        }
+
         GameNetSystem.Instance.SendInfo(pack);
 
     }
@@ -388,7 +399,7 @@
             return false;
         }
 
-        
+
         selectFloorEquip = GetSelectFloorEquip();
         if (selectFloorEquip == null)
         {
@@ -501,7 +512,7 @@
     }
 
     public ItemModel GetEquip(int index)
-    { 
+    {
         return PackManager.Instance.GetItemByIndex(PackType.Equip, index);
     }
 }
diff --git a/Main/System/Guild/GuildBossManager.cs b/Main/System/Guild/GuildBossManager.cs
index 7ed0516..a9a8ebe 100644
--- a/Main/System/Guild/GuildBossManager.cs
+++ b/Main/System/Guild/GuildBossManager.cs
@@ -11,7 +11,18 @@
     public List<HA513_tagMCFamilyActionInfo.tagMCFamilyAction> playerBossHurtRank = new List<HA513_tagMCFamilyActionInfo.tagMCFamilyAction>();
     //鏃堕棿鎴筹細璁ㄤ紣鏁版嵁; 鐢ㄤ簬鎾斁姣忔鏀诲嚮
     public Dictionary<int, TaofaAtkData> taofaAtkData = new Dictionary<int, TaofaAtkData>();
-    public int lastPlayTick = 0;    //鎸夋椂闂撮『搴忔挱鏀撅紝褰撳墠鎾斁鐨則ick锛屽鏋滄壘涓嶅埌鍒欎粠绗竴涓紑濮�
+    //鎸夋椂闂撮『搴忔挱鏀撅紝褰撳墠鎾斁鐨則ick锛屽鏋滄壘涓嶅埌鍒欎粠绗竴涓紑濮�
+    public int lastPlayTick
+    {
+        get
+        {
+            return LocalSave.GetInt("lastPlayTick" + PlayerDatas.Instance.baseData.PlayerID);
+        }
+        set
+        {
+            LocalSave.SetInt("lastPlayTick" + PlayerDatas.Instance.baseData.PlayerID, value);
+        }
+    }
     //鐜╁ID锛氱帺瀹舵暟鎹� 锛堥��鍑哄叕浼氱殑鐜╁锛�
     public Dictionary<int, MemberData> taofaPlayerData = new Dictionary<int, MemberData>();
     public event Action BossHurtEvent;
diff --git a/Main/System/Guild/GuildBossWin.cs b/Main/System/Guild/GuildBossWin.cs
index 09fbbb1..cc6741c 100644
--- a/Main/System/Guild/GuildBossWin.cs
+++ b/Main/System/Guild/GuildBossWin.cs
@@ -74,6 +74,16 @@
     [SerializeField] Transform fakeRedBZ;
     [SerializeField] Transform fakeRedAward;
 
+    [Header("姝﹀皢杩涘満鏃堕棿")]
+    public float heroShowTime = 0.1f;
+    [Header("姝﹀皢鏀诲嚮閫熷害瓒婂ぇ瓒婂揩")]
+    public float heroAtkSpeed = 2f;
+    [Header("澶氭椋樿浠ュ強鐗╁搧鍑虹幇闂撮殧姣")]
+    public int atkValueShowCD = 200;
+
+    [Header("鏄惁寰幆鎾斁浠栦汉鎴樻枟")]
+    public bool isOthersLoop = false;
+
     bool isCD = false;
 
     int beforeLayerNum; //甯冮樀灞傜骇 瀵规瘮鍙樺寲灞曠ず鐗规晥
@@ -383,7 +393,7 @@
         }
 
         GuildBossManager.Instance.TaofaBoss(0);
-        ShowAttackCD().Forget();
+        // ShowAttackCD().Forget();
     }
 
     async UniTask ShowAttackCD()
@@ -404,6 +414,7 @@
         ShowDynamicUI();
     }
 
+
     void AtkResultEvent()
     {
         //1. 鐜╁浠巔os1 绉诲姩鍒皃os2
@@ -412,7 +423,7 @@
         heroModel.GetHero().onComplete = null;
         heroModel.PlayAnimation("run", true);
         heroModel.transform.localPosition = pos1.localPosition;
-        heroModel.transform.DOLocalMove(pos2.localPosition, 0.3f).OnComplete(() =>
+        heroModel.transform.DOLocalMove(pos2.localPosition, heroShowTime).OnComplete(() =>
         {
             ShowDmg().Forget();
         });
@@ -426,6 +437,7 @@
             heroModel.transform.localPosition = pos1.localPosition;
         };
         heroModel.HeroPlay("attack");
+        
         if (GuildBossManager.Instance.atkResult.AtkType == 0)
         {
             hurtEffect.Play();
@@ -463,7 +475,7 @@
                     attackType = hurtData.IsSuper == 1 ? (int)DamageType.CritDamage : 2
                 };
                 hurtValues[i].text = BattleUtility.DisplayDamageNum(dmg);
-                await UniTask.Delay(200);
+                await UniTask.Delay(atkValueShowCD);
             }
             else
             {
@@ -491,7 +503,7 @@
 
                 awardValues[i].text = itemData.Count.ToString();
                 awardIcons[i].SetItemSprite((int)itemData.ItemID);
-                await UniTask.Delay(200);
+                await UniTask.Delay(atkValueShowCD);
             }
             else
             {
@@ -505,6 +517,7 @@
     {
         var skinConfig = HorseSkinConfig.Get(HorseManager.Instance.GetUsingHorseSkinID(false));
         heroModel.Create(skinConfig.SkinID, PhantasmPavilionManager.Instance.GetMyModelSkinID(), 1.2f);
+        heroModel.GetHero().SetSpeed(heroAtkSpeed);
         for (int i = 0; i < hurtValues.Length; i++)
         {
             hurtValues[i].transform.localScale = Vector3.zero;
@@ -646,11 +659,16 @@
         int index = keys.IndexOf(GuildBossManager.Instance.lastPlayTick) + 1;
         if (index >= keys.Count)
         {
-            index = 0;
+            index = isOthersLoop ? 0 : -1;  //鏄惁寰幆鎾斁
         }
-        GuildBossManager.Instance.lastPlayTick = keys[index];
-        var atkData = GuildBossManager.Instance.taofaAtkData[keys[index]];
-        var atkPlayerID = atkData.playerID;
+        int atkPlayerID = 0;
+        TaofaAtkData atkData = null;
+        if (index >= 0)
+        {
+            GuildBossManager.Instance.lastPlayTick = keys[index];
+            atkData = GuildBossManager.Instance.taofaAtkData[keys[index]];
+            atkPlayerID = atkData.playerID;
+        }
         for (int i = 0; i < otherPlayers.Count; i++)
         {
             if (!otherPlayers[i].isActiveAndEnabled)
diff --git a/Main/System/Main/AutoFightModel.cs b/Main/System/Main/AutoFightModel.cs
index 0cf11c9..1eecad8 100644
--- a/Main/System/Main/AutoFightModel.cs
+++ b/Main/System/Main/AutoFightModel.cs
@@ -1,7 +1,4 @@
 锘縰sing System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Text;
 using LitJson;
 
 using UnityEngine;
@@ -82,7 +79,65 @@
         }
     }
 
+    //鑷姩鎸戞垬棣栭
+    public bool isAutoChallengeBoss
+    {
+        get
+        {
+            return QuickSetting.Instance.GetQuickSettingBool(QuickSettingType.AutoFight_ChallengeBoss, 0);
+        }
+        set
+        {
+            QuickSetting.Instance.SetQuickSetting(QuickSettingType.AutoFight_ChallengeBoss, value);
+        }
+    }
 
+    //褰撳墠鎴樿触浜唜娆�
+    private int m_NowChallengeCount = 0;
+    public float lastChallengeTime = 0;
+    public int nowChallengeCount
+    {
+        get { return m_NowChallengeCount; }
+        set
+        {
+            m_NowChallengeCount = value;
+            lastChallengeTime = value == 0 ? 0 : Time.time;
+            Debug.Log($"褰撳墠鍦ㄤ富绾緽oss鎴樿触浜唟m_NowChallengeCount}娆�,涓婃鎴樿触鏃堕棿鏄瘂lastChallengeTime}");
+            if (m_NowChallengeCount >= tryChallengeCount)
+            {
+                isAutoAttackSet = false;
+                isAutoAttack = false;
+                SaveAutoFightSetting();
+            }
+        }
+    }
+
+    //鑷姩鎸戞垬棣栭锛屾垬璐娆″仠姝�
+    public int tryChallengeCount
+    {
+        get
+        {
+            int value = QuickSetting.Instance.GetQuickSettingValue<int>(QuickSettingType.AutoFight_TryChallengeCount, 0);
+            return Math.Min(Math.Max(value, 1), maxCost);
+        }
+        set
+        {
+            QuickSetting.Instance.SetQuickSetting(QuickSettingType.AutoFight_TryChallengeCount, value);
+        }
+    }
+
+    //鑷姩瀹屾垚浠诲姟
+    public bool isAutoFinishTask
+    {
+        get
+        {
+            return QuickSetting.Instance.GetQuickSettingBool(QuickSettingType.AutoFight_AutoFinishTask, 0);
+        }
+        set
+        {
+            QuickSetting.Instance.SetQuickSetting(QuickSettingType.AutoFight_AutoFinishTask, value);
+        }
+    }
     public event Action ChangeAutoEvent;
 
     public int maxSpeed = 3; //鏈�楂橀�熷害 绱㈠紩
@@ -90,10 +145,16 @@
     public int[] autoCostWithBlessLV; //鑷姩鎴樻枟娑堣�楀�嶆暟鍏宠仈绁濈绛夌骇
     public int speed2UnlockMissionID;
 
+    public int openAutoChallengeBossMissionID;//鑷姩鎸戞垬棣栭瑙i攣鐨勪换鍔D(闇�瀹屾垚)
+    public int maxTryChallengeCount;//鑷姩鎸戞垬棣栭鏈�澶ф垬璐ユ鏁帮紙涓嬫媺鍒楄〃鐨勬渶澶у�硷級
+    public int maxTryChallengeCD;
+    public int openAutoFinishMissionID;//鑷姩瀹屾垚浠诲姟瑙i攣鐨勪换鍔D(闇�瀹屾垚)
+
     public override void Init()
     {
         ParseConfig();
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += BeforePlayerInit;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
         BattleManager.Instance.onBattleFieldCreate += OnCreateBattleField;
         EventBroadcast.Instance.AddListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
         BlessLVManager.Instance.OnBlessLVUpdateEvent += UpdateRedpint;
@@ -106,6 +167,7 @@
     {
         BattleManager.Instance.onBattleFieldCreate -= OnCreateBattleField;
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerInit;
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
         EventBroadcast.Instance.RemoveListener<string, SkillConfig, TeamHero>(EventName.BATTLE_CAST_SKILL, OnSkillCast);
         BlessLVManager.Instance.OnBlessLVUpdateEvent -= UpdateRedpint;
         TaskManager.Instance.OnTaskUpdate -= OnTaskUpdate;
@@ -119,6 +181,11 @@
         autoCostWithBlessLV = JsonMapper.ToObject<int[]>(config.Numerical1);
         speed2UnlockMissionID = int.Parse(config.Numerical2);
         maxCost = autoCostWithBlessLV.Length;
+        config = FuncConfigConfig.Get("AutoGuaji1");
+        openAutoChallengeBossMissionID = int.Parse(config.Numerical1);
+        maxTryChallengeCount = int.Parse(config.Numerical2);
+        maxTryChallengeCD = int.Parse(config.Numerical3);
+        openAutoFinishMissionID = int.Parse(config.Numerical4);
     }
 
 
@@ -126,6 +193,11 @@
     {
         fightingHeroSkinID = 0;
         heroGuid = "";
+    }
+
+    private void OnBeforePlayerDataInitializeEventOnRelogin()
+    {
+        nowChallengeCount = 0;
     }
 
     public void SaveAutoFightSetting()
@@ -160,7 +232,7 @@
             return true;
 
         long showFightPower = FightPowerManager.Instance.GetFightPowerChange(item);
-    
+
         if (showFightPower < 0)
         {
             EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)item.gridIndex }, 1);
@@ -178,6 +250,7 @@
 
     }
 
+
     #region 涓荤嚎鎴樻枟锛堣嚜鍔ㄥ拰鎵嬪姩锛�
 
     public void StartFight()
diff --git a/Main/System/Main/AutoFightWin.cs b/Main/System/Main/AutoFightWin.cs
index 4971fbf..cedfa01 100644
--- a/Main/System/Main/AutoFightWin.cs
+++ b/Main/System/Main/AutoFightWin.cs
@@ -1,6 +1,4 @@
 using System;
-using System.Collections;
-using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
@@ -13,8 +11,8 @@
     [SerializeField] Button autoSaveBtn;
 
     [SerializeField] Button changeCostBtn;
-    [SerializeField] Text costText;
     [SerializeField] Image costArrow;
+    [SerializeField] Text costText;
     [SerializeField] Text costTip;
     [SerializeField] ScrollerController costScroll;
 
@@ -25,14 +23,34 @@
 
     [SerializeField] Toggle betterEquipToggle;
 
+    [SerializeField] Toggle autoChallengeBossToggle;
+    [SerializeField] Button tryChallengeBtn;
+    [SerializeField] Text tryChallengeText;
+    [SerializeField] Image tryChallengeArrow;
+    [SerializeField] ScrollerController tryChallengeScroll;
+    [SerializeField] Button tryChallengeTipBtn;
+
+    [SerializeField] Toggle autoFinishTaskToggle;
+    [SerializeField] Button autoFinishTaskTipBtn;
 
     bool isOpenCostScroll = false;
     bool isOpenSpeedScroll = false;
+    bool isOpenTryChallengeScroll = false;
+
     protected override void InitComponent()
     {
         autoStartBtn.AddListener(OnClickAutoStart);
         autoStopBtn.AddListener(OnClickAutoStop);
         autoSaveBtn.AddListener(OnClickAutoStart);
+        tryChallengeTipBtn.AddListener(() =>
+        {
+            DislayTip("AutoFight15", tryChallengeTipBtn.transform.position);
+        });
+
+        autoFinishTaskTipBtn.AddListener(() =>
+        {
+            DislayTip("AutoFight16",autoFinishTaskTipBtn.transform.position);
+        });
 
         changeCostBtn.AddListener(() =>
         {
@@ -41,6 +59,7 @@
             costArrow.transform.localRotation = Quaternion.Euler(0, 0, isOpenCostScroll ? 180 : 0);
             AutoFightModel.Instance.ClickCostRed();
         });
+
         changeSpeedBtn.AddListener(() =>
         {
             isOpenSpeedScroll = !isOpenSpeedScroll;
@@ -49,9 +68,38 @@
             AutoFightModel.Instance.ClickSpeedRed();
         });
 
+        tryChallengeBtn.AddListener(() =>
+        {
+            isOpenTryChallengeScroll = !isOpenTryChallengeScroll;
+            tryChallengeScroll.SetActive(isOpenTryChallengeScroll);
+            tryChallengeArrow.transform.localRotation = Quaternion.Euler(0, 0, isOpenTryChallengeScroll ? 180 : 0);
+            AutoFightModel.Instance.ClickSpeedRed();
+        });
         betterEquipToggle.AddListener((bool value) =>
         {
             betterEquipToggle.isOn = value;
+        });
+
+        autoChallengeBossToggle.AddListener((bool value) =>
+        {
+            if (!IsOpenTryChallenge(out int needtaskCount))
+            {
+                SysNotifyMgr.Instance.ShowTip("autofight2", needtaskCount);
+                autoChallengeBossToggle.SetIsOnWithoutNotify(false);
+                return;
+            }
+            autoChallengeBossToggle.isOn = value;
+        });
+
+        autoFinishTaskToggle.AddListener((bool value) =>
+        {
+            if (!IsOpenAutoFinishTask(out int needtaskCount))
+            {
+                SysNotifyMgr.Instance.ShowTip("autofight2", needtaskCount);
+                autoFinishTaskToggle.SetIsOnWithoutNotify(false);
+                return;
+            }
+            autoFinishTaskToggle.isOn = value;
         });
 
         costScroll.GetComponent<ClickScreenOtherSpace>().AddListener(() =>
@@ -65,12 +113,19 @@
             isOpenSpeedScroll = false;
             speedArrow.transform.localRotation = Quaternion.Euler(0, 0, 0);
         });
+
+        tryChallengeScroll.GetComponent<ClickScreenOtherSpace>().AddListener(() =>
+        {
+            isOpenTryChallengeScroll = false;
+            tryChallengeArrow.transform.localRotation = Quaternion.Euler(0, 0, 0);
+        });
     }
 
     protected override void OnPreOpen()
     {
         costScroll.OnRefreshCell += OnRefreshCostCell;
         speedScroll.OnRefreshCell += OnRefreshSpeedCell;
+        tryChallengeScroll.OnRefreshCell += OnRefreshTryChallengeCell;
         Display();
     }
 
@@ -78,14 +133,36 @@
     {
         costScroll.OnRefreshCell -= OnRefreshCostCell;
         speedScroll.OnRefreshCell -= OnRefreshSpeedCell;
+        tryChallengeScroll.OnRefreshCell -= OnRefreshTryChallengeCell;
+    }
+    bool IsOpenTryChallenge(out int needtaskCount)
+    {
+        needtaskCount = TaskManager.Instance.GetNeedFinishTaskCount(AutoFightModel.Instance.openAutoChallengeBossMissionID);
+        return needtaskCount <= 0;
     }
 
+    bool IsOpenAutoFinishTask(out int needtaskCount)
+    {
+        needtaskCount = TaskManager.Instance.GetNeedFinishTaskCount(AutoFightModel.Instance.openAutoChallengeBossMissionID);
+        return needtaskCount <= 0;
+    }
+
+    void DislayTip(string key, Vector3 worldPos)
+    {
+        SmallTipWin.showText = Language.Get(key);
+        SmallTipWin.worldPos = worldPos;
+        SmallTipWin.isDownShow = false;
+        UIManager.Instance.OpenWindow<SmallTipWin>();
+    }
 
     void Display()
     {
         costText.text = AutoFightModel.Instance.fightCost.ToString();
         speedText.text = AutoFightModel.Instance.fightSpeed.ToString();
+        tryChallengeText.text = AutoFightModel.Instance.tryChallengeCount.ToString();
         betterEquipToggle.isOn = AutoFightModel.Instance.isStopFightByBetterEquip;
+        autoChallengeBossToggle.isOn = AutoFightModel.Instance.isAutoChallengeBoss;
+        autoFinishTaskToggle.isOn = AutoFightModel.Instance.isAutoFinishTask;
         costTip.text = Language.Get("AutoFight2", ItemConfig.Get(GeneralDefine.MoneyDisplayModel[41]).ItemName, AutoFightModel.Instance.fightCost);
 
         if (AutoFightModel.Instance.isAutoAttackSet)
@@ -98,15 +175,16 @@
             usingAutoObj.SetActive(false);
             autoStartBtn.SetActive(true);
         }
-        
+
         costScroll.SetActive(false);
         speedScroll.SetActive(false);
+        tryChallengeScroll.SetActive(false);
         costArrow.transform.localRotation = Quaternion.Euler(0, 0, 0);
         speedArrow.transform.localRotation = Quaternion.Euler(0, 0, 0);
-
+        tryChallengeArrow.transform.localRotation = Quaternion.Euler(0, 0, 0);
         CreateCostScroll();
         CreateSpeedScroll();
-        
+        CreateTryChallengeScroll();
     }
 
 
@@ -123,7 +201,7 @@
             costScroll.JumpIndex(2);
         }
     }
-    
+
     void CreateSpeedScroll()
     {
         speedScroll.Refresh();
@@ -134,6 +212,15 @@
         speedScroll.Restart();
     }
 
+    void CreateTryChallengeScroll()
+    {
+        tryChallengeScroll.Refresh();
+        for (int i = 0; i < AutoFightModel.Instance.maxTryChallengeCount; i++)
+        {
+            tryChallengeScroll.AddCell(ScrollerDataType.Header, i + 1);
+        }
+        tryChallengeScroll.Restart();
+    }
 
     void OnRefreshCostCell(ScrollerDataType type, CellView cell)
     {
@@ -157,9 +244,9 @@
 
 
         var cntText = cell.GetComponentInChildren<Text>();
-        
+
         if (AutoFightModel.Instance.autoCostWithBlessLV[cell.index - 1] <= BlessLVManager.Instance.m_TreeLV)
-        { 
+        {
             cntText.text = UIHelper.AppendColor(TextColType.LightWhite, cell.index.ToString());
         }
         else
@@ -175,7 +262,7 @@
         var needtaskCount = TaskManager.Instance.GetNeedFinishTaskCount(AutoFightModel.Instance.speed2UnlockMissionID);
         bool isbuy = InvestModel.Instance.IsActiveFightSpeed(3);
         bool isActiveSpeed2 = needtaskCount <= 0 || isbuy;
- 
+
         btn.AddListener(() =>
         {
             if (cell.index == 2)
@@ -198,7 +285,7 @@
             speedScroll.SetActive(false);
             speedArrow.transform.localRotation = Quaternion.Euler(0, 0, 0);
             speedText.text = cell.index.ToString();
-        }); 
+        });
 
         var cntText = cell.GetComponentInChildren<Text>();
         if (cell.index == 2)
@@ -215,12 +302,51 @@
         }
     }
 
+    void OnRefreshTryChallengeCell(ScrollerDataType type, CellView cell)
+    {
+        bool isOpen = IsOpenTryChallenge(out int needtaskCount);
+        bool isbuy = InvestModel.Instance.IsInvested(InvestModel.monthCardType);
+        var btn = cell.GetComponent<Button>();
+        btn.AddListener(() =>
+        {
+            if (cell.index != 1)
+            {
+                if (!isOpen)
+                {
+                    SysNotifyMgr.Instance.ShowTip("autofight2", needtaskCount);
+                    return;
+                }
+                if (!isbuy)
+                {
+                    SysNotifyMgr.Instance.ShowTip("autofight3");
+                    return;
+                }
+            }
+            isOpenTryChallengeScroll = false;
+            tryChallengeScroll.SetActive(false);
+            tryChallengeArrow.transform.localRotation = Quaternion.Euler(0, 0, 0);
+            tryChallengeText.text = cell.index.ToString();
+        });
+        var cntText = cell.GetComponentInChildren<Text>();
+        if (cell.index != 1)
+        {
+            cntText.text = UIHelper.AppendColor(!isOpen || !isbuy ? TextColType.Gray : TextColType.LightWhite, cell.index.ToString());
+        }
+        else
+        {
+            cntText.text = cell.index.ToString();
+        }
+    }
     void OnClickAutoStart()
     {
         AutoFightModel.Instance.isAutoAttackSet = true;
         AutoFightModel.Instance.fightCost = int.Parse(costText.text);
         AutoFightModel.Instance.fightSpeed = int.Parse(speedText.text);
         AutoFightModel.Instance.isStopFightByBetterEquip = betterEquipToggle.isOn;
+        AutoFightModel.Instance.isAutoChallengeBoss = autoChallengeBossToggle.isOn;
+        AutoFightModel.Instance.nowChallengeCount = 0;
+        AutoFightModel.Instance.tryChallengeCount = int.Parse(tryChallengeText.text);
+        AutoFightModel.Instance.isAutoFinishTask = autoFinishTaskToggle.isOn;
         AutoFightModel.Instance.SaveAutoFightSetting();
         CloseWindow();
         SysNotifyMgr.Instance.ShowTip("autofight1");
@@ -238,6 +364,9 @@
                     AutoFightModel.Instance.fightCost = int.Parse(costText.text);
                     AutoFightModel.Instance.fightSpeed = int.Parse(speedText.text);
                     AutoFightModel.Instance.isStopFightByBetterEquip = betterEquipToggle.isOn;
+                    AutoFightModel.Instance.isAutoChallengeBoss = autoChallengeBossToggle.isOn;
+                    AutoFightModel.Instance.tryChallengeCount = int.Parse(tryChallengeText.text);
+                    AutoFightModel.Instance.isAutoFinishTask = autoFinishTaskToggle.isOn;
                     AutoFightModel.Instance.SaveAutoFightSetting();
                     CloseWindow();
                 }
diff --git a/Main/System/Main/EquipRecordCell.cs b/Main/System/Main/EquipRecordCell.cs
new file mode 100644
index 0000000..4270e19
--- /dev/null
+++ b/Main/System/Main/EquipRecordCell.cs
@@ -0,0 +1,13 @@
+using UnityEngine;
+
+public class EquipRecordCell : MonoBehaviour
+{
+    [SerializeField] EquipRecordItem fromEquip;
+    [SerializeField] EquipRecordItem toEquip;
+    [SerializeField] ImageEx imgWear;
+    [SerializeField] ImageEx imgDecompose;
+    public void Display(int index)
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Main/EquipRecordCell.cs.meta b/Main/System/Main/EquipRecordCell.cs.meta
new file mode 100644
index 0000000..63b3513
--- /dev/null
+++ b/Main/System/Main/EquipRecordCell.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 046355c8bdca2a54884b68bcd0ccc112
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Main/EquipRecordItem.cs b/Main/System/Main/EquipRecordItem.cs
new file mode 100644
index 0000000..0438d5a
--- /dev/null
+++ b/Main/System/Main/EquipRecordItem.cs
@@ -0,0 +1,16 @@
+using UnityEngine;
+
+public class EquipRecordItem : MonoBehaviour
+{
+    [SerializeField] ImageEx imgQuality;
+    [SerializeField] ImageEx imgEquip;
+    [SerializeField] TextEx txtName;
+    [SerializeField] TextEx txtQualityName;
+    [SerializeField] OutlineEx itemNameOutline;
+    [SerializeField] OutlineEx qualityNameOutline;
+    [SerializeField] TextEx txtLV;
+    public void Display(EquipRecordManager.EquipDetail detail)
+    {
+
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Main/EquipRecordItem.cs.meta b/Main/System/Main/EquipRecordItem.cs.meta
new file mode 100644
index 0000000..2bf1362
--- /dev/null
+++ b/Main/System/Main/EquipRecordItem.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 01bd7c1ab16c45046a13f1394fec26ec
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Main/EquipRecordManager.cs b/Main/System/Main/EquipRecordManager.cs
new file mode 100644
index 0000000..4451e85
--- /dev/null
+++ b/Main/System/Main/EquipRecordManager.cs
@@ -0,0 +1,175 @@
+using System;
+using System.Collections.Generic;
+using LitJson;
+using UnityEngine;
+
+public class EquipRecordManager : GameSystemManager<EquipRecordManager>
+{
+    private List<EquipRecordData> recordList = new List<EquipRecordData>();
+    public Dictionary<int, ItemModel> oldEquipDic = new Dictionary<int, ItemModel>();
+
+    /// <summary>
+    /// 璋冭瘯鐢細閬嶅巻杈撳嚭鎵�鏈夎澶囪褰曠殑璇︾粏淇℃伅锛堝崟鏉og锛�
+    /// </summary>
+    public void DebugLogAllRecords()
+    {
+        var sb = new System.Text.StringBuilder();
+        sb.AppendLine($"=== 瑁呭璁板綍鎬绘暟: {recordList.Count} | 鏃ц澶囧瓧鍏告潯鐩暟: {oldEquipDic.Count} ===");
+
+        for (int i = 0; i < recordList.Count; i++)
+        {
+            var record = recordList[i];
+            sb.AppendLine($"--- 璁板綍 {i + 1} ---");
+            sb.AppendLine($"璁板綍ID: {record.recordId} | 鏃堕棿: {TimeUtility.GetTime((uint)record.timestamp)} | 绫诲瀷: {record.recordType}");
+
+            // 鏂拌澶囪鎯�
+            if (record.newEquip != null)
+            {
+                sb.AppendLine($"[鏂拌澶嘳 ID:{record.newEquip.itemId} | 鍚嶇О:{record.newEquip.itemName} | 寮哄寲:{record.newEquip.level} | 璇勫垎:{record.newEquip.score} | 閮ㄤ綅:{record.newEquip.equipPlace} | 鎴樺姏:{record.newEquip.fightPower} | GUID:{record.newEquip.guid}");
+            }
+            else
+            {
+                sb.AppendLine($"[鏂拌澶嘳 鏃犳暟鎹�");
+            }
+
+            // 鏃ц澶囪鎯�
+            if (record.oldEquip != null)
+            {
+                sb.AppendLine($"[鏃ц澶嘳 ID:{record.oldEquip.itemId} | 鍚嶇О:{record.oldEquip.itemName} | 寮哄寲:{record.oldEquip.level} | 璇勫垎:{record.oldEquip.score} | 閮ㄤ綅:{record.oldEquip.equipPlace} | 鎴樺姏:{record.oldEquip.fightPower} | GUID:{record.oldEquip.guid}");
+            }
+            else
+            {
+                sb.AppendLine($"[鏃ц澶嘳 鏃犳暟鎹�");
+            }
+
+            sb.AppendLine(); // 绌鸿鍒嗛殧
+        }
+
+        // 鏃ц澶囧瓧鍏�
+        sb.AppendLine("=== 鏃ц澶囧瓧鍏歌鎯� ===");
+        foreach (var kvp in oldEquipDic)
+        {
+            sb.AppendLine($"Key:{kvp.Key} | Value:ItemModel(itemId={kvp.Value?.itemId}, guid={kvp.Value?.guid})");
+        }
+
+        UnityEngine.Debug.Log(sb.ToString());
+    }
+
+
+
+    private int maxCnt;
+    public override void Init()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin += OnBeforePlayerDataInitializeEventOnRelogin;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += OnPlayerLoginOk;
+        // 鐩戝惉瑁呭鎿嶄綔缁撴灉
+        EquipModel.Instance.OnEquipOPResultAction += OnEquipOPResult;
+
+        var config = FuncConfigConfig.Get("AutoGuaji1");
+        maxCnt = int.Parse(config.Numerical5);
+    }
+
+    public override void Release()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEventOnRelogin -= OnBeforePlayerDataInitializeEventOnRelogin;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent -= OnPlayerLoginOk;
+        EquipModel.Instance.OnEquipOPResultAction -= OnEquipOPResult;
+    }
+
+
+
+    private void OnBeforePlayerDataInitializeEventOnRelogin()
+    {
+
+    }
+
+    private void OnPlayerLoginOk()
+    {
+        LoadRecords();
+    }
+
+    string Key { get { return $"EquipRecordData_{PlayerDatas.Instance.PlayerId}"; } }
+    private void SaveRecords()
+    {
+        // 鎸佷箙鍖栧瓨鍌�
+        var json = JsonMapper.ToJson(recordList);
+        LocalSave.SetString(Key, json);
+    }
+
+    private void LoadRecords()
+    {
+        var json = LocalSave.GetString(Key);
+        if (!string.IsNullOrEmpty(json))
+        {
+            recordList = JsonMapper.ToObject<List<EquipRecordData>>(json);
+        }
+    }
+
+    /// <summary>
+    /// 瑁呭鎿嶄綔缁撴灉鍥炶皟 - 璁板綍瑁呭鍙樺寲
+    /// </summary>
+    /// <param name="isDone">鏄惁鎴愬姛鏇存崲</param>
+    /// <param name="equipIndex">瑁呭鏍忕储寮�</param>
+    private void OnEquipOPResult(bool isDone, int equipIndex)
+    {
+        if (equipIndex < 0) return;
+
+        // 鑾峰彇鏂拌澶囧拰鏃ц澶囦俊鎭�
+        var newEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, equipIndex);
+        if (newEquip == null) return;
+
+        // 鑾峰彇琚浛鎹㈢殑瑁呭锛堥渶瑕佷粠鍏朵粬鍦版柟璁板綍锛�
+        // 杩欓噷闇�瑕侀厤鍚� EquipModel 鐨� OnEquipResult 璁板綍琚浛鎹㈢殑瑁呭
+        // ...
+    }
+
+    /// <summary>
+    /// 鑾峰彇瑁呭璇︽儏
+    /// </summary>
+    private EquipDetail GetEquipDetail(ItemModel item)
+    {
+        if (item == null) return null;
+
+        var detail = new EquipDetail
+        {
+            itemId = item.itemId,
+            level = item.GetUseDataFirstValue(22),
+            equipPlace = item.config.EquipPlace,
+            guid = item.guid,
+        };
+        return detail;
+    }
+
+
+
+
+
+
+    // 瑁呭璁板綍鏁版嵁绫诲瀷
+    public class EquipRecordData
+    {
+        public string recordId;              // 璁板綍鍞竴ID
+        public long timestamp;               // 鏃堕棿鎴�
+        public RecordType recordType;        // 璁板綍绫诲瀷
+        public EquipDetail newEquip;         // 鏂拌澶囪鎯�
+        public EquipDetail oldEquip;         // 鏃ц澶囪鎯�
+
+    }
+
+    public class EquipDetail
+    {
+        public int itemId;                   // 鐗╁搧閰嶇疆ID
+        public string itemName;              // 鐗╁搧鍚嶇О
+        public int level;                    // 寮哄寲绛夌骇
+        public int score;                    // 瑁呭璇勫垎
+        public int equipPlace;               // 瑁呭閮ㄤ綅
+        public long fightPower;              // 鎴樺姏
+        public string guid;                  // 瑁呭鍞竴ID
+    }
+
+    public enum RecordType
+    {
+        Equip = 0,        // 瑁呭
+        Decompose = 1     // 鍒嗚В
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Main/EquipRecordManager.cs.meta b/Main/System/Main/EquipRecordManager.cs.meta
new file mode 100644
index 0000000..fb20b86
--- /dev/null
+++ b/Main/System/Main/EquipRecordManager.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cd3bf4ecc67bfbc4c9e1fffe527e1b04
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Main/EquipRecordWin.cs b/Main/System/Main/EquipRecordWin.cs
new file mode 100644
index 0000000..32efaa3
--- /dev/null
+++ b/Main/System/Main/EquipRecordWin.cs
@@ -0,0 +1,33 @@
+using UnityEngine;
+
+public class EquipRecordWin : UIBase
+{
+    [SerializeField] ScrollerController scroller;
+
+    protected override void OnPreOpen()
+    {
+        scroller.OnRefreshCell += OnRefreshCell;
+        CreateScroller();
+    }
+
+    protected override void OnPreClose()
+    {
+        scroller.OnRefreshCell -= OnRefreshCell;
+    }
+
+    private void OnRefreshCell(ScrollerDataType type, CellView cell)
+    {
+        var _cell = cell.GetComponent<EquipRecordCell>();
+        _cell?.Display(cell.index);
+    }
+    private void CreateScroller()
+    {
+        scroller.Refresh();
+
+        for (int i = 0; i < 20; i++)
+        {
+            scroller.AddCell(ScrollerDataType.Header, i);
+        }
+        scroller.Restart();
+    }
+}
\ No newline at end of file
diff --git a/Main/System/Main/EquipRecordWin.cs.meta b/Main/System/Main/EquipRecordWin.cs.meta
new file mode 100644
index 0000000..e68ce7a
--- /dev/null
+++ b/Main/System/Main/EquipRecordWin.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 01cb6a0b7572e0642929fb24575d0c6d
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index ef49fec..222a427 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -588,6 +588,14 @@
             }
             awardIcon.SetItemSprite(taskConfig.AwardItemList[0][0]);
             awardCnt.text = taskConfig.AwardItemList[0][1].ToString();
+            if (AutoFightModel.Instance.isAutoFinishTask)
+            {
+                if (TaskManager.Instance.GetMainTaskState() != 2)
+                {
+                    return;
+                }
+                OnClickTaskButton();
+            }
         }
     }
 
diff --git a/Main/System/Redpoint/MainRedDot.cs b/Main/System/Redpoint/MainRedDot.cs
index aea7bd5..c60d52c 100644
--- a/Main/System/Redpoint/MainRedDot.cs
+++ b/Main/System/Redpoint/MainRedDot.cs
@@ -74,7 +74,7 @@
     public const int RedPoint_OSHeroCard = 112;
     public const int RedPoint_OSGala = 113; //寮�鏈嶅簡鍏�
     Redpoint osGalaRedpoint = new Redpoint(RedPoint_OSGala);
-
+    public const int RedPoint_Ads = 114; //骞垮憡鐢�
     public const int RedPoint_Download = 116;
     public Redpoint downLoadRedpoint = new Redpoint(MainRedDot.RedPoint_Download);
     //绾㈤
diff --git a/Main/System/Setting/QuickSetting.cs b/Main/System/Setting/QuickSetting.cs
index 6d56aa2..cfee59f 100644
--- a/Main/System/Setting/QuickSetting.cs
+++ b/Main/System/Setting/QuickSetting.cs
@@ -1,5 +1,4 @@
-锘縰sing System.Collections;
-using System.Collections.Generic;
+锘縰sing System.Collections.Generic;
 using UnityEngine;
 using System.Text;
 using System;
@@ -22,6 +21,9 @@
         quickSettingDic.Add(QuickSettingType.BattleSpeed, new QuickSettingRange(QuickSettingType.BattleSpeed, 14, 1));
         quickSettingDic.Add(QuickSettingType.HeroCountLock, new QuickSettingRange(QuickSettingType.HeroCountLock, 15, 2));
         quickSettingDic.Add(QuickSettingType.CreateRole, new QuickSettingRange(QuickSettingType.CreateRole, 17, 1));
+        quickSettingDic.Add(QuickSettingType.AutoFight_ChallengeBoss, new QuickSettingRange(QuickSettingType.AutoFight_ChallengeBoss, 18, 1));
+        quickSettingDic.Add(QuickSettingType.AutoFight_TryChallengeCount, new QuickSettingRange(QuickSettingType.AutoFight_TryChallengeCount, 19, 1));
+        quickSettingDic.Add(QuickSettingType.AutoFight_AutoFinishTask, new QuickSettingRange(QuickSettingType.AutoFight_AutoFinishTask, 20, 1));
 
         setting = new string(UCharacter, 100);
         DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= BeforePlayerDataInitializeEvent;
@@ -170,6 +172,9 @@
     BattleSpeed,    //鎴樻枟閫熷害绱㈠紩  闈炰富绾块儴鍒�
     HeroCountLock,  //涓婇樀浜烘暟鏉′欢閿佸畾
     CreateRole, //鍒涘缓瑙掕壊鎴愬姛
+    AutoFight_ChallengeBoss,   //鑷姩鎸戞垬棣栭
+    AutoFight_TryChallengeCount,    //鑷姩鎸戞垬棣栭锛屾垬璐娆″仠姝�
+    AutoFight_AutoFinishTask,   //鑷姩瀹屾垚浠诲姟
 }
 
 public class QuickSettingRange
diff --git a/Main/System/Settlement/BattleSettlementManager.cs b/Main/System/Settlement/BattleSettlementManager.cs
index dcadce9..75e8410 100644
--- a/Main/System/Settlement/BattleSettlementManager.cs
+++ b/Main/System/Settlement/BattleSettlementManager.cs
@@ -150,6 +150,12 @@
         if (_data.ContainsKey("winFaction"))
         {
             var result = (int)_data["winFaction"];
+
+            if (battleName == BattleConst.StoryBossBattleField)
+            {
+                AutoFightModel.Instance.nowChallengeCount += result != 1 ? 1 : 0;
+            }
+
             if (battleName == activeBattleName)
             {
                 //鑷繁鍦烘櫙缁撶畻
diff --git a/Main/System/Store/StoreModel.cs b/Main/System/Store/StoreModel.cs
index 5a584dd..4214b94 100644
--- a/Main/System/Store/StoreModel.cs
+++ b/Main/System/Store/StoreModel.cs
@@ -29,7 +29,7 @@
     public event Action RefreshShopEvent;
 
     public StoreFunc selectStoreFuncType = StoreFunc.Normal;
-
+    public int jumpShopID;
 
     public int buyShopID;
 
diff --git a/Main/System/Store/StoreWin.cs b/Main/System/Store/StoreWin.cs
index 240d780..111d50e 100644
--- a/Main/System/Store/StoreWin.cs
+++ b/Main/System/Store/StoreWin.cs
@@ -85,6 +85,7 @@
         }
 
         scroller.Refresh();
+        int jumpIndex = -1;
         var list = StoreModel.Instance.storeTypeDict[(int)StoreModel.Instance.selectStoreFuncType];
         for (int i = 0; i < list.Count; i++)
         {
@@ -92,9 +93,18 @@
             {
                 scroller.AddCell(ScrollerDataType.Header, i);
             }
+            if (jumpIndex == -1 && list[i].shopId == StoreModel.Instance.jumpShopID)
+            {
+                jumpIndex = i / 3;
+            }
         }
         scroller.Restart();
         scroller.lockType = EnhanceLockType.KeepVertical;
+        if (StoreModel.Instance.jumpShopID != 0)
+        {
+            scroller.JumpIndex(jumpIndex);
+            StoreModel.Instance.jumpShopID = 0;
+        }
     }
 
 
diff --git a/Main/System/UIBase/UIJumpManager.cs b/Main/System/UIBase/UIJumpManager.cs
index c5e0ef4..5ebadfb 100644
--- a/Main/System/UIBase/UIJumpManager.cs
+++ b/Main/System/UIBase/UIJumpManager.cs
@@ -38,6 +38,20 @@
 		}
 		var config = WindowSearchConfig.Get(winID);
 
+		if (config.WinName == "StoreBaseWin")
+		{
+			//鎸囧畾鍟嗗搧
+			StoreModel.Instance.jumpShopID = int.Parse(config.Extra);
+			if (StoreModel.Instance.jumpShopID == 0)
+			{
+				StoreModel.Instance.selectStoreFuncType = StoreFunc.Normal;
+			}
+			else
+			{
+				StoreModel.Instance.selectStoreFuncType = (StoreFunc)StoreConfig.Get(StoreModel.Instance.jumpShopID).ShopType;
+			}
+		}
+
 		if (!UIManager.Instance.IsOpened(config.WinName))
 		{
 			UIManager.Instance.OpenWindow(config.WinName, config.TabIndex);

--
Gitblit v1.8.0