hch
2026-01-26 aa84cb62bebb9c8a4e586bcc1ec28eb7a16a8860
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;    //是否换上了新装备且分解了 装备索引
    public event Action<BattleDrops> OnItemDropEvent;
@@ -24,7 +24,7 @@
    public int[] equipUIGirdEffects;  //装备格子特效
    public ItemModel selectFloorEquip; //选中的地板装备
    public int lastShowEquipIndex = -1;  //上一次界面显示装备的索引,拾取后物品消失需记录下做表现
    public Queue<int> waitEquipOP = new Queue<int>();    //等待操作的装备,需要和UI交互确认 不含分解
    public Queue<string> waitEquipOP = new Queue<string>();    //等待操作的装备,需要和UI交互确认 不含分解
    public List<int> lastDropIndexs = new List<int>(); //上一次掉落物品索引
@@ -128,7 +128,7 @@
        if (checkDrop)
        {
            CalcAllFloorItems();
            // CalcAllFloorItems();
        }
    }
@@ -163,11 +163,17 @@
    public void CalcFloorEquip(int itemIndex)
    {
        if (itemIndex == -1)
        {
            Debug.Log("CalcFloorEquip 无效的物品索引");
            return;
        }
        var item = PackManager.Instance.GetItemByIndex(PackType.DropItem, itemIndex);
        if (item == null)
        {
            Debug.Log("CalcFloorEquip 无效的物品索引");
            return;
        }
        //非自动模式下,筛选装备打开装备操作界面
        if (IsEquip(item))
@@ -180,17 +186,27 @@
        }
    }
    bool needMoreDrop = false; //由于掉落挤压导致,满掉落掉落背包的时候处理后再主动请求掉落
    //处理所有掉落的物品
    public void CalcAllFloorItems()
    {
        if (PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems().Count == 0)
        {
        var items = PackManager.Instance.GetItems(PackType.DropItem);
        if (items.IsNullOrEmpty())
            return;
        }
        int cnt = items.Count;
        needMoreDrop = cnt == 20;
        //构建所有物品
        foreach (var item in PackManager.Instance.GetSinglePack(PackType.DropItem).GetItems())
        foreach (var item in items)
        {
            CalcFloorEquip(item.gridIndex);
        }
        if (needMoreDrop)
        {
            SendEquipOP(null, 3);
            needMoreDrop = false;
        }
    }
@@ -242,13 +258,16 @@
                UIManager.Instance.CloseWindow<EquipExchangeWin>();
            }
        }
        else
        {
            if (!UIManager.Instance.IsOpened<EquipExchangeWin>())
            {
                UIManager.Instance.OpenWindow<EquipExchangeWin>();
            }
        }
        // else
        // {
        //     // if (!UIManager.Instance.IsOpened<EquipExchangeWin>())
        //     // {
        //     //     UIManager.Instance.OpenWindow<EquipExchangeWin>();
        //     // }
        //     //继续处理下一件装备 重新判断
        //     CalcFloorEquip(selectFloorEquip.gridIndex);
        // }
        OnEquipOPResultAction?.Invoke(isDone, lastShowEquipIndex);
    }
@@ -269,8 +288,11 @@
        // NoteFloorEquip(itemIndexList, opType);
        var pack = new CB415_tagCSMainDropItemOP();
        pack.Count = (byte)itemIndexList.Length;
        pack.IndexList = itemIndexList;
        if (itemIndexList != null)
        {
            pack.Count = (byte)itemIndexList.Length;
            pack.IndexList = itemIndexList;
        }
        pack.OPType = opType;
        pack.OPValue = (byte)(autoDecompose ? 1 : 0); // 替换后是否自动分解原装备:0否1是
@@ -279,6 +301,20 @@
            waitEquipOPPack = true;
            waitEquipOPTime = Time.time;
            Debug.LogWarning("穿戴装备,向服务器请求");
        }
        //记录销毁或替换前的装备
        if ((opType == 1 || opType == 2) && !itemIndexList.IsNullOrEmpty())
        {
            foreach (var index in itemIndexList)
            {
                ItemModel newEquip = PackManager.Instance.GetItemByIndex(PackType.DropItem, index);
                if (newEquip == null)
                    continue;
                int equipPlace = newEquip.config.EquipPlace - 1;
                ItemModel oldEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, equipPlace);
                EquipRecordManager.Instance.AddRecord(opType, newEquip, oldEquip);
            }
        }
        GameNetSystem.Instance.SendInfo(pack);
    }
@@ -327,11 +363,12 @@
    public bool OpenEquipExchangeWin(ItemModel equip)
    {
        if (equip == null)
        {
            return false;
        }
        if (!DTC0403_tagPlayerLoginLoadOK.finishedLogin)
        {
            Debug.LogWarning("OpenEquipExchangeWin: 未登录");
            return false;
        }
@@ -345,11 +382,14 @@
        }
        // 好几件装备需要处理的情况存起来
        waitEquipOP.Enqueue(equip.gridIndex);
        if (!waitEquipOP.Contains(equip.guid))
        {
            //检测时机频繁,导致重复推送,需要检测过滤,对应Dequeue 也做一次检测
            waitEquipOP.Enqueue(equip.guid);
        }
        //未回复装备操作结果,否则会显示旧装备
        if (waitEquipOPPack)
        {
            Debug.LogError("OpenEquipExchangeWin: 等待服务器响应");
            return false;
        }
@@ -359,11 +399,12 @@
            return false;
        }
        selectFloorEquip = GetSelectFloorEquip();
        if (selectFloorEquip == null)
        {
            return false;
        }
        UIManager.Instance.OpenWindow<EquipExchangeWin>();
        return true;
@@ -389,8 +430,13 @@
            return null;
        }
        return PackManager.Instance.GetItemByIndex(PackType.DropItem, waitEquipOP.Dequeue());
        var item = PackManager.Instance.GetItemByGuid(waitEquipOP.Dequeue());
        if (item != null && item.packType == PackType.DropItem)
        {
            return item;
        }
        // Debug.LogError("GetSelectFloorEquip: 没有找到可选装备, 该装备已经转移");
        return null;
    }
@@ -427,7 +473,7 @@
        return equip.GetUseData(23);
    }
    //战斗属性ID列表
    //装备战斗属性ID列表, 如果是卦玉的话基础和战斗都放一起
    public List<int> GetEquipFightAttrs(ItemModel equip)
    {
        if (equip == null)
@@ -447,12 +493,31 @@
        return equip.GetUseData(19);
    }
    //技能ID列表
    public List<int> GetEquipSkillIDs(ItemModel equip)
    {
        if (equip == null)
        {
            return new List<int>();
        }
        return equip.GetUseData(37);
    }
    public int GetEquipSkillID(ItemModel equip)
    {
        if (equip == null)
        {
            return 0;
        }
        var _list = equip.GetUseData(37);
        return _list.IsNullOrEmpty() ? 0 : _list[0];
    }
    //得到装备位对应的部位名称
    public string GetEquipPlaceName(int place)
    {
        return Language.Get("equipPlace" + place);
        return Language.Get(string.Concat("equipPlace", place));
    }
    //是否装备
@@ -467,7 +532,7 @@
    }
    public ItemModel GetEquip(int index)
    {
    {
        return PackManager.Instance.GetItemByIndex(PackType.Equip, index);
    }
}