Example #1
0
    public void BuyItem(int itemType, int itemId, int count, Action <int> action)
    {
        Debug.Log("[C_Item_BuyItem_0x0403]");
        _onBuyItem = action;
        var data = new C_Item_BuyItem_0x0403();

        data._itemType = itemType;
        data._itemId   = itemId;
        data._count    = count;
        Singleton._serverCallback.AddCallback <S_Item_BuyItem_0x0403>(OnBuyItem);
        Singleton._messageManager.Send(data);
    }
        // 价格表
        // 根据价格处理
        // 金币要减少
        void OnBuyItem(Client peer, C_Item_BuyItem_0x0403 msg)
        {
            Singleton._log.Info("C_Item_BuyItem_0x0403" + ", client=" + peer._accountName);
            int code = 0;
            var data = Singleton._sqlServer.GetAssetData(peer._accountName);

            if (data == null)
            {
                code = 11;
            }
            else
            {
                List <int> list = new List <int>();
                switch (msg._itemType)
                {
                // 购买砖块模型
                case 0:
                    list.Clear();
                    list.AddRange(data._blocks);
                    var rs = list.Any((int temp) => temp == msg._itemId);
                    if (rs)
                    {
                        // 已经购买该物品
                        code = 10;
                        break;
                    }

                    var b0 = Singleton._excelUtil.GetBlock(msg._itemId);
                    if (b0 == null)
                    {
                        // 表中找不到该物品
                        code = 13;
                        break;
                    }
                    var finalCost = b0._gold * msg._count;
                    if (data._gold < finalCost)
                    {
                        // 余额不足
                        code = 12;
                        break;
                    }
                    data._gold -= finalCost;
                    Singleton._log.InfoFormat("账户{0}扣除金币{1}, 剩余金币{2}", peer._accountName, finalCost, data._gold);
                    list.Add(msg._itemId);
                    data._blocks = list.ToArray();
                    break;

                // 购买砖块遮盖板
                case 1:
                    list.Clear();
                    list.AddRange(data._blockBoards);
                    rs = list.Any((int temp) => temp == msg._itemId);
                    // 如果已经拥有就无法购买
                    // 此处是指只能拥有一个的物品
                    if (rs)
                    {
                        // 已经购买该物品
                        code = 10;
                        break;
                    }

                    var b1 = Singleton._excelUtil.GetBlockBoard(msg._itemId);
                    if (b1 == null)
                    {
                        // 表中找不到该物品
                        code = 13;
                        break;
                    }
                    finalCost = b1._gold * msg._count;
                    if (data._gold < finalCost)
                    {
                        // 余额不足
                        code = 12;
                        break;
                    }
                    data._gold -= finalCost;
                    Singleton._log.InfoFormat("账户{0}扣除金币{1}, 剩余金币{2}", peer._accountName, finalCost, data._gold);
                    list.Add(msg._itemId);
                    data._blockBoards = list.ToArray();
                    break;

                // 购买棋盘
                case 2:
                    list.Clear();
                    list.AddRange(data._boards);
                    rs = list.Any((int temp) => temp == msg._itemId);
                    // 如果已经拥有就无法购买
                    // 此处是指只能拥有一个的物品
                    if (rs)
                    {
                        // 已经购买该物品
                        code = 10;
                        break;
                    }

                    var b2 = Singleton._excelUtil.GetBoard(msg._itemId);
                    if (b2 == null)
                    {
                        // 表中找不到该物品
                        code = 13;
                        break;
                    }
                    finalCost = b2._gold * msg._count;
                    if (data._gold < finalCost)
                    {
                        // 余额不足
                        code = 12;
                        break;
                    }
                    data._gold -= finalCost;
                    Singleton._log.InfoFormat("账户{0}扣除金币{1}, 剩余金币{2}", peer._accountName, finalCost, data._gold);
                    list.Add(msg._itemId);
                    data._boards = list.ToArray();
                    break;

                // 购买人物
                case 3:
                    list.Clear();
                    list.AddRange(data._persons);
                    rs = list.Any((int temp) => temp == msg._itemId);
                    // 如果已经拥有就无法购买
                    // 此处是指只能拥有一个的物品
                    if (rs)
                    {
                        // 已经购买该物品
                        code = 10;
                        break;
                    }

                    var b3 = Singleton._excelUtil.GetPerson(msg._itemId);
                    if (b3 == null)
                    {
                        // 表中找不到该物品
                        code = 13;
                        break;
                    }
                    finalCost = b3._gold * msg._count;
                    if (data._gold < finalCost)
                    {
                        // 余额不足
                        code = 12;
                        break;
                    }
                    data._gold -= finalCost;
                    Singleton._log.InfoFormat("账户{0}扣除金币{1}, 剩余金币{2}", peer._accountName, finalCost, data._gold);
                    list.Add(msg._itemId);
                    data._persons = list.ToArray();
                    break;
                }
            }
            if (code == 0)
            {
                code = Singleton._sqlServer.ChangeAsset(data);
            }

            // 更新客户端金币
            Singleton._log.Info("S_Item_GetGold_0x0404" + ", client=" + peer._accountName);
            int num = 0;
            var a   = Singleton._sqlServer.GetAssetData(peer._accountName);

            if (a != null)
            {
                num = a._gold;
            }

            Send(peer, new S_Item_GetGold_0x0404
            {
                _num = num
            });

            Singleton._log.Info("S_Item_BuyItem_0x0403" + ", client=" + peer._accountName);
            Send(peer, new S_Item_BuyItem_0x0403
            {
                _itemType = msg._itemType,
                _itemId   = msg._itemId,
                _code     = code
            });
        }