using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
namespace Snxxz.UI
|
{
|
[XLua.LuaCallCSharp]
|
public class MarketModel : Model, IBeforePlayerDataInitialize
|
{
|
public override void Init()
|
{
|
bagItems = new List<ItemModel>();
|
marketCfgDict = new Dictionary<int, MarketConfig>();
|
marketDealItems = new List<MarketItemData>();
|
ParseConfig();
|
}
|
public override void UnInit()
|
{
|
}
|
public void OnBeforePlayerDataInitialize()
|
{
|
PlayerDatas.Instance.market.ClearMarketData();
|
}
|
public Dictionary<uint, List<MarketItemData>> queryMarketItemList = new Dictionary<uint, List<MarketItemData>>();
|
public event Action OnRefreshQueryMarketItem;
|
public void OnRefreshData(H1B02_tagBourseItemOnSaleResult vNetData)
|
{
|
if (vNetData.QueryType == 255) {
|
foreach (uint type in queryMarketItemList.Keys) {
|
List<MarketItemData> 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<MarketItemData> 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<MarketItemData>();
|
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.UserData = ConfigParse.Analysis(source.UserData);
|
data.NeadPwd = source.NeadPwd;
|
data.EquipGS = source.EquipGS;
|
}
|
#region 物品最新成交价
|
private Dictionary<uint, uint> itemDealPriceDic = new Dictionary<uint, uint>();
|
public event Action<int> 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<KeyValuePair<int, int>> fitters { get; private set; }
|
private void ParseConfig()
|
{
|
var _funcCfg = FuncConfigConfig.Get("BourseSaleLimit");
|
totalPutawayCnt = int.Parse(_funcCfg.Numerical1);
|
_funcCfg = FuncConfigConfig.Get("BoursePriceLimit");
|
maxprice = int.Parse(_funcCfg.Numerical2);
|
minprice = int.Parse(_funcCfg.Numerical1);
|
_funcCfg = FuncConfigConfig.Get("BourseMaxRecord");
|
dealRecordCnt = int.Parse(_funcCfg.Numerical1);
|
_funcCfg = FuncConfigConfig.Get("BourseQuality");
|
string[] _array1 = ConfigParse.GetMultipleStr(_funcCfg.Numerical1);
|
fitters = new List<KeyValuePair<int, int>>();
|
for (int i = 0; i < _array1.Length; i++)
|
{
|
string[] _array2 = _array1[i].Split('_');
|
var _keyValuePair = new KeyValuePair<int, int>(int.Parse(_array2[0]), int.Parse(_array2[1]));
|
fitters.Add(_keyValuePair);
|
}
|
var _list = Config.Instance.GetAllValues<MarketConfig>();
|
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<int,MarketConfig> marketCfgDict { get; private set; }
|
public event Action RefreshSelectTypeEvent;
|
public List<MarketItemData> 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<int> OnFitterConfirmEvent;
|
public Action OnFitterWinCloseEvent;
|
|
public List<ItemModel> 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 = ItemConfig.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;
|
}
|
}
|
}
|
|
|