Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Newtonsoft.Json;
- using System.Collections.Generic;
- using UnityEngine;
- namespace Oxide.Plugins
- {
- [Info("Egglayer", "Krythic", "1.0.0")]
- [Description("Allows players to randomly lay eggs after consuming food.")]
- public class EggLayer : RustPlugin
- {
- #region Variables
- private int poopingProbability = 5;
- private const string horseDungShortname = "easter.goldegg";
- private const string ignorePermission = "egglayer.ignore";
- private const string canPoopPermission = "egglayer.canpoop";
- private const string splashEffect = "assets/bundled/prefabs/fx/water/midair_splash.prefab";
- private const string screamSound = "assets/bundled/prefabs/fx/player/beartrap_scream.prefab";
- private const string invisibleChairPrefab = "assets/bundled/prefabs/static/chair.invisible.static.prefab";
- private readonly List<BaseMountable> spawnedChairs = new List<BaseMountable> { };
- private List<EggEntry> eggEntries = new List<EggEntry>();
- #endregion
- #region Oxide Hooks
- private void Init()
- {
- if (config.probabilityOfPooping < 1 || config.probabilityOfPooping > 100)
- Puts("The probability of egg laying must be between 1 and 100! Loaded default value: 5!");
- else poopingProbability = config.probabilityOfPooping;
- permission.RegisterPermission(ignorePermission, this);
- permission.RegisterPermission(canPoopPermission, this);
- eggEntries.Add(new EggEntry("easter.goldegg","Feces Covered Golden Egg...gross",5));
- eggEntries.Add(new EggEntry("easter.silveregg","Feces Covered Silver Egg...gross",10));
- eggEntries.Add(new EggEntry("easter.bronzeegg","Feces Covered Bronze Egg...gross",100));
- }
- private void OnItemUse(Item item, int amount)
- {
- if (item == null || item.info.category != ItemCategory.Food || item.info.shortname.Contains("seed") || Random.Range(0, 100) > poopingProbability) return;
- ItemContainer container = item.GetRootContainer();
- if (container == null) return;
- BasePlayer player = container.GetOwnerPlayer();
- if (player == null || ((player.metabolism.calories.value != player.metabolism.calories.max) && config.maxFullBar) || permission.UserHasPermission(player.UserIDString, ignorePermission) || (config.requiresPermission && !permission.UserHasPermission(player.UserIDString, canPoopPermission))) return;
- EggEntry entry = GetNextEggEntry();
- if(entry != null){
- Item gameItem = ItemManager.CreateByName(entry.shortname);
- if (gameItem == null) return;
- gameItem.name = entry.itemText;
- if (config.playScreamSound) Effect.server.Run(screamSound, player.transform.position);
- gameItem.Drop(player.transform.position, player.GetDropVelocity());
- }
- }
- #endregion
- #region Methods
- private EggEntry GetNextEggEntry()
- {
- foreach(EggEntry entry in eggEntries)
- {
- if(Random.Range(0,100) <= entry.probability)
- {
- return entry;
- }
- }
- return null;
- }
- #endregion
- public class EggEntry
- {
- public string shortname;
- public string itemText;
- public int probability;
- public EggEntry(string shortname, string itemText, int probability)
- {
- this.shortname = shortname;
- this.itemText = itemText;
- this.probability = probability;
- }
- }
- #region Config
- private ConfigData config = new ConfigData();
- private class ConfigData
- {
- [JsonProperty(PropertyName = "Requires Permission To Poop")]
- public bool requiresPermission = false;
- [JsonProperty(PropertyName = "Probability Of Pooping (1-100)")]
- public int probabilityOfPooping = 5;
- [JsonProperty(PropertyName = "Only Poop If The Food Bar Is Full")]
- public bool maxFullBar = false;
- [JsonProperty(PropertyName = "Sit Player When Pooping (3 Seconds)")]
- public bool sitPlayer = false;
- [JsonProperty(PropertyName = "Play Scream Sound When Pooping")]
- public bool playScreamSound = false;
- [JsonProperty(PropertyName = "Splash Water Effect When Pooping If Raw Food")]
- public bool splashWaterEffect = false;
- [JsonProperty(PropertyName = "Fertilize Planter Boxes When Pooped On Top")]
- public bool fertilizePlanterBoxes = false;
- [JsonProperty(PropertyName = "Spawn Poop Entity When Planter Boxes Are Fertilized")]
- public bool spawnPoopIfFertilized = false;
- }
- 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
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement