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); }
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); }