Иконка ресурса

FREE UpdaterNpcSpawn : 1.0.0 1.0.0

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using Oxide.Core;
using System.Collections.Generic;
using System.IO;
namespace Oxide.Plugins {
    [Info("UpdaterNpcSpawn", "KpucTaJl", "1.0.0")]
    internal class UpdaterNpcSpawn : RustPlugin {
        private const bool En = false;
#region Old NpcSpawn Config
        public class ConfigOldNpcSpawn {
            [JsonProperty(En ? "Can NpcSpawn NPCs attack animals? [true/false]" : "Могут ли кастомные NPC атаковать животных? [true/false]")]
            public bool CanTargetAnimal {
                get;
                set;
            }
            [JsonProperty(En ? "Can NpcSpawn NPCs attack other NPCs? [true/false]" : "Могут ли кастомные NPC атаковать других NPC? [true/false]")]
            public bool CanTargetNpc {
                get;
                set;
            }
            [JsonProperty(En ? "Can NpcSpawn NPCs attack sleeping players? [true/false]" : "Могут ли кастомные NPC атаковать спящих игроков? [true/false]")]
            public bool CanTargetSleepingPlayer {
                get;
                set;
            }
            [JsonProperty(En ? "Can NpcSpawn NPCs attack wounded players? [true/false]" : "Могут ли кастомные NPC атаковать игроков в состоянии Wounded? [true/false]")]
            public bool CanTargetWoundedPlayer {
                get;
                set;
            }
            [JsonProperty(En ? "Can NpcSpawn NPCs attack players in SafeZone? [true/false]" : "Могут ли кастомные NPC атаковать игроков в SafeZone? [true/false]")]
            public bool CanTargetSafeZonePlayer {
                get;
                set;
            }
            [JsonProperty(En ? "Prefab path used for all NpcSpawn NPCs" : "Используемый prefab для кастомных NPC")]
            public string Prefab {
                get;
                set;
            }
            [JsonProperty(En ? "Weapons with custom NPC parameters" : "Список оружия, у которого нет значений стандартных параметров для использования NPC")]
            public Dictionary<string, DefaultSettings> WeaponsParameters {
                get;
                set;
            }
            [JsonProperty(En ? "NPC Weapons by Distance Category" : "Список оружия для использования NPC по категориям в зависимости от расстояния до цели")]
            public Dictionary<int, HashSet<string>> Weapons {
                get;
                set;
            }
            [JsonProperty(En ? "Configuration version" : "Версия конфигурации")]
            public VersionNumber PluginVersion {
                get;
                set;
            }
        }
        public ConfigOldNpcSpawn CfgOldNpcSpawn {
            get;
            set;
        }
        = null;
        private void ReadAndRenameConfigOldNpcSpawn() {
            CfgOldNpcSpawn = ReadConfigFile<ConfigOldNpcSpawn>("NpcSpawn.json") ?? new ConfigOldNpcSpawn {
                CanTargetAnimal = false, CanTargetNpc = false, CanTargetSleepingPlayer = false, CanTargetWoundedPlayer = false, CanTargetSafeZonePlayer = false, Prefab = "assets/rust.ai/agents/npcplayer/humannpc/scientist/scientistnpc_heavy.prefab", WeaponsParameters = new Dictionary<string, DefaultSettings> {
                    ["rifle.bolt"]
                    = new DefaultSettings {
                        EffectiveRange = 150f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["speargun"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["bow.compound"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["crossbow"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["bow.hunting"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["smg.2"] = new DefaultSettings {
                        EffectiveRange = 20f, AttackLengthMin = 0.4f, AttackLengthMax = 0.4f
                    }
                    , ["shotgun.double"] = new DefaultSettings {
                        EffectiveRange = 10f, AttackLengthMin = 0.3f, AttackLengthMax = 1f
                    }
                    , ["pistol.eoka"] = new DefaultSettings {
                        EffectiveRange = 10f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["rifle.l96"] = new DefaultSettings {
                        EffectiveRange = 150f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["pistol.nailgun"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = 0f, AttackLengthMax = 0.46f
                    }
                    , ["pistol.python"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = 0.175f, AttackLengthMax = 0.525f
                    }
                    , ["pistol.semiauto"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = 0f, AttackLengthMax = 0.46f
                    }
                    , ["pistol.prototype17"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = 0f, AttackLengthMax = 0.46f
                    }
                    , ["smg.thompson"] = new DefaultSettings {
                        EffectiveRange = 20f, AttackLengthMin = 0.4f, AttackLengthMax = 0.4f
                    }
                    , ["shotgun.waterpipe"] = new DefaultSettings {
                        EffectiveRange = 10f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["multiplegrenadelauncher"] = new DefaultSettings {
                        EffectiveRange = 20f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["snowballgun"] = new DefaultSettings {
                        EffectiveRange = 5f, AttackLengthMin = 2f, AttackLengthMax = 2f
                    }
                    , ["legacy bow"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["blunderbuss"] = new DefaultSettings {
                        EffectiveRange = 10f, AttackLengthMin = 0.3f, AttackLengthMax = 1f
                    }
                    , ["revolver.hc"] = new DefaultSettings {
                        EffectiveRange = 20f, AttackLengthMin = 0.4f, AttackLengthMax = 0.4f
                    }
                    , ["t1_smg"] = new DefaultSettings {
                        EffectiveRange = 20f, AttackLengthMin = 0.4f, AttackLengthMax = 0.4f
                    }
                    , ["minicrossbow"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                    , ["blowpipe"] = new DefaultSettings {
                        EffectiveRange = 15f, AttackLengthMin = -1f, AttackLengthMax = -1f
                    }
                }
                , Weapons = new Dictionary<int, HashSet<string>> {
                    [0]
                    = new HashSet<string> {
                        "bone.club", "knife.bone", "knife.butcher", "candycaneclub", "knife.combat", "longsword", "mace", "machete", "paddle", "pitchfork", "salvaged.cleaver", "salvaged.sword", "spear.stone", "spear.wooden", "chainsaw", "hatchet", "jackhammer", "pickaxe", "axe.salvaged", "hammer.salvaged", "icepick.salvaged", "stonehatchet", "stone.pickaxe", "torch", "sickle", "rock", "snowball", "mace.baseballbat", "concretepickaxe", "concretehatchet", "lumberjack.hatchet", "lumberjack.pickaxe", "diverhatchet", "diverpickaxe", "divertorch", "knife.skinning", "vampire.stake", "shovel", "spear.cny", "frontier_hatchet", "boomerang"
                    }
                    , [1] = new HashSet<string> {
                        "speargun", "bow.compound", "crossbow", "bow.hunting", "shotgun.double", "pistol.eoka", "flamethrower", "pistol.m92", "pistol.nailgun", "multiplegrenadelauncher", "shotgun.pump", "pistol.python", "pistol.revolver", "pistol.semiauto", "pistol.prototype17", "snowballgun", "shotgun.spas12", "shotgun.waterpipe", "shotgun.m4", "legacy bow", "military flamethrower", "blunderbuss", "minicrossbow", "blowpipe"
                    }
                    , [2] = new HashSet<string> {
                        "smg.2", "smg.mp5", "rifle.semiauto", "smg.thompson", "rifle.sks", "revolver.hc", "t1_smg"
                    }
                    , [3] = new HashSet<string> {
                        "rifle.ak", "rifle.lr300", "lmg.m249", "rifle.m39", "hmlmg", "rifle.ak.ice", "rifle.ak.diver", "minigun", "rifle.ak.med"
                    }
                    , [4] = new HashSet<string> {
                        "rifle.bolt", "rifle.l96"
                    }
                }
                , PluginVersion = new VersionNumber(2, 8, 4)
            }
            ;
            string path = Path.Combine(Interface.Oxide.ConfigDirectory, "NpcSpawn.json");
            string oldPath = Path.Combine(Interface.Oxide.ConfigDirectory, "NpcSpawn_old.json");
            Directory.Move(path, oldPath);
        }
#endregion Old NpcSpawn Config
#region New NpcSpawn Config
        public class ConfigNewNpcSpawn {
            [JsonProperty(En ? "Delay after plugin startup before random positions are generated in biomes" : "Задержка после запуска плагина, по истечении которой будут генерироваться случайные позиции в биомах")]
            public float GeneratePositionDelay {
                get;
                set;
            }
            [JsonProperty(En ? "Weapons with custom NPC parameters" : "Список оружия, у которого нет значений стандартных параметров для использования NPC")]
            public Dictionary<string, DefaultSettings> WeaponsParameters {
                get;
                set;
            }
            [JsonProperty(En ? "NPC Weapons by Distance Category" : "Список оружия для использования NPC по категориям в зависимости от расстояния до цели")]
            public Dictionary<int, HashSet<string>> Weapons {
                get;
                set;
            }
            [JsonProperty(En ? "Configuration version" : "Версия конфигурации")]
            public VersionNumber PluginVersion {
                get;
                set;
            }
        }
        public ConfigNewNpcSpawn CfgNewNpcSpawn {
            get;
            set;
        }
        = null;
        private void GenerateAndSaveConfigNewNpcSpawn() {
            CfgNewNpcSpawn = new ConfigNewNpcSpawn {
                GeneratePositionDelay = 5f, WeaponsParameters = CfgOldNpcSpawn.WeaponsParameters, Weapons = CfgOldNpcSpawn.Weapons, PluginVersion = new VersionNumber(3, 0, 0)
            }
            ;
            WriteConfigFile<ConfigNewNpcSpawn>("NpcSpawn.json", CfgNewNpcSpawn);
        }
#endregion New NpcSpawn Config
#region Helpers
        public class DefaultSettings {
            [JsonProperty(En ? "Effective Range" : "Дальность прицельной стрельбы")]
            public float EffectiveRange {
                get;
                set;
            }
            [JsonProperty(En ? "Minimum Attack Duration" : "Минимальная продолжительность стрельбы")]
            public float AttackLengthMin {
                get;
                set;
            }
            [JsonProperty(En ? "Maximum Attack Duration" : "Максимальная продолжительность стрельбы")]
            public float AttackLengthMax {
                get;
                set;
            }
        }
        private static T ReadConfigFile<T>(string fileName) {
            string path = Path.Combine(Interface.Oxide.ConfigDirectory, fileName);
            if (File.Exists(path)) {
                string json = File.ReadAllText(path);
                return JsonConvert.DeserializeObject<T>(json);
            }
            else return default(T);
        }
        private static void WriteConfigFile<T>(string fileName, T config) {
            string path = Path.Combine(Interface.Oxide.ConfigDirectory, fileName);
            string json = JsonConvert.SerializeObject(config, Formatting.Indented);
            File.WriteAllText(path, json);
        }
        private static void DeletePluginFile(string fileName) {
            string path = Path.Combine(Interface.Oxide.PluginDirectory, fileName);
            if (File.Exists(path)) File.Delete(path);
        }
#endregion Helpers
#region Oxide Hooks
        private void OnServerInitialized() {
            DeletePluginFile("NpcSpawn.cs");
            ReadAndRenameConfigOldNpcSpawn();
            GenerateAndSaveConfigNewNpcSpawn();
            DeletePluginFile("UpdaterNpcSpawn.cs");
        }
#endregion Oxide Hooks
    }
}

Автор
15FPS
Скачиваний
0
Просмотры
1
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху