Example #1
0
        private static void FixSearchArgs(SearchArgs searchArgs)
        {
            if (!SaleManager.IsValidType(searchArgs.Type, searchArgs.ID))
            {
                searchArgs.Type = 1;
                searchArgs.ID   = 1;
            }
            int searchOrderType = searchArgs.OrderTypeFlags;

            for (int i = 0; i < 32; i++)
            {
                int mask = 1 << i;
                if ((searchOrderType & mask) != 0)
                {
                    searchArgs.OrderTypeFlags &= mask;
                    if (searchOrderType > 8)
                    {
                    }
                    break;
                }
            }
        }
Example #2
0
        /// <summary>
        /// 确保参数没有异常
        /// </summary>
        /// <param name="searchArgs"></param>
        private static void FixSearchArgs(SearchArgs searchArgs)
        {
            if (!IsValidType(searchArgs.Type, searchArgs.ID))
            {
                searchArgs.Type = 1;
                searchArgs.ID   = 1;
            }

            int searchOrderType = searchArgs.OrderTypeFlags;

            for (int i = 0; i < 32; i++)
            {
                int mask = (1 << i);
                if ((searchOrderType & mask) != 0)
                {
                    searchArgs.OrderTypeFlags &= mask;
                    if (searchOrderType > (int)SearchOrderTypes.Max)
                    {
                        searchOrderType = (int)SearchOrderTypes.OrderByMoney;
                    }
                    break;
                }
            }
        }
Example #3
0
        private static List <SaleGoodsData> GetCachedSaleGoodsList(SearchArgs searchArgs)
        {
            Predicate <SaleGoodsData> match             = null;
            Predicate <SaleGoodsData> predicate2        = null;
            List <SaleGoodsData>      saleGoodsDataList = null;
            SearchArgs args           = new SearchArgs(searchArgs);
            int        colorFlags     = -1;
            int        moneyFlags     = -1;
            int        orderBy        = -1;
            int        orderTypeFlags = -1;

            lock (Mutex_SaleGoodsDict)
            {
                while (!_OrderdSaleGoodsListDict.TryGetValue(searchArgs, out saleGoodsDataList))
                {
                    if (searchArgs.ColorFlags < 0x3f)
                    {
                        colorFlags            = searchArgs.ColorFlags;
                        searchArgs.ColorFlags = 0x3f;
                    }
                    else if (searchArgs.MoneyFlags < 7)
                    {
                        moneyFlags            = searchArgs.MoneyFlags;
                        searchArgs.MoneyFlags = 7;
                    }
                    else if (searchArgs.OrderBy > 0)
                    {
                        orderBy            = searchArgs.OrderBy;
                        searchArgs.OrderBy = 0;
                    }
                    else
                    {
                        if (searchArgs.OrderTypeFlags <= 1)
                        {
                            break;
                        }
                        orderTypeFlags            = searchArgs.OrderTypeFlags;
                        searchArgs.OrderTypeFlags = 0;
                    }
                }
                if (null == saleGoodsDataList)
                {
                    saleGoodsDataList = GetSaleGoodsDataList(searchArgs.Type, searchArgs.ID);
                    _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), new List <SaleGoodsData>(saleGoodsDataList));
                }
                if (orderTypeFlags > 0)
                {
                    saleGoodsDataList = new List <SaleGoodsData>(saleGoodsDataList);
                    saleGoodsDataList.Sort(GetComparerFor(true, true, (SearchOrderTypes)orderTypeFlags));
                    searchArgs.OrderTypeFlags = orderTypeFlags;
                    _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList);
                }
                if (orderBy > 0)
                {
                    saleGoodsDataList  = new List <SaleGoodsData>(saleGoodsDataList);
                    searchArgs.OrderBy = orderBy;
                    saleGoodsDataList.Reverse();
                    _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList);
                }
                if (moneyFlags > 0)
                {
                    searchArgs.MoneyFlags = moneyFlags;
                    saleGoodsDataList     = new List <SaleGoodsData>(saleGoodsDataList);
                    if (match == null)
                    {
                        match = delegate(SaleGoodsData x)
                        {
                            bool flag;
                            if (x.SalingGoodsData.SaleMoney1 > 0)
                            {
                                flag = (moneyFlags & 1) == 0;
                            }
                            else if (x.SalingGoodsData.SaleYuanBao > 0)
                            {
                                flag = (moneyFlags & 2) == 0;
                            }
                            else
                            {
                                flag = (x.SalingGoodsData.SaleYinPiao <= 0) || ((moneyFlags & 4) == 0);
                            }
                            return(flag);
                        };
                    }
                    saleGoodsDataList.RemoveAll(match);
                    _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList);
                }
                if (colorFlags > 0)
                {
                    saleGoodsDataList     = new List <SaleGoodsData>(saleGoodsDataList);
                    searchArgs.ColorFlags = colorFlags;
                    if (predicate2 == null)
                    {
                        predicate2 = x => ((1 << ((Global.GetEquipColor(x.SalingGoodsData) - 1) & 0x1f)) & searchArgs.ColorFlags) == 0;
                    }
                    saleGoodsDataList.RemoveAll(predicate2);
                    _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList);
                }
            }
            return(saleGoodsDataList);
        }
