using System; using System.Collections.Generic; using System.Linq; using TableConfig; namespace Snxxz.UI { public class MarketModel : Model, IBeforePlayerDataInitialize { public override void Init() { bagItems = new List(); marketCfgDict = new Dictionary(); marketDealItems = new List(); ParseConfig(); } public override void UnInit() { } public void OnBeforePlayerDataInitialize() { PlayerDatas.Instance.market.ClearMarketData(); } public Dictionary> queryMarketItemList = new Dictionary>(); public event Action OnRefreshQueryMarketItem; public void OnRefreshData(H1B02_tagBourseItemOnSaleResult vNetData) { if (vNetData.QueryType == 255) { foreach (uint type in queryMarketItemList.Keys) { List list = queryMarketItemList[type]; for (int i = 0; i < list.Count; i++) { if (list[i].ItemGUID == vNetData.ItemList[0].ItemGUID) { MarketItemData data = list[i]; list.RemoveAt(i); data = null; break; } } } } else { List list = null; queryMarketItemList.TryGetValue(vNetData.QueryType, out list); if (list != null) { for (int i = 0; i < vNetData.ItemCount; i++) { if (i < list.Count) { SetMarketItemData(list[i], vNetData.ItemList[i]); } else { MarketItemData data = new MarketItemData(); SetMarketItemData(data, vNetData.ItemList[i]); list.Add(data); } } for (int i = list.Count - 1; i >= vNetData.ItemList.Length; i--) { MarketItemData data = list[i]; list.RemoveAt(i); data = null; } } else { list = new List(); for (int i = 0; i < vNetData.ItemCount; i++) { MarketItemData data = new MarketItemData(); SetMarketItemData(data, vNetData.ItemList[i]); list.Add(data); } queryMarketItemList.Add(vNetData.QueryType, list); } } if (OnRefreshQueryMarketItem != null) OnRefreshQueryMarketItem(); } private void SetMarketItemData(MarketItemData data, H1B02_tagBourseItemOnSaleResult.tagBourseItem source) { data.ItemGUID = source.ItemGUID; data.PlayerID = source.PlayerID; data.ItemTypeID = source.ItemTypeID; data.PriceType = source.PriceType; data.PriceCount = source.PriceCount; data.Count = source.Count; data.UserDataLen = source.UserDataLen; data.UserData = source.UserData; data.NeadPwd = source.NeadPwd; data.EquipGS = source.EquipGS; } #region 物品最新成交价 private Dictionary itemDealPriceDic = new Dictionary(); public event Action OnRefreshItemDealPrice; public void OnRefreshData(HA9AC_tagGCBourseItemPrice vNetData) { if (itemDealPriceDic.ContainsKey(vNetData.ItemID)) { itemDealPriceDic[vNetData.ItemID] = vNetData.Price; } else { itemDealPriceDic.Add(vNetData.ItemID, vNetData.Price); } if (OnRefreshItemDealPrice != null) OnRefreshItemDealPrice((int)vNetData.ItemID); } public uint GetItemDealPrice(uint itemID) { if (itemDealPriceDic.ContainsKey(itemID)) { return itemDealPriceDic[itemID]; } return 0; } #endregion #region 配置 public int totalPutawayCnt { get; private set; } public int maxprice { get; private set; } public int minprice { get; private set; } public int dealRecordCnt { get; private set; } public List> fitters { get; private set; } private void ParseConfig() { var _funcCfg = Config.Instance.Get("BourseSaleLimit"); totalPutawayCnt = int.Parse(_funcCfg.Numerical1); _funcCfg = Config.Instance.Get("BoursePriceLimit"); maxprice = int.Parse(_funcCfg.Numerical2); minprice = int.Parse(_funcCfg.Numerical1); _funcCfg = Config.Instance.Get("BourseMaxRecord"); dealRecordCnt = int.Parse(_funcCfg.Numerical1); _funcCfg = Config.Instance.Get("BourseQuality"); string[] _array1 = ConfigParse.GetMultipleStr(_funcCfg.Numerical1); fitters = new List>(); for (int i = 0; i < _array1.Length; i++) { string[] _array2 = _array1[i].Split('_'); var _keyValuePair = new KeyValuePair(int.Parse(_array2[0]), int.Parse(_array2[1])); fitters.Add(_keyValuePair); } var _list = Config.Instance.GetAllValues(); for (int i = 0; i < _list.Count; i++) { marketCfgDict.Add(_list[i].type, _list[i]); } } #endregion public int m_AchievementIndex = -1; #region 集市 public int presentType = -1; public int presentItemType = -1; public Dictionary marketCfgDict { get; private set; } public event Action RefreshSelectTypeEvent; public List marketDealItems { get; private set; } public void RefreshSelectType() { if (RefreshSelectTypeEvent != null) { RefreshSelectTypeEvent(); } } public void SendBuyMarketItem(string _guid, string _pwd) { CB502_tagCMPYBuyBourseItem _pak = new CB502_tagCMPYBuyBourseItem(); _pak.ItemGUID = _guid; _pak.Pwd = _pwd; GameNetSystem.Instance.SendInfo(_pak); } #endregion public Action OnFitterConfirmEvent; public Action OnFitterWinCloseEvent; public List bagItems { get; private set; } public bool CheckItemPutaway(ItemModel _itemModel, bool _showTip = false, bool ignoreCount = false) { if (PlayerDatas.Instance.market.putawayCnt >= totalPutawayCnt && !ignoreCount) { if (_showTip) { SysNotifyMgr.Instance.ShowTip("MarketNoPutaway4", totalPutawayCnt); } return false; } if (_itemModel.itemInfo.IsBind > 0) { if (_showTip) { SysNotifyMgr.Instance.ShowTip("MarketNoPutaway1"); } return false; } if (_itemModel.itemInfo.IsSuite > 0) { if (_showTip) { SysNotifyMgr.Instance.ShowTip("MarketNoPutaway3"); } return false; } ItemConfig cfg = Config.Instance.Get(_itemModel.itemInfo.ItemID); if (cfg.CanTrade != 1) { if (_showTip) { SysNotifyMgr.Instance.ShowTip("MarketCannotSell"); } return false; } if (cfg.ExpireTime > 0) { if (_showTip) { ScrollTip.ShowTip(Language.Get("TimelimitedIANA_Z")); } return false; } return true; } } }