using System.Collections; using System.Collections.Generic; using UnityEngine; using vnxbqy.UI; using System; using System.Text.RegularExpressions; public class ExchangeActiveTokenModel : Model, IPlayerLoginOk { private PackModel m_PackModel { get { return ModelCenter.Instance.GetModel(); } } private EquipStarModel m_EquipStarModel { get { return ModelCenter.Instance.GetModel(); } } private EquipModel m_EquipModel { get { return ModelCenter.Instance.GetModel(); } } private Dictionary m_RealmEquIsAllMaxStarDic = new Dictionary(); private int? m_MaxEquLv = null; public HashSet ChoseEquips { get; private set; } public int NewActivePoint { get; private set; } //指定物品ID兑换 private Dictionary m_ItemExcahngeActiveCountDic = new Dictionary(); //装备品质兑换 Dictionary FamilyDonateDict = new Dictionary(); public event Action RefreshActiveCanGetEvent; public event Action ExchangetSuccessEvent; public override void Init() { ChoseEquips = new HashSet(); //ParseConfig(); //m_PackModel.refreshItemCountEvent += RefreshRealmEquIsAllMaxStarDicAndRedPoint; } public override void UnInit() { //m_PackModel.refreshItemCountEvent -= RefreshRealmEquIsAllMaxStarDicAndRedPoint; } public void OnPlayerLoginOk() { //UpdateExchangeBtnRedPoint(); } #region 交换活跃度按钮红点 public const int ExchangeBtnRedPointID = 1070119; public Redpoint ExchangeBtnRedPoint = new Redpoint(10701, ExchangeBtnRedPointID); public void UpdateExchangeBtnRedPoint() { GetShowEquips(false); if (ChoseEquips.Count > 0) { ExchangeBtnRedPoint.state = RedPointState.Simple; } else { ExchangeBtnRedPoint.state = RedPointState.None; } } #endregion public void RefreshRealmEquIsAllMaxStarDicAndRedPoint(PackType type, int index, int itemId) { if (type != PackType.Equip && type != PackType.Item) { return; } int lv = ItemConfig.Get(itemId).LV; SetRealmEquIsAllMaxStar(lv); //foreach (var value in m_RealmEquIsAllMaxStarDic.Values) //{ // if (value) // { // UpdateExchangeBtnRedPoint(); // break; // } //} } //某个境界的装备是否满级 public void SetRealmEquIsAllMaxStar(int Lv) { Int2 equPos = new Int2(Lv, 1); bool bIsAllEquMaxStar = true; bIsAllEquMaxStar = true; for (int j = 1; j < 9; j++) { equPos.y = j; int posStarLevel = m_EquipStarModel.GetStarLevel(equPos); int equMaxStarLevel = m_EquipStarModel.GetEquipPositionMaxStarLevel(equPos); if (equMaxStarLevel > posStarLevel || equMaxStarLevel == 0) { bIsAllEquMaxStar = false; break; } } m_RealmEquIsAllMaxStarDic[Lv] = bIsAllEquMaxStar; } public void ReciveExchangeResult(HA502_tagMCFamilyActivityExchangeResult info) { NewActivePoint = (int)info.Point; WindowCenter.Instance.Open(); if (ExchangetSuccessEvent != null) { ExchangetSuccessEvent(); } } private bool IsBetterThanBodyEquip(ItemModel item) { if (item.config.EquipPlace == 0) { return false; } if (item.config.JobLimit != PlayerDatas.Instance.baseData.Job) { return false; } int score = 0; var pos = new Int2(item.config.LV, item.config.EquipPlace); var index = EquipSet.ClientPlaceToServerPlace(pos); var itemModel = m_PackModel.GetItemByIndex(PackType.Equip, index); if (itemModel == null) { score = 0; } else { score = itemModel.score; } if (score < item.score) { return true; } return false; } public void EquipCellClick(ItemModel item, Action CellAct) { if (ChoseEquips.Contains(item)) { ChoseEquips.Remove(item); } else { ChoseEquips.Add(item); } CellAct(); if (RefreshActiveCanGetEvent != null) { RefreshActiveCanGetEvent(); } } public int GetTotalActiveCount() { int totalCount = 0; foreach (var equip in ChoseEquips) { //指定物品ID兑换数量 if (m_ItemExcahngeActiveCountDic.ContainsKey(equip.itemId)) { totalCount += m_ItemExcahngeActiveCountDic[equip.itemId] * equip.count; continue; } //根据装备品质兑换 if (!FamilyDonateDict.ContainsKey(equip.config.ItemColor)) { continue; } if (equip.config.SuiteiD == 0) { totalCount += FamilyDonateDict[equip.config.ItemColor][0]; } else { totalCount += FamilyDonateDict[equip.config.ItemColor][1]; } } return totalCount; } public void ParseConfig() { FamilyDonateDict = new Dictionary(); var cfg = FuncConfigConfig.Get("FamilyDonate"); var _json = LitJson.JsonMapper.ToObject(cfg.Numerical1); foreach (var _key in _json.Keys) { var color = int.Parse(_key); FamilyDonateDict.Add(color, LitJson.JsonMapper.ToObject(_json[_key].ToJson())); } if (cfg.Numerical2 != string.Empty) { var res2 = cfg.Numerical2.Split('|'); for (int i = 0; i < res2.Length; i++) { var info = res2[i].Split('_'); m_ItemExcahngeActiveCountDic[int.Parse(info[0])] = int.Parse(info[1]); } } } public void SendExchangeRequest() { if (ChoseEquips.Count == 0) { return; } Action SendInfo = () => { var info = new CA606_tagCMFamilyActivityExchange(); info.Count = (byte)ChoseEquips.Count; info.IndexList = new ushort[info.Count]; info.ItemIDList = new uint[info.Count]; int i = 0; foreach (var equip in ChoseEquips) { info.IndexList[i] = (ushort)equip.gridIndex; info.ItemIDList[i] = (uint)equip.itemId; i++; } GameNetSystem.Instance.SendInfo(info); }; bool bIsHasBetterEquip = false; foreach (var equip in ChoseEquips) { if (IsBetterThanBodyEquip(equip)) { bIsHasBetterEquip = true; break; } } if (bIsHasBetterEquip) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("ExchangeActiveTokenWin_Tip_4"), (bIsExchange) => { if (bIsExchange) { SendInfo(); } }); } else { SendInfo(); } } public List GetShowEquips(bool bIsNeedSort = true) { ChoseEquips.Clear(); SinglePack.FilterParams par = new SinglePack.FilterParams(); par.qualitys = new List(); foreach (var color in FamilyDonateDict.Keys) { par.qualitys.Add(color); } par.itemTypes = new List() { 101, 102, 103, 104, 105, 106, 107, 108 }; var suitEquips = m_PackModel.GetItems(PackType.Item, par); //SetRealmEquIsAllMaxStarDic(); var playerJob = PlayerDatas.Instance.baseData.Job; //物品排序 for (int i = 0; i < suitEquips.Count; i++) { var iEqu = suitEquips[i]; if (!ItemLogicUtility.Instance.IsJobCompatibleItem(iEqu.itemId) && !iEqu.isAuction) { ChoseEquips.Add(iEqu); } if (!m_RealmEquIsAllMaxStarDic.ContainsKey(iEqu.config.LV)) { SetRealmEquIsAllMaxStar(iEqu.config.LV); } if (m_RealmEquIsAllMaxStarDic[iEqu.config.LV]) { if (!IsBetterThanBodyEquip(iEqu)) { ChoseEquips.Add(iEqu); } } if (!bIsNeedSort) { continue; } for (int j = i - 1; j >= 0; j--) { var jEqu = suitEquips[j]; bool bHasIEqu = ChoseEquips.Contains(iEqu); bool bHasJEqu = ChoseEquips.Contains(jEqu); if (!bHasIEqu && bHasJEqu) { break; } if (bHasIEqu && !bHasJEqu) { goto Swap; } if (iEqu.config.LV > jEqu.config.LV) { break; } if (iEqu.config.LV < jEqu.config.LV) { goto Swap; } if (iEqu.config.JobLimit > jEqu.config.JobLimit) { break; } if (iEqu.config.JobLimit < jEqu.config.JobLimit) { goto Swap; } if (iEqu.config.Type > jEqu.config.Type) { break; } if (iEqu.config.Type < jEqu.config.Type) { goto Swap; } if (iEqu.score >= jEqu.score) { break; } Swap: suitEquips[j + 1] = jEqu; suitEquips[j] = iEqu; } } //添加物品额外物体 foreach (var itemId in m_ItemExcahngeActiveCountDic.Keys) { suitEquips.AddRange(m_PackModel.GetItemsById(PackType.Item, itemId)); } return suitEquips; } }