From 39001a600fcae2bcf27c225df8752d75fb92fef4 Mon Sep 17 00:00:00 2001
From: yyl <yyl>
Date: 星期五, 31 十月 2025 11:18:26 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.1.20:10010/r/Project_SG_scripts
---
Main/System/KnapSack/Logic/SinglePack.cs | 727 ++++++++++++++++++++++++++++---------------------------
1 files changed, 366 insertions(+), 361 deletions(-)
diff --git a/Main/System/KnapSack/Logic/SinglePack.cs b/Main/System/KnapSack/Logic/SinglePack.cs
index 20ab7ae..5765d52 100644
--- a/Main/System/KnapSack/Logic/SinglePack.cs
+++ b/Main/System/KnapSack/Logic/SinglePack.cs
@@ -1,388 +1,393 @@
-锘縰sing System;
-using System.Collections.Generic;
+锘縰sing System.Collections.Generic;
using System.Linq;
-using System.Text;
-using vnxbqy.UI;
-namespace vnxbqy.UI
+public class SinglePack
{
- public class SinglePack
+ public readonly PackType type;
+ public int unlockedGridCount { get; private set; } //宸插紑鍚儗鍖呮牸瀛愭暟
+ private Dictionary<int, ItemModel> items = new Dictionary<int, ItemModel>(); //key 鐗╁搧浣嶇疆绱㈠紩
+ private Dictionary<int, List<int>> itemIDs = new Dictionary<int, List<int>>(); //key 鐗╁搧ID锛氱墿鍝佷綅缃储寮�
+
+ public List<string> itemGuidList = new List<string>(); //鍓嶇鐣岄潰GUID鎺掑簭锛屽悇涓儗鍖呮牴鎹疄闄呮儏鍐典娇鐢�
+
+ public SinglePack(PackType type)
{
- public readonly PackType type;
- public int unlockedGridCount { get; private set; }
- private Dictionary<int, ItemModel> items = new Dictionary<int, ItemModel>(); //key 鐗╁搧浣嶇疆绱㈠紩
- private Dictionary<int, List<int>> itemIDs = new Dictionary<int, List<int>>(); //key 鐗╁搧ID锛氱墿鍝佷綅缃储寮�
- public SinglePack(PackType type)
- {
- this.type = type;
- }
+ this.type = type;
+ }
- public bool HasItem(int itemID)
- {
- return itemIDs.ContainsKey(itemID);
- }
+ public bool HasItem(int itemID)
+ {
+ return itemIDs.ContainsKey(itemID);
+ }
- public ItemModel UpdateItem(ItemInfo itemInfo)
+ public ItemModel UpdateItem(ItemInfo itemInfo)
+ {
+ //瀛楀吀绱㈠紩涓虹墿鍝佷綅缃储寮�
+ var index = itemInfo.index;
+ if (!items.ContainsKey(index))
{
- //瀛楀吀绱㈠紩涓虹墿鍝佷綅缃储寮�
- var index = itemInfo.index;
- if (!items.ContainsKey(index))
+ items.Add(index, new ItemModel(type, itemInfo));
+ }
+ else
+ {
+ //浣嶇疆涓婄殑鐗╁搧鍙樺寲锛屽厛绉婚櫎鍘熸潵鐨�
+ var itemID = items[index].itemId;
+ if (itemIDs.ContainsKey(itemID))
{
- items.Add(index, new ItemModel(type, itemInfo));
- }
- else
- {
- //浣嶇疆涓婄殑鐗╁搧鍙樺寲锛屽厛绉婚櫎鍘熸潵鐨�
- var itemID = items[index].itemId;
- if (itemIDs.ContainsKey(itemID))
+ if (itemIDs[itemID].Contains(index))
{
- if (itemIDs[itemID].Contains(index))
+ if (itemIDs[itemID].Count == 1)
{
- if (itemIDs[itemID].Count == 1)
- {
- itemIDs.Remove(itemID);
- }
- else
- {
- itemIDs[itemID].Remove(index);
- }
- }
- }
-
- items[index].SetItemInfo(itemInfo);
- }
-
- //瀛楀吀绱㈠紩涓虹墿鍝両D
- if (!itemIDs.ContainsKey(itemInfo.itemId))
- {
- itemIDs.Add(itemInfo.itemId, new List<int>());
- }
-
- if (!itemIDs[itemInfo.itemId].Contains(itemInfo.index))
- {
- itemIDs[itemInfo.itemId].Add(itemInfo.index);
- }
-
- return items[index];
- }
-
- public void RemoveItem(int index)
- {
- if (items.ContainsKey(index))
- {
- //瀛楀吀绱㈠紩涓虹墿鍝両D
- var itemID = items[index].itemId;
- if (itemIDs.ContainsKey(itemID))
- {
- if (itemIDs[itemID].Contains(index))
- {
- if (itemIDs[itemID].Count == 1)
- {
- itemIDs.Remove(itemID);
- }
- else
- {
- itemIDs[itemID].Remove(index);
- }
- }
- }
-
- items.Remove(index);
- }
-
- }
-
- public void SetOpenGridCount(int count)
- {
- unlockedGridCount = count;
- }
-
- public ItemModel GetItemByIndex(int index)
- {
- ItemModel item = null;
- items.TryGetValue(index, out item);
- return item;
- }
-
- public Dictionary<int, ItemModel> GetAllItems()
- {
- return items;
- }
-
- /// <summary>
- /// 鑾峰彇鎸囧畾ID鐨勪竴涓墿鍝�
- /// </summary>
- /// <param name="itemId"></param>
- /// <param name="includeAuction"></param>
- /// <returns></returns>
- public ItemModel GetItemByID(int itemId, bool includeAuction = true)
- {
- //foreach (var item in items.Values)
- //{
- // if (!includeAuction && item.isAuction)
- // {
- // continue;
- // }
-
- // if (item.itemId == itemId)
- // {
- // return item;
- // }
- //}
-
- //return null;
-
- if (itemIDs.ContainsKey(itemId))
- {
- foreach (var index in itemIDs[itemId])
- {
- var item = items[index];
- if (!includeAuction && item.isAuction)
- {
- continue;
- }
- return item;
- }
- }
- return null;
- }
-
- /// <summary>
- /// 鑾峰彇鍖呭唴鐨勬寚瀹欼D鐨勬墍鏈夌墿鍝�
- /// </summary>
- /// <param name="itemId"></param>
- /// <param name="includeAuction"></param>
- /// <returns></returns>
- public List<ItemModel> GetItemsById(int itemId, bool includeAuction = true)
- {
- var list = new List<ItemModel>();
- //foreach (var item in items.Values)
- //{
- // if (!includeAuction && item.isAuction)
- // {
- // continue;
- // }
-
- // if (item.itemId == itemId)
- // {
- // list.Add(item);
- // }
- //}
-
- if (itemIDs.ContainsKey(itemId))
- {
- foreach (var index in itemIDs[itemId])
- {
- var item = items[index];
- if (!includeAuction && item.isAuction)
- {
- continue;
- }
- list.Add(item);
- }
- }
- return list;
- }
-
- public int GetCountById(int itemId, bool includeAuction = true)
- {
- var count = 0;
- //foreach (var item in items.Values)
- //{
- // if (!includeAuction && item.isAuction)
- // {
- // continue;
- // }
-
- // if (item.itemId == itemId)
- // {
- // count += item.count;
- // }
- //}
-
- if (itemIDs.ContainsKey(itemId))
- {
- foreach (var index in itemIDs[itemId])
- {
- var item = items[index];
- if (!includeAuction && item.isAuction)
- {
- continue;
- }
- count += item.count;
- }
- }
- return count;
- }
-
- public List<ItemModel> GetItems(FilterParams filterParams)
- {
- var list = new List<ItemModel>();
- foreach (var item in items.Values)
- {
- var levelValid = filterParams.levels == null || filterParams.levels.Contains(item.config.LV);
- if (!levelValid)
- {
- continue;
- }
-
- var qualityValid = filterParams.qualitys == null || filterParams.qualitys.Contains(item.config.ItemColor);
- if (!qualityValid)
- {
- continue;
- }
-
- var typeValid = filterParams.itemTypes == null || filterParams.itemTypes.Contains(item.config.Type);
- if (!typeValid)
- {
- continue;
- }
-
- var equipTypeValid = filterParams.equipTypes == null || filterParams.equipTypes.Contains(item.config.EquipPlace);
- if (!equipTypeValid)
- {
- continue;
- }
-
- var jobValid = filterParams.jobs == null || filterParams.jobs.Contains(item.config.JobLimit);
- if (!jobValid)
- {
- continue;
- }
-
- //var auctionValid = filterParams.isAuction == item.isAuction;
- //if (!auctionValid)
- //{
- // continue;
- //}
-
- var realmValid = filterParams.realmLimit == 0 || filterParams.realmLimit == item.config.RealmLimit;
- if (!realmValid)
- {
- continue;
- }
-
- list.Add(item);
- }
-
- return list;
- }
-
- public int GetCountByType(int type)
- {
- var count = 0;
- foreach (var item in items.Values)
- {
- if (item.config.Type == type)
- {
- count += item.count;
- }
- }
-
- return count;
- }
-
- /// <summary>
- /// 寰楀埌鍚屼竴涓猧d鎸囧畾鏁伴噺鐨勭墿鍝佹牸瀛愬簭鍙�
- /// </summary>
- /// <param name="itemId"></param>
- /// <param name="needCount"></param>
- /// <param name="type"></param>
- /// <returns></returns>
- public List<int> GetItemIndexsAppointedCount(int itemId, int needCount, bool includeAuction = true)
- {
- //var goalItems = new List<ItemModel>();
- //foreach (var item in this.items.Values)
- //{
- // if (!includeAuction && item.isAuction)
- // {
- // continue;
- // }
-
- // if (item.itemId == itemId)
- // {
- // goalItems.Add(item);
- // }
- //}
-
- var itemIndexs = new List<int>();
- var count = 0;
- //for (var i = 0; i < goalItems.Count; i++)
- //{
- // if (count < needCount)
- // {
- // itemIndexs.Add(goalItems[i].gridIndex);
- // count += goalItems[i].count;
- // }
- // else
- // {
- // break;
- // }
-
- //}
-
- if (itemIDs.ContainsKey(itemId))
- {
- foreach (var index in itemIDs[itemId])
- {
- var item = items[index];
- if (!includeAuction && item.isAuction)
- {
- continue;
- }
- if (count < needCount)
- {
- itemIndexs.Add(index);
- count += item.count;
+ itemIDs.Remove(itemID);
}
else
{
- break;
+ itemIDs[itemID].Remove(index);
}
}
}
- return itemIndexs;
+
+ items[index].SetItemInfo(itemInfo);
}
- /// <summary>
- /// 寰楀埌绗竴涓┖鏍间綅缃储寮�
- /// </summary>
- /// <param name="type"></param>
- /// <returns></returns>
- public int GetFirstEmptyGridIndex()
+ //瀛楀吀绱㈠紩涓虹墿鍝両D
+ if (!itemIDs.ContainsKey(itemInfo.itemId))
{
- for (var index = 0; index < unlockedGridCount; index++)
+ itemIDs.Add(itemInfo.itemId, new List<int>());
+ }
+
+ if (!itemIDs[itemInfo.itemId].Contains(itemInfo.index))
+ {
+ itemIDs[itemInfo.itemId].Add(itemInfo.index);
+ }
+
+ return items[index];
+ }
+
+ public void RemoveItem(int index)
+ {
+ if (items.ContainsKey(index))
+ {
+ //瀛楀吀绱㈠紩涓虹墿鍝両D
+ var itemID = items[index].itemId;
+ if (itemIDs.ContainsKey(itemID))
{
- if (!items.ContainsKey(index))
+ if (itemIDs[itemID].Contains(index))
{
- return index;
+ if (itemIDs[itemID].Count == 1)
+ {
+ itemIDs.Remove(itemID);
+ }
+ else
+ {
+ itemIDs[itemID].Remove(index);
+ }
}
}
- return -1;
- }
-
- public int GetEmptyGridCount()
- {
- return unlockedGridCount - items.Count;
- }
-
- public void Clear()
- {
- items.Clear();
- itemIDs.Clear();
- }
-
- public struct FilterParams
- {
- public List<int> levels;
- public List<int> qualitys;
- public List<int> itemTypes;
- public List<int> equipTypes;
- public int realmLimit;
- public bool isAuction;
- public List<int> jobs;
+ items.Remove(index);
}
}
-}
+
+ public void SetOpenGridCount(int count)
+ {
+ unlockedGridCount = count;
+ }
+
+ public ItemModel GetItemByIndex(int index)
+ {
+ ItemModel item = null;
+ items.TryGetValue(index, out item);
+ return item;
+ }
+
+ public Dictionary<int, ItemModel> GetAllItems()
+ {
+ return items;
+ }
+
+ /// <summary>
+ /// 鑾峰彇鎸囧畾ID鐨勪竴涓墿鍝�
+ /// </summary>
+ /// <param name="itemId"></param>
+ /// <param name="includeAuction"></param>
+ /// <returns></returns>
+ public ItemModel GetItemByID(int itemId, bool includeAuction = true)
+ {
+ //foreach (var item in items.Values)
+ //{
+ // if (!includeAuction && item.isAuction)
+ // {
+ // continue;
+ // }
+
+ // if (item.itemId == itemId)
+ // {
+ // return item;
+ // }
+ //}
+
+ //return null;
+
+ if (itemIDs.ContainsKey(itemId))
+ {
+ foreach (var index in itemIDs[itemId])
+ {
+ var item = items[index];
+ if (!includeAuction && item.isAuction)
+ {
+ continue;
+ }
+ return item;
+ }
+ }
+ return null;
+ }
+
+ /// <summary>
+ /// 鑾峰彇鍖呭唴鐨勬寚瀹欼D鐨勬墍鏈夌墿鍝�
+ /// </summary>
+ /// <param name="itemId"></param>
+ /// <param name="includeAuction"></param>
+ /// <returns></returns>
+ public List<ItemModel> GetItemsById(int itemId, bool includeAuction = true)
+ {
+ var list = new List<ItemModel>();
+ //foreach (var item in items.Values)
+ //{
+ // if (!includeAuction && item.isAuction)
+ // {
+ // continue;
+ // }
+
+ // if (item.itemId == itemId)
+ // {
+ // list.Add(item);
+ // }
+ //}
+
+ if (itemIDs.ContainsKey(itemId))
+ {
+ foreach (var index in itemIDs[itemId])
+ {
+ var item = items[index];
+ if (!includeAuction && item.isAuction)
+ {
+ continue;
+ }
+ list.Add(item);
+ }
+ }
+ return list;
+ }
+
+ public List<string> GetItemGUIDListById(int itemId)
+ {
+ var list = new List<string>();
+ if (itemIDs.ContainsKey(itemId))
+ {
+ foreach (var index in itemIDs[itemId])
+ {
+ var item = items[index];
+ list.Add(item.guid);
+ }
+ }
+ return list;
+ }
+
+
+
+ public long GetCountById(int itemId, bool includeAuction = true)
+ {
+ long count = 0;
+
+ //閮ㄥ垎璐у竵鍜岀墿鍝佺粦瀹�
+ if (GeneralDefine.itemMoneyCountDict.ContainsKey(itemId))
+ {
+ //灞曠ず璐у竵鏁伴噺鐨勭墿鍝�
+ count = UIHelper.GetMoneyCnt(GeneralDefine.itemMoneyCountDict[itemId]);
+ }
+
+ if (itemIDs.ContainsKey(itemId))
+ {
+ foreach (var index in itemIDs[itemId])
+ {
+ var item = items[index];
+ if (!includeAuction && item.isAuction)
+ {
+ continue;
+ }
+ count += item.count;
+ }
+ }
+ return count;
+ }
+
+ public List<ItemModel> GetItems()
+ {
+ return items.Values.ToList();
+ }
+
+ public List<int> GetItemIndexs()
+ {
+ return items.Keys.ToList();
+ }
+
+ public List<ItemModel> GetItems(FilterParams filterParams)
+ {
+ var list = new List<ItemModel>();
+ foreach (var item in items.Values)
+ {
+ var levelValid = filterParams.levels == null || filterParams.levels.Contains(item.config.LV);
+ if (!levelValid)
+ {
+ continue;
+ }
+
+ var qualityValid = filterParams.qualitys == null || filterParams.qualitys.Contains(item.config.ItemColor);
+ if (!qualityValid)
+ {
+ continue;
+ }
+
+ var typeValid = filterParams.itemTypes == null || filterParams.itemTypes.Contains(item.config.Type);
+ if (!typeValid)
+ {
+ continue;
+ }
+
+ var equipTypeValid = filterParams.equipTypes == null || filterParams.equipTypes.Contains(item.config.EquipPlace);
+ if (!equipTypeValid)
+ {
+ continue;
+ }
+
+ var jobValid = filterParams.jobs == null || filterParams.jobs.Contains(item.config.JobLimit);
+ if (!jobValid)
+ {
+ continue;
+ }
+
+ list.Add(item);
+ }
+
+ return list;
+ }
+
+ public int GetCountByType(int type)
+ {
+ var count = 0;
+ foreach (var item in items.Values)
+ {
+ if (item.config.Type == type)
+ {
+ count += item.count;
+ }
+ }
+
+ return count;
+ }
+
+ /// <summary>
+ /// 寰楀埌鍚屼竴涓猧d鎸囧畾鏁伴噺鐨勭墿鍝佹牸瀛愬簭鍙�
+ /// </summary>
+ /// <param name="itemId"></param>
+ /// <param name="needCount"></param>
+ /// <param name="type"></param>
+ /// <returns></returns>
+ public List<int> GetItemIndexsAppointedCount(int itemId, int needCount, bool includeAuction = true)
+ {
+ //var goalItems = new List<ItemModel>();
+ //foreach (var item in this.items.Values)
+ //{
+ // if (!includeAuction && item.isAuction)
+ // {
+ // continue;
+ // }
+
+ // if (item.itemId == itemId)
+ // {
+ // goalItems.Add(item);
+ // }
+ //}
+
+ var itemIndexs = new List<int>();
+ var count = 0;
+ //for (var i = 0; i < goalItems.Count; i++)
+ //{
+ // if (count < needCount)
+ // {
+ // itemIndexs.Add(goalItems[i].gridIndex);
+ // count += goalItems[i].count;
+ // }
+ // else
+ // {
+ // break;
+ // }
+
+ //}
+
+ if (itemIDs.ContainsKey(itemId))
+ {
+ foreach (var index in itemIDs[itemId])
+ {
+ var item = items[index];
+ if (!includeAuction && item.isAuction)
+ {
+ continue;
+ }
+ if (count < needCount)
+ {
+ itemIndexs.Add(index);
+ count += item.count;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+ return itemIndexs;
+ }
+
+ /// <summary>
+ /// 寰楀埌绗竴涓┖鏍间綅缃储寮�
+ /// </summary>
+ /// <param name="type"></param>
+ /// <returns></returns>
+ public int GetFirstEmptyGridIndex()
+ {
+ for (var index = 0; index < unlockedGridCount; index++)
+ {
+ if (!items.ContainsKey(index))
+ {
+ return index;
+ }
+ }
+
+ return -1;
+ }
+
+ public int GetEmptyGridCount()
+ {
+ return unlockedGridCount - items.Count;
+ }
+
+ public void Clear()
+ {
+ items.Clear();
+ itemIDs.Clear();
+ }
+
+ public class FilterParams
+ {
+ public List<int> levels;
+ public List<int> qualitys;
+ public List<int> itemTypes;
+ public List<int> equipTypes;
+ public bool isAuction;
+ public List<int> jobs;
+ }
+
+}
\ No newline at end of file
--
Gitblit v1.8.0