//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, October 09, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; using Snxxz.UI; namespace Snxxz.UI { public class PutawayWin : Window { [SerializeField] Button closeBtn; [SerializeField] Button putawayBtn; [SerializeField] Button vippasBtn; [SerializeField] Text vippasBtnText; [SerializeField] Button soldNumBtn; [SerializeField] Text soldNum; #region 物品信息 [SerializeField] Image itemBg; [SerializeField] Image itemIcon; [SerializeField] Text itemCnt; [SerializeField] Text itemName; [SerializeField] Text itemSoldNum; [SerializeField] List starList; #endregion [SerializeField] Slider itemNumSlider; [SerializeField] Button addBtn; [SerializeField] Button reduceBtn; [SerializeField] Text itemNum; [SerializeField] PutawayItem[] queryItems; [SerializeField] GameObject noOtherTip; [SerializeField] Text putawayBtnText; [SerializeField] Text dealItemPrice; [SerializeField] Text dealItemTip; [SerializeField] Text taxTip; VipModel m_VipModel; VipModel vipModel { get { return m_VipModel ?? (m_VipModel = ModelCenter.Instance.GetModel()); } } MarketModel m_Model = null; MarketModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } ItemTipsModel _itemTipsModel; ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel()); } } PlayerPackModel _playerPack; PlayerPackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel()); } } [SerializeField] NumKeyBoard keyBoard; #region Built-in protected override void BindController() { } protected override void AddListeners() { itemNumSlider.onValueChanged.AddListener(OnItemNumChange); putawayBtn.onClick.AddListener(OnPutawayBtn); vippasBtn.onClick.AddListener(OnVipPasBtn); closeBtn.onClick.AddListener(OnCloseBtn); soldNumBtn.onClick.AddListener(OnSoldNumClick); addBtn.onClick.AddListener(OnItemNumAdd); reduceBtn.onClick.AddListener(OnItemNumReduce); keyBoard.onValueChange.AddListener(OnNumKeyboardChange); keyBoard.onConfirm.AddListener((bool _isConfirm) => { if (_isConfirm) { keyBoard.gameObject.SetActive(false); } RefreshPriceCnt((int)PutawayData.Instance.priceCnt); }); } protected override void OnPreOpen() { if (PutawayData.Instance.itemModel != null) { CB503_tagCGPYQueryBourseItemOnSale querypack = new CB503_tagCGPYQueryBourseItemOnSale(); querypack.ItemID = (uint)PutawayData.Instance.itemModel.itemInfo.ItemID; querypack.ItemName = string.Empty; querypack.QueryType = 0; GameNetSystem.Instance.SendInfo(querypack); } model.OnRefreshQueryMarketItem += OnRefreshQueryMarketItem; PwdKeyboardWin.OnPwdWinClose += OnPwdWinClose; model.OnRefreshItemDealPrice += OnRefreshItemDealPrice; keyBoard.gameObject.SetActive(false); InitData(); OnRefreshItemDealPrice((int)PutawayData.Instance.itemModel.itemInfo.ItemID); } private void OnRefreshItemDealPrice(int itemid) { if (PutawayData.Instance.itemModel.itemInfo.ItemID == (uint)itemid) { uint price = model.GetItemDealPrice((uint)PutawayData.Instance.itemModel.itemInfo.ItemID); if (price == 0) { dealItemTip.text = Language.Get("Market_Text_21"); ItemConfig cfg = Config.Instance.Get(itemid); if (cfg != null) { dealItemPrice.text = cfg.GoldPrice.ToString(); } } else { dealItemTip.text = Language.Get("Market_Text_20"); if (price == 200000000) { dealItemPrice.text = "<1"; } else { dealItemPrice.text = price.ToString(); } } } } private void OnPwdWinClose(bool okClose) { if (!hasInBuying) { if (!PwdKeyboard.Instance.pwd.Equals(string.Empty) && PwdKeyboard.Instance.pwd.Length < 6) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Market_Text_26")); return; } PutawayData.Instance.pwd = PwdKeyboard.Instance.pwd; } else { hasInBuying = false; if (okClose) { pwd = PwdKeyboard.Instance.pwd; SendBuyPack(); } } } private void OnRefreshQueryMarketItem() { List list = null; noOtherTip.SetActive(true); model.queryMarketItemList.TryGetValue(0, out list); if (list != null) { var index = 0; for (int i = 0; i < list.Count; i++) { MarketItemData data = list[i]; if (data.PlayerID != PlayerDatas.Instance.baseData.PlayerID) { if (index < queryItems.Length) { queryItems[index].gameObject.SetActive(true); queryItems[index].Init(data, OnQueryItemClick); } index++; } } for (int i = index; i < 3; i++) { queryItems[i].gameObject.SetActive(false); } noOtherTip.SetActive(index == 0); } } #region 购买物品 private string pwd = string.Empty; private MarketItemData willBuyData = null; private bool hasInBuying = false; public void SendBuyPack() { if (willBuyData != null) { CB502_tagCMPYBuyBourseItem buypack = new CB502_tagCMPYBuyBourseItem(); buypack.ItemGUID = willBuyData.ItemGUID; buypack.Pwd = pwd; GameNetSystem.Instance.SendInfo(buypack); } } private void OnQueryItemClick(MarketItemData data) { willBuyData = data; ItemAttrData attrData = new ItemAttrData((int)data.ItemTypeID, false, data.Count, -1, 0, false, PackType.rptDeleted, "", ConfigParse.Analysis(data.UserData)); attrData.SetTipsFuncBtn(ItemWinBtnType.buy, OnItemBuyClick); itemTipsModel.SetItemTipsModel(attrData); } private void OnItemBuyClick(ItemWinBtnType type, string s) { KnapSackEventMgr.Instance.HideItemPopWin(); switch (type) { case ItemWinBtnType.buy: { if (UIHelper.GetMoneyCnt(willBuyData.PriceType) < willBuyData.PriceCount) { SysNotifyMgr.Instance.ShowTip("NoEnoughMoney1"); return; } int gridCnt = playerPack.GetReaminGridCount(PackType.rptItem); if (gridCnt < 1) { SysNotifyMgr.Instance.ShowTip("BourseBagfull"); return; } if (willBuyData.NeadPwd == 1) { PwdKeyboard.Instance.pwd = string.Empty; hasInBuying = true; WindowCenter.Instance.Open(); } else { pwd = string.Empty; SendBuyPack(); } } break; } } #endregion protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { model.OnRefreshQueryMarketItem -= OnRefreshQueryMarketItem; PwdKeyboardWin.OnPwdWinClose -= OnPwdWinClose; model.OnRefreshItemDealPrice -= OnRefreshItemDealPrice; } #endregion private void OnCloseBtn() { CloseImmediately(); } private void OnSoldNumClick() { keyBoard.min = (uint)model.minprice; keyBoard.max = (uint)model.maxprice - 1; keyBoard.gameObject.SetActive(true); } private void InitData() { for (int i = 0; i < queryItems.Length; i++) { queryItems[i].gameObject.SetActive(false); } noOtherTip.SetActive(true); if (PutawayData.Instance.itemModel == null) { return; } ItemConfig cfg = Config.Instance.Get((int)PutawayData.Instance.itemModel.itemInfo.ItemID); if (cfg != null) { var _itemColor = cfg.ItemColor; if (cfg.Type == 111)//翅膀 { _itemColor = UIHelper.GetItemColor(cfg.ID, PutawayData.Instance.itemModel.useDataDict); } itemBg.SetItemBackGround(_itemColor); itemIcon.SetSprite(cfg.IconKey); itemName.text = cfg.ItemName; bool _bright = (itemName is RichText) ? (itemName as RichText).colorType == RichText.ColorType.Bright : true; itemName.color = UIHelper.GetUIColor(_itemColor, _bright); } itemSoldNum.text = PutawayData.Instance.priceCnt.ToString(); for (int i = 0; i < starList.Count; i++) { if (i < cfg.StarLevel) { starList[i].gameObject.SetActive(true); } else { starList[i].gameObject.SetActive(false); } } int _Cnt = PutawayData.Instance.itemModel.itemInfo.ItemCount; if (_Cnt > 1) { itemCnt.gameObject.SetActive(true); itemNumSlider.gameObject.SetActive(true); itemCnt.text = _Cnt.ToString(); itemNumSlider.maxValue = _Cnt; itemNumSlider.minValue = 1; itemNumSlider.value = _Cnt; PutawayData.Instance.itemCnt = (ushort)_Cnt; } else { itemCnt.gameObject.SetActive(false); itemNumSlider.gameObject.SetActive(false); PutawayData.Instance.itemCnt = 1; } PutawayData.Instance.priceType = 1; putawayBtnText.text = UIHelper.ReplaceNewLine(Language.Get("Market_Text_17", model.totalPutawayCnt - PlayerDatas.Instance.market.putawayCnt)); int pwdVipLv = vipModel.GetPrivilegeVipLv(VipPrivilegeType.MarketPutawayPwd); vippasBtnText.text = UIHelper.ReplaceNewLine(Language.Get("Market_Text_16", pwdVipLv)); OnRefreshItemDealPrice((int)PutawayData.Instance.itemModel.itemInfo.ItemID); if (PlayerDatas.Instance.baseData.VIPLv < pwdVipLv) { vippasBtn.interactable = false; } else { vippasBtn.interactable = true; } if (PlayerDatas.Instance.baseData.VIPLv == 0) { int _nextVip = 1; int _presentTax = VipPrivilegeConfig.GetVipPrivilegeData(VipPrivilegeType.TradeTax, 0); for (int i = 1; i <= vipModel.vipMaxLv; i++) { if (VipPrivilegeConfig.GetVipPrivilegeData(VipPrivilegeType.TradeTax, i) < _presentTax) { _nextVip = i; break; } } taxTip.text = Language.Get("Market_Text_22", _presentTax / 100, _nextVip, VipPrivilegeConfig.GetVipPrivilegeData(VipPrivilegeType.TradeTax, _nextVip) / 100); } else { taxTip.text = Language.Get("Market_Text_14", PlayerDatas.Instance.baseData.VIPLv, VipPrivilegeConfig.GetVipPrivilegeData(VipPrivilegeType.TradeTax, PlayerDatas.Instance.baseData.VIPLv) / 100); } RefreshItemNumCnt(); } private void OnVipPasBtn() { if (vipModel.GetVipPrivilegeCnt(VipPrivilegeType.MarketPutawayPwd) > 0) { PwdKeyboard.Instance.pwd = PutawayData.Instance.pwd; WindowCenter.Instance.Open(); } else { SysNotifyMgr.Instance.ShowTip("VipLevel"); } } private void OnNumKeyboardChange() { int arg1 = int.Parse(keyBoard.Value); //if (arg1 >= model.maxprice) //{ // arg1 = model.maxprice - 1; //} PutawayData.Instance.priceCnt = (uint)Mathf.Max(arg1, model.minprice); RefreshPriceCnt(arg1); //keyBoard.Value = arg1.ToString(); } private void RefreshPriceCnt(int _count) { if (_count == 0) { soldNum.text = Language.Get("Market_Text_18"); itemSoldNum.text = (0).ToString(); } else { soldNum.text = _count.ToString(); int singlePrice = (int)PutawayData.Instance.priceCnt / (int)PutawayData.Instance.itemCnt; if (singlePrice < 1) { itemSoldNum.text = "<1"; } else { itemSoldNum.text = singlePrice.ToString(); } } } private void OnItemNumReduce() { if (itemNumSlider.value > 1) { itemNumSlider.value -= 1; } } private void OnItemNumAdd() { if (itemNumSlider.value < itemNumSlider.maxValue) { itemNumSlider.value += 1; } } private void OnItemNumChange(float arg0) { int _Cnt = (int)arg0; PutawayData.Instance.itemCnt = (ushort)_Cnt; RefreshItemNumCnt(); } private void RefreshItemNumCnt() { itemCnt.text = PutawayData.Instance.itemCnt.ToString(); itemNum.text = PutawayData.Instance.itemCnt.ToString(); RefreshPriceCnt((int)PutawayData.Instance.priceCnt); } private void OnPutawayBtn() { if (PutawayData.Instance.itemModel == null) return; if (PlayerDatas.Instance.market.putawayCnt >= model.totalPutawayCnt) { SysNotifyMgr.Instance.ShowTip("MarketNoPutaway4", model.totalPutawayCnt); return; } if (PutawayData.Instance.priceCnt == 0) { SysNotifyMgr.Instance.ShowTip("Market_Price_Null"); return; } if (PutawayData.Instance.pwd.Equals(string.Empty)) { SendPutawayPack(); return; } ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Market_Text_29", PutawayData.Instance.pwd), (bool isOk) => { if (isOk) { SendPutawayPack(); } }); } private void SendPutawayPack() { CB501_tagCMPYPlayerSellBourseItem putawaypack = new CB501_tagCMPYPlayerSellBourseItem(); putawaypack.ItemIndex = (byte)PutawayData.Instance.itemModel.itemInfo.ItemPlace; putawaypack.Count = PutawayData.Instance.itemCnt; putawaypack.PriceCount = PutawayData.Instance.priceCnt; putawaypack.PriceType = PutawayData.Instance.priceType; putawaypack.Pwd = PutawayData.Instance.pwd; GameNetSystem.Instance.SendInfo(putawaypack); CloseImmediately(); } } }