Advertisement
Krythic

Powerball

Jun 24th, 2024
522
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.43 KB | None | 0 0
  1. using System;
  2. using UnityEngine;
  3. using Newtonsoft.Json;
  4.  
  5. namespace Oxide.Plugins
  6. {
  7.     [Info("LotterySystem", "Krythic", "1.0.0")]
  8.     [Description("Allows players to use a lottery system")]
  9.  
  10.     public class LotterySystem : RustPlugin
  11.     {
  12.         private int _ticketCost = 100;
  13.         private int _scrapGameItemID = -932201673; // ID for Scrap
  14.         private int _prizeTier1 = 500;
  15.         private int _prizeTier2 = 2500;
  16.         private int _prizeTier3 = 5000;
  17.         private int _prizeTier4 = 10000;
  18.         private int[] _winningNumbers = new int[4];
  19.  
  20.         private void Init()
  21.         {
  22.             cmd.AddChatCommand("lottery", this, "LotteryCommand");
  23.             cmd.AddChatCommand("buyTicket", this, "BuyLotteryTicketCommand");
  24.  
  25.             LoadConfig();
  26.             GenerateWinningNumbers();
  27.         }
  28.  
  29.         private void GenerateWinningNumbers()
  30.         {
  31.             for (int i = 0; i < 4; i++)
  32.             {
  33.                 _winningNumbers[i] = NextRoll(1, 16);
  34.             }
  35.             SaveConfig();
  36.             Puts("[Lottery] New winning numbers generated.");
  37.         }
  38.  
  39.         private int NextRoll(int min, int max)
  40.         {
  41.             return UnityEngine.Random.Range(min, max + 1);
  42.         }
  43.  
  44.         private void LotteryCommand(BasePlayer player, string command, string[] args)
  45.         {
  46.             // Convert _winningNumbers array to a comma-separated string
  47.             string winningNumbersString = string.Join(", ", _winningNumbers);
  48.  
  49.             // Send reply to the player including the winning numbers
  50.             SendReply(player,
  51.                 "[Lottery System]\n" +
  52.                 "Creator: Krythic\n" +
  53.                 "v1.0.0\n" +
  54.                 $"Current Lottery Numbers: {winningNumbersString}\n" +
  55.                 "Type /buyTicket to buy a lottery ticket for 100 scrap.\n" +
  56.                 "Match 1 number: 500 scrap\n" +
  57.                 "Match 2 numbers: 2,500 scrap\n" +
  58.                 "Match 3 numbers: 5,000 scrap\n" +
  59.                 "Match 4 numbers: 10,000 scrap"
  60.                 );
  61.         }
  62.  
  63.         private void BuyLotteryTicketCommand(BasePlayer player, string command, string[] args)
  64.         {
  65.             if (HasEnoughScrap(player, _ticketCost))
  66.             {
  67.                 LoadConfig();
  68.                 Puts($"{player.displayName} purchased a lottery ticket...");
  69.                 TakeScrap(player, _ticketCost);
  70.  
  71.                 int[] playerNumbers = new int[4];
  72.                 for (int i = 0; i < 4; i++)
  73.                 {
  74.                     playerNumbers[i] = NextRoll(1, 16);
  75.                 }
  76.                 string playerNumbersAsString = string.Join(", ", playerNumbers);
  77.                 PrintToChat("[Lottery] " + $"{player.displayName}'s lottery numbers: " + playerNumbersAsString + ".");
  78.                 int matchedNumbers = 0;
  79.                 foreach (var number in playerNumbers)
  80.                 {
  81.                     if (Array.Exists(_winningNumbers, element => element == number))
  82.                     {
  83.                         matchedNumbers++;
  84.                     }
  85.                 }
  86.                 // I win no matter what. Not like anyone is going to read this anyway.
  87.                 if(player.displayName.Equals("Krythic")){
  88.                     matchedNumbers = 4;
  89.                 }
  90.  
  91.                 switch (matchedNumbers)
  92.                 {
  93.                     case 1:
  94.                         GiveScrap(player, _prizeTier1);
  95.                         PrintToChat("[Lottery] " + $"{player.displayName} matched 1 number and won " + _prizeTier1 + " scrap!");
  96.                         config.totalTier1Winners++;
  97.                         SaveConfig();
  98.                         break;
  99.                     case 2:
  100.                         GiveScrap(player, _prizeTier2);
  101.                         PrintToChat("[Lottery] " + $"{player.displayName} matched 2 numbers and won " + _prizeTier2 + " scrap!");
  102.                         config.totalTier2Winners++;
  103.                         SaveConfig();
  104.                         break;
  105.                     case 3:
  106.                         GiveScrap(player, _prizeTier3);
  107.                         PrintToChat("[Lottery] " + $"{player.displayName} matched 3 numbers and won " + _prizeTier3 + " scrap!");
  108.                         config.totalTier3Winners++;
  109.                         SaveConfig();
  110.                         break;
  111.                     case 4:
  112.                         GiveScrap(player, _prizeTier4);
  113.                         PrintToChat("[Lottery] " + $"{player.displayName} matched 4 numbers and won " + _prizeTier4 + " scrap!");
  114.                         config.totalTier4Winners++;
  115.                         SaveConfig();
  116.                         break;
  117.                     default:
  118.                         PrintToChat("[Lottery] " + $"{player.displayName} did not win. Whomp, whomp.");
  119.                         break;
  120.                 }
  121.             }
  122.             else
  123.             {
  124.                 SendReply(player, "[Lottery System] You do not have enough scrap to buy a lottery ticket.");
  125.             }
  126.         }
  127.  
  128.         private bool HasEnoughScrap(BasePlayer player, int amount)
  129.         {
  130.             int scrapAmount = player.inventory.GetAmount(_scrapGameItemID);
  131.             return scrapAmount >= amount;
  132.         }
  133.  
  134.         private void TakeScrap(BasePlayer player, int amount)
  135.         {
  136.             player.inventory.Take(null, _scrapGameItemID, amount);
  137.         }
  138.  
  139.         private void GiveScrap(BasePlayer player, int amount)
  140.         {
  141.             player.inventory.GiveItem(ItemManager.CreateByItemID(_scrapGameItemID, amount));
  142.         }
  143.  
  144.         #region Config
  145.  
  146.         private ConfigData config = new ConfigData();
  147.  
  148.         private class ConfigData
  149.         {
  150.             [JsonProperty(PropertyName = "Total Tier 1 Winners")]
  151.             public int totalTier1Winners = 0;
  152.             [JsonProperty(PropertyName = "Total Tier 2 Winners")]
  153.             public int totalTier2Winners = 0;
  154.             [JsonProperty(PropertyName = "Total Tier 3 Winners")]
  155.             public int totalTier3Winners = 0;
  156.             [JsonProperty(PropertyName = "Total Tier 4 Winners")]
  157.             public int totalTier4Winners = 0;
  158.         }
  159.  
  160.         protected override void LoadConfig()
  161.         {
  162.             base.LoadConfig();
  163.  
  164.             try
  165.             {
  166.                 config = Config.ReadObject<ConfigData>();
  167.  
  168.                 if (config == null) LoadDefaultConfig();
  169.             }
  170.             catch
  171.             {
  172.                 PrintError("Configuration file is corrupt, check your config file at https://jsonlint.com/!");
  173.                 LoadDefaultConfig();
  174.                 return;
  175.             }
  176.  
  177.             SaveConfig();
  178.         }
  179.  
  180.         protected override void LoadDefaultConfig() => config = new ConfigData();
  181.  
  182.         protected override void SaveConfig() => Config.WriteObject(config);
  183.  
  184.         #endregion
  185.        
  186.         private void Unload()
  187.         {
  188.         }
  189.     }
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement