private void OnRecvBuyMarketItem(IChannel channel, Message message) { SBuyMarketItem msg = message as SBuyMarketItem; World.Instance.MarketItems.Remove(msg.item.ditem.item_id); if (msg.item.costConf.costType == CostType.Gold) { World.Instance.fPlayer.gold -= msg.item.costConf.cost; } else { World.Instance.fPlayer.silver -= msg.item.costConf.cost; } World.Instance.fPlayer.inventory.Add(msg.item.ditem.item_id, FrontEnd.Item.FItem.FromDItem(msg.item.ditem)); GameObject.FindObjectOfType <MarketBuyViewUI>().RefreshItems(); }
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); }