Пример #1
0
        public void UpdateBuyNumInfo(IntPtr ptrParam, int nPtrLen)
        {
            cmd_entity_update_pointshop_buynum_info data = IntPtrHelper.toData <cmd_entity_update_pointshop_buynum_info>(ptrParam);

            if (buyNumInfo.ContainsKey(data.nSellID))
            {
                buyNumInfo[data.nSellID] = data;
            }
            else
            {
                buyNumInfo.Add(data.nSellID, data);
            }

            // TODO 发送窗口消息
        }
Пример #2
0
        void ReflushTopDesc()
        {
            topDescText.text = "";
            if (m_curPrizeConfig.nPrizeType == (int)EMActorPrizeType.ACTOR_PRIZE_RUNE)
            {
                int nRuneID = m_curPrizeConfig.nPrizeParam[0];
                SSchemeRuneConfig runeConfig = null;
                RunePage.Instance.GetRuneInfo(nRuneID, ref runeConfig);
                if (runeConfig != null)
                {
                    List <RuneItemInfo> runeList = null;
                    int nRuneNum = 0;
                    LogicDataCenter.runePageDataManager.dicRuneInlayTypeStoreInfo.TryGetValue(runeConfig.nRuneInlayType, out runeList);
                    if (runeList != null)
                    {
                        for (int i = 0; i < runeList.Count; ++i)
                        {
                            if (runeList[i].nRuneId == nRuneID)
                            {
                                nRuneNum += runeList[i].nRuneNum;
                            }
                        }
                    }
                    topDescText.text = String.Format(ULocalizationService.Instance.Get("UIView", "PointShopBuyGoods", "HaveRuneNumDesc"), nRuneNum);
                }
            }
            else if (m_curPrizeConfig.nPrizeType == (int)EMActorPrizeType.ACTOR_PRIZE_HEROCARD)
            {
                if (m_curGoodsConfig.nNumLimitID > 0)
                {
                    SPointShopNumLimitPrice limitConfig = PointShopConfig.Instance.GetShopNumLimitPriceConfig(m_curGoodsConfig.nNumLimitID);
                    if (limitConfig != null && limitConfig.limitStepList.Count > 0)
                    {
                        int nMaxNum    = limitConfig.limitStepList[limitConfig.limitStepList.Count - 1].nLimitNum;
                        int nBoughtNum = 0;
                        cmd_entity_update_pointshop_buynum_info buyNumInfo = new cmd_entity_update_pointshop_buynum_info();
                        if (LogicDataCenter.pointShopDataManager.BuyNumInfo.TryGetValue(m_curGoodsConfig.nSellID, out buyNumInfo))
                        {
                            nBoughtNum = buyNumInfo.nBoughtNum;
                        }

                        int nLeftNum = nMaxNum - nBoughtNum;

                        topDescText.text = String.Format(ULocalizationService.Instance.Get("UIView", "PointShopBuyGoods", "CanBuyCardNumDesc"), nLeftNum);
                    }
                }
            }
        }
Пример #3
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);
        }
Пример #4
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);
        }