private void OnRecvPlayerWinOrLose(IChannel channel, Message message) { SPlayerBeatMessage msg = message as SPlayerBeatMessage; if (msg.win) { //winner FrontEnd.World.Instance.fPlayer.silver += msg.award; } else { // loser FrontEnd.World.Instance.fPlayer.silver -= msg.award; } }
public void BeatPlayer(Player winner, Player loser) { int award = 0; int remain = 0; using (var conn = DataBase.GameDataBase.GetConnection()) { using (var trans = conn.BeginTransaction()) { using (var cmd = conn.CreateCommand()) { cmd.CommandText = "Select silver From Player Where player_id=@player_id"; cmd.Parameters.AddWithValue("player_id", loser.player_id); var res = cmd.ExecuteScalar(); if (res == null) { return; } award = (int)res / 10; remain = (int)res - award; } using (var cmd = conn.CreateCommand()) { cmd.CommandText = "Update Player Set silver=@remain Where player_id=@player_id"; cmd.Parameters.AddWithValue("remain", remain); cmd.Parameters.AddWithValue("player_id", loser.player_id); var res = cmd.ExecuteNonQuery(); if (res != 1) { trans.Rollback(); return; } } using (var cmd = conn.CreateCommand()) { cmd.CommandText = "Update Player Set silver=silver+@award Where player_id=@player_id"; cmd.Parameters.AddWithValue("player_id", winner.player_id); cmd.Parameters.AddWithValue("award", award); var res = cmd.ExecuteNonQuery(); if (res != 1) { trans.Rollback(); return; } } trans.Commit(); } // trans } // conn SPlayerBeatMessage winMsg = new SPlayerBeatMessage(); winMsg.win = true; winMsg.award = award; winner.connection.Send(winMsg); SPlayerBeatMessage loseMsg = new SPlayerBeatMessage(); loseMsg.win = false; loseMsg.award = award; loser.connection.Send(loseMsg); SBroadcastMessage sbm = new SBroadcastMessage(); sbm.message = string.Format("{0} 击败了 {1}, 掠夺{2}银币", winner.user, loser.user, award); World.Instance.Broundcast(sbm); }