From d56e0ca7cc8f85d09d16a526deb43a22654748e3 Mon Sep 17 00:00:00 2001 From: hch <305670599@qq.com> Date: 星期一, 13 十一月 2023 14:48:56 +0800 Subject: [PATCH] 9938 子 【BT0.1】【主干】装备升星修改 / 【BT0.1】【主干】装备升星修改 --- System/KnapSack/Logic/PackModel.cs | 3586 +++++++++++++++++++++++++++++----------------------------- 1 files changed, 1,793 insertions(+), 1,793 deletions(-) diff --git a/System/KnapSack/Logic/PackModel.cs b/System/KnapSack/Logic/PackModel.cs index 9e1a59c..7ae11a6 100644 --- a/System/KnapSack/Logic/PackModel.cs +++ b/System/KnapSack/Logic/PackModel.cs @@ -1,1793 +1,1793 @@ -锘縰sing System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using LitJson; -using System.Text.RegularExpressions; -using System.Collections; - -namespace Snxxz.UI -{ - - public class PackModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize, IPlayerLoginOk - { - public static string StrengthAttrShift_RecordKey = ""; - public const string RecordKnapsackTitle = "RecordKnapsackTitle"; - - Dictionary<int, int> DrugToDungeonDict { get; set; } //key 涓硅嵂ID,value鍓湰ID - Dictionary<int, int[]> DungeonToDrugDict { get; set; } //key 鍓湰ID,value涓硅嵂ID鍒楄〃 - public List<AttrFruitConfig> makeDruglist { get; private set; } - Dictionary<int, Dictionary<int, int>> decomposeAttrDict = new Dictionary<int, Dictionary<int, int>>(); - string RoleEquipLocalSave = ""; - List<int> LocalSavePlaceArray { get; set; } - Dictionary<int, List<int>> sharedUseCountItemDict { get; set; } - bool isUpdatePlayerLv = false; - - AlchemyModel alchemyModel { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } } - ItemTipsModel itemTipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } } - - public int lsItemID = 150; //鍙厬鎹㈢殑鐏电煶鐗╁搧ID - int lsItemCnt = int.Parse(FuncConfigConfig.Get("LingshiShowCount").Numerical1); - - public int[] autoUseItemIDs; - UIEffect lingshiEffect; //鐏电煶鐗规晥 - public override void Init() - { - ParseConfig(); - SysNotifyMgr.Instance.sysNotifyEvent += RefreshSysInfo; - List<DungeonOpenTimeConfig> dungeonlist = DungeonOpenTimeConfig.GetValues(); - if (dungeonlist != null) - { - //DrugToDungeonDict = new Dictionary<int, int>(); - DungeonToDrugDict = new Dictionary<int, int[]>(); - - for (int i = 0; i < dungeonlist.Count; i++) - { - int[] drugIdlist = dungeonlist[i].ElixirHint; - if (drugIdlist != null && drugIdlist.Length > 0) - { - DungeonToDrugDict.Add(dungeonlist[i].DataMapID, drugIdlist); - //for (int j = 0; j < drugIdlist.Length; j++) - //{ - // DrugToDungeonDict.Add(drugIdlist[j], dungeonlist[i].DataMapID); - //} - } - } - } - - makeDruglist = new List<AttrFruitConfig>(); - List<AttrFruitConfig> fruitlist = AttrFruitConfig.GetValues(); - for (int i = 0; i < fruitlist.Count; i++) - { - if (fruitlist[i].FuncID == 2) - { - makeDruglist.Add(fruitlist[i]); - } - } - StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish; - - SetDevourEquipPlace(); - - decomposeAttrDict.Clear(); - List<EquipDeComposeConfig> decomlist = EquipDeComposeConfig.GetValues(); - for (int i = 0; i < decomlist.Count; i++) - { - JsonData attrData = JsonMapper.ToObject(decomlist[i].Attr); - Dictionary<int, int> attrDict = new Dictionary<int, int>(); - decomposeAttrDict.Add(decomlist[i].LV, attrDict); - foreach (var id in attrData.Keys) - { - attrDict.Add(int.Parse(id), int.Parse(attrData[id].ToString())); - } - } - - FuncConfigConfig equipDecompose = FuncConfigConfig.Get("EquipDevourCount"); - minDecomposeNum = int.Parse(equipDecompose.Numerical1); - defaultUnSelectlist = ConfigParse.GetMultipleStr<int>(equipDecompose.Numerical2); - - FuncConfigConfig ShareUseCntItem = FuncConfigConfig.Get("ShareUseCntItem"); - sharedUseCountItemDict = new Dictionary<int, List<int>>(); - JsonData shareUseJson = JsonMapper.ToObject(ShareUseCntItem.Numerical1); - if (shareUseJson.IsArray) - { - for (int i = 0; i < shareUseJson.Count; i++) - { - var idListJson = shareUseJson[i]; - var idlist = new List<int>(); - sharedUseCountItemDict.Add(i, idlist); - foreach (var id in idListJson) - { - idlist.Add(int.Parse(id.ToString())); - } - } - } - - ParseItemCount(); - - autoUseItemIDs = JsonMapper.ToObject<int[]>(FuncConfigConfig.Get("ItemTipsNum").Numerical2); - } - - public Dictionary<int, string> textCountShow = new Dictionary<int, string>(); - public int[] textCountShow2; - - public void ParseItemCount() - { - var textConfig = FuncConfigConfig.Get("ItemCountShow"); - var json = JsonMapper.ToObject(textConfig.Numerical1); - foreach (var key in json.Keys) - { - var itemID = int.Parse(key); - textCountShow[itemID] = json[key].ToString(); - } - - textCountShow2 = JsonMapper.ToObject<int[]>(textConfig.Numerical2); - } - - - private void OnFuncStateChangeEvent(int id) - { - if (id == (int)FuncOpenEnum.EquipDecompose) - { - EquipDecomRedCtrl(); - } - } - public void OnBeforePlayerDataInitialize() - { - GlobalTimeEvent.Instance.secondEvent -= UpdateSecond; - PlayerDatas.Instance.playerDataRefreshEvent -= UpdatePlayerLv; - LocalSave.DeleteKey(RecordKnapsackTitle); - cacheMapId = 0; - playerPackDict.Clear(); - itemDayUseCntDict.Clear(); - itemSumUseCntDict.Clear(); - itemGUIDDict.Clear(); - isPlayBetterEquipEffect = false; - colorType = EquipColorType.Purple; - decomposeLv = 1; - decomposeExp = 0; - decomposeProgress = 0; - isAutoDecompose = false; - } - - public void OnAfterPlayerDataInitialize() - { - - } - - public void OnPlayerLoginOk() - { - ItemOperateUtility.Instance.RequestWarehouseData(); - EquipDecomRedCtrl(); - RoleEquipLocalSave = StringUtility.Contact("RoleEquipLocalSave", PlayerDatas.Instance.baseData.PlayerID); - StrengthAttrShift_RecordKey = StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "StrengthAttrShift"); - if (LocalSave.GetIntArray(RoleEquipLocalSave) != null) - { - LocalSavePlaceArray = LocalSave.GetIntArray(RoleEquipLocalSave).ToList(); - } - else - { - LocalSavePlaceArray = null; - } - GlobalTimeEvent.Instance.secondEvent += UpdateSecond; - PlayerDatas.Instance.playerDataRefreshEvent += UpdatePlayerLv; - isUpdatePlayerLv = true; - FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; - } - - private void RefreshSysInfo(string key, ArrayList infolist) - { - if (key != "GetMoney") return; - - if (WindowCenter.Instance.IsOpen("GodKingRandomGiftWin")) - { - return; - } - - var type = 0; - int.TryParse(infolist[0].ToString(), out type); - if (type != 2) return; - Vector3 pos = new Vector3(-100, 0, 0); - Vector3 rot = new Vector3(0, 0, 0); - if (!WindowCenter.Instance.IsOpen<MainInterfaceWin>()) - { - pos = new Vector3(150, 50, 0); - rot = new Vector3(180, 180, 0); - } - lingshiEffect = EffectMgr.Instance.PlayUIEffect(1158, 2500, WindowCenter.Instance.uiRoot.tipsCanvas, pos, rot, false); - - - } - public override void UnInit() - { - FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; - SysNotifyMgr.Instance.sysNotifyEvent -= RefreshSysInfo; - } - - public event Action<PackType> refrechPackEvent; //鍒锋柊鏁翠釜鑳屽寘鏁版嵁 - public event Action<PackType, int, int> refreshItemCountEvent; //锛堝崟涓級鏈�鏂扮墿鍝佹暟閲忓埛鏂�(鏃х殑寮冪敤)鍦ㄥ緱鍒版柊鐗╁搧銆佺墿鍝佹暟閲忕殑鏀瑰彉锛屾竻鐞嗚鐗╁搧鏃跺潎浼氳Е鍙� int 浣嶇疆绱㈠紩 int鐗╁搧id - public event Action<PackType> gridRefreshEvent; //鑳屽寘绌烘牸鍒锋柊 - public event Action<PackType, int, int> itemCntAddEvent; //鐗╁搧鏁伴噺澧炲姞 int 浣嶇疆绱㈠紩 int鐗╁搧id - public event Action<PackType, int, int> itemCntReduceEvent; //鐗╁搧鏁伴噺鍑忓皯鐨勬敼鍙� int 浣嶇疆绱㈠紩 int鐗╁搧id - public event Action<int, int> useItemSuccessEvent; //鐗╁搧浣跨敤鎴愬姛 int 浣嶇疆绱㈠紩 int鐗╁搧id - - public event Action<int> refreshItemDayUseCountEvent; //鍒锋柊鐗╁搧姣忔棩浣跨敤鏁伴噺 - public event Action<int> refreshItemSumUseCountEvent; //鍒锋柊鐗╁搧鎬讳娇鐢ㄦ暟閲� - - public bool isPlayBetterEquipEffect { get; set; } //鏁寸悊鑳屽寘鏃舵槸鍚︽挱鏀剧壒鏁� - - #region 鎺ユ敹鏈嶅姟绔暟鎹� - private Dictionary<PackType, SinglePack> playerPackDict = new Dictionary<PackType, SinglePack>(); - private Dictionary<string, ItemModel> itemGUIDDict = new Dictionary<string, ItemModel>(); - - public void UpdatePack(H0725_tagRolePackRefreshEx packInfo) - { - SetLookIndex(null); - var packType = (PackType)packInfo.PackType; - if (!playerPackDict.ContainsKey(packType)) - { - playerPackDict.Add(packType, new SinglePack(packType)); - } - - if (isPlayBetterEquipEffect) - { - ItemLogicUtility.Instance.ClearSortedBetterEquip(); - } - - for (int i = 0; i < packInfo.ItemCount; i++) - { - var itemInfo = new ItemInfo(packInfo.ItemInfo[i]); - var item = playerPackDict[packType].UpdateItem(itemInfo); - AddItemGUIDDict(item, false); - - if (isPlayBetterEquipEffect) - { - ItemLogicUtility.Instance.SetBagSortBetterEquipList(GetItemByGuid(itemInfo.guid)); - } - } - - if (refrechPackEvent != null) - { - refrechPackEvent(packType); - } - - UpdatePackRedpoint(packType); - } - - public void UpdateItem(H0704_tagRolePackRefresh serverItem) - { - isPlayBetterEquipEffect = false; - SetLookIndex(null); - PackType type = (PackType)serverItem.PackType; - if (!playerPackDict.ContainsKey(type)) - { - playerPackDict.Add(type, new SinglePack(type)); - } - - var showNewItem = false; - if (itemGUIDDict.ContainsKey(serverItem.ItemGUID)) - { - var prePack = itemGUIDDict[serverItem.ItemGUID].packType; - var preAuction = itemGUIDDict[serverItem.ItemGUID].isAuction; - var nowPackType = type; - var nowAcution = serverItem.IsBind == 1; - showNewItem = preAuction != nowAcution || prePack != nowPackType; - } - else - { - showNewItem = true; - } - - var itemInfo = new ItemInfo(serverItem); - var item = playerPackDict[type].UpdateItem(itemInfo); - AddItemGUIDDict(item, showNewItem); - - if (refreshItemCountEvent != null) - { - refreshItemCountEvent(type, itemInfo.index, itemInfo.itemId); - } - - if (itemCntAddEvent != null) - { - itemCntAddEvent(type, itemInfo.index, itemInfo.itemId); - } - - if (type == PackType.Equip) - { - if (ItemLogicUtility.Instance.IsRealmEquip(itemInfo.itemId)) - { - ItemOperateUtility.Instance.ShowPutOnNewEquipRemind(itemInfo.itemId); - } - } - - UpdatePackRedpoint(type); - EquipDecomRedCtrl(); - AutoUseItem(itemInfo.itemId, serverItem.ItemGUID); - } - - public void UpdateUnlockedGridCount(H0724_tagRolePackCanUseCount useCount) - { - PackType type = (PackType)useCount.PackType; - if (!playerPackDict.ContainsKey(type)) - { - playerPackDict.Add(type, new SinglePack(type)); - } - - playerPackDict[type].SetOpenGridCount(useCount.CanUseCount); - - if (gridRefreshEvent != null) - { - gridRefreshEvent(type); - } - - UpdatePackRedpoint(type); - } - - public void RefreshItemCount(H0707_tagItemCountRefresh refresh) - { - SetLookIndex(null); - isPlayBetterEquipEffect = false; - PackType type = (PackType)refresh.PackType; - SinglePack singlePack = null; - playerPackDict.TryGetValue(type, out singlePack); - - if (singlePack != null) - { - ItemModel itemModel = singlePack.GetItemByIndex(refresh.ItemIndex); - if (itemModel != null) - { - bool isAddItemCount = false; - if (refresh.ItemCount > itemModel.count) - { - isAddItemCount = true; - } - itemModel.RefreshCount(refresh.ItemCount); - - if (isAddItemCount) - { - if (itemCntAddEvent != null) - { - itemCntAddEvent(type, itemModel.gridIndex, itemModel.itemId); - } - ItemLogicUtility.Instance.RecommendItem(itemModel); - ItemLogicUtility.Instance.RefreshPickItem(type, itemModel.itemId.ToString()); - } - else - { - if (itemCntReduceEvent != null) - { - itemCntReduceEvent(type, itemModel.gridIndex, itemModel.itemId); - } - } - - if (refreshItemCountEvent != null) - { - refreshItemCountEvent(type, itemModel.gridIndex, itemModel.itemId); - } - - UpdateLSRedpoint(type, itemModel.itemId); - } - } - - } - - public void ClearPack(H0711_tagClearItemPack clearPack) - { - PackType type = (PackType)clearPack.PackIndex; - SinglePack singlePack = null; - playerPackDict.TryGetValue(type, out singlePack); - if (singlePack != null) - { - singlePack.Clear(); - } - } - - public void RemoveItem(H0709_tagClearItem clearItem) - { - isPlayBetterEquipEffect = false; - SetLookIndex(null); - PackType type = (PackType)clearItem.PackType; - - SinglePack singlePack = null; - playerPackDict.TryGetValue(type, out singlePack); - string guid = ""; - if (singlePack != null) - { - ItemModel itemModel = singlePack.GetItemByIndex(clearItem.ItemIndex); - guid = itemModel.guid; - int itemId = itemModel.itemId; - - DeleteItemDictByGUID(type, itemModel.guid); - - singlePack.RemoveItem(clearItem.ItemIndex); - if (refreshItemCountEvent != null) - { - refreshItemCountEvent(type, clearItem.ItemIndex, itemId); - } - - if (itemCntReduceEvent != null) - { - itemCntReduceEvent(type, clearItem.ItemIndex, itemId); - } - } - - UpdatePackRedpoint(type); - EquipDecomRedCtrl(); - - if (GetItemByGuid(guid) == null) - { - KnapsackTimeCDMgr.Instance.UnRegister(guid); - } - - } - - public void PackResetOk(H0316_tagPackResetOK packreset) - { - ItemLogicUtility.Instance.isPackResetOk = true; - } - - public void UseItemSuccess(H0706_tagUseItemSuccess success) - { - isPlayBetterEquipEffect = false; - SetLookIndex(null); - if (success.PlayerID != PlayerDatas.Instance.baseData.PlayerID) - { - return; - } - - MakeUseItemSuccess(success.ItemIndex, (int)success.ItemID); - switch (success.ItemID) - { - case 221: - if (WindowCenter.Instance.IsOpen<KnapSackWin>()) - { - WindowCenter.Instance.Close<KnapSackWin>(); - } - break; - } - - if (useItemSuccessEvent != null) - { - useItemSuccessEvent(success.ItemIndex, (int)success.ItemID); - } - } - - void AutoUseItem(int itemID, string guid) - { - if (autoUseItemIDs.Contains(itemID)) - { - ItemOperateUtility.Instance.GotoUseItem(guid); - } - } - - private void MakeUseItemSuccess(int index, int id) - { - ItemConfig itemConfig = ItemConfig.Get(id); - if (itemConfig.CDType != 0) - { - float configCdTime = (float)Math.Round((double)itemConfig.CDTime / 1000, 1); - var items = GetItems(PackType.Item, new SinglePack.FilterParams() - { - itemTypes = new List<int>() { (int)ItemType.Buff } - }); - - for (int i = 0; i < items.Count; i++) - { - if (items[i].itemId == 901 - || items[i].itemId == 902 - || items[i].itemId == 903 - || items[i].itemId == 904) - { - KnapsackTimeCDMgr.Instance.Register(items[i].guid, items[i].itemId, configCdTime); - break; - } - } - - } - } - - void AddItemGUIDDict(ItemModel itemModel, bool showNewItem) - { - itemGUIDDict[itemModel.guid] = itemModel; - GetItemEventCtrl(itemModel, showNewItem); - } - - void DeleteItemDictByGUID(PackType type, string guid) - { - if (itemGUIDDict.ContainsKey(guid)) - { - if (itemGUIDDict[guid].packType == type) - { - itemGUIDDict.Remove(guid); - } - } - } - - /// <summary> - /// 鐗╁搧姣忔棩浣跨敤鐨勬鏁� - /// </summary> - private Dictionary<int, int> itemDayUseCntDict = new Dictionary<int, int>(); - public void UpdateItemUseCnt(HA809_tagMCItemDayUseCntInfo useCntInfo) - { - for (int i = 0; i < useCntInfo.Count; i++) - { - int itemId = (int)useCntInfo.ItemUseCntList[i].ItemID; - int cnt = useCntInfo.ItemUseCntList[i].UseCnt; - if (!itemDayUseCntDict.ContainsKey(itemId)) - { - itemDayUseCntDict.Add(itemId, cnt); - } - else - { - itemDayUseCntDict[itemId] = cnt; - } - - if (refreshItemDayUseCountEvent != null) - { - refreshItemDayUseCountEvent(itemId); - } - - } - } - - private Dictionary<int, int> itemSumUseCntDict = new Dictionary<int, int>(); - public void UpdateItemSumUseCnt(HA339_tagMCAttrFruitEatCntList useCntInfo) - { - for (int i = 0; i < useCntInfo.count; i++) - { - int itemId = (int)useCntInfo.EatCntList[i].ItemID; - int cnt = useCntInfo.EatCntList[i].EatCnt; - if (!itemSumUseCntDict.ContainsKey(itemId)) - { - itemSumUseCntDict.Add(itemId, cnt); - } - else - { - itemSumUseCntDict[itemId] = cnt; - } - - if (refreshItemSumUseCountEvent != null) - { - refreshItemSumUseCountEvent(itemId); - } - } - } - - #endregion - - #region 鐜╁瑁呭鐗规畩閫昏緫 - public Dictionary<int, Dictionary<int, int>> spiritWeaponPathIds { get; private set; } - public Dictionary<int, int> wingsGetPathIdDict { get; private set; } - public Dictionary<int, List<int>> dungeonUseDict { get; private set; } - void ParseConfig() - { - FuncConfigConfig funcConfig = FuncConfigConfig.Get("WingYuPeiHQTJ"); - spiritWeaponPathIds = new Dictionary<int, Dictionary<int, int>>(); - var splits = funcConfig.Numerical3.Split('|'); - for (int i = 0; i < splits.Length; i++) - { - var tempString = splits[i]; - var matches = Regex.Matches(tempString.Trim(), "\\d+"); - var equipPlace = int.Parse(matches[0].Value); - var job = int.Parse(matches[1].Value); - var itemId = int.Parse(matches[2].Value); - - if (!spiritWeaponPathIds.ContainsKey(equipPlace)) - { - spiritWeaponPathIds[equipPlace] = new Dictionary<int, int>(); - } - - spiritWeaponPathIds[equipPlace][job] = itemId; - } - - FuncConfigConfig copyItemBulletWindow = FuncConfigConfig.Get("CopyItemBulletWindow"); - JsonData copyWinData = JsonMapper.ToObject(copyItemBulletWindow.Numerical1); - dungeonUseDict = new Dictionary<int, List<int>>(); - foreach (var dungeonId in copyWinData.Keys) - { - List<int> idlist = new List<int>(); - dungeonUseDict.Add(int.Parse(dungeonId), idlist); - if (copyWinData[dungeonId].IsArray) - { - JsonData useData = copyWinData[dungeonId]; - for (int i = 0; i < useData.Count; i++) - { - idlist.Add(int.Parse(useData[i].ToString())); - } - } - } - } - - public int GetRoleEquipPathId(int equipPlace) - { - int playerJob = PlayerDatas.Instance.baseData.Job; - switch ((RoleEquipType)equipPlace) - { - case RoleEquipType.Guard: - case RoleEquipType.PeerlessWeapon1: - case RoleEquipType.PeerlessWeapon2: - case RoleEquipType.Wing: - return spiritWeaponPathIds[equipPlace][playerJob]; - default: - return 0; - } - } - - private void UpdateSecond() - { - if (isUpdatePlayerLv) - { - isUpdatePlayerLv = false; - } - } - - private void UpdatePlayerLv(PlayerDataType type) - { - if (type != PlayerDataType.LV) return; - - isUpdatePlayerLv = true; - } - - #endregion - private void GetItemEventCtrl(ItemModel itemModel, bool showNewItem) - { - if (showNewItem) - { - bool isOverdue = false; - if (itemModel.config.ExpireTime > 0) - { - ItemCDCool cool = KnapsackTimeCDMgr.Instance.GetItemCoolById(itemModel.guid); - switch ((ItemTimeType)itemModel.config.EndureReduceType) - { - case ItemTimeType.EquipedTime: - List<int> itemEffectTime = itemModel.GetUseData((int)ItemUseDataKey.createTime); - if (itemEffectTime != null && itemEffectTime[0] != 0) - { - if (cool == null || cool.GetRemainTime() <= 0) - { - isOverdue = true; - } - } - break; - - case ItemTimeType.RealityTime: - if (cool == null || cool.GetRemainTime() <= 0) - { - isOverdue = true; - } - break; - - } - } - - if (!isOverdue) - { - ItemLogicUtility.Instance.RecommendItem(itemModel); - ItemLogicUtility.Instance.OnGetEquip(itemModel); - ItemLogicUtility.Instance.RefreshPickItem(itemModel.packType, itemModel.itemId.ToString()); - } - } - - } - - /// <summary> - /// 寰楀埌鏌愪釜鍖呰9鐨勬墍鏈夋暟鎹� - /// </summary> - /// <param name="type"></param> - /// <returns></returns> - public SinglePack GetSinglePack(PackType type) - { - SinglePack singlePack = null; - playerPackDict.TryGetValue(type, out singlePack); - return singlePack; - } - - public void UnLockPackGrid(int chooseGridCount, PackType type) - { - var singlePack = GetSinglePack(type); - int openCount = chooseGridCount - singlePack.unlockedGridCount; - int index = 0; - switch (type) - { - case PackType.Item: - index = chooseGridCount - GeneralDefine.initBagGridCount; - break; - case PackType.Warehouse: - index = chooseGridCount - GeneralDefine.initDepotGridCount; - break; - } - - itemTipsModel.SetExtendGirdModel(openCount, index, type); - WindowCenter.Instance.Open<ExtendWin>(); - } - - public ItemModel GetItemByGuid(string guid) - { - if (string.IsNullOrEmpty(guid)) - { - return null; - } - - ItemModel itemModel = null; - itemGUIDDict.TryGetValue(guid, out itemModel); - return itemModel; - } - - public ItemModel GetItemByIndex(PackType type, int index) - { - ItemModel itemModel = null; - if (playerPackDict.ContainsKey(type)) - { - itemModel = playerPackDict[type].GetItemByIndex(index); - } - return itemModel; - } - - /// <summary> - /// 鑾峰彇鎸囧畾鑳屽寘鍐� 鎸囧畾ID鐨勬墍鏈夌墿鍝� - /// </summary> - /// <param name="type"></param> - /// <param name="id"></param> - /// <param name="includeAuction"></param> - /// <returns></returns> - public List<ItemModel> GetItemsById(PackType type, int id, bool includeAuction = true) - { - if (playerPackDict.ContainsKey(type)) - { - var singlePack = playerPackDict[type]; - return singlePack.GetItemsById(id, includeAuction); - } - else - { - return null; - } - } - - /// <summary> - /// 鑾峰彇鎸囧畾鑳屽寘鍐呮寚瀹欼D鐨勪竴涓墿鍝� - /// </summary> - /// <param name="type"></param> - /// <param name="id"></param> - /// <param name="includeAuction"></param> - /// <returns></returns> - public ItemModel GetItemByID(PackType type, int id, bool includeAuction = true) - { - if (playerPackDict.ContainsKey(type)) - { - var singlePack = playerPackDict[type]; - return singlePack.GetItemByID(id, includeAuction); - } - else - { - return null; - } - } - - public List<ItemModel> GetItems(PackType packType, SinglePack.FilterParams param) - { - if (playerPackDict.ContainsKey(packType)) - { - return playerPackDict[packType].GetItems(param); - } - else - { - return null; - } - } - - public string GetItemGUIDByID(int itemId, bool includeAuction = true) - { - string guid = string.Empty; - foreach (var key in itemGUIDDict.Keys) - { - if (!includeAuction && itemGUIDDict[key].isAuction) - { - continue; - } - - if (itemGUIDDict[key].itemId == itemId) - { - guid = key; - return guid; - } - } - - return guid; - } - - /// <summary> - /// 寰楀埌ID鐩稿悓鐨勭墿鍝佹暟閲� - /// </summary> - /// <param name="type"></param> - /// <param name="id"></param> - /// <returns></returns> - public int GetItemCountByID(PackType type, int id, bool includeAuction = true) - { - int count = 0; - var singlePack = GetSinglePack(type); - if (singlePack != null) - { - count = singlePack.GetCountById(id, includeAuction); - } - - return count; - } - - public int GetEmptyGridCount(PackType type) - { - int count = 0; - SinglePack singlePack = GetSinglePack(type); - if (singlePack != null) - { - count = singlePack.GetEmptyGridCount(); - } - - return count; - } - - public bool TryGetShareNumItem(int itemId, out List<int> idlist) - { - idlist = new List<int>(); - foreach (var list in sharedUseCountItemDict.Values) - { - if (list.Contains(itemId)) - { - idlist = list; - return true; - } - } - return false; - } - - /// <summary> - /// 寰楀埌鐗╁搧浠婃棩浣跨敤娆℃暟 - /// </summary> - /// <param name="itemId"></param> - /// <returns></returns> - public int GetItemUsedTimesToday(int itemId) - { - int useCnt = 0; - List<int> shareIdlist = null; - bool isShare = TryGetShareNumItem(itemId, out shareIdlist); - if (isShare) - { - foreach (var id in shareIdlist) - { - int singleUseCnt = 0; - itemDayUseCntDict.TryGetValue(id, out singleUseCnt); - useCnt += singleUseCnt; - } - } - else - { - itemDayUseCntDict.TryGetValue(itemId, out useCnt); - } - return useCnt; - } - - /// <summary> - /// 寰楀埌鐗╁搧鎬讳娇鐢ㄦ鏁� - /// </summary> - /// <param name="itemId"></param> - /// <returns></returns> - public int GetItemTotalUsedTimes(int itemId) - { - int useCnt = 0; - List<int> shareIdlist = null; - bool isShare = TryGetShareNumItem(itemId, out shareIdlist); - if (isShare) - { - foreach (var id in shareIdlist) - { - int singleUseCnt = 0; - itemDayUseCntDict.TryGetValue(id, out singleUseCnt); - useCnt += singleUseCnt; - } - } - else - { - itemSumUseCntDict.TryGetValue(itemId, out useCnt); - } - 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); - - const int LS_REDKEY = 102011015; - Redpoint redpointLS = new Redpoint(MainRedDot.RedPoint_BagFuncKey, LS_REDKEY); - - private void UpdateLSRedpoint(PackType type, int itemID) - { - var singlePack = GetSinglePack(type); - if (singlePack == null) - { - return; - } - if (type != PackType.Item) return; - if (itemID != lsItemID) return; - - - if (GetItemCountByID(PackType.Item, lsItemID) < lsItemCnt) - { - redpointLS.state = RedPointState.None; - } - else - { - redpointLS.state = RedPointState.Simple; - } - - } - - private void UpdatePackRedpoint(PackType type) - { - var singlePack = GetSinglePack(type); - if (singlePack == null) - { - return; - } - - switch (type) - { - case PackType.Item: - if (singlePack.GetEmptyGridCount() <= 0) - { - redpointItemPack.state = RedPointState.Full; - SysNotifyMgr.Instance.ShowTip("BagFull"); - } - else - { - redpointItemPack.state = RedPointState.None; - } - if (GetItemCountByID(PackType.Item, lsItemID) < lsItemCnt) - { - redpointLS.state = RedPointState.None; - } - else - { - redpointLS.state = RedPointState.Simple; - } - break; - case PackType.Warehouse: - if (singlePack.GetEmptyGridCount() <= 0) - { - MainRedDot.Instance.redPointDepotFunc.state = RedPointState.Full; - } - else - { - MainRedDot.Instance.redPointDepotFunc.state = RedPointState.None; - } - break; - } - } - - const int PLAYERSUMSTAR_REDKEY = 102011002; - Redpoint redpointSTAR = new Redpoint(MainRedDot.RedPoint_BagFuncKey, PLAYERSUMSTAR_REDKEY); - - public const int EquipDecompose_RedKey = 10205; - public Redpoint redpointEquipDecom = new Redpoint(MainRedDot.RedPoint_MainPackKey, EquipDecompose_RedKey); - public void EquipDecomRedCtrl() - { - if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.EquipDecompose)) - { - return; - } - - if (PlayerDatas.Instance.baseData.LV < devourRedpointLevel) - { - redpointEquipDecom.state = RedPointState.None; - return; - } - - var canDevourItems = GetCanDevourModellist(); - if (canDevourItems != null && canDevourItems.Count >= minDevourEquipNum) - { - redpointEquipDecom.state = RedPointState.Simple; - } - else - { - redpointEquipDecom.state = RedPointState.None; - } - } - #endregion - - #region 鏌ョ湅鏌愪釜浣嶇疆鐨勭墿鍝� - public event Action lookEquipEvent; - private int _lookLineIndex = -1; - public int lookLineIndex { get { return _lookLineIndex; } private set { _lookLineIndex = value; } } - - public string lookItemGUID { get; private set; } - - public void SetLookIndex(string guid, int singleRowCount = 5) - { - if (string.IsNullOrEmpty(guid) || guid == "") - { - lookLineIndex = -1; - lookItemGUID = ""; - } - else - { - int index = GetItemByGuid(guid).gridIndex; - lookLineIndex = index / singleRowCount; - lookItemGUID = guid; - } - - if (lookEquipEvent != null) - { - lookEquipEvent(); - } - } - - public event Action RefreshBagEvent; - public void RefreshBagInfo() - { - if (RefreshBagEvent != null) - { - RefreshBagEvent(); - } - } - #endregion - - public void SetJumpToOneKeySell(Transform parent) - { - var goEffect = AchievementGuideEffectPool.Require(1); - goEffect.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one); - AchievementGoto.guideAchievementId = 0; - } - - #region 鐗╁搧浣跨敤蹇嵎鎻愮ず - - private int cacheMapId = 0; - public event Action<PackType, string> itemUseAct; - private Dictionary<int, int> itemUseTypeDict = new Dictionary<int, int>(); //key SkillTypeID,value 浣跨敤鐗╁搧鐨処D - private void OnStageLoadFinish() - { - itemUseTypeDict.Clear(); - if (PlayerDatas.Instance.baseData.MapID == cacheMapId) - { - return; - } - - cacheMapId = PlayerDatas.Instance.baseData.MapID; - UpdateDungeonDanUse(); - UpdateDungeonUse(); - SinglePack singlePack = GetSinglePack(PackType.Item); - foreach (int itemId in itemUseTypeDict.Values) - { - var modellist = singlePack.GetItemsById(itemId); - if (modellist.Count > 0) - { - ItemModel itemModel = modellist[0]; - bool isExist = StatusMgr.Instance.IsExist(PlayerDatas.Instance.hero.ServerInstID, itemModel.config.AddSkill1); - DebugEx.Log("Buff鏄惁瀛樺湪" + isExist); - if (itemUseAct != null && !isExist) - { - itemUseAct(PackType.Item, itemModel.guid); - } - } - } - } - - private void AddItemUseTypeDict(int id) - { - SkillConfig skillConfig = GetSkillConfig(id); - int itemCount = GetItemCountByID(PackType.Item, id); - if (skillConfig != null && itemCount > 0) - { - if (!itemUseTypeDict.ContainsKey(skillConfig.SkillTypeID)) - { - itemUseTypeDict.Add(skillConfig.SkillTypeID, id); - } - else - { - SkillConfig preSkillConfig = GetSkillConfig(itemUseTypeDict[skillConfig.SkillTypeID]); - if (skillConfig.SkillLV > preSkillConfig.SkillLV) - { - itemUseTypeDict[skillConfig.SkillTypeID] = id; - } - } - } - } - - private void UpdateDungeonDanUse() - { - int mapId = PlayerDatas.Instance.baseData.MapID; - int[] useDrugs = GetDrugIDListByDungeonID(mapId); - if (useDrugs == null) return; - - for (int i = 0; i < useDrugs.Length; i++) - { - int id = useDrugs[i]; - AddItemUseTypeDict(id); - } - } - - private void UpdateDungeonUse() - { - int mapId = PlayerDatas.Instance.baseData.MapID; - if (!dungeonUseDict.ContainsKey(mapId)) return; - - List<int> useIdlist = dungeonUseDict[mapId]; - for (int i = 0; i < useIdlist.Count; i++) - { - int id = useIdlist[i]; - AddItemUseTypeDict(id); - } - } - - public SkillConfig GetSkillConfig(int itemId) - { - ItemConfig itemConfig = ItemConfig.Get(itemId); - SkillConfig skillConfig = SkillConfig.Get(itemConfig.AddSkill1); - return skillConfig; - } - - public int GetDungeonIDByDrugID(int drugID) - { - int dungeonID = 0; - //DrugToDungeonDict.TryGetValue(drugID, out dungeonID); - return dungeonID; - } - - public int[] GetDrugIDListByDungeonID(int dungeonID) - { - int[] drugIDlist = null; - DungeonToDrugDict.TryGetValue(dungeonID, out drugIDlist); - return drugIDlist; - } - #endregion - - #region 鍒ゆ柇鐗╁搧鏄惁杈惧埌浣跨敤涓婇檺 - public bool IsReachUseLimit(string guid, out ulong count) - { - count = 0; - ItemModel itemModel = GetItemByGuid(guid); - if (itemModel == null) return false; - - AttrFruitConfig fruitConfig = AttrFruitConfig.Get(itemModel.itemId); - int haveUseCnt = GetItemUsedTimesToday(itemModel.itemId); - int sumHaveUseCnt = GetItemTotalUsedTimes(itemModel.itemId); - count = (ulong)itemModel.count; - bool isReach = false; - int remainDayCnt = 0; - if (itemModel.config.MaxSkillCnt > 0) - { - remainDayCnt = itemModel.config.MaxSkillCnt - haveUseCnt; - if (itemModel.count > remainDayCnt) - { - count = (ulong)remainDayCnt; - } - } - - int remainSumCnt = 0; - if (fruitConfig != null) - { - remainSumCnt = fruitConfig.basicUseLimit - sumHaveUseCnt; - if (remainSumCnt <= remainDayCnt && itemModel.count > remainSumCnt) - { - count = (ulong)remainSumCnt; - } - } - - if (count < (ulong)itemModel.count) - { - isReach = true; - } - - return isReach; - } - #endregion - - #region 鐗╁搧鍚炲櫖閫昏緫澶勭悊 - public EquipColorType colorType { get; private set; } - public event Action<EquipColorType> RefreshColorSelectAct; - public event Action RefreshEquipDecomNumAct; - public int[] defaultUnSelectlist { get; private set; } - - public int GetBetterEquipCount(List<ItemModel> itemModels) - { - if (itemModels.IsNullOrEmpty()) - { - return 0; - } - - var count = 0; - foreach (var item in itemModels) - { - if (ItemLogicUtility.Instance.IsFightUp(item.itemId, item.score) == 1) - { - count += item.count; - } - } - return count; - } - - public void SetColorSelect(EquipColorType type) - { - colorType = type; - - if (RefreshColorSelectAct != null) - { - RefreshColorSelectAct(type); - } - SendEquipDevourRecordQuest(); - EquipDecomRedCtrl(); - } - - public List<int> devourPlacelist { get; private set; } - public int devourRedpointLevel { get; private set; } - public int minDevourEquipNum { get; private set; } - public void SetDevourEquipPlace() - { - devourPlacelist = new List<int>(); - FuncConfigConfig funcConfig = FuncConfigConfig.Get("PetAbsorbType"); - int[] placeArray = ConfigParse.GetMultipleStr<int>(funcConfig.Numerical1); - for (int i = 0; i < placeArray.Length; i++) - { - devourPlacelist.Add(placeArray[i]); - } - devourRedpointLevel = int.Parse(funcConfig.Numerical2); - minDevourEquipNum = int.Parse(funcConfig.Numerical3); - } - - List<ItemModel> devourModellist = new List<ItemModel>(); - List<ItemModel> orderDevourModellist = new List<ItemModel>(); - public List<ItemModel> GetDevourModellist() - { - SinglePack singlePack = GetSinglePack(PackType.Item); - if (singlePack == null) return null; - - devourModellist.Clear(); - orderDevourModellist.Clear(); - foreach (var model in singlePack.GetAllItems().Values) - { - if (model.config.Type == 29) - { - devourModellist.Add(model); - } - else - { - if (devourPlacelist.Contains(model.config.EquipPlace)) - { - if (GeneralDefine.equipDecomposeScreen.Contains(model.config.ItemColor)) - { - devourModellist.Add(model); - } - } - } - - } - orderDevourModellist.AddRange(devourModellist); - orderDevourModellist.Sort(CompareByColor); - return orderDevourModellist; - } - - public int CompareByColor(ItemModel start, ItemModel next) - { - bool typeX = start.config.Type == 29 ? true : false; - bool typeY = next.config.Type == 29 ? true : false; - - if (typeX.CompareTo(typeY) != 0) return -typeX.CompareTo(typeY); - - int colorX = start.config.ItemColor; - int colorY = next.config.ItemColor; - if (colorX.CompareTo(colorY) != 0) return colorX.CompareTo(colorY); - - int startIndex = devourModellist.IndexOf(start); - int nextIndex = devourModellist.IndexOf(next); - if (startIndex.CompareTo(nextIndex) != 0) return startIndex.CompareTo(nextIndex); - - return 0; - } - - public List<ItemModel> GetCanDevourModellist() - { - List<ItemModel> canDevourModellist = new List<ItemModel>(); - SinglePack singlePack = GetSinglePack(PackType.Item); - if (singlePack == null || colorType == EquipColorType.None) - { - if (RefreshEquipDecomNumAct != null) - { - RefreshEquipDecomNumAct(); - } - return null; - } - - foreach (var model in singlePack.GetAllItems().Values) - { - if (model.config.Type == 29) - { - if (!defaultUnSelectlist.Contains(model.itemId)) - { - canDevourModellist.Add(model); - } - } - else - { - if (IsCanDevour(model)) - { - canDevourModellist.Add(model); - } - } - } - - if (RefreshEquipDecomNumAct != null) - { - RefreshEquipDecomNumAct(); - } - - return canDevourModellist; - } - - public bool IsCanDevour(ItemModel model) - { - if (devourPlacelist.Contains(model.config.EquipPlace)) - { - if (GeneralDefine.equipDecomposeScreen.Contains(model.config.ItemColor)) - { - var eatEquipConfig = PetEatEquipConfig.GetEquipColorAndEquipClass(model.config.ItemColor, model.config.LV); - if (eatEquipConfig == null) return false; - - if (ItemLogicUtility.Instance.IsFightUp(model.itemId, model.score) != 1) - { - if (model.config.ItemColor <= (int)colorType) - { - return true; - } - } - } - } - - return false; - } - - public bool IsMaxDecomLv(int decomLv, out int realLv) - { - realLv = decomLv; - var decomlist = EquipDeComposeConfig.GetValues(); - if (decomLv > decomlist[decomlist.Count - 1].LV) - { - realLv = decomlist[decomlist.Count - 1].LV; - return true; - } - - return false; - } - - public List<ItemModel> selectDevourlist = new List<ItemModel>(); - public void GetSelectDevourList() - { - selectDevourlist.Clear(); - List<ItemModel> itemModels = GetCanDevourModellist(); - if (itemModels != null) - { - selectDevourlist.AddRange(itemModels); - } - } - - public void RefreshGetNewItem(ItemModel model) - { - if (model == null) return; - - if (CheckIsReachDevourCondi(model)) - { - selectDevourlist.Add(model); - if (RefreshEquipDecomNumAct != null) - { - RefreshEquipDecomNumAct(); - } - } - } - - public void AddSelectDevourModellist(ItemModel model) - { - selectDevourlist.Add(model); - if (RefreshEquipDecomNumAct != null) - { - RefreshEquipDecomNumAct(); - } - } - - public bool CheckIsReachDevourCondi(ItemModel model) - { - if (model.config.Type == 29) - { - if (!defaultUnSelectlist.Contains(model.itemId)) - { - return true; - } - return false; - } - else - { - if (IsCanDevour(model)) - { - return true; - } - - } - return false; - } - - public void RemoveSelectDevourModellist(ItemModel model) - { - if (selectDevourlist.Contains(model)) - { - selectDevourlist.Remove(model); - } - if (RefreshEquipDecomNumAct != null) - { - RefreshEquipDecomNumAct(); - } - } - - public Dictionary<int, int> GetDecomAttrDictByLv(int decomLv) - { - if (decomposeAttrDict.ContainsKey(decomLv)) - { - return decomposeAttrDict[decomLv]; - } - - return null; - } - - public bool IsReachMinDecomposeNum() - { - List<ItemModel> itemModels = GetCanDevourModellist(); - if (itemModels != null && itemModels.Count >= minDecomposeNum) - { - return true; - } - return false; - } - - public void SendEquipdevourQuest(bool auto) - { - List<ItemModel> items = null; - if (auto) - { - items = GetCanDevourModellist(); - } - else - { - items = selectDevourlist; - } - - if (items == null || items.Count < minDecomposeNum || !ItemLogicUtility.Instance.isPackResetOk || SettingEffectMgr.Instance.isStartDecompose) return; - - SettingEffectMgr.Instance.isStartDecompose = true; - isAutoDecompose = auto; - recordAutoDecomNum = Math.Min(items.Count, 100); - var package = new CA32C_tagCMEquipDecompose(); - var indexLists = new ushort[recordAutoDecomNum]; - var idlist = new uint[recordAutoDecomNum]; - for (int i = 0; i < recordAutoDecomNum; i++) - { - indexLists[i] = (ushort)items[i].gridIndex; - idlist[i] = (uint)items[i].itemId; - if ((items[i].config.EquipPlace == 0 && items[i].config.Type != 29)) - { - return; - } - } - package.Count = (byte)indexLists.Length; - package.IndexList = indexLists; - package.ItemIDList = idlist; - package.IsAuto = (byte)(auto ? 1 : 0); - GameNetSystem.Instance.SendInfo(package); - } - - public void SendEquipDevourRecordQuest() - { - var record = StringUtility.Contact((int)colorType + 1, 1, 1); - var decomSet = new CA32D_tagCMDecomposeSeting(); - decomSet.Seting = uint.Parse(record); - GameNetSystem.Instance.SendInfo(decomSet); - } - - public int decomposeLv { get; private set; } - public int decomposeExp { get; private set; } - public int decomposeProgress { get; private set; } - public int addDecomposeExp { get; private set; } - public int minDecomposeNum { get; private set; } - public bool isAutoDecompose { get; set; } - public int recordAutoDecomNum { get; private set; } - public DecomposeGetMatInfo[] getItems { get; private set; } - - public event Action RefreshDecomAttrAct; - public void GetServerDecomposeSet(HA31C_tagMCEquipDecomposeInfo info) - { - addDecomposeExp = 0; - int realLv = info.LV + 1; - bool isMax = IsMaxDecomLv(realLv, out realLv); - if (realLv == decomposeLv) - { - addDecomposeExp = (int)info.Exp - decomposeExp; - } - else - { - for (int i = decomposeLv; i <= realLv; i++) - { - var deComposeConfig = EquipDeComposeConfig.Get(i); - if (i == decomposeLv) - { - addDecomposeExp = deComposeConfig.UpNeedExp - decomposeExp; - } - else if (i == realLv) - { - addDecomposeExp += (int)info.Exp; - } - else - { - addDecomposeExp += deComposeConfig.UpNeedExp; - } - } - } - - decomposeLv = realLv; - decomposeExp = (int)info.Exp; - decomposeProgress = info.DecomposeCnt; - getItems = JsonMapper.ToObject<DecomposeGetMatInfo[]>(info.GetItemData); - - if (info.Seting != 0) - { - string decomSetStr = info.Seting.ToString(); - string colorStr = decomSetStr.Substring(0, 1); - colorType = (EquipColorType)(int.Parse(colorStr) - 1); - string lvStr = decomSetStr.Substring(1, decomSetStr.Length - 2); - } - if (RefreshDecomAttrAct != null) - { - RefreshDecomAttrAct(); - } - } - /// <summary> - /// 璁剧疆鑾峰緱鐐间腹鏉愭枡鐨勫睍绀烘暟鎹� - /// </summary> - /// <param name="getMatInfos"></param> - /// <returns></returns> - private List<DecomposeGetMatInfo> getMatInfos = new List<DecomposeGetMatInfo>(); - public List<DecomposeGetMatInfo> SetShowMatInfo() - { - getMatInfos.Clear(); - int sumMatCnt = 0; - if (getItems != null) - { - for (int i = 0; i < getItems.Length; i++) - { - if (getItems[i].Count > 0) - { - sumMatCnt += getItems[i].Count; - } - else - { - sumMatCnt += 1; - } - } - } - - if (sumMatCnt > 5) - { - for (int i = 0; i < getItems.Length; i++) - { - getMatInfos.Add(getItems[i]); - } - } - else - { - if (getItems != null) - { - for (int i = 0; i < getItems.Length; i++) - { - if (getItems[i].Count > 0) - { - for (int j = 0; j < getItems[i].Count; j++) - { - DecomposeGetMatInfo matInfo = new DecomposeGetMatInfo(); - matInfo.ItemID = getItems[i].ItemID; - matInfo.Count = 1; - matInfo.IsSuite = getItems[i].IsSuite; - matInfo.UserData = getItems[i].UserData; - getMatInfos.Add(matInfo); - } - } - else - { - getMatInfos.Add(getItems[i]); - } - } - } - } - return getMatInfos; - } - - public enum EquipColorType - { - None = 0, - White = 1, - Blue = 2, - Purple = 3, - Orange = 4, - Red = 5, - //鍚庣画IL寮�鍙戞坊鍔犻璁� - default1, - default2, - default3, - default4, - All = 10, - } - - public class DecomposeGetMatInfo - { - public int ItemID; - public int Count; - public int IsSuite; - public string UserData; - } - #endregion - - #region 涓硅嵂閫昏緫澶勭悊 - - private int CompareMakeDrug(AttrFruitConfig start, AttrFruitConfig end) - { - ItemConfig configS = ItemConfig.Get(start.ID); - ItemConfig configE = ItemConfig.Get(end.ID); - if (configS.RealmLimit.CompareTo(configE.RealmLimit) != 0) - { - return configS.RealmLimit.CompareTo(configE.RealmLimit); - } - if (configS.LV.CompareTo(configE.LV) != 0) - { - return configS.LV.CompareTo(configE.LV); - } - - int x = makeDruglist.IndexOf(start); - int y = makeDruglist.IndexOf(end); - if (x.CompareTo(y) != 0) x.CompareTo(y); - - return 0; - } - - List<AttrFruitConfig> drugOrderlist = new List<AttrFruitConfig>(); - List<AttrFruitConfig> haveDruglist = new List<AttrFruitConfig>(); - public List<AttrFruitConfig> GetDrugOrderByCnt() - { - drugOrderlist.Clear(); - haveDruglist.Clear(); - drugOrderlist.AddRange(makeDruglist); - drugOrderlist.Sort(CompareByIsHave); - for (int i = 0; i < drugOrderlist.Count; i++) - { - if (IsHaveDrugUse(drugOrderlist[i])) - { - haveDruglist.Add(drugOrderlist[i]); - } - } - haveDruglist.Sort(CompareMakeDrug); - for (int i = 0; i < haveDruglist.Count; i++) - { - drugOrderlist[i] = haveDruglist[i]; - } - - return drugOrderlist; - } - - public bool CheckIsDrugById(int itemId) - { - for (int i = 0; i < makeDruglist.Count; i++) - { - if (makeDruglist[i].ID == itemId) - { - return true; - } - } - return false; - } - - public int CompareByIsHave(AttrFruitConfig start, AttrFruitConfig end) - { - bool isHaveStart = IsHaveDrugUse(start); - bool isHaveEnd = IsHaveDrugUse(end); - if (isHaveStart.CompareTo(isHaveEnd) != 0) return -isHaveStart.CompareTo(isHaveEnd); - - //isHaveStart = IsHaveDrugRecycle(start); - //isHaveEnd = IsHaveDrugRecycle(end); - //if (isHaveStart.CompareTo(isHaveEnd) != 0) return -isHaveStart.CompareTo(isHaveEnd); - - isHaveStart = GetItemCountByID(PackType.Item, start.ID) > 0 ? true : false; - isHaveEnd = GetItemCountByID(PackType.Item, end.ID) > 0 ? true : false; - if (isHaveStart.CompareTo(isHaveEnd) != 0) return isHaveStart.CompareTo(isHaveEnd); - - isHaveStart = IsReachMaxUseDrug(start); - isHaveEnd = IsReachMaxUseDrug(end); - if (isHaveStart.CompareTo(isHaveEnd) != 0) return isHaveStart.CompareTo(isHaveEnd); - - int x = makeDruglist.IndexOf(start); - int y = makeDruglist.IndexOf(end); - if (x.CompareTo(y) != 0) return x.CompareTo(y); - return 0; - } - - public bool IsHaveDrugUse(AttrFruitConfig fruitConfig) - { - if (!IsReachMaxUseDrug(fruitConfig)) - { - return GetItemCountByID(PackType.Item, fruitConfig.ID) > 0 ? true : false; - } - - return false; - } - - public bool IsHaveDrugRecycle(AttrFruitConfig fruitConfig) - { - if (IsReachMaxUseDrug(fruitConfig)) - { - return GetItemCountByID(PackType.Item, fruitConfig.ID) > 0 ? true : false; - } - return false; - } - - public bool IsReachMaxUseDrug(AttrFruitConfig fruitConfig) - { - if (fruitConfig == null) - { - return false; - } - - if (fruitConfig.FuncID == 2) - { - AlchemyDrugUseLimit drugUseLimit; - if (alchemyModel.TryGetAlchemyUseLimit(fruitConfig.ID, out drugUseLimit)) - { - return drugUseLimit.IsReachLimit(); - } - } - - int useNum = GetItemTotalUsedTimes(fruitConfig.ID); - if (useNum >= fruitConfig.basicUseLimit) - { - return true; - } - return false; - } - #endregion - - //鑾峰彇鑳屽寘涓殑涓�浠跺彲鎷嶅崠鐗╁搧 浼樺厛鍏朵粬鑱屼笟 - public string GetAuctionEquip() - { - var itemPackage = GetSinglePack(PackType.Item); - var allItems = itemPackage.GetAllItems(); - - var guid = string.Empty; - List<string> guidList = new List<string>(); - foreach (var item in allItems.Values) - { - var isAuction = item.isAuction; - if (isAuction && ItemLogicUtility.Instance.IsRealmEquip(item.itemId)) - { - if (!ItemLogicUtility.Instance.IsJobCompatibleItem(item.itemId)) - { - return item.guid; - } - else - { - if (guid != string.Empty) - continue; - guid = item.guid; - } - } - } - return guid; - } - } -} +锘縰sing System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using LitJson; +using System.Text.RegularExpressions; +using System.Collections; + +namespace Snxxz.UI +{ + + public class PackModel : Model, IBeforePlayerDataInitialize, IAfterPlayerDataInitialize, IPlayerLoginOk + { + public static string StrengthAttrShift_RecordKey = ""; + public const string RecordKnapsackTitle = "RecordKnapsackTitle"; + + Dictionary<int, int> DrugToDungeonDict { get; set; } //key 涓硅嵂ID,value鍓湰ID + Dictionary<int, int[]> DungeonToDrugDict { get; set; } //key 鍓湰ID,value涓硅嵂ID鍒楄〃 + public List<AttrFruitConfig> makeDruglist { get; private set; } + Dictionary<int, Dictionary<int, int>> decomposeAttrDict = new Dictionary<int, Dictionary<int, int>>(); + string RoleEquipLocalSave = ""; + List<int> LocalSavePlaceArray { get; set; } + Dictionary<int, List<int>> sharedUseCountItemDict { get; set; } + bool isUpdatePlayerLv = false; + + AlchemyModel alchemyModel { get { return ModelCenter.Instance.GetModel<AlchemyModel>(); } } + ItemTipsModel itemTipsModel { get { return ModelCenter.Instance.GetModel<ItemTipsModel>(); } } + + public int lsItemID = 150; //鍙厬鎹㈢殑鐏电煶鐗╁搧ID + int lsItemCnt = int.Parse(FuncConfigConfig.Get("LingshiShowCount").Numerical1); + + public int[] autoUseItemIDs; + UIEffect lingshiEffect; //鐏电煶鐗规晥 + public override void Init() + { + ParseConfig(); + SysNotifyMgr.Instance.sysNotifyEvent += RefreshSysInfo; + List<DungeonOpenTimeConfig> dungeonlist = DungeonOpenTimeConfig.GetValues(); + if (dungeonlist != null) + { + //DrugToDungeonDict = new Dictionary<int, int>(); + DungeonToDrugDict = new Dictionary<int, int[]>(); + + for (int i = 0; i < dungeonlist.Count; i++) + { + int[] drugIdlist = dungeonlist[i].ElixirHint; + if (drugIdlist != null && drugIdlist.Length > 0) + { + DungeonToDrugDict.Add(dungeonlist[i].DataMapID, drugIdlist); + //for (int j = 0; j < drugIdlist.Length; j++) + //{ + // DrugToDungeonDict.Add(drugIdlist[j], dungeonlist[i].DataMapID); + //} + } + } + } + + makeDruglist = new List<AttrFruitConfig>(); + List<AttrFruitConfig> fruitlist = AttrFruitConfig.GetValues(); + for (int i = 0; i < fruitlist.Count; i++) + { + if (fruitlist[i].FuncID == 2) + { + makeDruglist.Add(fruitlist[i]); + } + } + StageLoad.Instance.onStageLoadFinish += OnStageLoadFinish; + + SetDevourEquipPlace(); + + decomposeAttrDict.Clear(); + List<EquipDeComposeConfig> decomlist = EquipDeComposeConfig.GetValues(); + for (int i = 0; i < decomlist.Count; i++) + { + JsonData attrData = JsonMapper.ToObject(decomlist[i].Attr); + Dictionary<int, int> attrDict = new Dictionary<int, int>(); + decomposeAttrDict.Add(decomlist[i].LV, attrDict); + foreach (var id in attrData.Keys) + { + attrDict.Add(int.Parse(id), int.Parse(attrData[id].ToString())); + } + } + + FuncConfigConfig equipDecompose = FuncConfigConfig.Get("EquipDevourCount"); + minDecomposeNum = int.Parse(equipDecompose.Numerical1); + defaultUnSelectlist = ConfigParse.GetMultipleStr<int>(equipDecompose.Numerical2); + + FuncConfigConfig ShareUseCntItem = FuncConfigConfig.Get("ShareUseCntItem"); + sharedUseCountItemDict = new Dictionary<int, List<int>>(); + JsonData shareUseJson = JsonMapper.ToObject(ShareUseCntItem.Numerical1); + if (shareUseJson.IsArray) + { + for (int i = 0; i < shareUseJson.Count; i++) + { + var idListJson = shareUseJson[i]; + var idlist = new List<int>(); + sharedUseCountItemDict.Add(i, idlist); + foreach (var id in idListJson) + { + idlist.Add(int.Parse(id.ToString())); + } + } + } + + ParseItemCount(); + + autoUseItemIDs = JsonMapper.ToObject<int[]>(FuncConfigConfig.Get("ItemTipsNum").Numerical2); + } + + public Dictionary<int, string> textCountShow = new Dictionary<int, string>(); + public int[] textCountShow2; + + public void ParseItemCount() + { + var textConfig = FuncConfigConfig.Get("ItemCountShow"); + var json = JsonMapper.ToObject(textConfig.Numerical1); + foreach (var key in json.Keys) + { + var itemID = int.Parse(key); + textCountShow[itemID] = json[key].ToString(); + } + + textCountShow2 = JsonMapper.ToObject<int[]>(textConfig.Numerical2); + } + + + private void OnFuncStateChangeEvent(int id) + { + if (id == (int)FuncOpenEnum.EquipDecompose) + { + EquipDecomRedCtrl(); + } + } + public void OnBeforePlayerDataInitialize() + { + GlobalTimeEvent.Instance.secondEvent -= UpdateSecond; + PlayerDatas.Instance.playerDataRefreshEvent -= UpdatePlayerLv; + LocalSave.DeleteKey(RecordKnapsackTitle); + cacheMapId = 0; + playerPackDict.Clear(); + itemDayUseCntDict.Clear(); + itemSumUseCntDict.Clear(); + itemGUIDDict.Clear(); + isPlayBetterEquipEffect = false; + colorType = EquipColorType.Purple; + decomposeLv = 1; + decomposeExp = 0; + decomposeProgress = 0; + isAutoDecompose = false; + } + + public void OnAfterPlayerDataInitialize() + { + + } + + public void OnPlayerLoginOk() + { + ItemOperateUtility.Instance.RequestWarehouseData(); + EquipDecomRedCtrl(); + RoleEquipLocalSave = StringUtility.Contact("RoleEquipLocalSave", PlayerDatas.Instance.baseData.PlayerID); + StrengthAttrShift_RecordKey = StringUtility.Contact(PlayerDatas.Instance.baseData.PlayerID, "StrengthAttrShift"); + if (LocalSave.GetIntArray(RoleEquipLocalSave) != null) + { + LocalSavePlaceArray = LocalSave.GetIntArray(RoleEquipLocalSave).ToList(); + } + else + { + LocalSavePlaceArray = null; + } + GlobalTimeEvent.Instance.secondEvent += UpdateSecond; + PlayerDatas.Instance.playerDataRefreshEvent += UpdatePlayerLv; + isUpdatePlayerLv = true; + FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; + } + + private void RefreshSysInfo(string key, ArrayList infolist) + { + if (key != "GetMoney") return; + + if (WindowCenter.Instance.IsOpen("GodKingRandomGiftWin")) + { + return; + } + + var type = 0; + int.TryParse(infolist[0].ToString(), out type); + if (type != 2) return; + Vector3 pos = new Vector3(-100, 0, 0); + Vector3 rot = new Vector3(0, 0, 0); + if (!WindowCenter.Instance.IsOpen<MainInterfaceWin>()) + { + pos = new Vector3(150, 50, 0); + rot = new Vector3(180, 180, 0); + } + lingshiEffect = EffectMgr.Instance.PlayUIEffect(1158, 2500, WindowCenter.Instance.uiRoot.tipsCanvas, pos, rot, false); + + + } + public override void UnInit() + { + FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; + SysNotifyMgr.Instance.sysNotifyEvent -= RefreshSysInfo; + } + + public event Action<PackType> refrechPackEvent; //鍒锋柊鏁翠釜鑳屽寘鏁版嵁 + public event Action<PackType, int, int> refreshItemCountEvent; //锛堝崟涓級鏈�鏂扮墿鍝佹暟閲忓埛鏂�(鏃х殑寮冪敤)鍦ㄥ緱鍒版柊鐗╁搧銆佺墿鍝佹暟閲忕殑鏀瑰彉锛屾竻鐞嗚鐗╁搧鏃跺潎浼氳Е鍙� int 浣嶇疆绱㈠紩 int鐗╁搧id + public event Action<PackType> gridRefreshEvent; //鑳屽寘绌烘牸鍒锋柊 + public event Action<PackType, int, int> itemCntAddEvent; //鐗╁搧鏁伴噺澧炲姞 int 浣嶇疆绱㈠紩 int鐗╁搧id + public event Action<PackType, int, int> itemCntReduceEvent; //鐗╁搧鏁伴噺鍑忓皯鐨勬敼鍙� int 浣嶇疆绱㈠紩 int鐗╁搧id + public event Action<int, int> useItemSuccessEvent; //鐗╁搧浣跨敤鎴愬姛 int 浣嶇疆绱㈠紩 int鐗╁搧id + + public event Action<int> refreshItemDayUseCountEvent; //鍒锋柊鐗╁搧姣忔棩浣跨敤鏁伴噺 + public event Action<int> refreshItemSumUseCountEvent; //鍒锋柊鐗╁搧鎬讳娇鐢ㄦ暟閲� + + public bool isPlayBetterEquipEffect { get; set; } //鏁寸悊鑳屽寘鏃舵槸鍚︽挱鏀剧壒鏁� + + #region 鎺ユ敹鏈嶅姟绔暟鎹� + private Dictionary<PackType, SinglePack> playerPackDict = new Dictionary<PackType, SinglePack>(); + private Dictionary<string, ItemModel> itemGUIDDict = new Dictionary<string, ItemModel>(); + + public void UpdatePack(H0725_tagRolePackRefreshEx packInfo) + { + SetLookIndex(null); + var packType = (PackType)packInfo.PackType; + if (!playerPackDict.ContainsKey(packType)) + { + playerPackDict.Add(packType, new SinglePack(packType)); + } + + if (isPlayBetterEquipEffect) + { + ItemLogicUtility.Instance.ClearSortedBetterEquip(); + } + + for (int i = 0; i < packInfo.ItemCount; i++) + { + var itemInfo = new ItemInfo(packInfo.ItemInfo[i]); + var item = playerPackDict[packType].UpdateItem(itemInfo); + AddItemGUIDDict(item, false); + + if (isPlayBetterEquipEffect) + { + ItemLogicUtility.Instance.SetBagSortBetterEquipList(GetItemByGuid(itemInfo.guid)); + } + } + + if (refrechPackEvent != null) + { + refrechPackEvent(packType); + } + + UpdatePackRedpoint(packType); + } + + public void UpdateItem(H0704_tagRolePackRefresh serverItem) + { + isPlayBetterEquipEffect = false; + SetLookIndex(null); + PackType type = (PackType)serverItem.PackType; + if (!playerPackDict.ContainsKey(type)) + { + playerPackDict.Add(type, new SinglePack(type)); + } + + var showNewItem = false; + if (itemGUIDDict.ContainsKey(serverItem.ItemGUID)) + { + var prePack = itemGUIDDict[serverItem.ItemGUID].packType; + var preAuction = itemGUIDDict[serverItem.ItemGUID].isAuction; + var nowPackType = type; + var nowAcution = serverItem.IsBind == 1; + showNewItem = preAuction != nowAcution || prePack != nowPackType; + } + else + { + showNewItem = true; + } + + var itemInfo = new ItemInfo(serverItem); + var item = playerPackDict[type].UpdateItem(itemInfo); + AddItemGUIDDict(item, showNewItem); + + if (refreshItemCountEvent != null) + { + refreshItemCountEvent(type, itemInfo.index, itemInfo.itemId); + } + + if (itemCntAddEvent != null) + { + itemCntAddEvent(type, itemInfo.index, itemInfo.itemId); + } + + if (type == PackType.Equip) + { + if (ItemLogicUtility.Instance.IsRealmEquip(itemInfo.itemId)) + { + ItemOperateUtility.Instance.ShowPutOnNewEquipRemind(itemInfo.itemId); + } + } + + UpdatePackRedpoint(type); + EquipDecomRedCtrl(); + AutoUseItem(itemInfo.itemId, serverItem.ItemGUID); + } + + public void UpdateUnlockedGridCount(H0724_tagRolePackCanUseCount useCount) + { + PackType type = (PackType)useCount.PackType; + if (!playerPackDict.ContainsKey(type)) + { + playerPackDict.Add(type, new SinglePack(type)); + } + + playerPackDict[type].SetOpenGridCount(useCount.CanUseCount); + + if (gridRefreshEvent != null) + { + gridRefreshEvent(type); + } + + UpdatePackRedpoint(type); + } + + public void RefreshItemCount(H0707_tagItemCountRefresh refresh) + { + SetLookIndex(null); + isPlayBetterEquipEffect = false; + PackType type = (PackType)refresh.PackType; + SinglePack singlePack = null; + playerPackDict.TryGetValue(type, out singlePack); + + if (singlePack != null) + { + ItemModel itemModel = singlePack.GetItemByIndex(refresh.ItemIndex); + if (itemModel != null) + { + bool isAddItemCount = false; + if (refresh.ItemCount > itemModel.count) + { + isAddItemCount = true; + } + itemModel.RefreshCount(refresh.ItemCount); + + if (isAddItemCount) + { + if (itemCntAddEvent != null) + { + itemCntAddEvent(type, itemModel.gridIndex, itemModel.itemId); + } + ItemLogicUtility.Instance.RecommendItem(itemModel); + ItemLogicUtility.Instance.RefreshPickItem(type, itemModel.itemId.ToString()); + } + else + { + if (itemCntReduceEvent != null) + { + itemCntReduceEvent(type, itemModel.gridIndex, itemModel.itemId); + } + } + + if (refreshItemCountEvent != null) + { + refreshItemCountEvent(type, itemModel.gridIndex, itemModel.itemId); + } + + UpdateLSRedpoint(type, itemModel.itemId); + } + } + + } + + public void ClearPack(H0711_tagClearItemPack clearPack) + { + PackType type = (PackType)clearPack.PackIndex; + SinglePack singlePack = null; + playerPackDict.TryGetValue(type, out singlePack); + if (singlePack != null) + { + singlePack.Clear(); + } + } + + public void RemoveItem(H0709_tagClearItem clearItem) + { + isPlayBetterEquipEffect = false; + SetLookIndex(null); + PackType type = (PackType)clearItem.PackType; + + SinglePack singlePack = null; + playerPackDict.TryGetValue(type, out singlePack); + string guid = ""; + if (singlePack != null) + { + ItemModel itemModel = singlePack.GetItemByIndex(clearItem.ItemIndex); + guid = itemModel.guid; + int itemId = itemModel.itemId; + + DeleteItemDictByGUID(type, itemModel.guid); + + singlePack.RemoveItem(clearItem.ItemIndex); + if (refreshItemCountEvent != null) + { + refreshItemCountEvent(type, clearItem.ItemIndex, itemId); + } + + if (itemCntReduceEvent != null) + { + itemCntReduceEvent(type, clearItem.ItemIndex, itemId); + } + } + + UpdatePackRedpoint(type); + EquipDecomRedCtrl(); + + if (GetItemByGuid(guid) == null) + { + KnapsackTimeCDMgr.Instance.UnRegister(guid); + } + + } + + public void PackResetOk(H0316_tagPackResetOK packreset) + { + ItemLogicUtility.Instance.isPackResetOk = true; + } + + public void UseItemSuccess(H0706_tagUseItemSuccess success) + { + isPlayBetterEquipEffect = false; + SetLookIndex(null); + if (success.PlayerID != PlayerDatas.Instance.baseData.PlayerID) + { + return; + } + + MakeUseItemSuccess(success.ItemIndex, (int)success.ItemID); + switch (success.ItemID) + { + case 221: + if (WindowCenter.Instance.IsOpen<KnapSackWin>()) + { + WindowCenter.Instance.Close<KnapSackWin>(); + } + break; + } + + if (useItemSuccessEvent != null) + { + useItemSuccessEvent(success.ItemIndex, (int)success.ItemID); + } + } + + void AutoUseItem(int itemID, string guid) + { + if (autoUseItemIDs.Contains(itemID)) + { + ItemOperateUtility.Instance.GotoUseItem(guid); + } + } + + private void MakeUseItemSuccess(int index, int id) + { + ItemConfig itemConfig = ItemConfig.Get(id); + if (itemConfig.CDType != 0) + { + float configCdTime = (float)Math.Round((double)itemConfig.CDTime / 1000, 1); + var items = GetItems(PackType.Item, new SinglePack.FilterParams() + { + itemTypes = new List<int>() { (int)ItemType.Buff } + }); + + for (int i = 0; i < items.Count; i++) + { + if (items[i].itemId == 901 + || items[i].itemId == 902 + || items[i].itemId == 903 + || items[i].itemId == 904) + { + KnapsackTimeCDMgr.Instance.Register(items[i].guid, items[i].itemId, configCdTime); + break; + } + } + + } + } + + void AddItemGUIDDict(ItemModel itemModel, bool showNewItem) + { + itemGUIDDict[itemModel.guid] = itemModel; + GetItemEventCtrl(itemModel, showNewItem); + } + + void DeleteItemDictByGUID(PackType type, string guid) + { + if (itemGUIDDict.ContainsKey(guid)) + { + if (itemGUIDDict[guid].packType == type) + { + itemGUIDDict.Remove(guid); + } + } + } + + /// <summary> + /// 鐗╁搧姣忔棩浣跨敤鐨勬鏁� + /// </summary> + private Dictionary<int, int> itemDayUseCntDict = new Dictionary<int, int>(); + public void UpdateItemUseCnt(HA809_tagMCItemDayUseCntInfo useCntInfo) + { + for (int i = 0; i < useCntInfo.Count; i++) + { + int itemId = (int)useCntInfo.ItemUseCntList[i].ItemID; + int cnt = useCntInfo.ItemUseCntList[i].UseCnt; + if (!itemDayUseCntDict.ContainsKey(itemId)) + { + itemDayUseCntDict.Add(itemId, cnt); + } + else + { + itemDayUseCntDict[itemId] = cnt; + } + + if (refreshItemDayUseCountEvent != null) + { + refreshItemDayUseCountEvent(itemId); + } + + } + } + + private Dictionary<int, int> itemSumUseCntDict = new Dictionary<int, int>(); + public void UpdateItemSumUseCnt(HA339_tagMCAttrFruitEatCntList useCntInfo) + { + for (int i = 0; i < useCntInfo.count; i++) + { + int itemId = (int)useCntInfo.EatCntList[i].ItemID; + int cnt = useCntInfo.EatCntList[i].EatCnt; + if (!itemSumUseCntDict.ContainsKey(itemId)) + { + itemSumUseCntDict.Add(itemId, cnt); + } + else + { + itemSumUseCntDict[itemId] = cnt; + } + + if (refreshItemSumUseCountEvent != null) + { + refreshItemSumUseCountEvent(itemId); + } + } + } + + #endregion + + #region 鐜╁瑁呭鐗规畩閫昏緫 + public Dictionary<int, Dictionary<int, int>> spiritWeaponPathIds { get; private set; } + public Dictionary<int, int> wingsGetPathIdDict { get; private set; } + public Dictionary<int, List<int>> dungeonUseDict { get; private set; } + void ParseConfig() + { + FuncConfigConfig funcConfig = FuncConfigConfig.Get("WingYuPeiHQTJ"); + spiritWeaponPathIds = new Dictionary<int, Dictionary<int, int>>(); + var splits = funcConfig.Numerical3.Split('|'); + for (int i = 0; i < splits.Length; i++) + { + var tempString = splits[i]; + var matches = Regex.Matches(tempString.Trim(), "\\d+"); + var equipPlace = int.Parse(matches[0].Value); + var job = int.Parse(matches[1].Value); + var itemId = int.Parse(matches[2].Value); + + if (!spiritWeaponPathIds.ContainsKey(equipPlace)) + { + spiritWeaponPathIds[equipPlace] = new Dictionary<int, int>(); + } + + spiritWeaponPathIds[equipPlace][job] = itemId; + } + + FuncConfigConfig copyItemBulletWindow = FuncConfigConfig.Get("CopyItemBulletWindow"); + JsonData copyWinData = JsonMapper.ToObject(copyItemBulletWindow.Numerical1); + dungeonUseDict = new Dictionary<int, List<int>>(); + foreach (var dungeonId in copyWinData.Keys) + { + List<int> idlist = new List<int>(); + dungeonUseDict.Add(int.Parse(dungeonId), idlist); + if (copyWinData[dungeonId].IsArray) + { + JsonData useData = copyWinData[dungeonId]; + for (int i = 0; i < useData.Count; i++) + { + idlist.Add(int.Parse(useData[i].ToString())); + } + } + } + } + + public int GetRoleEquipPathId(int equipPlace) + { + int playerJob = PlayerDatas.Instance.baseData.Job; + switch ((RoleEquipType)equipPlace) + { + case RoleEquipType.Guard: + case RoleEquipType.PeerlessWeapon1: + case RoleEquipType.PeerlessWeapon2: + case RoleEquipType.Wing: + return spiritWeaponPathIds[equipPlace][playerJob]; + default: + return 0; + } + } + + private void UpdateSecond() + { + if (isUpdatePlayerLv) + { + isUpdatePlayerLv = false; + } + } + + private void UpdatePlayerLv(PlayerDataType type) + { + if (type != PlayerDataType.LV) return; + + isUpdatePlayerLv = true; + } + + #endregion + private void GetItemEventCtrl(ItemModel itemModel, bool showNewItem) + { + if (showNewItem) + { + bool isOverdue = false; + if (itemModel.config.ExpireTime > 0) + { + ItemCDCool cool = KnapsackTimeCDMgr.Instance.GetItemCoolById(itemModel.guid); + switch ((ItemTimeType)itemModel.config.EndureReduceType) + { + case ItemTimeType.EquipedTime: + List<int> itemEffectTime = itemModel.GetUseData((int)ItemUseDataKey.createTime); + if (itemEffectTime != null && itemEffectTime[0] != 0) + { + if (cool == null || cool.GetRemainTime() <= 0) + { + isOverdue = true; + } + } + break; + + case ItemTimeType.RealityTime: + if (cool == null || cool.GetRemainTime() <= 0) + { + isOverdue = true; + } + break; + + } + } + + if (!isOverdue) + { + ItemLogicUtility.Instance.RecommendItem(itemModel); + ItemLogicUtility.Instance.OnGetEquip(itemModel); + ItemLogicUtility.Instance.RefreshPickItem(itemModel.packType, itemModel.itemId.ToString()); + } + } + + } + + /// <summary> + /// 寰楀埌鏌愪釜鍖呰9鐨勬墍鏈夋暟鎹� + /// </summary> + /// <param name="type"></param> + /// <returns></returns> + public SinglePack GetSinglePack(PackType type) + { + SinglePack singlePack = null; + playerPackDict.TryGetValue(type, out singlePack); + return singlePack; + } + + public void UnLockPackGrid(int chooseGridCount, PackType type) + { + var singlePack = GetSinglePack(type); + int openCount = chooseGridCount - singlePack.unlockedGridCount; + int index = 0; + switch (type) + { + case PackType.Item: + index = chooseGridCount - GeneralDefine.initBagGridCount; + break; + case PackType.Warehouse: + index = chooseGridCount - GeneralDefine.initDepotGridCount; + break; + } + + itemTipsModel.SetExtendGirdModel(openCount, index, type); + WindowCenter.Instance.Open<ExtendWin>(); + } + + public ItemModel GetItemByGuid(string guid) + { + if (string.IsNullOrEmpty(guid)) + { + return null; + } + + ItemModel itemModel = null; + itemGUIDDict.TryGetValue(guid, out itemModel); + return itemModel; + } + + public ItemModel GetItemByIndex(PackType type, int index) + { + ItemModel itemModel = null; + if (playerPackDict.ContainsKey(type)) + { + itemModel = playerPackDict[type].GetItemByIndex(index); + } + return itemModel; + } + + /// <summary> + /// 鑾峰彇鎸囧畾鑳屽寘鍐� 鎸囧畾ID鐨勬墍鏈夌墿鍝� + /// </summary> + /// <param name="type"></param> + /// <param name="id"></param> + /// <param name="includeAuction"></param> + /// <returns></returns> + public List<ItemModel> GetItemsById(PackType type, int id, bool includeAuction = true) + { + if (playerPackDict.ContainsKey(type)) + { + var singlePack = playerPackDict[type]; + return singlePack.GetItemsById(id, includeAuction); + } + else + { + return null; + } + } + + /// <summary> + /// 鑾峰彇鎸囧畾鑳屽寘鍐呮寚瀹欼D鐨勪竴涓墿鍝� + /// </summary> + /// <param name="type"></param> + /// <param name="id"></param> + /// <param name="includeAuction"></param> + /// <returns></returns> + public ItemModel GetItemByID(PackType type, int id, bool includeAuction = true) + { + if (playerPackDict.ContainsKey(type)) + { + var singlePack = playerPackDict[type]; + return singlePack.GetItemByID(id, includeAuction); + } + else + { + return null; + } + } + + public List<ItemModel> GetItems(PackType packType, SinglePack.FilterParams param) + { + if (playerPackDict.ContainsKey(packType)) + { + return playerPackDict[packType].GetItems(param); + } + else + { + return null; + } + } + + public string GetItemGUIDByID(int itemId, bool includeAuction = true) + { + string guid = string.Empty; + foreach (var key in itemGUIDDict.Keys) + { + if (!includeAuction && itemGUIDDict[key].isAuction) + { + continue; + } + + if (itemGUIDDict[key].itemId == itemId) + { + guid = key; + return guid; + } + } + + return guid; + } + + /// <summary> + /// 寰楀埌ID鐩稿悓鐨勭墿鍝佹暟閲� + /// </summary> + /// <param name="type"></param> + /// <param name="id"></param> + /// <returns></returns> + public int GetItemCountByID(PackType type, int id, bool includeAuction = true) + { + int count = 0; + var singlePack = GetSinglePack(type); + if (singlePack != null) + { + count = singlePack.GetCountById(id, includeAuction); + } + + return count; + } + + public int GetEmptyGridCount(PackType type) + { + int count = 0; + SinglePack singlePack = GetSinglePack(type); + if (singlePack != null) + { + count = singlePack.GetEmptyGridCount(); + } + + return count; + } + + public bool TryGetShareNumItem(int itemId, out List<int> idlist) + { + idlist = new List<int>(); + foreach (var list in sharedUseCountItemDict.Values) + { + if (list.Contains(itemId)) + { + idlist = list; + return true; + } + } + return false; + } + + /// <summary> + /// 寰楀埌鐗╁搧浠婃棩浣跨敤娆℃暟 + /// </summary> + /// <param name="itemId"></param> + /// <returns></returns> + public int GetItemUsedTimesToday(int itemId) + { + int useCnt = 0; + List<int> shareIdlist = null; + bool isShare = TryGetShareNumItem(itemId, out shareIdlist); + if (isShare) + { + foreach (var id in shareIdlist) + { + int singleUseCnt = 0; + itemDayUseCntDict.TryGetValue(id, out singleUseCnt); + useCnt += singleUseCnt; + } + } + else + { + itemDayUseCntDict.TryGetValue(itemId, out useCnt); + } + return useCnt; + } + + /// <summary> + /// 寰楀埌鐗╁搧鎬讳娇鐢ㄦ鏁� + /// </summary> + /// <param name="itemId"></param> + /// <returns></returns> + public int GetItemTotalUsedTimes(int itemId) + { + int useCnt = 0; + List<int> shareIdlist = null; + bool isShare = TryGetShareNumItem(itemId, out shareIdlist); + if (isShare) + { + foreach (var id in shareIdlist) + { + int singleUseCnt = 0; + itemDayUseCntDict.TryGetValue(id, out singleUseCnt); + useCnt += singleUseCnt; + } + } + else + { + itemSumUseCntDict.TryGetValue(itemId, out useCnt); + } + 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); + + const int LS_REDKEY = 102011015; + Redpoint redpointLS = new Redpoint(MainRedDot.RedPoint_BagFuncKey, LS_REDKEY); + + private void UpdateLSRedpoint(PackType type, int itemID) + { + var singlePack = GetSinglePack(type); + if (singlePack == null) + { + return; + } + if (type != PackType.Item) return; + if (itemID != lsItemID) return; + + + if (GetItemCountByID(PackType.Item, lsItemID) < lsItemCnt) + { + redpointLS.state = RedPointState.None; + } + else + { + redpointLS.state = RedPointState.Simple; + } + + } + + private void UpdatePackRedpoint(PackType type) + { + var singlePack = GetSinglePack(type); + if (singlePack == null) + { + return; + } + + switch (type) + { + case PackType.Item: + if (singlePack.GetEmptyGridCount() <= 0) + { + redpointItemPack.state = RedPointState.Full; + SysNotifyMgr.Instance.ShowTip("BagFull"); + } + else + { + redpointItemPack.state = RedPointState.None; + } + if (GetItemCountByID(PackType.Item, lsItemID) < lsItemCnt) + { + redpointLS.state = RedPointState.None; + } + else + { + redpointLS.state = RedPointState.Simple; + } + break; + case PackType.Warehouse: + if (singlePack.GetEmptyGridCount() <= 0) + { + MainRedDot.Instance.redPointDepotFunc.state = RedPointState.Full; + } + else + { + MainRedDot.Instance.redPointDepotFunc.state = RedPointState.None; + } + break; + } + } + + const int PLAYERSUMSTAR_REDKEY = 102011002; + Redpoint redpointSTAR = new Redpoint(MainRedDot.RedPoint_BagFuncKey, PLAYERSUMSTAR_REDKEY); + + public const int EquipDecompose_RedKey = 10205; + public Redpoint redpointEquipDecom = new Redpoint(MainRedDot.RedPoint_MainPackKey, EquipDecompose_RedKey); + public void EquipDecomRedCtrl() + { + if (!FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.EquipDecompose)) + { + return; + } + + if (PlayerDatas.Instance.baseData.LV < devourRedpointLevel) + { + redpointEquipDecom.state = RedPointState.None; + return; + } + + var canDevourItems = GetCanDevourModellist(); + if (canDevourItems != null && canDevourItems.Count >= minDevourEquipNum) + { + redpointEquipDecom.state = RedPointState.Simple; + } + else + { + redpointEquipDecom.state = RedPointState.None; + } + } + #endregion + + #region 鏌ョ湅鏌愪釜浣嶇疆鐨勭墿鍝� + public event Action lookEquipEvent; + private int _lookLineIndex = -1; + public int lookLineIndex { get { return _lookLineIndex; } private set { _lookLineIndex = value; } } + + public string lookItemGUID { get; private set; } + + public void SetLookIndex(string guid, int singleRowCount = 5) + { + if (string.IsNullOrEmpty(guid) || guid == "") + { + lookLineIndex = -1; + lookItemGUID = ""; + } + else + { + int index = GetItemByGuid(guid).gridIndex; + lookLineIndex = index / singleRowCount; + lookItemGUID = guid; + } + + if (lookEquipEvent != null) + { + lookEquipEvent(); + } + } + + public event Action RefreshBagEvent; + public void RefreshBagInfo() + { + if (RefreshBagEvent != null) + { + RefreshBagEvent(); + } + } + #endregion + + public void SetJumpToOneKeySell(Transform parent) + { + var goEffect = AchievementGuideEffectPool.Require(1); + goEffect.transform.SetParentEx(parent, Vector3.zero, Quaternion.identity, Vector3.one); + AchievementGoto.guideAchievementId = 0; + } + + #region 鐗╁搧浣跨敤蹇嵎鎻愮ず + + private int cacheMapId = 0; + public event Action<PackType, string> itemUseAct; + private Dictionary<int, int> itemUseTypeDict = new Dictionary<int, int>(); //key SkillTypeID,value 浣跨敤鐗╁搧鐨処D + private void OnStageLoadFinish() + { + itemUseTypeDict.Clear(); + if (PlayerDatas.Instance.baseData.MapID == cacheMapId) + { + return; + } + + cacheMapId = PlayerDatas.Instance.baseData.MapID; + UpdateDungeonDanUse(); + UpdateDungeonUse(); + SinglePack singlePack = GetSinglePack(PackType.Item); + foreach (int itemId in itemUseTypeDict.Values) + { + var modellist = singlePack.GetItemsById(itemId); + if (modellist.Count > 0) + { + ItemModel itemModel = modellist[0]; + bool isExist = StatusMgr.Instance.IsExist(PlayerDatas.Instance.hero.ServerInstID, itemModel.config.AddSkill1); + DebugEx.Log("Buff鏄惁瀛樺湪" + isExist); + if (itemUseAct != null && !isExist) + { + itemUseAct(PackType.Item, itemModel.guid); + } + } + } + } + + private void AddItemUseTypeDict(int id) + { + SkillConfig skillConfig = GetSkillConfig(id); + int itemCount = GetItemCountByID(PackType.Item, id); + if (skillConfig != null && itemCount > 0) + { + if (!itemUseTypeDict.ContainsKey(skillConfig.SkillTypeID)) + { + itemUseTypeDict.Add(skillConfig.SkillTypeID, id); + } + else + { + SkillConfig preSkillConfig = GetSkillConfig(itemUseTypeDict[skillConfig.SkillTypeID]); + if (skillConfig.SkillLV > preSkillConfig.SkillLV) + { + itemUseTypeDict[skillConfig.SkillTypeID] = id; + } + } + } + } + + private void UpdateDungeonDanUse() + { + int mapId = PlayerDatas.Instance.baseData.MapID; + int[] useDrugs = GetDrugIDListByDungeonID(mapId); + if (useDrugs == null) return; + + for (int i = 0; i < useDrugs.Length; i++) + { + int id = useDrugs[i]; + AddItemUseTypeDict(id); + } + } + + private void UpdateDungeonUse() + { + int mapId = PlayerDatas.Instance.baseData.MapID; + if (!dungeonUseDict.ContainsKey(mapId)) return; + + List<int> useIdlist = dungeonUseDict[mapId]; + for (int i = 0; i < useIdlist.Count; i++) + { + int id = useIdlist[i]; + AddItemUseTypeDict(id); + } + } + + public SkillConfig GetSkillConfig(int itemId) + { + ItemConfig itemConfig = ItemConfig.Get(itemId); + SkillConfig skillConfig = SkillConfig.Get(itemConfig.AddSkill1); + return skillConfig; + } + + public int GetDungeonIDByDrugID(int drugID) + { + int dungeonID = 0; + //DrugToDungeonDict.TryGetValue(drugID, out dungeonID); + return dungeonID; + } + + public int[] GetDrugIDListByDungeonID(int dungeonID) + { + int[] drugIDlist = null; + DungeonToDrugDict.TryGetValue(dungeonID, out drugIDlist); + return drugIDlist; + } + #endregion + + #region 鍒ゆ柇鐗╁搧鏄惁杈惧埌浣跨敤涓婇檺 + public bool IsReachUseLimit(string guid, out ulong count) + { + count = 0; + ItemModel itemModel = GetItemByGuid(guid); + if (itemModel == null) return false; + + AttrFruitConfig fruitConfig = AttrFruitConfig.Get(itemModel.itemId); + int haveUseCnt = GetItemUsedTimesToday(itemModel.itemId); + int sumHaveUseCnt = GetItemTotalUsedTimes(itemModel.itemId); + count = (ulong)itemModel.count; + bool isReach = false; + int remainDayCnt = 0; + if (itemModel.config.MaxSkillCnt > 0) + { + remainDayCnt = itemModel.config.MaxSkillCnt - haveUseCnt; + if (itemModel.count > remainDayCnt) + { + count = (ulong)remainDayCnt; + } + } + + int remainSumCnt = 0; + if (fruitConfig != null) + { + remainSumCnt = fruitConfig.basicUseLimit - sumHaveUseCnt; + if (remainSumCnt <= remainDayCnt && itemModel.count > remainSumCnt) + { + count = (ulong)remainSumCnt; + } + } + + if (count < (ulong)itemModel.count) + { + isReach = true; + } + + return isReach; + } + #endregion + + #region 鐗╁搧鍚炲櫖閫昏緫澶勭悊 + public EquipColorType colorType { get; private set; } + public event Action<EquipColorType> RefreshColorSelectAct; + public event Action RefreshEquipDecomNumAct; + public int[] defaultUnSelectlist { get; private set; } + + public int GetBetterEquipCount(List<ItemModel> itemModels) + { + if (itemModels.IsNullOrEmpty()) + { + return 0; + } + + var count = 0; + foreach (var item in itemModels) + { + if (ItemLogicUtility.Instance.IsFightUp(item.itemId, item.score) == 1) + { + count += item.count; + } + } + return count; + } + + public void SetColorSelect(EquipColorType type) + { + colorType = type; + + if (RefreshColorSelectAct != null) + { + RefreshColorSelectAct(type); + } + SendEquipDevourRecordQuest(); + EquipDecomRedCtrl(); + } + + public List<int> devourPlacelist { get; private set; } + public int devourRedpointLevel { get; private set; } + public int minDevourEquipNum { get; private set; } + public void SetDevourEquipPlace() + { + devourPlacelist = new List<int>(); + FuncConfigConfig funcConfig = FuncConfigConfig.Get("PetAbsorbType"); + int[] placeArray = ConfigParse.GetMultipleStr<int>(funcConfig.Numerical1); + for (int i = 0; i < placeArray.Length; i++) + { + devourPlacelist.Add(placeArray[i]); + } + devourRedpointLevel = int.Parse(funcConfig.Numerical2); + minDevourEquipNum = int.Parse(funcConfig.Numerical3); + } + + List<ItemModel> devourModellist = new List<ItemModel>(); + List<ItemModel> orderDevourModellist = new List<ItemModel>(); + public List<ItemModel> GetDevourModellist() + { + SinglePack singlePack = GetSinglePack(PackType.Item); + if (singlePack == null) return null; + + devourModellist.Clear(); + orderDevourModellist.Clear(); + foreach (var model in singlePack.GetAllItems().Values) + { + if (model.config.Type == 29) + { + devourModellist.Add(model); + } + else + { + if (devourPlacelist.Contains(model.config.EquipPlace)) + { + if (GeneralDefine.equipDecomposeScreen.Contains(model.config.ItemColor)) + { + devourModellist.Add(model); + } + } + } + + } + orderDevourModellist.AddRange(devourModellist); + orderDevourModellist.Sort(CompareByColor); + return orderDevourModellist; + } + + public int CompareByColor(ItemModel start, ItemModel next) + { + bool typeX = start.config.Type == 29 ? true : false; + bool typeY = next.config.Type == 29 ? true : false; + + if (typeX.CompareTo(typeY) != 0) return -typeX.CompareTo(typeY); + + int colorX = start.config.ItemColor; + int colorY = next.config.ItemColor; + if (colorX.CompareTo(colorY) != 0) return colorX.CompareTo(colorY); + + int startIndex = devourModellist.IndexOf(start); + int nextIndex = devourModellist.IndexOf(next); + if (startIndex.CompareTo(nextIndex) != 0) return startIndex.CompareTo(nextIndex); + + return 0; + } + + public List<ItemModel> GetCanDevourModellist() + { + List<ItemModel> canDevourModellist = new List<ItemModel>(); + SinglePack singlePack = GetSinglePack(PackType.Item); + if (singlePack == null || colorType == EquipColorType.None) + { + if (RefreshEquipDecomNumAct != null) + { + RefreshEquipDecomNumAct(); + } + return null; + } + + foreach (var model in singlePack.GetAllItems().Values) + { + if (model.config.Type == 29) + { + if (!defaultUnSelectlist.Contains(model.itemId)) + { + canDevourModellist.Add(model); + } + } + else + { + if (IsCanDevour(model)) + { + canDevourModellist.Add(model); + } + } + } + + if (RefreshEquipDecomNumAct != null) + { + RefreshEquipDecomNumAct(); + } + + return canDevourModellist; + } + + public bool IsCanDevour(ItemModel model) + { + if (devourPlacelist.Contains(model.config.EquipPlace)) + { + if (GeneralDefine.equipDecomposeScreen.Contains(model.config.ItemColor)) + { + var eatEquipConfig = PetEatEquipConfig.GetEquipColorAndEquipClass(model.config.ItemColor, model.config.LV); + if (eatEquipConfig == null) return false; + + if (ItemLogicUtility.Instance.IsFightUp(model.itemId, model.score) != 1 && !model.isAuction) + { + if (model.config.ItemColor <= (int)colorType) + { + return true; + } + } + } + } + + return false; + } + + public bool IsMaxDecomLv(int decomLv, out int realLv) + { + realLv = decomLv; + var decomlist = EquipDeComposeConfig.GetValues(); + if (decomLv > decomlist[decomlist.Count - 1].LV) + { + realLv = decomlist[decomlist.Count - 1].LV; + return true; + } + + return false; + } + + public List<ItemModel> selectDevourlist = new List<ItemModel>(); + public void GetSelectDevourList() + { + selectDevourlist.Clear(); + List<ItemModel> itemModels = GetCanDevourModellist(); + if (itemModels != null) + { + selectDevourlist.AddRange(itemModels); + } + } + + public void RefreshGetNewItem(ItemModel model) + { + if (model == null) return; + + if (CheckIsReachDevourCondi(model)) + { + selectDevourlist.Add(model); + if (RefreshEquipDecomNumAct != null) + { + RefreshEquipDecomNumAct(); + } + } + } + + public void AddSelectDevourModellist(ItemModel model) + { + selectDevourlist.Add(model); + if (RefreshEquipDecomNumAct != null) + { + RefreshEquipDecomNumAct(); + } + } + + public bool CheckIsReachDevourCondi(ItemModel model) + { + if (model.config.Type == 29) + { + if (!defaultUnSelectlist.Contains(model.itemId)) + { + return true; + } + return false; + } + else + { + if (IsCanDevour(model)) + { + return true; + } + + } + return false; + } + + public void RemoveSelectDevourModellist(ItemModel model) + { + if (selectDevourlist.Contains(model)) + { + selectDevourlist.Remove(model); + } + if (RefreshEquipDecomNumAct != null) + { + RefreshEquipDecomNumAct(); + } + } + + public Dictionary<int, int> GetDecomAttrDictByLv(int decomLv) + { + if (decomposeAttrDict.ContainsKey(decomLv)) + { + return decomposeAttrDict[decomLv]; + } + + return null; + } + + public bool IsReachMinDecomposeNum() + { + List<ItemModel> itemModels = GetCanDevourModellist(); + if (itemModels != null && itemModels.Count >= minDecomposeNum) + { + return true; + } + return false; + } + + public void SendEquipdevourQuest(bool auto) + { + List<ItemModel> items = null; + if (auto) + { + items = GetCanDevourModellist(); + } + else + { + items = selectDevourlist; + } + + if (items == null || items.Count < minDecomposeNum || !ItemLogicUtility.Instance.isPackResetOk || SettingEffectMgr.Instance.isStartDecompose) return; + + SettingEffectMgr.Instance.isStartDecompose = true; + isAutoDecompose = auto; + recordAutoDecomNum = Math.Min(items.Count, 100); + var package = new CA32C_tagCMEquipDecompose(); + var indexLists = new ushort[recordAutoDecomNum]; + var idlist = new uint[recordAutoDecomNum]; + for (int i = 0; i < recordAutoDecomNum; i++) + { + indexLists[i] = (ushort)items[i].gridIndex; + idlist[i] = (uint)items[i].itemId; + if ((items[i].config.EquipPlace == 0 && items[i].config.Type != 29)) + { + return; + } + } + package.Count = (byte)indexLists.Length; + package.IndexList = indexLists; + package.ItemIDList = idlist; + package.IsAuto = (byte)(auto ? 1 : 0); + GameNetSystem.Instance.SendInfo(package); + } + + public void SendEquipDevourRecordQuest() + { + var record = StringUtility.Contact((int)colorType + 1, 1, 1); + var decomSet = new CA32D_tagCMDecomposeSeting(); + decomSet.Seting = uint.Parse(record); + GameNetSystem.Instance.SendInfo(decomSet); + } + + public int decomposeLv { get; private set; } + public int decomposeExp { get; private set; } + public int decomposeProgress { get; private set; } + public int addDecomposeExp { get; private set; } + public int minDecomposeNum { get; private set; } + public bool isAutoDecompose { get; set; } + public int recordAutoDecomNum { get; private set; } + public DecomposeGetMatInfo[] getItems { get; private set; } + + public event Action RefreshDecomAttrAct; + public void GetServerDecomposeSet(HA31C_tagMCEquipDecomposeInfo info) + { + addDecomposeExp = 0; + int realLv = info.LV + 1; + bool isMax = IsMaxDecomLv(realLv, out realLv); + if (realLv == decomposeLv) + { + addDecomposeExp = (int)info.Exp - decomposeExp; + } + else + { + for (int i = decomposeLv; i <= realLv; i++) + { + var deComposeConfig = EquipDeComposeConfig.Get(i); + if (i == decomposeLv) + { + addDecomposeExp = deComposeConfig.UpNeedExp - decomposeExp; + } + else if (i == realLv) + { + addDecomposeExp += (int)info.Exp; + } + else + { + addDecomposeExp += deComposeConfig.UpNeedExp; + } + } + } + + decomposeLv = realLv; + decomposeExp = (int)info.Exp; + decomposeProgress = info.DecomposeCnt; + getItems = JsonMapper.ToObject<DecomposeGetMatInfo[]>(info.GetItemData); + + if (info.Seting != 0) + { + string decomSetStr = info.Seting.ToString(); + string colorStr = decomSetStr.Substring(0, 1); + colorType = (EquipColorType)(int.Parse(colorStr) - 1); + string lvStr = decomSetStr.Substring(1, decomSetStr.Length - 2); + } + if (RefreshDecomAttrAct != null) + { + RefreshDecomAttrAct(); + } + } + /// <summary> + /// 璁剧疆鑾峰緱鐐间腹鏉愭枡鐨勫睍绀烘暟鎹� + /// </summary> + /// <param name="getMatInfos"></param> + /// <returns></returns> + private List<DecomposeGetMatInfo> getMatInfos = new List<DecomposeGetMatInfo>(); + public List<DecomposeGetMatInfo> SetShowMatInfo() + { + getMatInfos.Clear(); + int sumMatCnt = 0; + if (getItems != null) + { + for (int i = 0; i < getItems.Length; i++) + { + if (getItems[i].Count > 0) + { + sumMatCnt += getItems[i].Count; + } + else + { + sumMatCnt += 1; + } + } + } + + if (sumMatCnt > 5) + { + for (int i = 0; i < getItems.Length; i++) + { + getMatInfos.Add(getItems[i]); + } + } + else + { + if (getItems != null) + { + for (int i = 0; i < getItems.Length; i++) + { + //if (getItems[i].Count > 0) + //{ + // for (int j = 0; j < getItems[i].Count; j++) + // { + // DecomposeGetMatInfo matInfo = new DecomposeGetMatInfo(); + // matInfo.ItemID = getItems[i].ItemID; + // matInfo.Count = 1; + // matInfo.IsSuite = getItems[i].IsSuite; + // matInfo.UserData = getItems[i].UserData; + // getMatInfos.Add(matInfo); + // } + //} + //else + { + getMatInfos.Add(getItems[i]); + } + } + } + } + return getMatInfos; + } + + public enum EquipColorType + { + None = 0, + White = 1, + Blue = 2, + Purple = 3, + Orange = 4, + Red = 5, + //鍚庣画IL寮�鍙戞坊鍔犻璁� + default1, + default2, + default3, + default4, + All = 10, + } + + public class DecomposeGetMatInfo + { + public int ItemID; + public int Count; + public int IsSuite; + public string UserData; + } + #endregion + + #region 涓硅嵂閫昏緫澶勭悊 + + private int CompareMakeDrug(AttrFruitConfig start, AttrFruitConfig end) + { + ItemConfig configS = ItemConfig.Get(start.ID); + ItemConfig configE = ItemConfig.Get(end.ID); + if (configS.RealmLimit.CompareTo(configE.RealmLimit) != 0) + { + return configS.RealmLimit.CompareTo(configE.RealmLimit); + } + if (configS.LV.CompareTo(configE.LV) != 0) + { + return configS.LV.CompareTo(configE.LV); + } + + int x = makeDruglist.IndexOf(start); + int y = makeDruglist.IndexOf(end); + if (x.CompareTo(y) != 0) x.CompareTo(y); + + return 0; + } + + List<AttrFruitConfig> drugOrderlist = new List<AttrFruitConfig>(); + List<AttrFruitConfig> haveDruglist = new List<AttrFruitConfig>(); + public List<AttrFruitConfig> GetDrugOrderByCnt() + { + drugOrderlist.Clear(); + haveDruglist.Clear(); + drugOrderlist.AddRange(makeDruglist); + drugOrderlist.Sort(CompareByIsHave); + for (int i = 0; i < drugOrderlist.Count; i++) + { + if (IsHaveDrugUse(drugOrderlist[i])) + { + haveDruglist.Add(drugOrderlist[i]); + } + } + haveDruglist.Sort(CompareMakeDrug); + for (int i = 0; i < haveDruglist.Count; i++) + { + drugOrderlist[i] = haveDruglist[i]; + } + + return drugOrderlist; + } + + public bool CheckIsDrugById(int itemId) + { + for (int i = 0; i < makeDruglist.Count; i++) + { + if (makeDruglist[i].ID == itemId) + { + return true; + } + } + return false; + } + + public int CompareByIsHave(AttrFruitConfig start, AttrFruitConfig end) + { + bool isHaveStart = IsHaveDrugUse(start); + bool isHaveEnd = IsHaveDrugUse(end); + if (isHaveStart.CompareTo(isHaveEnd) != 0) return -isHaveStart.CompareTo(isHaveEnd); + + //isHaveStart = IsHaveDrugRecycle(start); + //isHaveEnd = IsHaveDrugRecycle(end); + //if (isHaveStart.CompareTo(isHaveEnd) != 0) return -isHaveStart.CompareTo(isHaveEnd); + + isHaveStart = GetItemCountByID(PackType.Item, start.ID) > 0 ? true : false; + isHaveEnd = GetItemCountByID(PackType.Item, end.ID) > 0 ? true : false; + if (isHaveStart.CompareTo(isHaveEnd) != 0) return isHaveStart.CompareTo(isHaveEnd); + + isHaveStart = IsReachMaxUseDrug(start); + isHaveEnd = IsReachMaxUseDrug(end); + if (isHaveStart.CompareTo(isHaveEnd) != 0) return isHaveStart.CompareTo(isHaveEnd); + + int x = makeDruglist.IndexOf(start); + int y = makeDruglist.IndexOf(end); + if (x.CompareTo(y) != 0) return x.CompareTo(y); + return 0; + } + + public bool IsHaveDrugUse(AttrFruitConfig fruitConfig) + { + if (!IsReachMaxUseDrug(fruitConfig)) + { + return GetItemCountByID(PackType.Item, fruitConfig.ID) > 0 ? true : false; + } + + return false; + } + + public bool IsHaveDrugRecycle(AttrFruitConfig fruitConfig) + { + if (IsReachMaxUseDrug(fruitConfig)) + { + return GetItemCountByID(PackType.Item, fruitConfig.ID) > 0 ? true : false; + } + return false; + } + + public bool IsReachMaxUseDrug(AttrFruitConfig fruitConfig) + { + if (fruitConfig == null) + { + return false; + } + + if (fruitConfig.FuncID == 2) + { + AlchemyDrugUseLimit drugUseLimit; + if (alchemyModel.TryGetAlchemyUseLimit(fruitConfig.ID, out drugUseLimit)) + { + return drugUseLimit.IsReachLimit(); + } + } + + int useNum = GetItemTotalUsedTimes(fruitConfig.ID); + if (useNum >= fruitConfig.basicUseLimit) + { + return true; + } + return false; + } + #endregion + + //鑾峰彇鑳屽寘涓殑涓�浠跺彲鎷嶅崠鐗╁搧 浼樺厛鍏朵粬鑱屼笟 + public string GetAuctionEquip() + { + var itemPackage = GetSinglePack(PackType.Item); + var allItems = itemPackage.GetAllItems(); + + var guid = string.Empty; + List<string> guidList = new List<string>(); + foreach (var item in allItems.Values) + { + var isAuction = item.isAuction; + if (isAuction && ItemLogicUtility.Instance.IsRealmEquip(item.itemId)) + { + if (!ItemLogicUtility.Instance.IsJobCompatibleItem(item.itemId)) + { + return item.guid; + } + else + { + if (guid != string.Empty) + continue; + guid = item.guid; + } + } + } + return guid; + } + } +} -- Gitblit v1.8.0