using System; using System.Collections; using System.Collections.Generic; using System.Linq; using Games.GlobeDefine; using GCGame; using GCGame.Table; using Module.Log; using UnityEngine; public enum ITEM_TYPE { TYPE_INVALID = -1, TYPE_ITEM = 0, TYPE_FASHION, TYPE_FELLOW, TYPE_MOUNT } public enum DEADLINE_PRICE { PRICE_WEEK, PRICE_MONTH, PRICE_FOREVER } public class PriorityInfo { public short GoodsId; public short Priority; // 存储表格中商品优先级 上限是32767 若该表需要同步修改此处 public PriorityInfo() { GoodsId = GlobeVar.INVALID_ID; Priority = GlobeVar.INVALID_ID; } public PriorityInfo(short goodsId, short priority) { GoodsId = goodsId; Priority = priority; } } // 比较函数 left比right -1靠前 1靠后 public class PriorityInfoCompare : IComparer { public int Compare(PriorityInfo left, PriorityInfo right) { if (left.Priority == right.Priority) { // 优先级相同时 GoodsId靠前的优先级高 if (left.GoodsId < right.GoodsId) return -1; return 1; } // 优先级为-1不参与排序 排最后 if (left.Priority == GlobeVar.INVALID_ID) return 1; if (right.Priority == GlobeVar.INVALID_ID) return -1; // 比ShowPirority 小的靠前 if (left.Priority < right.Priority) return -1; return 1; } } public class YuanBaoShopLogic : UIControllerBase { public enum OPEN_TYPE { OPEN_INVALID = 0, OPEN_FUNCTION_BUTTON = 1, OPEN_CHRISTMAS = 2, OPEN_BEPOWER = 3, OPEN_ITEM_GET_PATH = 4 } private const int YUANBAO_SHOP_ID = 10001; private const int BANGYUANBAO_SHOP_ID = 10002; private static OPEN_TYPE m_YuanBaoShopOpenType = OPEN_TYPE.OPEN_FUNCTION_BUTTON; public UITagPanel _TagPanel; public UIContainerSelect UIContainerCharge; public VipInfo vipInfo; public static OPEN_TYPE YuanBaoShopOpenType { get { return m_YuanBaoShopOpenType; } set { m_YuanBaoShopOpenType = value; } } public static void OpenShopPageStr(string moneyTypeStr, string pageClass) { var page = int.Parse(pageClass); var moneyType = int.Parse(moneyTypeStr); var hash = new Hashtable(); hash.Add("ShopPage", page); hash.Add("MoneyType", moneyType); UIManager.ShowUI(UIInfo.YuanBaoShop, OnYuanBaoShopLoad, hash); } public static void OpenYuanBaoShop(OPEN_TYPE openType, bool isShowBlackMarket) { YuanBaoShopOpenType = openType; var hash = new Hashtable(); hash.Add("BlackMarket", isShowBlackMarket); UIManager.ShowUI(UIInfo.YuanBaoShop, OnYuanBaoShopLoad, isShowBlackMarket); } //public static void OpenJiFenShop() //{ // Hashtable hash = new Hashtable(); // hash.Add("JiFen", true); // UIManager.ShowUI(UIInfo.YuanBaoShop, YuanBaoShopLogic.OnYuanBaoShopLoad, hash); //} public static void OpenShopForItemStr(string shopItemIDStr) { var shopItemID = int.Parse(shopItemIDStr); OpenShopForItem(shopItemID); } public static void OpenShopForItem(int shopItemID) { var hash = new Hashtable(); hash.Add("ShopItemID", shopItemID); UIManager.ShowUI(UIInfo.YuanBaoShop, OnYuanBaoShopLoad, hash); } public static void OpenShopForJiFenItem(int shopID, int shopItemID) { var hash = new Hashtable(); hash.Add("JiFenShopID", shopID); hash.Add("ShopItemID", shopItemID); UIManager.ShowUI(UIInfo.YuanBaoShop, OnYuanBaoShopLoad, hash); } public static void OpenChargePage() { var hash = new Hashtable(); hash.Add("ChargePage", true); UIManager.ShowUI(UIInfo.YuanBaoShop, OnYuanBaoShopLoad, hash); } public static void OpenVipPage() { var hash = new Hashtable(); hash.Add("Vip", true); UIManager.ShowUI(UIInfo.YuanBaoShop, OnYuanBaoShopLoad, hash); } public static void OnYuanBaoShopLoad(bool bSuccess, object param) { if (bSuccess) { var hash = param as Hashtable; if (hash == null) return; if (hash.ContainsKey("JiFenShopID")) { Instance().ShowJiFenShopItem((int) hash["JiFenShopID"], (int) hash["ShopItemID"]); } else if (hash.ContainsKey("ShopItemID")) { Instance().ShowShopItem((int) hash["ShopItemID"]); } else if (hash.ContainsKey("ChargePage")) { Instance()._TagPanel.ShowPage(3); } else if (hash.ContainsKey("Vip")) { Instance()._TagPanel.ShowPage(3); Instance().vipInfo.Click_OpenVIPRoot(); } else if (hash.ContainsKey("ShopPage")) { Instance().ShowShopPage((int) hash["MoneyType"], (int) hash["ShopPage"]); } } } public void ShowJiFenShopItem(int shopID, int shopItemID) { _TagPanel.ShowPage(2); var tab = TableManager.GetRoleIntegral().Values; var shopStr = ""; foreach (var kv in tab) if (kv.IntegralShopId == shopID) { shopStr = kv.IntegralName; break; } if (!string.IsNullOrEmpty(shopStr)) { jiFenDefaultItemID = shopItemID; OnSubMenuClass3(shopStr); ShowSelectedBG(shopID, _Page3ClassTag); } else { LogModule.ErrorLog("This no ji fen shopID : " + shopID); } } public void InitChargeInfo() { var recharges = TableManager.GetRecharge(); var list = recharges.Where(a => a.Value.IfShow == 1).Select(a => a.Key).ToList(); //var keys = new List(recharges.Keys); //var list = new List(); //for (int i = 0; i < keys.Count; i++) //{ // //if (MonthCardCheckShow(keys[i])) // // list.Add(keys[i]); // if (recharges[keys[i]].IfShow == 1) // list.Add(keys[i]); //} UIContainerCharge.InitContentItem(list, AskRecharge); } List list1 = new List() { "3500", "3400", "4000", "4001", "4002", "4003", "4004", "4005", "4100", "4200", "4600", "4601", "4602", "4010", "3801" }; List list2 = new List() { "4000", "4001", "4002", "4003", "4004", "4005" }; List list3 = new List() { "4600", "4601", "4602" }; //把原来在lua的代码挪过来,那边写到Update下不知道干什么用的,可能是渠道id对应不同的充值 private bool MonthCardCheckShow(int index) { var isHide = (NetworkConfig.Table_Version != "tablesbt" && index > 12 && !list1.Contains(NetworkConfig._cchid)) || ((index == 11 || index == 12 || index == 13) && list2.Contains(NetworkConfig._cchid)) || ((index == 12 || index == 13 || index == 14) && NetworkConfig._cchid == "4010") || (list3.Contains(NetworkConfig._cchid) && index == 14) || ((NetworkConfig.Table_Version == "tablesbt" || NetworkConfig.Table_Version == "tablebtxy") && index == 1) || ((NetworkConfig.Table_Version != "tablesbt" && NetworkConfig.Table_Version != "tablebtxy") && index == 15); return !isHide; } private void ReqRechargetInfo() { var req = new ReqRechargeGoodsList(); req.SendMsg(); } public void AskRecharge(object initInfo) { var chargeId = (int) initInfo; var recharge = TableManager.GetRechargeByID(chargeId); if (recharge == null) return; if (recharge.Id == 1) MessageBoxLogic.OpenOKCancelBox(60044, -1, () => SdkControl.instance.Payment(recharge.Id)); else SdkControl.instance.Payment(recharge.Id); } private void Awake() { SetInstance(this); LoadAllGoodsDicPriority(); UIContainerCharge.SetShowItemFinishCallFun(ReqRechargetInfo); } private void OnEnable() { _TagPanel.ShowPage(0); } private void OnDisable() { YuanBaoShopOpenType = OPEN_TYPE.OPEN_FUNCTION_BUTTON; } private void OnDestroy() { SetInstance(null); } public void OnTagPage(int page) { switch (page) { case 0: _ShopPageGO.SetActive(true); InitPageLingyu(); break; case 1: _ShopPageGO.SetActive(true); InitPageYuanbao(); break; case 2: _ShopPageGO.SetActive(true); InitPageJiFen(); break; case 3: _ShopPageGO.SetActive(false); InitChargeInfo(); break; } } public void Close() { UIManager.CloseUI(UIInfo.YuanBaoShop); } public void ShowShopPage(int moneyType, int pageClass) { // 灵玉 if (moneyType == (int) MONEYTYPE.MONEYTYPE_YUANBAO) { _TagPanel.ShowPage(0); ShowPageItem(pageClass); } // 元宝 else if (moneyType == (int) MONEYTYPE.MONEYTYPE_YUANBAO_BIND) { _TagPanel.ShowPage(1); ShowPageItem(pageClass, -1, MONEYTYPE.MONEYTYPE_YUANBAO_BIND); } // 积分 else { _TagPanel.ShowPage(2); var tab = TableManager.GetRoleIntegral().Values; var targetStr = ""; foreach (var kv in tab) if (kv.IntegralShopId == pageClass) { targetStr = kv.IntegralName; break; } if (!string.IsNullOrEmpty(targetStr)) OnSubMenuClass3(targetStr); } } public void ShowShopItem(int shopItemID) { Tab_YuanBaoShop shopTab = null; var shopList = TableManager.GetYuanBaoShop().Values; foreach (var item in shopList) if (item.ItemID == shopItemID) { shopTab = item; break; } //for (int i = 0; i < shopList.Count; ++i) //{ // if (shopList[i][0].ItemID == shopItemID) // { // shopTab = shopList[i][0]; // break; // } //} if (shopTab == null) return; if (shopTab.MoneyType == (int) MONEYTYPE.MONEYTYPE_YUANBAO) { _TagPanel.ShowPage(0); ShowPageItem(shopTab.TabIndex, shopTab.ItemID); } else if (shopTab.MoneyType == (int) MONEYTYPE.MONEYTYPE_YUANBAO_BIND) { _TagPanel.ShowPage(1); ShowPageItem(shopTab.TabIndex, shopTab.ItemID, MONEYTYPE.MONEYTYPE_YUANBAO_BIND); } } // 该菜单下是否有商品,不包括商品不能出售的情况 private bool hasGoods(object tagObj, MONEYTYPE moneyType) { if (!_ClassTagTx.ContainsKey(tagObj.ToString())) return false; var index = _ClassTagTx[tagObj.ToString()]; foreach (var item in m_ListPriority) { var tabYuanBaoShop = TableManager.GetYuanBaoShopByID(item.GoodsId); if (tabYuanBaoShop == null) continue; // 金钱类型 if ((MONEYTYPE) tabYuanBaoShop.MoneyType != moneyType) continue; var tabCommonItem = TableManager.GetCommonItemByID(tabYuanBaoShop.ItemID); if (tabCommonItem == null) { } else { if (tabYuanBaoShop.TabIndex == index) return true; } } return false; } #region page1 public GameObject _ShopPageGO; public UISubScollMenu _ClassTag; public SysShopPage _ShopPage; private Dictionary _ClassTagTx; private readonly List m_ListPriority = new List(); private int _ClassIdxVip; public void InitPageLingyu() { _ClassTagTx = new Dictionary(); _ClassTagTx.Add(StrDictionary.GetClientDictionaryString("#{4142}"), 2); _ClassTagTx.Add(StrDictionary.GetClientDictionaryString("#{4140}"), 0); _ClassTagTx.Add(StrDictionary.GetClientDictionaryString("#{4141}"), 1); _ClassTagTx.Add(StrDictionary.GetClientDictionaryString("#{4145}"), 5); _ClassTagTx.Add(StrDictionary.GetClientDictionaryString("#{4143}"), 3); _ClassTagTx.Add(StrDictionary.GetClientDictionaryString("#{4144}"), 4); _ClassIdxVip = 5; _ClassTag.Clear(); foreach (var classStr in _ClassTagTx) if (hasGoods(classStr.Key, MONEYTYPE.MONEYTYPE_YUANBAO)) _ClassTag.PushMenu(classStr.Key); _ClassTag.ShowDefaultFirst(); var packet = (CG_REQ_SHOP_ITEM_LIMIT_LIST) PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_SHOP_ITEM_LIMIT_LIST); packet.SetShopid(YUANBAO_SHOP_ID); packet.SendPacket(); } private void LoadAllGoodsDicPriority() { if (m_ListPriority.Count > 0) return; var list = TableManager.GetYuanBaoShop().Values; foreach (var shopItem in list) m_ListPriority.Add(new PriorityInfo((short) shopItem.Id, (short) shopItem.ShowPriority)); m_ListPriority.Sort(new PriorityInfoCompare()); } // 第一个类型菜单栏回调 - 灵玉商城 public void OnSubMenuClass(object tagObj) { var tagTx = tagObj as string; if (_ClassTagTx.ContainsKey(tagTx)) ShowPageItem(_ClassTagTx[tagTx]); } // 灵玉商城的Tag private void ShowSelectedBG(int _Index, UISubScollMenu menuItems) { var classTagName = ""; foreach (var classTag in _ClassTagTx) if (classTag.Value == _Index) classTagName = classTag.Key; foreach (var item in menuItems.SubBtns) if (item.Key.MenuObj.Equals(classTagName)) item.Key.Selected(); else item.Key.UnSelected(); } //// 元宝商城的Tag //private void ShowSelectedBG_YuanBaoBind(int _Index) //{ // string classTagName = ""; // foreach (var classTag in _ClassTagTx) // { // if (classTag.Value == _Index) // { // classTagName = classTag.Key; // } // } // foreach (var item in _ClassTag.SubBtns) // { // if (item.Key.MenuObj.Equals(classTagName)) // { // item.Key.Selected(); // } // else // { // item.Key.UnSelected(); // } // } //} // 选择某个物品打开UI private void ShowPageItem(int tagClassIdx, int shopItemID = -1, MONEYTYPE moneyType = MONEYTYPE.MONEYTYPE_YUANBAO) { if (moneyType == MONEYTYPE.MONEYTYPE_YUANBAO) ShowSelectedBG(tagClassIdx, _ClassTag); else if (moneyType == MONEYTYPE.MONEYTYPE_YUANBAO_BIND) ShowSelectedBG(tagClassIdx, _Page2ClassTag); var shopItems = new List(); var selectedItems = new List(); for (var i = 0; i < m_ListPriority.Count; i++) { var tabYuanBaoShop = TableManager.GetYuanBaoShopByID(m_ListPriority[i].GoodsId); if (tabYuanBaoShop == null) continue; // MONEYTYPE_YUANBAO 写作元宝,读作灵玉。。。 if ((MONEYTYPE) tabYuanBaoShop.MoneyType != moneyType) continue; var tabCommonItem = TableManager.GetCommonItemByID(tabYuanBaoShop.ItemID); if (tabCommonItem == null) continue; if (IsTabNewGoods(tabYuanBaoShop, tagClassIdx)) { var shopItemInfo = new SysShopPageItem.ShopItemInfo(); shopItemInfo.MoneyType = moneyType; shopItemInfo.TabItem = tabCommonItem; shopItemInfo.Price = tabYuanBaoShop.PriceForever; shopItemInfo.GroupCount = tabYuanBaoShop.Num; shopItemInfo.ItemIdxInShop = tabYuanBaoShop.Id; shopItemInfo.LimitID = tabYuanBaoShop.LimitID; if (_BuyLimit.ContainsKey(tabYuanBaoShop.Id)) shopItemInfo.BuyCnt = _BuyLimit[tabYuanBaoShop.Id]; else shopItemInfo.BuyCnt = 0; shopItemInfo.LimitCount = tabCommonItem.MaxStackSize; shopItems.Add(shopItemInfo); if (shopItemInfo.TabItem.Id == shopItemID) selectedItems.Add(shopItemInfo); } } if (selectedItems.Count == 0 && shopItems.Count != 0) selectedItems.Add(shopItems[0]); //if (shopItems.Count > 0) { _ShopPage.InitShop(moneyType, BuyItemCallBack); _ShopPage.SetShopItems(shopItems, selectedItems); } } private bool IsTabNewGoods(Tab_YuanBaoShop tabYuanBaoShop, int tag) { if (tabYuanBaoShop.TabIndex != tag) return false; if (false == IsGoodsOnSell(tabYuanBaoShop)) return false; //if (tag == _ClassIdxVip) //{ // if (tabYuanBaoShop.ItemType != (int)ITEM_TYPE.TYPE_ITEM) // { // return false; // } // Tab_VIPShop tabVIPShop = TableManager.GetVIPShopByID(tabYuanBaoShop.ItemID, 0); // if (tabVIPShop == null) // { // return false; // } // int nPlayerVIPLevel = VipData.GetVipLv(); // if (nPlayerVIPLevel < tabVIPShop.ShowLevelReq) // { // return false; // } //} return true; } private bool IsGoodsOnSell(Tab_YuanBaoShop tabYuanBaoShop) { if (tabYuanBaoShop.SellTimeStart == GlobeVar.INVALID_ID || tabYuanBaoShop.SellTimeEnd == GlobeVar.INVALID_ID) return true; var DateTimeSellStart = new DateTime( tabYuanBaoShop.SellTimeStart / 100000000 % 100 + 2000, tabYuanBaoShop.SellTimeStart / 1000000 % 100, tabYuanBaoShop.SellTimeStart / 10000 % 100, tabYuanBaoShop.SellTimeStart / 100 % 100, tabYuanBaoShop.SellTimeStart / 1 % 100, 0); var DateTimeSellEnd = new DateTime( tabYuanBaoShop.SellTimeEnd / 100000000 % 100 + 2000, tabYuanBaoShop.SellTimeEnd / 1000000 % 100, tabYuanBaoShop.SellTimeEnd / 10000 % 100, tabYuanBaoShop.SellTimeEnd / 100 % 100, tabYuanBaoShop.SellTimeEnd / 1 % 100, 0); var DateTimeNow = Utils.GetServerDateTime(); return DateTimeSellStart <= DateTimeNow && DateTimeNow < DateTimeSellEnd; } public void BuyItemCallBack(SysShopPageItem.ShopItemInfo shopItemInfo, int count) { if (shopItemInfo.MoneyType == MONEYTYPE.MONEYTYPE_YUANBAO || shopItemInfo.MoneyType == MONEYTYPE.MONEYTYPE_YUANBAO_BIND) { var tabYuanBaoShop = TableManager.GetYuanBaoShopByID(shopItemInfo.ItemIdxInShop); if (!JudgeMoneyLogic.IsMoneyEnough((MONEYTYPE) tabYuanBaoShop.MoneyType, tabYuanBaoShop.PriceForever)) //GlobalData.ShowLessMoneyTip((MONEYTYPE)tabYuanBaoShop.MoneyType); //GameManager.gameManager.PlayerDataPool.Money.PushMoneyLessData(tabYuanBaoShop.MoneyType); return; var buyPacket = (CG_BUY_YUANBAOGOODS) PacketDistributed.CreatePacket(MessageID.PACKET_CG_BUY_YUANBAOGOODS); buyPacket.SetGoodID(shopItemInfo.ItemIdxInShop); LogModule.DebugLog("buy shop id:" + shopItemInfo.ItemIdxInShop); buyPacket.SetBuyNum(count); buyPacket.SetIsUseBind(0); buyPacket.SetDeadline((int) DEADLINE_PRICE.PRICE_FOREVER); buyPacket.SendPacket(); } else { var curItemIndex = shopItemInfo.ItemIdxInShop; var sysShopTable = TableManager.GetSystemShopByID(_JifenShopID); if (null == sysShopTable) { LogModule.ErrorLog("cur sysshop id isn't exist! : id " + _JifenShopID); return; } var pid = sysShopTable.GetPricebyIndex(curItemIndex); if (pid < 0) { LogModule.ErrorLog("can not find cur item pid : itemID" + pid); return; } var currencyType = (MONEYTYPE) sysShopTable.GetMoneySubTypebyIndex(0); var mainType = sysShopTable.GetMoneyTypebyIndex(0); if (mainType == (int) CONSUM_TYPE.MONEY) //属性值 { if (!JudgeMoneyLogic.IsMoneyEnough((MONEYTYPE) sysShopTable.GetMoneySubTypebyIndex(curItemIndex), sysShopTable.GetPricebyIndex(curItemIndex) * count)) return; } else { //判断当前的属性值是否足够消费 if (GameManager.gameManager.PlayerDataPool.GetPropInt((PropID.PropertyID) currencyType) < sysShopTable.GetPricebyIndex(curItemIndex) * count) { //积分不够 var tips = StrDictionary.GetClientDictionaryString("#{6102}", PropID.GetAttrName((PropID.PropertyID) currencyType)); GUIData.AddNotifyData(tips); return; } } var buyPacket = (CG_SYSTEMSHOP_BUY) PacketDistributed.CreatePacket(MessageID.PACKET_CG_SYSTEMSHOP_BUY); buyPacket.SetBuyNum(count); buyPacket.SetShopId(_JifenShopID); buyPacket.SetMercIndex(curItemIndex); buyPacket.SendPacket(); } } public void BtnShowVip() { //UIManager.ShowUI(UIInfo.VipRoot); } public void UpdateLimitInfo() { switch (_TagPanel.GetShowingPage()) { case 0: { var packet = (CG_REQ_SHOP_ITEM_LIMIT_LIST) PacketDistributed.CreatePacket(MessageID .PACKET_CG_REQ_SHOP_ITEM_LIMIT_LIST); packet.SetShopid(YUANBAO_SHOP_ID); packet.SendPacket(); } break; case 1: { var packet = (CG_REQ_SHOP_ITEM_LIMIT_LIST) PacketDistributed.CreatePacket(MessageID .PACKET_CG_REQ_SHOP_ITEM_LIMIT_LIST); packet.SetShopid(BANGYUANBAO_SHOP_ID); packet.SendPacket(); } break; case 2: { var packet = (CG_REQ_SHOP_ITEM_LIMIT_LIST) PacketDistributed.CreatePacket(MessageID .PACKET_CG_REQ_SHOP_ITEM_LIMIT_LIST); packet.SetShopid(_JifenShopID); packet.SendPacket(); } break; } } #endregion #region page2 public UISubScollMenu _Page2ClassTag; public Dictionary _BuyLimit = new Dictionary(); public void InitPageYuanbao() { _ClassTagTx = new Dictionary(); _ClassTagTx.Add(StrDictionary.GetClientDictionaryString("#{4142}"), 2); _ClassTagTx.Add(StrDictionary.GetClientDictionaryString("#{4140}"), 0); _ClassTagTx.Add(StrDictionary.GetClientDictionaryString("#{4141}"), 1); _ClassIdxVip = 5; _Page2ClassTag.Clear(); foreach (var classStr in _ClassTagTx) if (hasGoods(classStr.Key, MONEYTYPE.MONEYTYPE_YUANBAO_BIND)) _Page2ClassTag.PushMenu(classStr.Key); _Page2ClassTag.ShowDefaultFirst(); var packet = (CG_REQ_SHOP_ITEM_LIMIT_LIST) PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_SHOP_ITEM_LIMIT_LIST); packet.SetShopid(BANGYUANBAO_SHOP_ID); packet.SendPacket(); _BuyLimit.Clear(); } // 第二个类型菜单栏回调 - 元宝商城 public void OnSubMenuClass2(object tagObj) { LogModule.DebugLog("OnSubMenuClass2"); var tagTx = tagObj as string; if (!_ClassTagTx.ContainsKey(tagTx)) return; var tagClassIdx = _ClassTagTx[tagTx]; var shopItems = new List(); for (var i = 0; i < m_ListPriority.Count; i++) { var shopItemInfo = new SysShopPageItem.ShopItemInfo(); var tabYuanBaoShop = TableManager.GetYuanBaoShopByID(m_ListPriority[i].GoodsId); if (tabYuanBaoShop == null) continue; // MONEYTYPE_YUANBAO_BIND 才是元宝 if ((MONEYTYPE) tabYuanBaoShop.MoneyType != MONEYTYPE.MONEYTYPE_YUANBAO_BIND) continue; var tabCommonItem = TableManager.GetCommonItemByID(tabYuanBaoShop.ItemID); if (tabCommonItem == null) continue; if (IsTabNewGoods(tabYuanBaoShop, tagClassIdx)) { shopItemInfo.MoneyType = MONEYTYPE.MONEYTYPE_YUANBAO_BIND; shopItemInfo.TabItem = tabCommonItem; shopItemInfo.Price = tabYuanBaoShop.PriceForever; shopItemInfo.GroupCount = tabYuanBaoShop.Num; shopItemInfo.ItemIdxInShop = tabYuanBaoShop.Id; shopItemInfo.LimitID = tabYuanBaoShop.LimitID; if (_BuyLimit.ContainsKey(tabYuanBaoShop.Id)) shopItemInfo.BuyCnt = _BuyLimit[tabYuanBaoShop.Id]; else shopItemInfo.BuyCnt = 0; shopItemInfo.LimitCount = tabCommonItem.MaxStackSize; shopItems.Add(shopItemInfo); } } //if (shopItems.Count > 0) { _ShopPage.InitShop(MONEYTYPE.MONEYTYPE_YUANBAO_BIND, BuyItemCallBack); _ShopPage.SetShopItems(shopItems); } } public void InitShopItemLimit(GC_RET_SHOP_ITEM_LIMIT_LIST packet) { _BuyLimit.Clear(); LogModule.DebugLog("InitShopItemLimit"); foreach (var itemLimit in packet.itemlimtlistList) { LogModule.DebugLog("ItemBuyNum:" + itemLimit.Itemindex + "," + itemLimit.Buycount); if (_BuyLimit.ContainsKey(itemLimit.Itemindex)) _BuyLimit[itemLimit.Itemindex] = itemLimit.Buycount; else _BuyLimit.Add(itemLimit.Itemindex, itemLimit.Buycount); } _ShopPage._ShopItemContainer.ForeachActiveItem(shopItem => { LogModule.DebugLog("ShopItemID:" + shopItem._ShopItemInfo.ItemIdxInShop); foreach (var kv in _BuyLimit) if (kv.Key == shopItem._ShopItemInfo.ItemIdxInShop) { LogModule.DebugLog("ItemBuyNum:" + kv.Key + "," + kv.Value); shopItem.SetLimit(kv.Value); } }); _ShopPage.RefreshSelected(); } #endregion #region page3 积分商店 //private Dictionary _Class3TagTx; private int jiFenDefaultItemID = -1; public UISubScollMenu _Page3ClassTag; public void InitPageJiFen() { _BuyLimit.Clear(); _ClassTagTx = new Dictionary(); var tab = TableManager.GetRoleIntegral().Values; foreach (var kv in tab) _ClassTagTx.Add(kv.IntegralName, kv.IntegralShopId); _Page3ClassTag.Clear(); foreach (var kv in _ClassTagTx) _Page3ClassTag.PushMenu(kv.Key); _Page3ClassTag.ShowDefaultFirst(); } private int _JifenShopID = -1; public void OnSubMenuClass3(object tagObj) { var tagTx = tagObj as string; if (_ClassTagTx.ContainsKey(tagTx)) _JifenShopID = _ClassTagTx[tagTx]; ShowSelectedBG(_JifenShopID, _Page3ClassTag); var m_curShopTable = TableManager.GetSystemShopByID(_JifenShopID); var isBuyLimit = false; var shopItems = new List(); var selectedItems = new List(); for (int i = 0, count = m_curShopTable.getPidCount(); i < count; i++) { var shopItemInfo = new SysShopPageItem.ShopItemInfo(); var curTabItem = TableManager.GetCommonItemByID(m_curShopTable.GetPidbyIndex(i)); if (null != curTabItem) { shopItemInfo.MoneyType = (MONEYTYPE) m_curShopTable.GetMoneySubTypebyIndex(i); shopItemInfo.TabItem = curTabItem; shopItemInfo.Price = m_curShopTable.GetPricebyIndex(i); shopItemInfo.GroupCount = m_curShopTable.GetNumPerGroupbyIndex(i); shopItemInfo.ItemIdxInShop = i; shopItemInfo.LimitID = m_curShopTable.GetLimitIdbyIndex(i); shopItemInfo.LimitCount = 99; isBuyLimit |= shopItemInfo.LimitID != -1; shopItems.Add(shopItemInfo); if (shopItemInfo.TabItem.Id == jiFenDefaultItemID) selectedItems.Add(shopItemInfo); } } if (isBuyLimit) { var packet = (CG_REQ_SHOP_ITEM_LIMIT_LIST) PacketDistributed.CreatePacket(MessageID .PACKET_CG_REQ_SHOP_ITEM_LIMIT_LIST); packet.SetShopid(_JifenShopID); packet.SendPacket(); } if (shopItems.Count > 0) { // 必须先判断是否需要排序,使用List.sort系统可能会调用不稳定的排序。除非重新写个稳定的排序 var needSort = false; for (var i = 0; i < shopItems.Count; ++i) if (shopItems[i].isNeed > 0) { needSort = true; break; } if (needSort) shopItems.Sort(SysShopController.SortMyItemList); _ShopPage.InitShop(shopItems[0].MoneyType, BuyItemCallBack); _ShopPage.SetShopItems(shopItems, selectedItems); } jiFenDefaultItemID = -1; } private int _MarkPositionItemDataId = -1; public void PositionItem() { if (_MarkPositionItemDataId == -1) return; _ShopPage._ShopItemContainer.ForeachActiveItem(item => { if (item._ShopItemInfo.TabItem.Id == _MarkPositionItemDataId) { var pos = item.GetComponent().anchoredPosition.y; var posY = Mathf.Clamp(Mathf.Abs(pos), 0, _ShopPage._ShopItemContainer._ContainerObj.sizeDelta.y); var containerObjLocalPos = _ShopPage._ShopItemContainer._ContainerObj.localPosition; _ShopPage._ShopItemContainer._ContainerObj.localPosition = new Vector3(containerObjLocalPos.x, posY, 0); _MarkPositionItemDataId = -1; } }); } #endregion }