//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, October 09, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Snxxz.UI; using UnityEngine.Serialization; namespace Snxxz.UI { [XLua.Hotfix] public class PutawayWin : Window { [SerializeField] Button m_Close; [SerializeField] Button m_Putaway; [SerializeField] Button m_SetPassword; [SerializeField] Text m_SetPasswordTxt; [SerializeField] Button m_OpenKeyboard; [SerializeField] Text m_TargetPrice; [SerializeField] Image m_ItemBG; [SerializeField] Image m_ItemIcon; [SerializeField] Text m_ItemCount; [SerializeField] Text m_ItemName; [SerializeField] Text m_SinglePrice; [SerializeField] List m_Stars; [SerializeField] Slider m_ItemCountSlider; [SerializeField] Button m_Add; [SerializeField] Button m_Reduce; [SerializeField] Text m_PutawayItemCount; [SerializeField] PutawayItem[] m_PutawayItems; [SerializeField] Transform m_ContainerNoneItems; [SerializeField] Text m_PutawayBtnTxt; [SerializeField] Text m_DealPrice; [SerializeField] Text m_DealItemTip; [SerializeField] Text m_TaxTip; [SerializeField] NumKeyBoard m_Keyboard; [SerializeField] ClickScreenOtherSpace m_ClickSpace; VipModel vipModel { get { return ModelCenter.Instance.GetModel(); } } MarketModel model { get { return ModelCenter.Instance.GetModel(); } } ItemTipsModel itemTipsModel { get { return ModelCenter.Instance.GetModel(); } } PlayerPackModel packModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_ItemCountSlider.onValueChanged.AddListener(OnSliderValueChange); m_Putaway.onClick.AddListener(OnPutaway); m_SetPassword.onClick.AddListener(SetPassword); m_Close.onClick.AddListener(CloseClick); m_OpenKeyboard.onClick.AddListener(OpenKeyboard); m_Add.onClick.AddListener(Add); m_Reduce.onClick.AddListener(Reduce); m_Keyboard.onValueChange.AddListener(OnValueChange); m_Keyboard.onConfirm.AddListener((bool isOk) => { if (isOk) { PutawayData.Instance.priceCount = Mathf.Max(PutawayData.Instance.priceCount, model.minprice); m_Keyboard.gameObject.SetActive(false); } RefreshPriceCnt((int)PutawayData.Instance.priceCount, true); }); m_ClickSpace.AddListener(ClickSpace); } protected override void OnPreOpen() { if (PutawayData.Instance.itemModel != null) { CB503_tagCGPYQueryBourseItemOnSale pak = new CB503_tagCGPYQueryBourseItemOnSale(); pak.ItemID = (uint)PutawayData.Instance.itemModel.itemInfo.ItemID; pak.ItemName = string.Empty; pak.QueryType = 0; GameNetSystem.Instance.SendInfo(pak); } model.OnRefreshQueryMarketItem += DisplayPutawayItems; PwdKeyboardWin.OnPwdWinClose += OnPwdWinClose; model.OnRefreshItemDealPrice += OnRefreshItemDealPrice; m_Keyboard.gameObject.SetActive(false); Display(); 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) { m_DealItemTip.text = Language.Get("Market_Text_21"); var config = ItemConfig.Get(itemId); if (config != null) { m_DealPrice.text = config.GoldPrice.ToString(); } } else { m_DealItemTip.text = Language.Get("Market_Text_20"); m_DealPrice.text = price == 200000000 ? "<1" : price.ToString(); } } } private void OnPwdWinClose(bool isOk) { if (!inBuyingState) { 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.password = PwdKeyboard.Instance.pwd; } else { inBuyingState = false; if (isOk) { password = PwdKeyboard.Instance.pwd; SendBuyPack(); } } } private void DisplayPutawayItems() { List list = null; m_ContainerNoneItems.gameObject.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 < m_PutawayItems.Length) { m_PutawayItems[index].gameObject.SetActive(true); m_PutawayItems[index].Init(data, OnQueryItemClick); } index++; } } for (int i = index; i < 3; i++) { m_PutawayItems[i].gameObject.SetActive(false); } m_ContainerNoneItems.gameObject.SetActive(index == 0); } } #region 购买物品 private string password = string.Empty; private MarketItemData buyItem = null; private bool inBuyingState = false; public void SendBuyPack() { if (buyItem != null) { CB502_tagCMPYBuyBourseItem pak = new CB502_tagCMPYBuyBourseItem(); pak.ItemGUID = buyItem.ItemGUID; pak.Pwd = password; GameNetSystem.Instance.SendInfo(pak); } } private void OnQueryItemClick(MarketItemData data) { buyItem = data; ItemAttrData attrData = new ItemAttrData((int)data.ItemTypeID, false, data.Count, -1, 0, false, PackType.rptDeleted, "", 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(buyItem.PriceType) < buyItem.PriceCount) { SysNotifyMgr.Instance.ShowTip("NoEnoughMoney1"); return; } int gridCnt = packModel.GetReaminGridCount(PackType.rptItem); if (gridCnt < 1) { SysNotifyMgr.Instance.ShowTip("BourseBagfull"); return; } if (buyItem.NeadPwd == 1) { PwdKeyboard.Instance.pwd = string.Empty; inBuyingState = true; WindowCenter.Instance.Open(); } else { password = string.Empty; SendBuyPack(); } } break; } } #endregion protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { model.OnRefreshQueryMarketItem -= DisplayPutawayItems; PwdKeyboardWin.OnPwdWinClose -= OnPwdWinClose; model.OnRefreshItemDealPrice -= OnRefreshItemDealPrice; } #endregion private void OpenKeyboard() { m_Keyboard.min = 0; m_Keyboard.max = (uint)model.maxprice - 1; m_Keyboard.gameObject.SetActive(true); } private void Display() { for (int i = 0; i < m_PutawayItems.Length; i++) { m_PutawayItems[i].gameObject.SetActive(false); } m_ContainerNoneItems.gameObject.SetActive(true); if (PutawayData.Instance.itemModel == null) { return; } ItemConfig config = ItemConfig.Get((int)PutawayData.Instance.itemModel.itemInfo.ItemID); if (config != null) { var _itemColor = config.ItemColor; if (config.Type == 111)//翅膀 { _itemColor = UIHelper.GetItemColor(config.ID, PutawayData.Instance.itemModel.useDataDict); } m_ItemBG.SetItemBackGround(_itemColor); m_ItemIcon.SetSprite(config.IconKey); m_ItemName.text = config.ItemName; m_ItemName.color = UIHelper.GetUIColor(_itemColor, true); } m_SinglePrice.text = PutawayData.Instance.priceCount.ToString(); for (int i = 0; i < m_Stars.Count; i++) { if (i < config.StarLevel) { m_Stars[i].gameObject.SetActive(true); } else { m_Stars[i].gameObject.SetActive(false); } } int _Cnt = PutawayData.Instance.itemModel.itemInfo.ItemCount; if (_Cnt > 1) { m_ItemCount.gameObject.SetActive(true); m_ItemCountSlider.gameObject.SetActive(true); m_ItemCount.text = _Cnt.ToString(); m_ItemCountSlider.maxValue = _Cnt; m_ItemCountSlider.minValue = 1; m_ItemCountSlider.value = _Cnt; PutawayData.Instance.itemCount = (ushort)_Cnt; } else { m_ItemCount.gameObject.SetActive(false); m_ItemCountSlider.gameObject.SetActive(false); PutawayData.Instance.itemCount = 1; } PutawayData.Instance.priceType = 1; m_PutawayBtnTxt.text = UIHelper.ReplaceNewLine(Language.Get("Market_Text_17", model.totalPutawayCnt - PlayerDatas.Instance.market.putawayCnt)); int pwdVipLv = vipModel.GetPrivilegeVipLv(VipPrivilegeType.MarketPutawayPwd); m_SetPasswordTxt.text = UIHelper.ReplaceNewLine(Language.Get("Market_Text_16", pwdVipLv)); OnRefreshItemDealPrice((int)PutawayData.Instance.itemModel.itemInfo.ItemID); if (PlayerDatas.Instance.baseData.VIPLv < pwdVipLv) { m_SetPassword.interactable = false; } else { m_SetPassword.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; } } m_TaxTip.text = Language.Get("Market_Text_22", _presentTax / 100, _nextVip, VipPrivilegeConfig.GetVipPrivilegeData(VipPrivilegeType.TradeTax, _nextVip) / 100); } else { m_TaxTip.text = Language.Get("Market_Text_14", PlayerDatas.Instance.baseData.VIPLv, VipPrivilegeConfig.GetVipPrivilegeData(VipPrivilegeType.TradeTax, PlayerDatas.Instance.baseData.VIPLv) / 100); } RefreshItemNumCnt(); } private void SetPassword() { if (vipModel.GetVipPrivilegeCnt(VipPrivilegeType.MarketPutawayPwd) > 0) { PwdKeyboard.Instance.pwd = PutawayData.Instance.password; WindowCenter.Instance.Open(); } else { SysNotifyMgr.Instance.ShowTip("VipLevel"); } } private void OnValueChange() { int result = int.Parse(m_Keyboard.Value); PutawayData.Instance.priceCount = result; RefreshPriceCnt((int)PutawayData.Instance.priceCount, false); } private void ClickSpace() { int result = int.Parse(m_Keyboard.Value); PutawayData.Instance.priceCount = Mathf.Max(result, model.minprice); RefreshPriceCnt((int)PutawayData.Instance.priceCount, true); } private void RefreshPriceCnt(int _count, bool verify) { if (_count == 0 && verify) { m_TargetPrice.text = Language.Get("Market_Text_18"); m_SinglePrice.text = (0).ToString(); } else { m_TargetPrice.text = _count.ToString(); int singlePrice = (int)PutawayData.Instance.priceCount / (int)PutawayData.Instance.itemCount; if (singlePrice < 1) { m_SinglePrice.text = "<1"; } else { m_SinglePrice.text = singlePrice.ToString(); } } } private void Reduce() { if (m_ItemCountSlider.value > 1) { m_ItemCountSlider.value -= 1; } } private void Add() { if (m_ItemCountSlider.value < m_ItemCountSlider.maxValue) { m_ItemCountSlider.value += 1; } } private void OnSliderValueChange(float arg0) { int _Cnt = (int)arg0; PutawayData.Instance.itemCount = (ushort)_Cnt; RefreshItemNumCnt(); } private void RefreshItemNumCnt() { m_ItemCount.text = PutawayData.Instance.itemCount.ToString(); m_PutawayItemCount.text = PutawayData.Instance.itemCount.ToString(); RefreshPriceCnt((int)PutawayData.Instance.priceCount, true); } private void OnPutaway() { if (PutawayData.Instance.itemModel == null) return; if (PlayerDatas.Instance.market.putawayCnt >= model.totalPutawayCnt) { SysNotifyMgr.Instance.ShowTip("MarketNoPutaway4", model.totalPutawayCnt); return; } if (PutawayData.Instance.priceCount == 0) { SysNotifyMgr.Instance.ShowTip("Market_Price_Null"); return; } if (PutawayData.Instance.password.Equals(string.Empty)) { SendPutawayPack(); return; } ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Market_Text_29", PutawayData.Instance.password), (bool isOk) => { if (isOk) { SendPutawayPack(); } }); } private void SendPutawayPack() { CB501_tagCMPYPlayerSellBourseItem pak = new CB501_tagCMPYPlayerSellBourseItem(); pak.ItemIndex = (byte)PutawayData.Instance.itemModel.itemInfo.ItemPlace; pak.Count = PutawayData.Instance.itemCount; pak.PriceCount = (uint)PutawayData.Instance.priceCount; pak.PriceType = PutawayData.Instance.priceType; pak.Pwd = PutawayData.Instance.password; GameNetSystem.Instance.SendInfo(pak); CloseImmediately(); } } }