using UnityEngine; using System.Collections; using System.Collections.Generic; using GCGame.Table; using Games.Item; using System; public class Market { #region marketItemClass public class MarketItemClass { public int ItemClass; public int ItemSubClass; public int ItemSubClass2; public MarketItemClass(int itemClass, int itemSubClass) { ItemClass = itemClass; ItemSubClass = itemSubClass; } } public static string GetMarketClassName(int itemClass, int itemSubClass) { switch (itemClass) { case 999: //关注 return StrDictionary.GetClientDictionaryString("#{6234}"); case 998: //所有公示 return StrDictionary.GetClientDictionaryString("#{6235}"); case 1://装备法宝 switch (itemSubClass) { case 1://普通装备 return StrDictionary.GetClientDictionaryString("#{6207}"); case 2://珍品装备 return StrDictionary.GetClientDictionaryString("#{6208}"); case 3://法宝 return StrDictionary.GetClientDictionaryString("#{6209}"); } return StrDictionary.GetClientDictionaryString("#{6206}"); case 2://食品药品 switch (itemSubClass) { case 1://药品 return StrDictionary.GetClientDictionaryString("#{6211}"); case 2://食品 return StrDictionary.GetClientDictionaryString("#{6212}"); case 3://状态药 return StrDictionary.GetClientDictionaryString("#{6213}"); } return StrDictionary.GetClientDictionaryString("#{6210}"); case 3: //强化材料 switch (itemSubClass) { case 1://宝石 return StrDictionary.GetClientDictionaryString("#{6215}"); case 2://吴山石 return StrDictionary.GetClientDictionaryString("#{6216}"); case 3://金刚钻 return StrDictionary.GetClientDictionaryString("#{6217}"); case 4://装备洗练 return StrDictionary.GetClientDictionaryString("#{6218}"); } return StrDictionary.GetClientDictionaryString("#{6214}"); case 4: //灵兽技能 switch (itemSubClass) { case 1://被动技能 return StrDictionary.GetClientDictionaryString("#{6203}"); case 2://自动技能 return StrDictionary.GetClientDictionaryString("#{6204}"); } return StrDictionary.GetClientDictionaryString("#{6202}"); case 5: //经验丹书 return StrDictionary.GetClientDictionaryString("#{6205}"); case 6: //技能秘籍 switch (itemSubClass) { case 1://普通秘籍 return StrDictionary.GetClientDictionaryString("#{6220}"); case 2://绝技 return StrDictionary.GetClientDictionaryString("#{6221}"); } return StrDictionary.GetClientDictionaryString("#{6219}"); case 7: //灵兽培养 switch (itemSubClass) { case 1://灵兽 return StrDictionary.GetClientDictionaryString("#{6223}"); case 2://灵兽道具 return StrDictionary.GetClientDictionaryString("#{6224}"); } return StrDictionary.GetClientDictionaryString("#{6222}"); case 8: //生活技能 switch (itemSubClass) { case 1://采集 return StrDictionary.GetClientDictionaryString("#{6226}"); case 2://钓鱼 return StrDictionary.GetClientDictionaryString("#{6227}"); case 3://炼药 return StrDictionary.GetClientDictionaryString("#{6228}"); case 4://烹饪 return StrDictionary.GetClientDictionaryString("#{6229}"); case 5://工艺 return StrDictionary.GetClientDictionaryString("#{6230}"); } return StrDictionary.GetClientDictionaryString("#{6225}"); case 9: //其他 switch (itemSubClass) { case 1://其他 return StrDictionary.GetClientDictionaryString("#{6231}"); case 2://藏宝图 return StrDictionary.GetClientDictionaryString("#{6232}"); case 3://礼包 return StrDictionary.GetClientDictionaryString("#{6233}"); case 4://珍品道具 return StrDictionary.GetClientDictionaryString("#{6236}"); } return StrDictionary.GetClientDictionaryString("#{6231}"); } return ""; } public static string GetEquipClassName(int itemClass, int itemSubClass) { switch (itemClass) { case 20://等级 switch (itemSubClass) { case 1://0~69 return StrDictionary.GetClientDictionaryString("#{6251}"); case 2://70~89 return StrDictionary.GetClientDictionaryString("#{6252}"); case 3://90~109 return StrDictionary.GetClientDictionaryString("#{6253}"); case 4://110~129 return StrDictionary.GetClientDictionaryString("#{6254}"); case 5://130~150 return StrDictionary.GetClientDictionaryString("#{6255}"); } return StrDictionary.GetClientDictionaryString("#{6250}"); case 21://大类 switch (itemSubClass) { case -1: return StrDictionary.GetClientDictionaryString("#{6385}"); case 1://武器 return StrDictionary.GetClientDictionaryString("#{6257}"); case 2://头部 return StrDictionary.GetClientDictionaryString("#{6258}"); case 3://上衣 return StrDictionary.GetClientDictionaryString("#{6259}"); case 4://手套 return StrDictionary.GetClientDictionaryString("#{6260}"); case 5://手镯 return StrDictionary.GetClientDictionaryString("#{6261}"); case 6://鞋子 return StrDictionary.GetClientDictionaryString("#{6262}"); case 7://吊坠 return StrDictionary.GetClientDictionaryString("#{6263}"); case 8://戒指 return StrDictionary.GetClientDictionaryString("#{6264}"); case 9://副武器 return StrDictionary.GetClientDictionaryString("#{6265}"); case 10://腰带 return StrDictionary.GetClientDictionaryString("#{6266}"); } return StrDictionary.GetClientDictionaryString("#{6256}"); case 1://小类 switch (itemSubClass) { case 1://天机 return StrDictionary.GetClientDictionaryString("#{6268}"); case 2://六扇 return StrDictionary.GetClientDictionaryString("#{6269}"); case 3://蜀山 return StrDictionary.GetClientDictionaryString("#{6270}"); case 4://玄女 return StrDictionary.GetClientDictionaryString("#{6271}"); } return StrDictionary.GetClientDictionaryString("#{6267}"); case 2://小类 case 3://小类 switch (itemSubClass) { case 1://天机 return StrDictionary.GetClientDictionaryString("#{6272}"); case 2://六扇 return StrDictionary.GetClientDictionaryString("#{6273}"); case 3://蜀山 return StrDictionary.GetClientDictionaryString("#{6274}"); } return StrDictionary.GetClientDictionaryString("#{6267}"); case 4://手套 return StrDictionary.GetClientDictionaryString("#{6260}"); case 5://手镯 return StrDictionary.GetClientDictionaryString("#{6261}"); case 6://鞋子 return StrDictionary.GetClientDictionaryString("#{6262}"); case 7://吊坠 return StrDictionary.GetClientDictionaryString("#{6263}"); case 8://戒指 return StrDictionary.GetClientDictionaryString("#{6264}"); case 9://副武器 return StrDictionary.GetClientDictionaryString("#{6265}"); case 10://腰带 return StrDictionary.GetClientDictionaryString("#{6266}"); case 22://品质 switch (itemSubClass) { case 2://绿 return StrDictionary.GetClientDictionaryString("#{6281}"); case 3://蓝 return StrDictionary.GetClientDictionaryString("#{6276}"); case 4://红 return StrDictionary.GetClientDictionaryString("#{6277}"); case 5://紫 return StrDictionary.GetClientDictionaryString("#{6278}"); case 6://鬼 return StrDictionary.GetClientDictionaryString("#{6279}"); } return StrDictionary.GetClientDictionaryString("#{6275}"); case 30://法宝位置 switch (itemSubClass) { case 1://金 return StrDictionary.GetClientDictionaryString("#{6368}"); case 2://木 return StrDictionary.GetClientDictionaryString("#{6369}"); case 3://水 return StrDictionary.GetClientDictionaryString("#{6370}"); case 4://火 return StrDictionary.GetClientDictionaryString("#{6371}"); case 5://土 return StrDictionary.GetClientDictionaryString("#{6372}"); case -1: return StrDictionary.GetClientDictionaryString("#{6385}"); } return StrDictionary.GetClientDictionaryString("#{6373}"); case 31://法宝等级 switch (itemSubClass) { //case 1://金 // return StrDictionary.GetClientDictionaryString("#{6375}"); case 1://80 return StrDictionary.GetClientDictionaryString("#{6376}"); case 2://110 return StrDictionary.GetClientDictionaryString("#{6377}"); case 3://140 return StrDictionary.GetClientDictionaryString("#{6378}"); case 4://170 return StrDictionary.GetClientDictionaryString("#{6379}"); } return StrDictionary.GetClientDictionaryString("#{6250}"); } return ""; } public class LevelPair { public int MinLevel; public int MaxLevel; } public static Dictionary _EquipLevelClass; public static Dictionary EquipLevelClass { get { if (_EquipLevelClass == null) { InitMarketLevel(); } return _EquipLevelClass; } } public static Dictionary _MagicLevelClass; public static Dictionary MagicLevelClass { get { if (_MagicLevelClass == null) { InitMarketLevel(); } return _MagicLevelClass; } } private static void InitMarketLevel() { _EquipLevelClass = new Dictionary(); _MagicLevelClass = new Dictionary(); var equipLevelRecords = TableManager.GetMarketFilterLevel().Values; foreach (var equipLvRecord in equipLevelRecords) { foreach(var item in equipLvRecord) { if (item.IsEquip == 1) { _EquipLevelClass.Add(item.Id, new LevelPair() { MinLevel = item.LevelMin, MaxLevel = item.LevelMax }); } else { _MagicLevelClass.Add(item.Id, new LevelPair() { MinLevel = item.LevelMin, MaxLevel = item.LevelMax }); } } } } #endregion #region search item public static void SearchItem(List searchItem, bool isInPublicity, bool isRare = false) { if (searchItem.Count == 1) { var historys = PlayerPreferenceData.GetMarketSearchHistory(); if (historys.Contains(searchItem[0])) { historys.Remove(searchItem[0]); } historys.Insert(0, searchItem[0]); PlayerPreferenceData.SaveMarketSearchHistory(); } //CG_ASK_CONSIGN_SALE_ITEMS_BY_ID packet = (CG_ASK_CONSIGN_SALE_ITEMS_BY_ID)PacketDistributed.CreatePacket(MessageID.PACKET_CG_ASK_CONSIGN_SALE_ITEMS_BY_ID); //packet.DataId = searchItem.Id; //packet.Minindex = 0; //packet.Maxindex = 9; //if (isInPublicity) //{ // packet.Itemstate = (int)CG_ASK_CONSIGN_SALE_ITEMS_BY_CLASS.EUserShopItemState.EItemOnShow; //} //else //{ // packet.Itemstate = (int)CG_ASK_CONSIGN_SALE_ITEMS_BY_CLASS.EUserShopItemState.EItemOnSale; //} //packet.SendPacket(); if (!isInPublicity) { MarketPlayerBuy.Instance().ShowItemList(searchItem, 10, 2); } else { MarketPlayerPublicity.Instance().ShowItemList(searchItem, 10, 2); } } #endregion #region show market item public static void ShowDefault() { Hashtable hash = new Hashtable(); hash.Add("ShowItem", -1); UIManager.ShowUI(UIInfo.MarketRoot, ShowMarketUIOver, hash); } public static void ShowMarketStr(string itemDataStr) { int itemData = int.Parse(itemDataStr); ShowMarket(itemData); } public static void ShowSysMarketStr(string classTypeStr, string subClassTypeStr) { int classType = int.Parse(classTypeStr); int subClassType = int.Parse(subClassTypeStr); ShowSysMarket(classType, subClassType); } public static void ShowPlayerShopMarketStr(string classTypeStr, string subClassTypeStr) { int classType = int.Parse(classTypeStr); int subClassType = int.Parse(subClassTypeStr); ShowPlayerShopMarket(classType, subClassType); } public static void ShowMarket(int itemData) { Hashtable hash = new Hashtable(); hash.Add("ShowItem", itemData); var functionOpenTab = TableManager.GetFunctionOpenByID(105, 0); if (functionOpenTab == null) { return; } var _OpenVIPLevel = functionOpenTab.OpenVipLv; if (GameManager.gameManager.PlayerDataPool.VipCost < _OpenVIPLevel) { GUIData.AddNotifyData(string.Format("当前VIP等级不足,VIP等级{0}开放", _OpenVIPLevel)); return; } if (!MarketLogic.Instance()) { UIManager.ShowUI(UIInfo.MarketRoot, ShowMarketUIOver, hash); } else { ShowItemPage(hash); } } public static void ShowMarketFocus() { Hashtable hash = new Hashtable(); hash.Add("ShowFocus", true); if (!MarketLogic.Instance()) { UIManager.ShowUI(UIInfo.MarketRoot, ShowMarketUIOver, hash); } else { ShowItemFocus(hash); } } public static void ShowSysMarket(int classType, int subClassType) { Hashtable hash = new Hashtable(); hash.Add("ClassType", classType); hash.Add("SubClassType", subClassType); if (!MarketLogic.Instance()) { UIManager.ShowUI(UIInfo.MarketRoot, ShowMarketUIOver, hash); } else { ShowSysMarketPage(hash); } } public static void ShowPlayerShopMarket(int classType, int subClassType) { Hashtable hash = new Hashtable(); hash.Add("ClassType", classType); hash.Add("SubClassType", subClassType); var functionOpenTab = TableManager.GetFunctionOpenByID(105, 0); if (functionOpenTab == null) { return; } var _OpenVIPLevel = functionOpenTab.OpenVipLv; if (GameManager.gameManager.PlayerDataPool.VipCost < _OpenVIPLevel) { GUIData.AddNotifyData(string.Format("当前VIP等级不足,VIP等级{0}开放", _OpenVIPLevel)); return; } if (!MarketLogic.Instance()) { UIManager.ShowUI(UIInfo.MarketRoot, ShowPlayShopByMenuType, hash); } else { ShowSysMarketPage(hash); } } private static void ShowMarketUIOver(bool sucessed, object param) { Hashtable hash = param as Hashtable; if (hash == null) return; if (hash.ContainsKey("ClassType")) { ShowSysMarketPage(hash); } else if (hash.ContainsKey("ShowItem")) { ShowItemPage(hash); } else if (hash.ContainsKey("ShowFocus")) { ShowItemFocus(hash); } } private static void ShowSysMarketPage(Hashtable hash) { int classType = (int)hash["ClassType"]; int subClassType = (int)hash["SubClassType"]; MarketLogic.Instance()._TagPanel.ShowPage(0); MarketLogic.Instance()._MarketSysLogic._TagPanel.ShowPage(0); MarketLogic.Instance()._MarketSysLogic.OnMenuSelect(classType, subClassType); } private static void ShowPlayShopByMenuType(bool sucessed, object param) { Hashtable hash = param as Hashtable; int classID = (int)hash["ClassType"]; int subClassID = (int)hash["SubClassType"]; MarketLogic.Instance()._TagPanel.ShowPage(1); MarketLogic.Instance()._MarketPlayerLogic._TagPanel.ShowPage(0); MarketPlayerBuy.Instance().OnMenuSelect(new Market.MarketItemClass(classID, subClassID)); } private static void ShowItemPage(Hashtable hash) { int itemDataID = (int)hash["ShowItem"]; var sysTab = TableManager.GetExchangeMarketByID(itemDataID, 0); if (sysTab != null) { MarketLogic.Instance()._TagPanel.ShowPage(0); MarketLogic.Instance()._MarketSysLogic._TagPanel.ShowPage(0); MarketLogic.Instance()._MarketSysLogic.OnMenuSelect(sysTab.ClassType, sysTab.ClassSubType, itemDataID); return; } var playerTab = TableManager.GetUserShopItemByID(itemDataID, 0); if (playerTab != null) { MarketLogic.Instance()._TagPanel.ShowPage(1); MarketLogic.Instance()._MarketPlayerLogic._TagPanel.ShowPage(0); Tab_ItemGetPath GetPath = TableManager.GetItemGetPathByID(itemDataID, 0); if (GetPath != null ) { string data = GetPath.GetItemPathbyIndex(5); data = data.Trim('"'); int id = string.IsNullOrEmpty(data) ? -1 : Convert.ToInt32(data); if(id == 1) { MarketPlayerBuy.Instance().OnMenuSelect(new Market.MarketItemClass(playerTab.ClassId, playerTab.SubClassId)); } else { MarketPlayerBuy.Instance().ShowItemList(new List() { itemDataID }, 10); } } else { MarketPlayerBuy.Instance().ShowItemList(new List() { itemDataID }, 10); } return; } } private static void ShowItemFocus(Hashtable hash) { MarketLogic.Instance()._TagPanel.ShowPage(1); MarketLogic.Instance()._MarketPlayerLogic._TagPanel.ShowPage(0); if (MarketPlayerBuy.Instance()) { MarketPlayerBuy.Instance().ShowFocusPage(); } } #endregion #region player shop info public static ulong ShopGUID; public static string ShopName = ""; public static int ShopOpenTime; public static int ShopSlotCnt; public static int StoreMoney; public static int MaintainMoney; public static List WatchItemGuids = new List(); public static List WatchItems = new List(); public static void AskShopInfo() { ShopName = ""; CG_REQ_USER_SHOP_INFO shopInfo = (CG_REQ_USER_SHOP_INFO)PacketDistributed.CreatePacket(MessageID.PACKET_CG_REQ_USER_SHOP_INFO); shopInfo.Guid = GameManager.gameManager.PlayerDataPool.MainPlayerBaseAttr.Guid; shopInfo.SendPacket(); } public static void SetShopInfo(GC_OPEN_USER_SHOP_RET packet) { ShopGUID = packet.StoredId; ShopName = packet.StoreName; ShopOpenTime = packet.OpenTm; ShopSlotCnt = packet.OpenSlot; StoreMoney = packet.StoreMoney; MaintainMoney = packet.MaintainMoney; WatchItemGuids.Clear(); for (int i = 0; i < packet.itemGuidCount; ++i) { WatchItemGuids.Add(packet.GetItemGuid(i)); } MatchWatchItem(); if (MarketLogic.Instance()) { if (MarketPlayerSell.Instance()) { MarketPlayerSell.Instance().UpdateShopInfo(); } else if (MarketPlayerBuy.Instance()) { MarketPlayerBuy.Instance().UpdateShopInfo(); } else if (MarketPlayerPublicity.Instance()) { MarketPlayerPublicity.Instance().UpdateShopInfo(); } } } private static void MatchWatchItem() { List removeItems = new List(); foreach (var watchItem in WatchItems) { if (!WatchItemGuids.Contains(watchItem.Guid)) { removeItems.Add(watchItem); } } foreach (var removeItem in removeItems) { WatchItems.Remove(removeItem); } } public static void UpdateWatchItems(GC_RET_USER_SHOP_FOCUS_ITEMS packet) { WatchItems.Clear(); for (int i = 0; i < packet.dataidCount; ++i) { MarketPlayerListItemInfo item = new MarketPlayerListItemInfo(); item.DataId = packet.GetDataid(i); item.Guid = packet.GetGuid(i); item.IsWatched = packet.GetItemstate(i) == 0 ? 1 : 0; item.Price = packet.GetPrice(i); item.SellCnt = packet.GetStackcount(i); item.WatchCnt = packet.GetFocusnum(i); item.WatchTime = packet.GetOnsalcetm(i); WatchItems.Add(item); } if (MarketPlayerBuy.Instance()) { MarketPlayerBuy.Instance().UpdateShopInfo(); } else if (MarketPlayerPublicity.Instance()) { MarketPlayerPublicity.Instance().UpdateShopInfo(); } } #endregion }