Example #4
0
        /// <summary>
        /// 获取缓存的挂售物品列表
        /// </summary>
        /// <param name="searchArgs"></param>
        /// <returns></returns>
        private static List <SaleGoodsData> GetCachedSaleGoodsList(SearchArgs searchArgs)
        {
            List <SaleGoodsData> saleGoodsDataList = null;
            SearchArgs           args = new SearchArgs(searchArgs);
            int colorFlags            = -1;
            int moneyFlags            = -1;
            int orderBy        = -1;
            int orderTypeFlags = -1;

            lock (Mutex_SaleGoodsDict)
            {
                do
                {
                    //是否缓存已有相应结果
                    if (_OrderdSaleGoodsListDict.TryGetValue(searchArgs, out saleGoodsDataList))
                    {
                        break;
                    }
                    else if (searchArgs.ColorFlags < SaleManager.ConstAllColorFlags)
                    {
                        colorFlags            = searchArgs.ColorFlags;
                        searchArgs.ColorFlags = SaleManager.ConstAllColorFlags;
                    }
                    else if (searchArgs.MoneyFlags < SaleManager.ConstAllMoneyFlags)
                    {
                        moneyFlags            = searchArgs.MoneyFlags;
                        searchArgs.MoneyFlags = SaleManager.ConstAllMoneyFlags;
                    }
                    else if (searchArgs.OrderBy > 0)
                    {
                        orderBy            = searchArgs.OrderBy;
                        searchArgs.OrderBy = 0;
                    }
                    else if (searchArgs.OrderTypeFlags > (int)SearchOrderTypes.OrderByMoney)
                    {
                        orderTypeFlags            = searchArgs.OrderTypeFlags;
                        searchArgs.OrderTypeFlags = 0;
                    }
                    else
                    {
                        break;
                    }
                } while (true);

                if (null == saleGoodsDataList)
                {
                    saleGoodsDataList = GetSaleGoodsDataList(searchArgs.Type, searchArgs.ID);
                    _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), new List <SaleGoodsData>(saleGoodsDataList));
                }
                if (orderTypeFlags > 0)
                {
                    saleGoodsDataList = new List <SaleGoodsData>(saleGoodsDataList);
                    saleGoodsDataList.Sort(GetComparerFor(true, true, (SearchOrderTypes)orderTypeFlags));
                    searchArgs.OrderTypeFlags = orderTypeFlags;
                    _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList);
                }
                if (orderBy > 0)
                {
                    saleGoodsDataList  = new List <SaleGoodsData>(saleGoodsDataList);
                    searchArgs.OrderBy = orderBy;
                    saleGoodsDataList.Reverse();
                    _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList);
                }
                if (moneyFlags > 0)
                {
                    searchArgs.MoneyFlags = moneyFlags;
                    saleGoodsDataList     = new List <SaleGoodsData>(saleGoodsDataList);
                    saleGoodsDataList.RemoveAll((x) =>
                    {
                        if (x.SalingGoodsData.SaleMoney1 > 0)
                        {
                            return((moneyFlags & 1) == 0);
                        }
                        else if (x.SalingGoodsData.SaleYuanBao > 0)
                        {
                            return((moneyFlags & 2) == 0);
                        }
                        return(true);
                    });
                    _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList);
                }
                if (colorFlags > 0)
                {
                    saleGoodsDataList     = new List <SaleGoodsData>(saleGoodsDataList);
                    searchArgs.ColorFlags = colorFlags;
                    saleGoodsDataList.RemoveAll((x) =>
                    {
                        int color = Global.GetEquipColor(x.SalingGoodsData);
                        if ((1 << (color - 1) & searchArgs.ColorFlags) == 0)
                        {
                            return(true);
                        }
                        return(false);
                    });
                    _OrderdSaleGoodsListDict.Add(searchArgs.Clone(), saleGoodsDataList);
                }
            }

            return(saleGoodsDataList);
        }