using Newtonsoft.Json; using System; using System.IO; using UnityEngine; namespace Oxide.Plugins { [Info("Thoroughbred Spawner", "Boj", "1.0.0")] [Description("Automatically changes the breed of spawned and existing horses to a random thoroughbred.")] public class HorseModifier : RustPlugin { private const int BlackThoroughbredBreed = 9; private const int WhiteThoroughbredBreed = 8; private System.Random random = new System.Random(); private bool loggingEnabled = true; #region Configuration private class PluginConfig { [JsonProperty(PropertyName = "Enable Logging")] public bool EnableLogging { get; set; } = true; } private PluginConfig config; protected override void LoadDefaultConfig() { config = new PluginConfig(); SaveConfig(); } protected override void LoadConfig() { base.LoadConfig(); try { config = Config.ReadObject(); } catch (Exception ex) { PrintError($"Error reading config: {ex.Message}"); LoadDefaultConfig(); } } protected override void SaveConfig() => Config.WriteObject(config); #endregion private void OnServerInitialized() { loggingEnabled = config.EnableLogging; ConvertExistingHorses(); } private void ConvertExistingHorses() { foreach (var entity in BaseNetworkable.serverEntities) { if (entity is RidableHorse horse && horse != null && IsTestRidableHorse(horse)) { ChangeHorseToRandomThoroughbred(horse); } } } private bool IsTestRidableHorse(RidableHorse horse) { return horse.ShortPrefabName.Contains("testridablehorse"); } private void ChangeHorseToRandomThoroughbred(RidableHorse horse) { int randomBreed = random.Next(0, 2); if (randomBreed == 0) { horse.ApplyBreed(BlackThoroughbredBreed); Log("Changed horse to Black Thoroughbred."); } else { horse.ApplyBreed(WhiteThoroughbredBreed); Log("Changed horse to White Thoroughbred."); } } private void OnEntitySpawned(BaseNetworkable entity) { if (entity is RidableHorse horse && horse != null && IsTestRidableHorse(horse)) { ChangeHorseToRandomThoroughbred(horse); } } private void Log(string message) { if (loggingEnabled) Puts(message); } } }