Exemplo n.º 1
0
        /// <summary>
        /// 堆叠道具更新满后,添加新格子
        /// </summary>
        /// <param name="itemId"></param>
        /// <param name="itemCount"></param>
        /// <param name="itemSourceType"></param>
        private void AddNewItem(int itemId, int itemCount, GetItemSourceType itemSourceType)
        {
            while (true)
            {
                // 背包满了
                if (GameEntry.Archive.Data.KnapsackModels.Count == KnapsackCapacity)
                {
                    if (itemSourceType != GetItemSourceType.Shop)
                    {
                        Log.Debug("没有存放进背包的数量 " + itemCount);
                    }

                    break;
                }

                var model = new KnapsackModel(itemId)
                {
                    Index = GetEmptySoltIndex()
                };
                GameEntry.Archive.Data.KnapsackModels.Add(model);

                // 可以放得下
                if (model.StackCount >= itemCount)
                {
                    model.CurrentStackCount += itemCount;
                    if (m_KnapsackForm)
                    {
                        m_KnapsackForm.AddItem(model, true);
                    }

                    Log.Debug("放完");
                    break;
                }

                // 放不下
                model.CurrentStackCount = model.StackCount;
                if (m_KnapsackForm)
                {
                    m_KnapsackForm.AddItem(model, true);
                }

                // 剩下的
                itemCount -= model.StackCount;
                Log.Debug("放一个新格子后剩下 " + itemCount);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 获得道具
        /// </summary>
        /// <param name="itemId">道具编号</param>
        /// <param name="itemCount">道具数量</param>
        /// <param name="sourceType">来源类型</param>
        public void AddItem(int itemId, int itemCount, GetItemSourceType sourceType)
        {
            if (!KnapsackCapacityEnough(itemId, itemCount))
            {
                // 弹窗提示用户背包满了
                Log.Debug("背包装不下这么多东西");

                if (sourceType == GetItemSourceType.Shop)
                {
                    // 如果是购买道具则返还金币
                    GameEntry.Archive.Data.AddGold(ItemModel.GetItemRow(itemId).BuyPrice *itemCount);

                    UpdateCoinAndUsedBoxCountUI();
                    return;
                }

                // 如果是普通拾取,就算背包一次性放不下这么多东西,也要放满再说
            }

            AddStackItem(itemId, itemCount, sourceType);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 获取道具后先更新堆叠的道具
        /// </summary>
        /// <param name="itemId">道具编号</param>
        /// <param name="itemCount">道具数量</param>
        /// <param name="itemSourceType">道具来源</param>
        private void AddStackItem(int itemId, int itemCount, GetItemSourceType itemSourceType)
        {
            // 先去找背包中相同的道具,堆叠存放
            for (var i = 0; i < GameEntry.Archive.Data.KnapsackModels.Count; i++)
            {
                if (GameEntry.Archive.Data.KnapsackModels[i].Id == itemId && GameEntry.Archive.Data.KnapsackModels[i].CurrentStackCount < GameEntry.Archive.Data.KnapsackModels[i].StackCount)
                {
                    // 当前格子剩余堆叠数
                    var surplusStackCount = GameEntry.Archive.Data.KnapsackModels[i].StackCount - GameEntry.Archive.Data.KnapsackModels[i].CurrentStackCount;
                    if (surplusStackCount >= itemCount)
                    {
                        // 可以放得下
                        GameEntry.Archive.Data.KnapsackModels[i].CurrentStackCount += itemCount;
                        if (m_KnapsackForm)
                        {
                            m_KnapsackForm.AddItem(GameEntry.Archive.Data.KnapsackModels[i], false);
                        }

                        Log.Debug("放完");
                        return;
                    }

                    // 放满当前格子
                    GameEntry.Archive.Data.KnapsackModels[i].CurrentStackCount += surplusStackCount;
                    itemCount -= surplusStackCount;
                    if (m_KnapsackForm)
                    {
                        m_KnapsackForm.AddItem(GameEntry.Archive.Data.KnapsackModels[i], false);
                    }

                    // 剩下的
                    Log.Debug("放满当前格子后剩下 " + itemCount);
                }
            }

            // 相同道具堆叠满了,开始放新格子
            AddNewItem(itemId, itemCount, itemSourceType);
        }