少年修仙传客户端代码仓库
10268 【越南】【砍树】【英语】新增自选界面, 每个物品后面可自选数量

- 适配A323封包更改
2个文件已修改
171 ■■■■ 已修改文件
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA323_tagCMUseItems.cs 74 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
System/KnapSack/New/ChooseItemsModel.cs 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Core/NetworkPackage/ClientPack/ClientToMapServer/CA3_Item/CA323_tagCMUseItems.cs
@@ -1,41 +1,39 @@
using UnityEngine;
using System.Collections;
// A3 23 使用物品 #tagCMUseItems
public class CA323_tagCMUseItems : GameNetPackBasic {
    public byte ItemIndex;    //物品在背包中索引
    public ushort UseCnt;    //使用个数,0表示全部使用
    public uint ExData;    //使用扩展值, 默认0, 选择物品宝箱时发送选择的物品ID
    public CA323_tagCMUseItems () {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xA323;
    }
    public override void WriteToBytes () {
        WriteBytes (ItemIndex, NetDataType.BYTE);
        WriteBytes (UseCnt, NetDataType.WORD);
        WriteBytes (ExData, NetDataType.DWORD);
    }
}
// A3 23 使用物品 #tagCMUseItems
public class CA323_tagCMUseItems : GameNetPackBasic
{
    public byte ItemIndex;    //物品在背包中索引
    public ushort UseCnt;    //使用个数,0表示全部使用
    public uint ExData;    //使用扩展值, 默认0, 选择物品宝箱时发送选择的物品ID
    public byte SelectCount;    //指定选择项,当批量使用单个箱子需要同时选中多种选项时使用该值
    public tagCMUseItemsSelect[] SelectList;
    public CA323_tagCMUseItems()
    {
        combineCmd = (ushort)0x03FE;
        _cmd = (ushort)0xA323;
    }
    public override void WriteToBytes()
    {
        WriteBytes(ItemIndex, NetDataType.BYTE);
        WriteBytes(UseCnt, NetDataType.WORD);
        WriteBytes(ExData, NetDataType.DWORD);
        WriteBytes(SelectCount, NetDataType.BYTE);
        for (int i = 0; i < SelectCount; i++)
        {
            WriteBytes(SelectList[i].SelectID, NetDataType.DWORD);
            WriteBytes(SelectList[i].SelectCnt, NetDataType.WORD);
        }
    }
    public struct tagCMUseItemsSelect
    {
        public uint SelectID;        //选择项ID
        public ushort SelectCnt;        //选择数
    }
}
System/KnapSack/New/ChooseItemsModel.cs
@@ -125,33 +125,114 @@
    public bool TrySendUse()
    {
        List<ChooseItems> chooseItemList = GetSendList(userChooseItemDict);
        CA323_tagCMUseItems.tagCMUseItemsSelect[] chooseItemList = GetSendList(userChooseItemDict, out List<ChooseItems> resultChooseItemDict, out string guid, out int count);
        //一个材料也没选
        if (chooseItemList.Count < 1)
        if (chooseItemList.Length < 1)
        {
            SysNotifyMgr.Instance.ShowTip("ChooseItems01");
            return false;
        }
        for (int i = 0; i < chooseItemList.Count; i++)
            ItemOperateUtility.Instance.UseItem(chooseItemList[i].guid, chooseItemList[i].useCnt, chooseItemList[i].extra);
        var itemModel = packModel.GetItemByGuid(guid);
        if (itemModel == null)
            return false;
        for (int i = 0; i < resultChooseItemDict.Count; i++)
        {
            var item = packModel.GetItemByGuid(resultChooseItemDict[i].guid);
            if (item == null)
                return false;
            var error = 0;
            if (!ItemOperateUtility.Instance.CanUseItem(resultChooseItemDict[i].guid, resultChooseItemDict[i].useCnt, out error))
            {
                switch (error)
                {
                    case 1:
                        SysNotifyMgr.Instance.ShowTip("EverydayUseLimit");
                        break;
                    case 2:
                        SysNotifyMgr.Instance.ShowTip("UseCntLimit");
                        break;
                    case 3:
                        SysNotifyMgr.Instance.ShowTip("GeRen_chenxin_749572");
                        break;
                    default:
                        break;
                }
                return false;
            }
        }
        var useItem = new CA323_tagCMUseItems();
        useItem.ItemIndex = (byte)itemModel.gridIndex;
        useItem.UseCnt = (ushort)count;
        useItem.ExData = (uint)0;
        useItem.SelectCount = (byte)chooseItemList.Length;
        useItem.SelectList = chooseItemList;
        GameNetSystem.Instance.SendInfo(useItem);
        return true;
    }
    List<ChooseItems> GetSendList(Dictionary<int, ChooseItems> userChooseItemDict)
    void TryUseItem(string guid, int useCnt = 1, int extra = 0)
    {
        var item = packModel.GetItemByGuid(guid);
        if (item == null)
            return;
        var error = 0;
        if (!ItemOperateUtility.Instance.CanUseItem(guid, useCnt, out error))
        {
            switch (error)
            {
                case 1:
                    SysNotifyMgr.Instance.ShowTip("EverydayUseLimit");
                    break;
                case 2:
                    SysNotifyMgr.Instance.ShowTip("UseCntLimit");
                    break;
                case 3:
                    SysNotifyMgr.Instance.ShowTip("GeRen_chenxin_749572");
                    break;
                default:
                    break;
            }
            return;
        }
    }
    CA323_tagCMUseItems.tagCMUseItemsSelect[] GetSendList(Dictionary<int, ChooseItems> userChooseItemDict, out List<ChooseItems> resultChooseItemDict, out string guid, out int count)
    {
        guid = string.Empty;
        count = 0;
        resultChooseItemDict = new List<ChooseItems> { };
        List<int> list = new List<int>(userChooseItemDict.Keys);
        List<ChooseItems> result = new List<ChooseItems>();
        for (int i = 0; i < list.Count; i++)
        {
            int itemId = list[i];
            ChooseItems chooseItems = userChooseItemDict[itemId];
            if (!ItemConfig.Has(itemId))
            if (!ItemConfig.Has(itemId))
                continue;
            if (chooseItems == null || chooseItems.useCnt <= 0)
            if (chooseItems == null || chooseItems.useCnt <= 0)
                continue;
            count += chooseItems.useCnt;
            result.Add(chooseItems);
        }
        return result;
        resultChooseItemDict = result;
        guid = result[0].guid;
        List<CA323_tagCMUseItems.tagCMUseItemsSelect> tagCMUseItemsSelects = new List<CA323_tagCMUseItems.tagCMUseItemsSelect>();
        for (int i = 0; i < result.Count; i++)
        {
            CA323_tagCMUseItems.tagCMUseItemsSelect temp = new CA323_tagCMUseItems.tagCMUseItemsSelect();
            temp.SelectID = (uint)result[i].extra;
            temp.SelectCnt = (ushort)result[i].useCnt;
            tagCMUseItemsSelects.Add(temp);
        }
        return tagCMUseItemsSelects.ToArray();
    }
    void ClearAll()