Example #1
0
        public int CalcNumLimitBuyMax(int nLimitID, int nSellID, int nResType, int nCurRes)
        {
            SPointShopNumLimitPrice limitConfig = PointShopConfig.Instance.GetShopNumLimitPriceConfig(nLimitID);

            if (limitConfig == null)
            {
                return(0);
            }

            int nBoughtNum = 0;
            cmd_entity_update_pointshop_buynum_info buyNumInfo = new cmd_entity_update_pointshop_buynum_info();

            if (BuyNumInfo.TryGetValue(nSellID, out buyNumInfo))
            {
                nBoughtNum = buyNumInfo.nBoughtNum;
            }

            int nIndex = 0;

            for (; nIndex < limitConfig.limitStepList.Count; ++nIndex)
            {
                int nLimitNum = limitConfig.limitStepList[nIndex].nLimitNum;
                if (nLimitNum == 0)
                {
                    return(0);
                }

                if (nLimitNum < 0 || nBoughtNum < nLimitNum)
                {
                    break;
                }
            }

            if (nIndex >= limitConfig.limitStepList.Count)
            {
                return(0);
            }

            int nResult = 0;

            while (nCurRes > 0)
            {
                if (nIndex >= limitConfig.limitStepList.Count)
                {
                    break;
                }

                SPointShopNumLimitPriceSub config = limitConfig.limitStepList[nIndex];
                int nSinglePrice = 0;
                if (nResType == 0)
                {
                    nSinglePrice = config.nLimitPointPrice;
                }
                else
                {
                    nSinglePrice = config.nLimitMoneyPrice;
                }

                if (nSinglePrice <= 0)
                {
                    break;
                }

                int nCanBuyNum = config.nLimitNum - nBoughtNum;
                int nStepPrice = nSinglePrice * nCanBuyNum;
                if (nStepPrice >= nCurRes)
                {
                    nResult += nCurRes / nSinglePrice;
                    nCurRes  = 0;
                }
                else
                {
                    nResult    += nCanBuyNum;
                    nBoughtNum += nCanBuyNum;
                    nCurRes    -= nStepPrice;
                }

                ++nIndex;
            }

            return(nResult);
        }
Example #2
0
        public int CalcNumLimitPrice(int nLimitID, int nSellID, int nResType, int nBuyNum)
        {
            SPointShopNumLimitPrice limitConfig = PointShopConfig.Instance.GetShopNumLimitPriceConfig(nLimitID);

            if (limitConfig == null)
            {
                return(0);
            }

            int nBoughtNum = 0;
            cmd_entity_update_pointshop_buynum_info buyNumInfo = new cmd_entity_update_pointshop_buynum_info();

            if (BuyNumInfo.TryGetValue(nSellID, out buyNumInfo))
            {
                nBoughtNum = buyNumInfo.nBoughtNum;
            }

            int nIndex = 0;

            for (; nIndex < limitConfig.limitStepList.Count; ++nIndex)
            {
                int nLimitNum = limitConfig.limitStepList[nIndex].nLimitNum;
                if (nLimitNum == 0)
                {
                    return(0);
                }

                if (nLimitNum < 0 || nBoughtNum < nLimitNum)
                {
                    break;
                }
            }

            if (nIndex >= limitConfig.limitStepList.Count)
            {
                return(0);
            }

            long lRealPrice = 0;

            int nHasBuyNum = nBoughtNum;    // 已经购买数量
            int nToBuyNum  = nBuyNum;       // 本次将要购买数量

            int nPriceTotal = 0;

            for (nIndex = 0; nIndex < limitConfig.limitStepList.Count; ++nIndex)
            {
                SPointShopNumLimitPriceSub node = limitConfig.limitStepList[nIndex];
                if (nHasBuyNum > node.nLimitNum)
                {
                    continue;
                }

                int nSinglePrice = ((nResType == 0) ? node.nLimitPointPrice : node.nLimitMoneyPrice);
                if (nSinglePrice <= 0)
                {
                    return(0);
                }

                int nDiffNum = node.nLimitNum - nHasBuyNum;
                // 当次可购买数量,如果不够将下次循环中继续扣除本次的数量
                int nCanBuyNum = (nDiffNum >= nToBuyNum ? nToBuyNum : nDiffNum);

                nPriceTotal += nSinglePrice * nCanBuyNum;

                nHasBuyNum += nCanBuyNum;
                nToBuyNum  -= nCanBuyNum;
                if (nToBuyNum <= 0)
                {
                    break;
                }
            }
            lRealPrice = nPriceTotal;

            if (lRealPrice > int.MaxValue)
            {
                return(0);
            }

            return((int)lRealPrice);
        }