using System; using System.Data; using System.Linq; using System.Timers; using System.Data.SqlClient; using System.Collections.Generic; using Filter.Networking.Manager; namespace Filter.Utilities { internal class Lottery { private DateTime DrawTime; private Timer LotteryTimer; private Timer AnnounceTimer; public Lottery() { DrawTime = DateTime.Now.AddSeconds(Program.Config.LInterval); LotteryTimer = new Timer(); LotteryTimer.AutoReset = true; LotteryTimer.Elapsed += LotteryTimer_Elapsed; LotteryTimer.Interval = 60000; LotteryTimer.Start(); AnnounceTimer = new Timer(); AnnounceTimer.AutoReset = true; AnnounceTimer.Elapsed += AnnounceTimer_Elapsed; AnnounceTimer.Interval = 1000; AnnounceTimer.Start(); } private void LotteryTimer_Elapsed(Object Sender, ElapsedEventArgs Args) { using (var Connection = new SqlConnection()) { Connection.ConnectionString = Program.ConnectionBuilder.ConnectionString; try { Connection.Open(); } catch { } if (Connection.State == ConnectionState.Open) { using (var Command = Connection.CreateCommand()) { if (Program.Config.LType == SaveType.Account) { Command.CommandText = Command.CommandText = String.Format("SELECT nEMID, Amount FROM {0}..tLottery", Program.Config.SQLLottery); } else { Command.CommandText = Command.CommandText = String.Format("SELECT nCharNo, Amount FROM {0}..tLottery", Program.Config.SQLLottery); } Dictionary Tickets = new Dictionary(); using (var Reader = Command.ExecuteReader()) { while (Reader.Read()) { Tickets.Add(Convert.ToInt32(Reader["nCharNo"]), Convert.ToInt64(Reader["Amount"])); } Reader.Close(); } Random LotteryWinner = new Random(); Int32 Winner = LotteryWinner.Next(0, Tickets.Keys.Count - 1); Command.CommandText = String.Format("SELECT TOP 1 sID FROM {0}..tCharacters WHERE nCharNo = '{1}'", Program.Config.SQLCharacter, Winner); String CharacterName = Convert.ToString(Command.ExecuteScalar()); Int64 TotalTickets = 0; foreach(Int64 Value in Tickets.Values) { TotalTickets += Value; } Echo.SendWorldMessage(true, "{0} has won the lottery! They have won: {1}.", CharacterName, Money.ConvertMoney(Program.Config.LTicketPirce * TotalTickets)); ManagerClient WClient; if ((WClient = Program.ManagerLoggedIn.Values.Where(Character => Character.CharacterName.ToLower() == CharacterName.ToLower()).FirstOrDefault()) != null) { Echo.SendWhisper(WClient, "You have won {0} from the lottery.", Money.ConvertMoney(Program.Config.LTicketPirce * TotalTickets)); } Command.CommandText = String.Format("UPDATE {0}..tUserMoney SET nUserMoney = (nUserMoney + {1}) WHERE nUserNo = '{2}'", Program.Config.SQLCharacter, Program.Config.LTicketPirce * TotalTickets, WClient.AccountID); Command.ExecuteNonQuery(); Command.CommandText = String.Format("DELETE FROM {0}..tLottery"); Command.ExecuteNonQuery(); Connection.Close(); } } } } private void AnnounceTimer_Elapsed(Object Sender, ElapsedEventArgs Args) { using (var Connection = new SqlConnection()) { Connection.ConnectionString = Program.ConnectionBuilder.ConnectionString; try { Connection.Open(); } catch { } if (Connection.State == ConnectionState.Open) { using (var Command = Connection.CreateCommand()) { foreach (ManagerClient MClient in Program.ManagerLoggedIn.Values.Where(AccountID => AccountID.AccountID != -1).Where(Character => Character.CharacterName != String.Empty)) { Int64 TotalTickets = 0; Command.CommandText = String.Format("SELECT Amount FROM {0}..tLottery", Program.Config.SQLLottery); using (var Reader = Command.ExecuteReader()) { while (Reader.Read()) { TotalTickets += Convert.ToByte(Reader["Amount"]); } Reader.Close(); } Byte BoughtTickets; Int32 nCharNo; if (Program.Config.LType == SaveType.Account) { Command.CommandText = String.Format("SELECT TOP 1 Amount FROM {0}..tLottery WHERE nEMID = '{1}'", Program.Config.SQLLottery, MClient.AccountID); } else { Command.CommandText = String.Format("SELECT TOP 1 nCharNo FROM {0}..tCharacter WHERE sID = '{1}'", Program.Config.SQLCharacter, MClient.CharacterName); nCharNo = Convert.ToInt32(Command.ExecuteScalar()); Command.CommandText = String.Format("SELECT TOP 1 Amount FROM {0}..tLottery WHERE nCharNo = '{1}'", Program.Config.SQLLottery, nCharNo); } BoughtTickets = Convert.ToByte(Command.ExecuteScalar()); if (BoughtTickets == 0) { Echo.SendWhisper(MClient, "You have not bought any tickets for the lottery yet. If you would like to buy some whisper me ({0}).", Program.Config.BotName); Echo.SendWhisper(MClient, "Use command &Lottery Buy TICKETAMOUNT."); } else { if (BoughtTickets != Program.Config.LMaxTickets) { Echo.SendWhisper(MClient, "You have only bought {0}/{1} tickets, the more tickets you buy the higher chance you have of winning.", BoughtTickets, Program.Config.LMaxTickets); Echo.SendWhisper(MClient, "If you win the Lottery you will get: {0}.", Money.ConvertMoney(TotalTickets * Program.Config.LTicketPirce)); } else { TimeSpan WaitSpan = DrawTime.Subtract(DateTime.Now); Echo.SendWhisper(MClient, "You have bought the maximum amount of tickets, the Lottery will draw in {0} Hours, {1} Minutes, {2} Seconds.", WaitSpan.Hours, WaitSpan.Minutes, WaitSpan.Seconds); Echo.SendWhisper(MClient, "Current Lottery worth: {0}.", Money.ConvertMoney(TotalTickets * Program.Config.LTicketPirce)); } } } } } Connection.Close(); } } } }