hch
2026-03-20 c8aea6cbef51b3dd41b4d911bc7e6bf89a6e2e2d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
using UnityEngine;
 
//获得装备界面
public class EquipExchangeWin : UIBase
{
    [SerializeField] EquipExchangeCell oldEquipObj;
    [SerializeField] EquipExchangeCell newEquipObj;
 
    protected override void OnPreOpen()
    {
        // 通知主战场暂停
        BattleManager.Instance.storyBattleField.IsPause = true;
        AutoFightModel.Instance.hasAutoExchanged = false;
        AutoFightModel.Instance.startServerTime = TimeUtility.AllSeconds;
        
        EquipModel.Instance.OnEquipOPResultAction += OnRefreshItem;
        Display();
 
        // if (EquipModel.Instance.newEquipIDToGuideID.ContainsKey(EquipModel.Instance.selectFloorEquip.itemId))
        // {
        //     // if (!NewBieCenter.Instance.IsGuideCompleted(EquipModel.Instance.newEquipIDToGuideID[EquipModel.Instance.selectFloorEquip.itemId]))
        //     //     NewBieCenter.Instance.StartNewBieGuideEx(EquipModel.Instance.newEquipIDToGuideID[EquipModel.Instance.selectFloorEquip.itemId]);
        // }
    }
 
    protected override void OnClose()
    {
        EquipModel.Instance.OnEquipOPResultAction -= OnRefreshItem;
        // 通知主战场
        BattleManager.Instance.storyBattleField.IsPause = false;
    }
 
    void Display()
    {
        EquipModel.Instance.lastShowEquipIndex = EquipModel.Instance.selectFloorEquip.config.EquipPlace - 1;
        var oldEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, EquipModel.Instance.lastShowEquipIndex);
        if (oldEquip == null)
        {
            oldEquipObj.SetActive(false);
            newEquipObj.SetActive(true);
            newEquipObj.Display(EquipModel.Instance.selectFloorEquip, true);
        }
        else
        {
            if (oldEquip.guid == EquipModel.Instance.selectFloorEquip.guid)
            {
                Debug.LogError("Display: 新旧装备相同GUID 客户端主动删除背包物品索引=" + EquipModel.Instance.selectFloorEquip.gridIndex);
                // PackManager.Instance.GetSinglePack(PackType.DropItem).RemoveItem(EquipModel.Instance.selectFloorEquip.gridIndex);
                CloseWindow();
                return;
            }
            oldEquipObj.SetActive(true);
            newEquipObj.SetActive(true);
            oldEquipObj.Display(oldEquip, false);
            newEquipObj.Display(EquipModel.Instance.selectFloorEquip, true);
 
        }
 
    }
 
    void OnRefreshItem(bool isDone, int index)
    {
        AutoFightModel.Instance.hasAutoExchanged = false;
        Display();
    }
 
    private void LateUpdate()
    {
        TryAutoExchangeEquip();
    }
 
    /// <summary>
    /// 尝试自动换装
    /// </summary>
    private void TryAutoExchangeEquip()
    {
        // 已交换过,不再处理
        if (AutoFightModel.Instance.hasAutoExchanged)
            return;
 
        if (!AutoFightModel.Instance.isAutoAttack)
            return;
 
        if (!AutoFightModel.Instance.isAutoChangeBetterEquip)
            return;
 
        int elapsedSeconds = TimeUtility.AllSeconds - AutoFightModel.Instance.startServerTime;
        if (elapsedSeconds < AutoFightModel.Instance.autoChangeBetterEquipWaitTimeS)
            return;
 
        // 检查是否有新装备
        if (EquipModel.Instance.selectFloorEquip == null)
            return;
 
 
        AutoFightModel.Instance.hasAutoExchanged = true;
        AutoExchangeEquip();
    }
 
    /// <summary>
    /// 自动交换装备
    /// </summary>
    private void AutoExchangeEquip()
    {
        // 检查新装备战力是否更高
        long fightPowerChange = FightPowerManager.Instance.GetFightPowerChange(EquipModel.Instance.selectFloorEquip);
        bool isFightPowerUp = fightPowerChange > 0;
        int equipPlace = EquipModel.Instance.selectFloorEquip.config.EquipPlace - 1;
        var oldEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, equipPlace);
        //是否替换后自动分解原装备
 
        if (isFightPowerUp)
        {
            if (oldEquip == null)
            {
                EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 2);
            }
            else
            {
                EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 2, AutoFightModel.Instance.isAutoExchangeDecomposeOld);
            }
        }
        else
        {
            //是否替换后自动分解原装备
            if (AutoFightModel.Instance.isAutoExchangeDecomposeOld)
            {
                EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 1);
            }
        }
    }
}