using System; using System.Linq; using System.Threading; using System.Collections.Generic; using FilterAPI.Networking; using FilterAPI.CustomCurrency; namespace FilterTimers.Timers { internal class MCWinTimer { #region Timer Variables private Int32 Interval; private String MessageP; private String MessageA; private Int32 CoinWinAmount; private Int32 WinningPlayerMaximum; #endregion private Boolean IsDone = true; public MCWinTimer(Int32 I, String MP, String MA, Int32 CWA, Int32 WPM) { Interval = I; MessageP = MP; MessageA = MA; CoinWinAmount = CWA; WinningPlayerMaximum = WPM; Thread NewThread = new Thread(delegate () { while (true) { Thread.Sleep(Interval * 1000); if (IsDone) { Run(); } } }); NewThread.Start(); } private void Run() { IsDone = false; try { List sIDs = Program.SQL.GetOnlinesIDs(); Random RandomGenerator = new Random(); Currency MallCurrency = Program.Currencies.Currencies.Where(CurrencyID => CurrencyID.CurrencyID == Convert.ToByte(Program.Auth.ConfigValues["PaymentMCID"])).FirstOrDefault(); for (Int32 Counter = 0; Counter < WinningPlayerMaximum; Counter++) { String sID = sIDs[RandomGenerator.Next(0, sIDs.Count)]; Int32 nCharNo = Program.SQL.GetnCharNoFromsID(sID); Int32 nEMID = Program.SQL.GetnUserNoFromsID(sID); Program.SQL.AddAmountForCC(MallCurrency.TableName, CoinWinAmount / WinningPlayerMaximum, "nUserNo", nEMID); if (Program.SQL.GettLoggedInChar(sID)) { using (var LocalPacket = new Packet(4, 9)) { LocalPacket.PacketWriter.Write(sID); LocalPacket.PacketWriter.Write((Byte)0); LocalPacket.PacketWriter.Write("Server"); LocalPacket.PacketWriter.Write(MessageP.Replace("WIN_AMOUNT", Convert.ToString(CoinWinAmount / WinningPlayerMaximum))); Program.LocalClient.SendPacket(LocalPacket); } } else { Program.SQL.InsertJoinMessage(nCharNo, MessageP.Replace("WIN_AMOUNT", Convert.ToString(CoinWinAmount / WinningPlayerMaximum))); } using (var LocalPacket = new Packet(4, 8)) { LocalPacket.PacketWriter.Write((Byte)1); LocalPacket.PacketWriter.Write(""); LocalPacket.PacketWriter.Write(MessageA.Replace("CHARACTER_NAME", sID).Replace("IS_ONLINE", Program.SQL.GettLoggedInChar(sID) ? "Online" : "Offline").Replace("WIN_AMOUNT", Convert.ToString(CoinWinAmount / WinningPlayerMaximum))); Program.LocalClient.SendPacket(LocalPacket); } } } catch (Exception Error) { Program.SendConsoleText(ConsoleColor.Red, "Timers error - Mall coin giver timer\n{0}", Error.ToString()); } IsDone = true; } } }