public void OnBuyButtonClicked() { CBuyTmallItems msg = new CBuyTmallItems(); msg.luck = World.Instance.fPlayer.intelligence; List <TmallItem> items = new List <TmallItem>(); int gold_cost = 0; int silver_cost = 0; int item_count = 0; foreach (var kv in m_items) { var cartItem = kv.Value.GetComponent <CartItemUI>(); //cartItem.item Debug.Log(string.Format("Buy {0} * {1}, Cost {2} {3}", cartItem.item.name, cartItem.Count, cartItem.cost.cost * cartItem.Count, cartItem.cost.costType.ToString())); TmallItem item = new TmallItem(); item.itemConf = cartItem.item; item.costConf = cartItem.cost; item.count = cartItem.Count; items.Add(item); Destroy(kv.Value); if (item.costConf.costType == CostType.Silver) { silver_cost += item.count * item.costConf.cost; } else { gold_cost += item.count * item.costConf.cost; } if (item.itemConf.type != ItemType.Others) { item_count += item.count; } } m_items.Clear(); msg.tmallItems = items.ToArray(); if (!(gold_cost <= World.Instance.fPlayer.gold && silver_cost <= World.Instance.fPlayer.silver)) { MessageBox.Show("Can't Afford that!"); return; } if (World.Instance.fPlayer.inventory.Count + item_count > 40) { MessageBox.Show("Inventory is FULL!"); return; } Client.Instance.Send(msg); }
private void OnRecvBuyTmallItems(IChannel channel, Message message) { CBuyTmallItems request = message as CBuyTmallItems; Player player = (Player)channel.GetContent(); int gold = 0, silver = 0; TmallItem silverItem = null; List <DItem> items = new List <DItem>(); foreach (var item in request.tmallItems) { if (item.costConf.costType == CostType.Silver) { silver += item.costConf.cost * item.count; } else { gold += item.costConf.cost * item.count; } if (item.itemConf.type == ItemType.Others) { silverItem = item; } else { for (int i = 0; i < item.count; i++) { items.Add(FItem.CreateSpecificItem(item.itemConf.name, item.itemConf.icon, item.itemConf.type, request.luck).ToDItem()); } } } using (var conn = GameDataBase.GetConnection()) { using (var trans = conn.BeginTransaction()) { using (var cmd = conn.CreateCommand()) { // Check Player account cmd.CommandText = "Select player_id From Player Where player_id=@player_id And gold>=@gold And silver>=@silver And items_count<=@items_count;"; cmd.Parameters.AddWithValue("player_id", player.player_id); cmd.Parameters.AddWithValue("gold", gold); cmd.Parameters.AddWithValue("silver", silver); cmd.Parameters.AddWithValue("items_count", 40 - items.Count); var res = cmd.ExecuteScalar(); if (res == null) { trans.Rollback(); ClientTipInfo(channel, "Can't Afford that!"); return; } } if (silverItem != null) { using (var cmd = conn.CreateCommand()) { // Silver cmd.CommandText = "Update Player Set silver=silver+@silver Where player_id=@player_id;"; cmd.Parameters.AddWithValue("silver", silverItem.count * 50); cmd.Parameters.AddWithValue("player_id", player.player_id); var res = cmd.ExecuteNonQuery(); if (res != 1) { trans.Rollback(); ClientTipInfo(channel, "Error! Please try again [1]."); return; } } } foreach (var item in items) { using (var cmd = conn.CreateCommand()) { cmd.CommandText = "Insert Into Item(item_id, player_id, type, status, name," + "health_value, speed_value, damage_value, intelligence_value, defence_value, icon, silver_value)" + "Values(DEFAULT, @player_id, '" + item.item_type + "', 'Storing', @name," + "@health_value, @speed_value, @damage_value, @intelligence_value, @defence_value, @icon, @silver_value) Returning item_id;"; cmd.Parameters.AddWithValue("player_id", player.player_id); //cmd.Parameters.AddWithValue("type", item.item_type.ToString()); cmd.Parameters.AddWithValue("name", item.name); cmd.Parameters.AddWithValue("health_value", item.health_value); cmd.Parameters.AddWithValue("speed_value", item.speed_value); cmd.Parameters.AddWithValue("damage_value", item.damage_value); cmd.Parameters.AddWithValue("intelligence_value", item.intelligence_value); cmd.Parameters.AddWithValue("defence_value", item.defence_value); cmd.Parameters.AddWithValue("icon", item.icon_name); cmd.Parameters.AddWithValue("silver_value", item.silver_value); var res = cmd.ExecuteScalar(); if (res == null) { trans.Rollback(); ClientTipInfo(channel, "Error! Please try again [2]."); return; } item.item_id = (int)res; } } using (var cmd = conn.CreateCommand()) { cmd.CommandText = "Update Player Set items_count=items_count+@count, gold=gold-@gold, silver=silver-@silver Where player_id=@player_id;"; cmd.Parameters.AddWithValue("count", items.Count); cmd.Parameters.AddWithValue("gold", gold); cmd.Parameters.AddWithValue("silver", silver); cmd.Parameters.AddWithValue("player_id", player.player_id); var res = cmd.ExecuteNonQuery(); if (res != 1) { trans.Rollback(); ClientTipInfo(channel, "Error! Please try again [3]."); return; } } trans.Commit(); } // trans } // conn SBuyTmallItems response = new SBuyTmallItems(); response.dItems = items.ToArray(); if (silverItem != null) { response.silver = silverItem.count * 50 - silver; } else { response.silver = -silver; } response.gold = -gold; channel.Send(response); foreach (var ditem in items) { player.inventory.Add(ditem.item_id, ditem); } }