| | |
| | | public Dictionary<int, int> PackMaxCountDict = new Dictionary<int, int>(); //背包类型:背包格子最大数量 |
| | | public int initBagGridCount { get; private set; } //初始物品背包格子数 |
| | | public int[] itemPackSortTyps { get; private set; } //背包物品的按类型排序 |
| | | public List<string> composeItemGuidList = new List<string>(); //合成列表物品guid |
| | | public List<int> composeItemIDList = new List<int>(); //合成列表物品ID |
| | | List<int> canComposeItemIDList = new List<int>(); //数量足够合成列表物品ID 排序判断用 |
| | | |
| | | //开格子 |
| | | public Dictionary<int, int> openGirdMoneyDict = new Dictionary<int, int>(); //背包类型:消耗货币类型 |
| | |
| | | string RoleEquipLocalSave = ""; |
| | | List<int> LocalSavePlaceArray { get; set; } |
| | | Dictionary<int, List<int>> sharedUseCountItemDict { get; set; } |
| | | bool isUpdatePlayerLv = false; |
| | | // bool isUpdatePlayerLv = false; |
| | | bool isItemChange = false; //延迟处理物品变化 |
| | | |
| | | public int[] gameCashShow; //代金券特殊显示 除以100 |
| | | public int[] autoUseItemIDs; |
| | |
| | | public void OnBeforePlayerDataInitialize() |
| | | { |
| | | GlobalTimeEvent.Instance.secondEvent -= UpdateSecond; |
| | | PlayerDatas.Instance.playerDataRefreshEvent -= UpdatePlayerLv; |
| | | // PlayerDatas.Instance.playerDataRefreshEvent -= UpdatePlayerLv; |
| | | LocalSave.DeleteKey(RecordKnapsackTitle); |
| | | playerPackDict.Clear(); |
| | | itemDayUseCntDict.Clear(); |
| | |
| | | LocalSavePlaceArray = null; |
| | | } |
| | | GlobalTimeEvent.Instance.secondEvent += UpdateSecond; |
| | | PlayerDatas.Instance.playerDataRefreshEvent += UpdatePlayerLv; |
| | | isUpdatePlayerLv = true; |
| | | // PlayerDatas.Instance.playerDataRefreshEvent += UpdatePlayerLv; |
| | | // isUpdatePlayerLv = true; |
| | | FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; |
| | | } |
| | | |
| | |
| | | { |
| | | refrechPackEvent(packType); |
| | | } |
| | | |
| | | UpdatePackRedpoint(packType); |
| | | |
| | | DelayNotifyPackChange(packType); |
| | | } |
| | | |
| | | public void UpdateItem(H0704_tagRolePackRefresh serverItem) |
| | |
| | | // ItemOperateUtility.Instance.ShowPutOnNewEquipRemind(itemInfo.itemId); |
| | | // } |
| | | // } |
| | | |
| | | UpdatePackRedpoint(type); |
| | | |
| | | DelayNotifyPackChange(type); |
| | | //EquipDecomRedCtrl(); |
| | | AutoUseItem(itemInfo.itemId, serverItem.ItemGUID); |
| | | } |
| | |
| | | gridRefreshEvent(type); |
| | | } |
| | | |
| | | UpdatePackRedpoint(type); |
| | | |
| | | DelayNotifyPackChange(type); |
| | | } |
| | | |
| | | |
| | |
| | | |
| | | } |
| | | } |
| | | DelayNotifyPackChange(type); |
| | | |
| | | } |
| | | |
| | |
| | | |
| | | } |
| | | |
| | | UpdatePackRedpoint(type); |
| | | DelayNotifyPackChange(type); |
| | | |
| | | if (GetItemByGuid(guid) == null) |
| | | { |
| | |
| | | if (itemGUIDDict[guid].packType == type) |
| | | { |
| | | itemGUIDDict.Remove(guid); |
| | | DeleteItemEvent?.Invoke(type, guid, itemID, index, clearType); |
| | | } |
| | | //只是背包转移,不删除但也要通知 |
| | | DeleteItemEvent?.Invoke(type, guid, itemID, index, clearType); |
| | | } |
| | | } |
| | | |
| | |
| | | else |
| | | #endif |
| | | { |
| | | path = AssetVersionUtility.GetAssetFilePath($"Config/{name}.ini"); |
| | | //从服务端拷贝是ini,打包用txt统一处理 |
| | | path = AssetVersionUtility.GetAssetFilePath($"Config/{name}.txt"); |
| | | } |
| | | |
| | | return File.ReadAllLines(path); |
| | |
| | | |
| | | private void UpdateSecond() |
| | | { |
| | | if (isUpdatePlayerLv) |
| | | if (isItemChange) |
| | | { |
| | | isUpdatePlayerLv = false; |
| | | isItemChange = false; |
| | | DelayRefreshItemPackEvent(); |
| | | } |
| | | } |
| | | |
| | | private void UpdatePlayerLv(PlayerDataType type) |
| | | { |
| | | if (type != PlayerDataType.LV) return; |
| | | // private void UpdatePlayerLv(PlayerDataType type) |
| | | // { |
| | | // if (type != PlayerDataType.LV) return; |
| | | |
| | | isUpdatePlayerLv = true; |
| | | } |
| | | // isUpdatePlayerLv = true; |
| | | // } |
| | | |
| | | #endregion |
| | | |
| | |
| | | /// <param name="type"></param> |
| | | /// <param name="id"></param> |
| | | /// <returns></returns> |
| | | public ulong GetItemCountByID(PackType type, int id, bool includeAuction = true) |
| | | public long GetItemCountByID(PackType type, int id, bool includeAuction = true) |
| | | { |
| | | ulong count = 0; |
| | | long count = 0; |
| | | var singlePack = GetSinglePack(type); |
| | | if (singlePack != null) |
| | | { |
| | |
| | | return useCnt; |
| | | } |
| | | |
| | | public void GotoWashAttributePoint(string guid) |
| | | { |
| | | // ItemModel itemModel = GetItemByGuid(guid); |
| | | // if (itemModel == null) return; |
| | | |
| | | // WashAttrPointWin.itemModel = itemModel; |
| | | // WindowCenter.Instance.Open<WashAttrPointWin>(); |
| | | } |
| | | |
| | | #region 红点逻辑判断 |
| | | |
| | | const int ITEMPACK_REDKEY = 102011003; |
| | | Redpoint redpointItemPack = new Redpoint(MainRedDot.RedPoint_BagFuncKey, ITEMPACK_REDKEY); |
| | | Redpoint redpointItemPack = new Redpoint(MainRedDot.RedPoint_MainPackKey, MainRedDot.RedPoint_BagFuncKey); |
| | | Redpoint redpointComposePack = new Redpoint(MainRedDot.RedPoint_MainPackKey, MainRedDot.RedPoint_ComposeFuncKey); |
| | | |
| | | |
| | | private void UpdatePackRedpoint(PackType type) |
| | | //延迟通知背包变化,避免在同一帧内多次通知 |
| | | private void DelayNotifyPackChange(PackType type) |
| | | { |
| | | var singlePack = GetSinglePack(type); |
| | | if (singlePack == null) |
| | | if (type == PackType.Item) |
| | | { |
| | | return; |
| | | } |
| | | |
| | | switch (type) |
| | | { |
| | | case PackType.Item: |
| | | if (singlePack.GetEmptyGridCount() <= 0) |
| | | { |
| | | redpointItemPack.state = RedPointState.Full; |
| | | //SysNotifyMgr.Instance.ShowTip("BagFull"); |
| | | } |
| | | else |
| | | { |
| | | redpointItemPack.state = RedPointState.None; |
| | | } |
| | | |
| | | break; |
| | | |
| | | isItemChange = true; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | void DelayRefreshItemPackEvent() |
| | | { |
| | | //合成红点 |
| | | SinglePack singlePack = GetSinglePack(PackType.Item); |
| | | var items = singlePack.GetAllItems(); |
| | | |
| | | redpointComposePack.state = RedPointState.None; |
| | | foreach (var item in items.Values) |
| | | { |
| | | int makeID = ItemCompoundConfig.GetMakeIDByMaterial(item.itemId); |
| | | if (makeID != 0) |
| | | { |
| | | var config = ItemCompoundConfig.GetItemCompoundConfig(makeID); |
| | | var targetID = config.itemID; |
| | | var targetCnt = config.itemCount; |
| | | if (GetItemCountByID(PackType.Item, targetID) >= targetCnt) |
| | | { |
| | | redpointComposePack.state = RedPointState.Simple; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | //背包红点 |
| | | if (singlePack.GetEmptyGridCount() <= 0) |
| | | { |
| | | redpointItemPack.state = RedPointState.Full; |
| | | SysNotifyMgr.Instance.ShowTip("BagFull"); |
| | | } |
| | | else |
| | | { |
| | | redpointItemPack.state = RedPointState.None; |
| | | |
| | | //无条件开启的宝箱红点 |
| | | foreach (var item in items.Values) |
| | | { |
| | | var chestConfig = ChestsConfig.Get(item.itemId); |
| | | if (chestConfig != null && chestConfig.ExpendItemID == 0 && chestConfig.OpenMoney == 0) |
| | | { |
| | | redpointItemPack.state = RedPointState.Simple; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | public void RefreshItemComposeList() |
| | | { |
| | | //收集合成物品 |
| | | composeItemIDList.Clear(); |
| | | canComposeItemIDList.Clear(); |
| | | |
| | | SinglePack singlePack = GetSinglePack(PackType.Item); |
| | | var items = singlePack.GetAllItems(); |
| | | |
| | | foreach (var item in items.Values) |
| | | { |
| | | var makeID = ItemCompoundConfig.GetMakeIDByMaterial(item.itemId); |
| | | if (makeID != 0) |
| | | { |
| | | composeItemIDList.Add(makeID); |
| | | |
| | | var config = ItemCompoundConfig.GetItemCompoundConfig(makeID); |
| | | var targetID = config.itemID; |
| | | var targetCnt = config.itemCount; |
| | | if (GetItemCountByID(PackType.Item, targetID) >= targetCnt) |
| | | { |
| | | canComposeItemIDList.Add(makeID); |
| | | } |
| | | } |
| | | } |
| | | |
| | | composeItemIDList.Sort(SortItemCompose); |
| | | } |
| | | |
| | | int SortItemCompose(int itemIDA, int itemIDB) |
| | | { |
| | | // 合成材料够不够 |
| | | var isEnoughA = canComposeItemIDList.Contains(itemIDA); |
| | | var isEnoughB = canComposeItemIDList.Contains(itemIDB); |
| | | if (isEnoughA != isEnoughB) |
| | | { |
| | | return isEnoughA ? -1 : 1; |
| | | } |
| | | |
| | | var itemA = ItemConfig.Get(itemIDA); |
| | | var itemB = ItemConfig.Get(itemIDB); |
| | | |
| | | var colorA = itemA.ItemColor; |
| | | var colorB = itemB.ItemColor; |
| | | if (colorA != colorB) |
| | | { |
| | | return colorB - colorA; |
| | | } |
| | | |
| | | return itemA.ID - itemB.ID; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region 查看某个位置的物品 |