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