private static void ExecuteRaffle(object o) { TShock.Utils.Broadcast("Raffle beginning!", Color.GreenYellow); List<string> raffleValues = new List<string>(ExtendedAdmin.Config.RaffleOdds); RaffleManager manager = new RaffleManager(TShock.DB); var raffleTickets = manager.GetAllCurrentRaffleTickets(); foreach (var ticket in raffleTickets) { for(int i = 0; i < ticket.TicketCount; i++) { raffleValues.Add(ticket.User); } } while (raffleValues.Count < ExtendedAdmin.Config.RaffleOdds) { raffleValues.Add(null); } raffleValues = raffleValues.Shuffle().ToList(); Random random = new Random(); var winner = raffleValues[random.Next(0, raffleValues.Count - 1)]; var raffle = manager.GetCurrentRaffle(); if (!winner.IsNullOrEmptyTrim()) { var winnerTicket = raffleTickets.FirstOrDefault(t => t.User == winner); TShock.Utils.Broadcast(string.Format("Congratulations {0}, you are the winner of {1} shards!", winnerTicket.CharacterName, raffle.Pot), Color.GreenYellow); TShock.Utils.Broadcast("A new raffle begins now!", Color.GreenYellow); var player = TShock.Players.Where(p => p!= null && p.UserAccountName == winner).SingleOrDefault(); manager.Reward(winner, winnerTicket.CharacterName, player, raffle.Pot); StartRaffle(); } else { manager.UpdateRaffleTime(); manager.DecreaseTickets(ExtendedAdmin.Config.RaffleTicketsKept); TShock.Utils.Broadcast(string.Format("There was no winner, {0} shards are now up for grabs!", raffle.Pot), Color.GreenYellow); TShock.Utils.Broadcast(string.Format("{0}% of tickets were claimed by the raffle. Remember to buy more!", (100f - ExtendedAdmin.Config.RaffleTicketsKept).ToString("F2")), Color.GreenYellow); Update(); } }
public static void Update() { RaffleHandler.NextRaffleUpdate = DateTime.Now.AddMinutes(ExtendedAdmin.Config.RaffleUpdateDuration); RaffleManager manager = new RaffleManager(TShock.DB); var raffle = manager.GetCurrentRaffle(); TimeSpan nextRaffle = RaffleHandler.NextRaffleTime - DateTime.Now; TShock.Utils.Broadcast(string.Format("Current raffle pot: {0}! Next raffle in {1} minute(s) {2} second(s)!", raffle.Pot, (int)nextRaffle.TotalMinutes, (int)nextRaffle.Seconds)); var lastRaffle = manager.GetLastRaffle(); if (lastRaffle != null) { TShock.Utils.Broadcast(string.Format("{0} won {1} in the last raffle!", lastRaffle.Winner, lastRaffle.Pot), Color.GreenYellow); } }
public static void RaffleInfo(CommandArgs args) { if (!args.Player.RealPlayer || args.Player.UserAccountName.IsNullOrEmptyTrim()) { args.Player.SendMessage("You must be logged in to use this command."); return; } RaffleManager manager = new RaffleManager(TShock.DB); var raffle = manager.GetCurrentRaffle(); var tickets = manager.GetRaffleTickets(args.Player.UserAccountName, raffle.RaffleID); TimeSpan nextRaffle = RaffleHandler.NextRaffleTime - DateTime.Now; args.Player.SendMessage(string.Format("Ticket cost: {0} Current tickets: {1} Next raffle: {2} minute(s) {4} second(s) Current pot: {3}", ExtendedAdmin.Config.RaffleTicketCost, tickets.TicketCount, (int)nextRaffle.TotalMinutes, raffle.Pot, nextRaffle.Seconds), Color.Green); }
private static void StartRaffle() { RaffleManager manager = new RaffleManager(TShock.DB); var raffle = manager.GetCurrentRaffle(); if (raffle == null) { manager.CreateRaffle(ExtendedAdmin.Config.RaffleStartPot); NextRaffleTime = DateTime.Now.AddMinutes(ExtendedAdmin.Config.RaffleDuration); } else { NextRaffleTime = raffle.LastRaffle == DateTime.MinValue ? DateTime.Now.AddMinutes(ExtendedAdmin.Config.RaffleDuration) : raffle.LastRaffle.AddMinutes(ExtendedAdmin.Config.RaffleDuration); } }
public static void BuyRaffleTicket(CommandArgs args) { if (!args.Player.RealPlayer || args.Player.UserAccountName.IsNullOrEmptyTrim()) { args.Player.SendMessage("You must be logged in to use this command.", Color.Red); return; } if (args.Parameters.Count > 0 && args.Parameters[0].ToIntegerOrDefault(-1) < 1) { args.Player.SendMessage("Invalid syntax! Proper syntax /buyraffleticket <amount>", Color.Red); return; } RaffleManager manager = new RaffleManager(TShock.DB); //var account = manager.GetServerPointAccounts(args.Player.UserAccountName); var ePlayer = ServerPointSystem.ServerPointSystem.EPRPlayers.Single(p => p.TSPlayer == args.Player); if (ePlayer == null) { args.Player.SendMessage("You do not have any shards."); return; } int amount; if (args.Parameters.Count > 0) { amount = args.Parameters[0].ToIntegerOrDefault(0); } else { amount = 1; } int totalCost = amount * ExtendedAdmin.Config.RaffleTicketCost; if (ePlayer.DisplayAccount < totalCost) { args.Player.SendMessage(string.Format("You do not have enough shards to buy {0} tickets.", amount), Color.Red); return; } var raffle = manager.GetCurrentRaffle(); var tickets = manager.GetRaffleTickets(args.Player.UserAccountName, raffle.RaffleID); if (tickets.TicketCount + amount > ExtendedAdmin.Config.MaxRaffleTickets) { args.Player.SendMessage(string.Format("You cannot have over {0} tickets. You currently have {1}.", ExtendedAdmin.Config.MaxRaffleTickets, tickets.TicketCount), Color.Red); return; } if (manager.BuyTicket(args.Player, amount, totalCost)) { tickets = manager.GetRaffleTickets(args.Player.UserAccountName, raffle.RaffleID); args.Player.SendMessage(string.Format("Successfully bought tickets. You now have {0} tickets.", tickets.TicketCount), Color.Green); } else { args.Player.SendMessage("Ticket purchase failed, please try again later.", Color.Red); } }