Пример #1
0
    private void Awake()
    {
        ItemInfo.SetActive(false);
        BuyShelfItem.SetActive(false);
        BuyButton.GetComponent <Button>().onClick.AddListener(delegate()
        {
            if (!World.Instance.MarketItems.ContainsKey(ItemId))
            {
                return;
            }
            var item   = World.Instance.MarketItems[ItemId];
            var gold   = World.Instance.fPlayer.gold;
            var silver = World.Instance.fPlayer.silver;
            if (item.costConf.costType == CostType.Gold)
            {
                if (gold < item.costConf.cost)
                {
                    MessageBox.Show("Can't Afford that.");
                    return;
                }
            }
            else
            {
                if (silver < item.costConf.cost)
                {
                    MessageBox.Show("Can't Afford that.");
                    return;
                }
            }
            CBuyMarketItem msg = new CBuyMarketItem();
            msg.item           = item;
            Gamekit3D.Network.Client.Instance.Send(msg);

            ItemId = -1;
            ItemInfo.SetActive(false);
        });
    }
Пример #2
0
        private void OnRecvBuyMarketItem(IChannel channel, Message message)
        {
            CBuyMarketItem request = message as CBuyMarketItem;
            var            player  = (Player)channel.GetContent();

            using (var conn = GameDataBase.GetConnection())
            {
                using (var trans = conn.BeginTransaction())
                {
                    int market_id = 0;
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "Select market_id From Market Where item_id=@item_id And valid=true;";
                        cmd.Parameters.AddWithValue("item_id", request.item.ditem.item_id);
                        var res = cmd.ExecuteScalar();
                        if (res == null)
                        {
                            trans.Rollback();
                            ClientTipInfo(channel, "Error! Try again.[Buy]");
                            return;
                        }
                        market_id = (int)res;
                    }
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "Select player_id From Player Where player_id=@player_id And items_count<40 And gold>=@gold And silver>=@silver;";
                        cmd.Parameters.AddWithValue("player_id", player.player_id);
                        cmd.Parameters.AddWithValue("gold", request.item.costConf.costType == CostType.Gold ? request.item.costConf.cost : 0);
                        cmd.Parameters.AddWithValue("silver", request.item.costConf.costType == CostType.Gold ? 0 : request.item.costConf.cost);
                        var res = cmd.ExecuteScalar();
                        if (res == null)
                        {
                            trans.Rollback();
                            ClientTipInfo(channel, "Error! Try again.[Buy1]");
                            return;
                        }
                    }
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "Update Market Set valid=false, buyer_id=@player_id Where market_id=@market_id;";
                        cmd.Parameters.AddWithValue("market_id", market_id);
                        cmd.Parameters.AddWithValue("player_id", player.player_id);
                        var res = cmd.ExecuteNonQuery();
                        if (res != 1)
                        {
                            trans.Rollback();
                            ClientTipInfo(channel, "Error! Try again.[Buy2]");
                            return;
                        }
                    }
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "Update Item Set player_id=@player_id, status='Storing' Where item_id=@item_id";
                        cmd.Parameters.AddWithValue("player_id", player.player_id);
                        cmd.Parameters.AddWithValue("item_id", request.item.ditem.item_id);
                        var res = cmd.ExecuteNonQuery();
                        if (res != 1)
                        {
                            trans.Rollback();
                            ClientTipInfo(channel, "Error! Try again.[Buy3]");
                            return;
                        }
                    }
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "Update Player Set items_count=items_count+1, gold=gold-@gold, silver=silver-@silver Where player_id=@player_id;";
                        cmd.Parameters.AddWithValue("gold", request.item.costConf.costType == CostType.Gold ? request.item.costConf.cost : 0);
                        cmd.Parameters.AddWithValue("silver", request.item.costConf.costType == CostType.Gold ? 0 : request.item.costConf.cost);
                        cmd.Parameters.AddWithValue("player_id", player.player_id);
                        var res = cmd.ExecuteNonQuery();
                        if (res != 1)
                        {
                            trans.Rollback();
                            ClientTipInfo(channel, "Error! Try again.[Buy4]");
                            return;
                        }
                    }
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = "Update Player Set gold=gold+@gold, silver=silver+@silver Where player_id=@player_id";
                        cmd.Parameters.AddWithValue("gold", request.item.costConf.costType == CostType.Gold ? request.item.costConf.cost : 0);
                        cmd.Parameters.AddWithValue("silver", request.item.costConf.costType == CostType.Gold ? 0 : request.item.costConf.cost);
                        cmd.Parameters.AddWithValue("player_id", request.item.owner_id);
                        var res = cmd.ExecuteNonQuery();
                        if (res != 1)
                        {
                            trans.Rollback();
                            ClientTipInfo(channel, "Error! Try again.[Buy5]");
                            return;
                        }
                    }
                    trans.Commit();
                }
            }
            SBuyMarketItem response = new SBuyMarketItem();

            response.item = request.item;
            channel.Send(response);
            player.inventory.Add(request.item.ditem.item_id, request.item.ditem);
        }