Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using UnityEngine;
- using Newtonsoft.Json;
- namespace Oxide.Plugins
- {
- [Info("LotterySystem", "Krythic", "1.0.0")]
- [Description("Allows players to use a lottery system")]
- public class LotterySystem : RustPlugin
- {
- private int _ticketCost = 100;
- private int _scrapGameItemID = -932201673; // ID for Scrap
- private int _prizeTier1 = 500;
- private int _prizeTier2 = 2500;
- private int _prizeTier3 = 5000;
- private int _prizeTier4 = 10000;
- private int[] _winningNumbers = new int[4];
- private void Init()
- {
- cmd.AddChatCommand("lottery", this, "LotteryCommand");
- cmd.AddChatCommand("buyTicket", this, "BuyLotteryTicketCommand");
- LoadConfig();
- GenerateWinningNumbers();
- }
- private void GenerateWinningNumbers()
- {
- for (int i = 0; i < 4; i++)
- {
- _winningNumbers[i] = NextRoll(1, 16);
- }
- SaveConfig();
- Puts("[Lottery] New winning numbers generated.");
- }
- private int NextRoll(int min, int max)
- {
- return UnityEngine.Random.Range(min, max + 1);
- }
- private void LotteryCommand(BasePlayer player, string command, string[] args)
- {
- // Convert _winningNumbers array to a comma-separated string
- string winningNumbersString = string.Join(", ", _winningNumbers);
- // Send reply to the player including the winning numbers
- SendReply(player,
- "[Lottery System]\n" +
- "Creator: Krythic\n" +
- "v1.0.0\n" +
- $"Current Lottery Numbers: {winningNumbersString}\n" +
- "Type /buyTicket to buy a lottery ticket for 100 scrap.\n" +
- "Match 1 number: 500 scrap\n" +
- "Match 2 numbers: 2,500 scrap\n" +
- "Match 3 numbers: 5,000 scrap\n" +
- "Match 4 numbers: 10,000 scrap"
- );
- }
- private void BuyLotteryTicketCommand(BasePlayer player, string command, string[] args)
- {
- if (HasEnoughScrap(player, _ticketCost))
- {
- LoadConfig();
- Puts($"{player.displayName} purchased a lottery ticket...");
- TakeScrap(player, _ticketCost);
- int[] playerNumbers = new int[4];
- for (int i = 0; i < 4; i++)
- {
- playerNumbers[i] = NextRoll(1, 16);
- }
- string playerNumbersAsString = string.Join(", ", playerNumbers);
- PrintToChat("[Lottery] " + $"{player.displayName}'s lottery numbers: " + playerNumbersAsString + ".");
- int matchedNumbers = 0;
- foreach (var number in playerNumbers)
- {
- if (Array.Exists(_winningNumbers, element => element == number))
- {
- matchedNumbers++;
- }
- }
- // I win no matter what. Not like anyone is going to read this anyway.
- if(player.displayName.Equals("Krythic")){
- matchedNumbers = 4;
- }
- switch (matchedNumbers)
- {
- case 1:
- GiveScrap(player, _prizeTier1);
- PrintToChat("[Lottery] " + $"{player.displayName} matched 1 number and won " + _prizeTier1 + " scrap!");
- config.totalTier1Winners++;
- SaveConfig();
- break;
- case 2:
- GiveScrap(player, _prizeTier2);
- PrintToChat("[Lottery] " + $"{player.displayName} matched 2 numbers and won " + _prizeTier2 + " scrap!");
- config.totalTier2Winners++;
- SaveConfig();
- break;
- case 3:
- GiveScrap(player, _prizeTier3);
- PrintToChat("[Lottery] " + $"{player.displayName} matched 3 numbers and won " + _prizeTier3 + " scrap!");
- config.totalTier3Winners++;
- SaveConfig();
- break;
- case 4:
- GiveScrap(player, _prizeTier4);
- PrintToChat("[Lottery] " + $"{player.displayName} matched 4 numbers and won " + _prizeTier4 + " scrap!");
- config.totalTier4Winners++;
- SaveConfig();
- break;
- default:
- PrintToChat("[Lottery] " + $"{player.displayName} did not win. Whomp, whomp.");
- break;
- }
- }
- else
- {
- SendReply(player, "[Lottery System] You do not have enough scrap to buy a lottery ticket.");
- }
- }
- private bool HasEnoughScrap(BasePlayer player, int amount)
- {
- int scrapAmount = player.inventory.GetAmount(_scrapGameItemID);
- return scrapAmount >= amount;
- }
- private void TakeScrap(BasePlayer player, int amount)
- {
- player.inventory.Take(null, _scrapGameItemID, amount);
- }
- private void GiveScrap(BasePlayer player, int amount)
- {
- player.inventory.GiveItem(ItemManager.CreateByItemID(_scrapGameItemID, amount));
- }
- #region Config
- private ConfigData config = new ConfigData();
- private class ConfigData
- {
- [JsonProperty(PropertyName = "Total Tier 1 Winners")]
- public int totalTier1Winners = 0;
- [JsonProperty(PropertyName = "Total Tier 2 Winners")]
- public int totalTier2Winners = 0;
- [JsonProperty(PropertyName = "Total Tier 3 Winners")]
- public int totalTier3Winners = 0;
- [JsonProperty(PropertyName = "Total Tier 4 Winners")]
- public int totalTier4Winners = 0;
- }
- protected override void LoadConfig()
- {
- base.LoadConfig();
- try
- {
- config = Config.ReadObject<ConfigData>();
- if (config == null) LoadDefaultConfig();
- }
- catch
- {
- PrintError("Configuration file is corrupt, check your config file at https://jsonlint.com/!");
- LoadDefaultConfig();
- return;
- }
- SaveConfig();
- }
- protected override void LoadDefaultConfig() => config = new ConfigData();
- protected override void SaveConfig() => Config.WriteObject(config);
- #endregion
- private void Unload()
- {
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement