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

FREE RoamingNPCs : 0.4.8 0.4.8

Нет прав для скачивания
C#:
// #define DefaultConfig
// #define DebugLog
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using Facepunch;
using Network;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Core.Libraries;
using Oxide.Core.Libraries.Covalence;
using Rust;
using Rust.Ai.Gen2;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.Events;
using Random = UnityEngine.Random;
namespace Oxide.Plugins {
    using Oxide.Plugins.RoamingNPCex;
    [Info("Roaming NPCs", "walkinrey & Max39ru", "0.4.8")]
    public partial class RoamingNPCs : CovalencePlugin {
        [PluginReference]
        private Plugin DeployableNature, Spawns, WarMode;
        public const bool RU = false;
        public const string AdminPermission = "roamingnpcs.admin";
        public const string PrefabPetBot = "assets/rust.ai/agents/npcplayer/pet/frankensteinpet.prefab";
        public const string PrefabPlayer = "assets/prefabs/player/player.prefab";
        public static RoamingNPCs instance;
        private Timer _timer;
        public Configuration config;
        public DataBots Data;
        public List<string> NicknamesData;
        public Dictionary<ulong, CustomPet> listNpcPlayers = new();
        public Monuments monuments;
        public List<string> visibleAdmins = new();
        public List<string> visibleAdminsStash = new();
        public static JsonSerializerSettings settingsSerializer = new JsonSerializerSettings {
            NullValueHandling = NullValueHandling.Ignore, ContractResolver = new CustomContractResolver()
        }
        ;
        public OnBotCreatedEvent OnBotCreated = new OnBotCreatedEvent();
        private readonly Dictionary<ulong, Timer> respawnTimers = new();
#region Configuration
        public class Configuration {
            [JsonProperty(RU ? "Настройка ботов" : "Bots settings", Order = 10)]
            public Dictionary<string, BotSetup> bots = new();
            [JsonProperty(RU ? "Укажите для генератора ID ботов (от 8 - 15)" : "Specify the ID of the bot generator (8 - 15)")]
            private int digits = 9;
            public int GetDigits() => Mathf.Clamp(digits, 8, 15);
            public BotSetup GetSetup(string nameSetup) {
                if (string.IsNullOrEmpty(nameSetup)) return null;
                if (bots.TryGetValue(nameSetup, out BotSetup setup)) return setup;
                return null;
            }
            public static Configuration GetDefault() {
                return new() {
                    bots = new() {
                        ["bob_resources_farmer"]
                        = new(100000000, 300f, 50f) {
                            Enable = true, Name = "Bob", Corpse = DeadCorpse.PlayerCorpse, Personality = PersonalityBot.Friendly, MaxHealth = 100f, deathItemsBlacklist = new List<ItemSetup>() {
                                new ItemSetup("knife.skinning", 0)
                            }
                            , Controller = new(0.1f, 0.5f) {
                                RadiusFindEntity = 30f, RateDamageWater = 1f, AccuracyOfFire = 5, ScaleDamageToNPC = 2f, ScaleDamageToAnimal = 2f, ScaleDamageToPlayers = 0.8f, ScaleDamageFromNPC = 0.2f, ScaleDamageFromAnimal = 0.2f, ScaleDamageFromPlayers = 0.8f
                            }
                            , ResearcherState = new SetupResearcher() {
                                BlockListPrefabsMonuments = new List<string>() {
                                    "assets/bundled/prefabs/autospawn/monument/lighthouse/lighthouse.prefab"
                                }
                            }
                            , Wear = new() {
                                CanLock = true, items = new() {
                                    new("hazmatsuit.lumberjack", 0),
                                }
                            }
                            , MinerState = new() {
                                CanMiningWood = true, CanFuelUseFromChainsaw = false, CanMiningOre = true, CanMiningBarrel = false, CanMiningRoadSign = false, CanPickupCollectibleItems = true, CanLootedContainer = false, CanPickupDroppedItems = false, CanLootedCorpse = false, CanButcherCorpse = false, PrefabsCorpseToButcher = new() {
                                    "assets/rust.ai/agents/boar/boar.corpse.prefab", "polarbear.corpse", "bear.corpse", "stag.corpse", "wolf.corpse", "crocodile.corpse", "panther.corpse", "tiger.corpse", "chicken.corpse"
                                }
                                , BlockListPrefabMining = new() {
                                    "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtree03.prefab", "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtreeprefab.prefab", "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtree02.prefab"
                                }
                                , LootAmountLimitations = new() {
                                    ["wood"]
                                    = 10000, ["stones"] = 5000, ["metal.ore"] = 5000, ["sulfur.ore"] = 5000,
                                }
                            }
                            , HunterState = new() {
                                CanHunt = false, PriorityMelee = true, _radiusWeaponAttacked = 30f, _radiusMeleeAttacked = 2f,
                            }
                            , BattleState = new() {
                                _radiusWeaponAttacked = 30f, _radiusMeleeAttacked = 1f,
                            }
                            , FullState = new() {
                                Stash = new(true, true, 10, 3600f), Box = new(true, true, 0, 5, 3600f),
                            }
                            , ItemsOnSpawn = new List<LootItemSetup>() {
                                new LootItemSetup() {
                                    Item = new ItemSetup("wood", 0), Amount = 1000
                                }
                            }
                            , ItemsMiningOre = new() {
                                Items = new() {
                                    new(false, false, new("jackhammer", 0)), new(false, false, new("lumberjack.pickaxe", 0)), new(false, false, new("diverpickaxe", 0)), new(true, true, new("pickaxe", 0)), new(false, false, new("stone.pickaxe", 0)), new(false, false, new("rock", 0)),
                                }
                                ,
                            }
                            , ItemsMiningTree = new() {
                                Items = new() {
                                    new(false, false, new("chainsaw", 0)), new(false, false, new("lumberjack.hatchet", 0)), new(false, false, new("frontier_hatchet", 0)), new(true, true, new("hatchet", 0)), new(false, false, new("stonehatchet", 0)), new(false, false, new("rock", 0)),
                                }
                            }
                            , ItemsWeapon = new() {
                                CanUseAmmo = false, AmountAmmo = 128, Items = new() {
                                    new(true, true, new("bow.hunting", 0)), new(false, false, new("1965232394", 0)), new(false, false, new("salvaged.cleaver", 0)),
                                }
                            }
                            , ItemsMedical = new() {
                                Items = new() {
                                    new(false, true, 5, new("syringe.medical", 0)), new(true, false, 1, new("bandage", 0)),
                                }
                            }
                            , ItemsButcher = new() {
                                Items = new() {
                                    new(true, false, new("knife.skinning", 0)),
                                }
                            }
                            , Phrases = new() {
                                MinerPhrases = new() {
                                    PhrasesPickupCollectable = new(30f, "uinston2/miner/pickup_collectable/1" ), PhrasesPickupItem = new(30f, "uinston2/miner/pickup_collectable/1" ), PhrasesLooting = new(30f, "uinston2/miner/looting/1" ), PhrasesBreaking = new(30f, "uinston2/miner/breaking/1" ), PhrasesMiningOre = new(30f, "uinston2/miner/mining_ore/1" ), PhrasesMiningTree = new(30f, "uinston2/miner/mining_tree/1" ), PhrasesLootingCorpse = new(30f, "uinston2/miner/looting/1" ), PhrasesButcherCorpse = new(30f, "uinston2/miner/butcher_corpse/1" ),
                                }
                                , HunterPhrases = new() {
                                    PhrasesStartAttack = new(30f, "uinston2/hunter/start_attack/1", "uinston2/hunter/start_attack/2" ),
                                }
                                , AttackerPhrases = new() {
                                    PhrasesStartAttack = new(30f, "uinston2/attacker/start_attack/1" ), PhrasesRunAway = new(30f, "uinston2/attacker/run_away/1", "uinston2/attacker/run_away/2", "uinston2/attacker/run_away/3" ), PhrasesNotVisibleTarget = new(30f, "uinston2/attacker/not_visible/1", "uinston2/attacker/not_visible/2", "uinston2/attacker/not_visible/3" ),
                                }
                                , ResearcherPhrases = new() {
                                    PhrasesBeforeMove = new(30f, "uinston2/researcher/before_move/1" ), PhrasesAfterMove = new(30f, "uinston2/researcher/after_move/1" ),
                                }
                                , FullState = new(30f, "uinston2/full_state/1", "uinston2/full_state/2" ), MedicalState = new(30f, "uinston2/medical_state/1", "uinston2/medical_state/2", "uinston2/medical_state/3" ),
                            }
                        }
                        , ["john_looter"] = new(0, 300f, 50f) {
                            Enable = true, Name = "John", Corpse = DeadCorpse.PlayerCorpse, Personality = PersonalityBot.Defensive, deathItemsBlacklist = new List<ItemSetup>() {
                                new ItemSetup("rifle.ak.diver", 0), new ItemSetup("knife.skinning", 0)
                            }
                            , MaxHealth = 120f, Controller = new(0.1f, 0.5f) {
                                RadiusFindEntity = 30f, RateDamageWater = 1f, AccuracyOfFire = 5, ScaleDamageToNPC = 2f, ScaleDamageToAnimal = 2f, ScaleDamageToPlayers = 0.8f, ScaleDamageFromNPC = 0.2f, ScaleDamageFromAnimal = 0.2f, ScaleDamageFromPlayers = 0.8f
                            }
                            , ResearcherState = new SetupResearcher() {
                                BlockListPrefabsMonuments = new List<string>() {
                                    "assets/bundled/prefabs/autospawn/monument/lighthouse/lighthouse.prefab"
                                }
                            }
                            , Wear = new() {
                                CanLock = true, items = new() {
                                    new("hazmatsuit.nomadsuit", 0),
                                }
                            }
                            , MinerState = new() {
                                CanMiningWood = false, CanFuelUseFromChainsaw = false, CanMiningOre = false, CanMiningBarrel = true, CanMiningRoadSign = true, CanPickupCollectibleItems = true, CanLootedContainer = true, CanPickupDroppedItems = true, CanLootedCorpse = true, CanButcherCorpse = false, PrefabsCorpseToButcher = new() {
                                    "assets/rust.ai/agents/boar/boar.corpse.prefab", "polarbear.corpse", "bear.corpse", "stag.corpse", "wolf.corpse", "crocodile.corpse", "panther.corpse", "tiger.corpse", "chicken.corpse"
                                }
                                , BlockListPrefabMining = new() {
                                    "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtree03.prefab", "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtreeprefab.prefab", "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtree02.prefab"
                                }
                                , LootAmountLimitations = new() {
                                    ["wood"]
                                    = 10000, ["stones"] = 5000, ["metal.ore"] = 5000, ["sulfur.ore"] = 5000,
                                }
                            }
                            , HunterState = new() {
                                CanHunt = false, PriorityMelee = true, _radiusWeaponAttacked = 30f, _radiusMeleeAttacked = 2f,
                            }
                            , BattleState = new() {
                                _radiusWeaponAttacked = 30f, _radiusMeleeAttacked = 1f,
                            }
                            , FullState = new() {
                                Stash = new(true, true, 10, 3600f), Box = new(true, true, 0, 5, 3600f),
                            }
                            , ItemsOnSpawn = new List<LootItemSetup>() {
                                new LootItemSetup() {
                                    Item = new ItemSetup("wood", 0), Amount = 1000
                                }
                            }
                            , ItemsMiningOre = new() {
                                Items = new() {
                                    new(false, false, new("jackhammer", 0)), new(false, false, new("lumberjack.pickaxe", 0)), new(false, false, new("diverpickaxe", 0)), new(true, true, new("pickaxe", 0)), new(false, false, new("stone.pickaxe", 0)), new(false, false, new("rock", 0)),
                                }
                                ,
                            }
                            , ItemsMiningTree = new() {
                                Items = new() {
                                    new(false, false, new("chainsaw", 0)), new(false, false, new("lumberjack.hatchet", 0)), new(false, false, new("frontier_hatchet", 0)), new(true, true, new("hatchet", 0)), new(false, false, new("stonehatchet", 0)), new(false, false, new("rock", 0)),
                                }
                            }
                            , ItemsWeapon = new() {
                                CanUseAmmo = true, AmountAmmo = 300, Items = new() {
                                    new(false, true, new("rifle.ak.diver", 0)), new(true, true, new("bow.hunting", 0)), new(true, false, new("1965232394", 0)), new(true, false, new("salvaged.cleaver", 0)),
                                }
                            }
                            , ItemsMedical = new() {
                                Items = new() {
                                    new(false, true, 5, new("syringe.medical", 0)), new(true, false, 1, new("bandage", 0)),
                                }
                            }
                            , ItemsButcher = new() {
                                Items = new() {
                                    new(true, false, new("knife.skinning", 0)),
                                }
                            }
                            , Phrases = new() {
                                MinerPhrases = new() {
                                    PhrasesPickupCollectable = new(30f, "uinston2/miner/pickup_collectable/1" ), PhrasesPickupItem = new(30f, "uinston2/miner/pickup_collectable/1" ), PhrasesLooting = new(30f, "uinston2/miner/looting/1" ), PhrasesBreaking = new(30f, "uinston2/miner/breaking/1" ), PhrasesMiningOre = new(30f, "uinston2/miner/mining_ore/1" ), PhrasesMiningTree = new(30f, "uinston2/miner/mining_tree/1" ), PhrasesLootingCorpse = new(30f, "uinston2/miner/looting/1" ), PhrasesButcherCorpse = new(30f, "uinston2/miner/butcher_corpse/1" ),
                                }
                                , HunterPhrases = new() {
                                    PhrasesStartAttack = new(30f, "uinston2/hunter/start_attack/1", "uinston2/hunter/start_attack/2" ),
                                }
                                , AttackerPhrases = new() {
                                    PhrasesStartAttack = new(30f, "uinston2/attacker/start_attack/1" ), PhrasesRunAway = new(30f, "uinston2/attacker/run_away/1", "uinston2/attacker/run_away/2", "uinston2/attacker/run_away/3" ), PhrasesNotVisibleTarget = new(30f, "uinston2/attacker/not_visible/1", "uinston2/attacker/not_visible/2", "uinston2/attacker/not_visible/3" ),
                                }
                                , ResearcherPhrases = new() {
                                    PhrasesBeforeMove = new(30f, "uinston2/researcher/before_move/1" ), PhrasesAfterMove = new(30f, "uinston2/researcher/after_move/1" ),
                                }
                                , FullState = new(30f, "uinston2/full_state/1", "uinston2/full_state/2" ), MedicalState = new(30f, "uinston2/medical_state/1", "uinston2/medical_state/2", "uinston2/medical_state/3" ),
                            }
                        }
                        , ["alfred_hunter"] = new(0, 300f, 50f) {
                            Enable = true, Name = "Alfred", Corpse = DeadCorpse.PlayerCorpse, Personality = PersonalityBot.Defensive, deathItemsBlacklist = new List<ItemSetup>() {
                                new ItemSetup("shotgun.spas12", 0), new ItemSetup("knife.skinning", 0)
                            }
                            , MaxHealth = 100f, Controller = new(0.1f, 0.5f) {
                                RadiusFindEntity = 30f, RateDamageWater = 1f, AccuracyOfFire = 5, ScaleDamageToNPC = 2f, ScaleDamageToAnimal = 2f, ScaleDamageToPlayers = 0.8f, ScaleDamageFromNPC = 0.2f, ScaleDamageFromAnimal = 0.2f, ScaleDamageFromPlayers = 0.8f
                            }
                            , ResearcherState = new SetupResearcher() {
                                BlockListPrefabsMonuments = new List<string>() {
                                    "assets/bundled/prefabs/autospawn/monument/lighthouse/lighthouse.prefab"
                                }
                            }
                            , Wear = new() {
                                CanLock = true, items = new() {
                                    new("hazmatsuit.frontier", 0),
                                }
                            }
                            , MinerState = new() {
                                CanMiningWood = false, CanFuelUseFromChainsaw = false, CanMiningOre = false, CanMiningBarrel = false, CanMiningRoadSign = false, CanPickupCollectibleItems = false, CanLootedContainer = false, CanPickupDroppedItems = true, CanLootedCorpse = false, CanButcherCorpse = true, PrefabsCorpseToButcher = new() {
                                    "assets/rust.ai/agents/boar/boar.corpse.prefab", "polarbear.corpse", "bear.corpse", "stag.corpse", "wolf.corpse", "crocodile.corpse", "panther.corpse", "tiger.corpse", "chicken.corpse"
                                }
                                , BlockListPrefabMining = new() {
                                    "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtree03.prefab", "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtreeprefab.prefab", "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtree02.prefab"
                                }
                                , LootAmountLimitations = new() {
                                    ["wood"]
                                    = 10000, ["stones"] = 5000, ["metal.ore"] = 5000, ["sulfur.ore"] = 5000,
                                }
                            }
                            , HunterState = new() {
                                CanHunt = true, PriorityMelee = false, _radiusWeaponAttacked = 25f, _radiusMeleeAttacked = 2f,
                            }
                            , BattleState = new() {
                                _radiusWeaponAttacked = 30f, _radiusMeleeAttacked = 1f,
                            }
                            , FullState = new() {
                                Stash = new(true, true, 10, 3600f), Box = new(true, true, 0, 5, 3600f),
                            }
                            , ItemsOnSpawn = new List<LootItemSetup>() {
                                new LootItemSetup() {
                                    Item = new ItemSetup("wood", 0), Amount = 1000
                                }
                            }
                            , ItemsMiningOre = new() {
                                Items = new() {
                                    new(false, false, new("jackhammer", 0)), new(false, false, new("lumberjack.pickaxe", 0)), new(false, false, new("diverpickaxe", 0)), new(true, true, new("pickaxe", 0)), new(false, false, new("stone.pickaxe", 0)), new(false, false, new("rock", 0)),
                                }
                                ,
                            }
                            , ItemsMiningTree = new() {
                                Items = new() {
                                    new(false, false, new("chainsaw", 0)), new(false, false, new("lumberjack.hatchet", 0)), new(false, false, new("frontier_hatchet", 0)), new(true, true, new("hatchet", 0)), new(false, false, new("stonehatchet", 0)), new(false, false, new("rock", 0)),
                                }
                            }
                            , ItemsWeapon = new() {
                                CanUseAmmo = false, AmountAmmo = 300, Items = new() {
                                    new(false, true, new("shotgun.spas12", 0)), new(true, false, new("bow.hunting", 0)), new(true, false, new("1965232394", 0)), new(true, false, new("salvaged.cleaver", 0)),
                                }
                            }
                            , ItemsMedical = new() {
                                Items = new() {
                                    new(false, true, 5, new("syringe.medical", 0)), new(true, false, 1, new("bandage", 0)),
                                }
                            }
                            , ItemsButcher = new() {
                                Items = new() {
                                    new(true, false, new("knife.skinning", 0)),
                                }
                            }
                            , Phrases = new() {
                                MinerPhrases = new() {
                                    PhrasesPickupCollectable = new(30f, "uinston2/miner/pickup_collectable/1" ), PhrasesPickupItem = new(30f, "uinston2/miner/pickup_collectable/1" ), PhrasesLooting = new(30f, "uinston2/miner/looting/1" ), PhrasesBreaking = new(30f, "uinston2/miner/breaking/1" ), PhrasesMiningOre = new(30f, "uinston2/miner/mining_ore/1" ), PhrasesMiningTree = new(30f, "uinston2/miner/mining_tree/1" ), PhrasesLootingCorpse = new(30f, "uinston2/miner/looting/1" ), PhrasesButcherCorpse = new(30f, "uinston2/miner/butcher_corpse/1" ),
                                }
                                , HunterPhrases = new() {
                                    PhrasesStartAttack = new(30f, "uinston2/hunter/start_attack/1", "uinston2/hunter/start_attack/2" ),
                                }
                                , AttackerPhrases = new() {
                                    PhrasesStartAttack = new(30f, "uinston2/attacker/start_attack/1" ), PhrasesRunAway = new(30f, "uinston2/attacker/run_away/1", "uinston2/attacker/run_away/2", "uinston2/attacker/run_away/3" ), PhrasesNotVisibleTarget = new(30f, "uinston2/attacker/not_visible/1", "uinston2/attacker/not_visible/2", "uinston2/attacker/not_visible/3" ),
                                }
                                , ResearcherPhrases = new() {
                                    PhrasesBeforeMove = new(30f, "uinston2/researcher/before_move/1" ), PhrasesAfterMove = new(30f, "uinston2/researcher/after_move/1" ),
                                }
                                , FullState = new(30f, "uinston2/full_state/1", "uinston2/full_state/2" ), MedicalState = new(30f, "uinston2/medical_state/1", "uinston2/medical_state/2", "uinston2/medical_state/3" ),
                            }
                        }
                        , ["austin_fighter"] = new(0, 300f, 0f) {
                            Enable = true, Name = "Austin", Corpse = DeadCorpse.PlayerCorpse, Personality = PersonalityBot.Aggressive, deathItemsBlacklist = new List<ItemSetup>() {
                                new ItemSetup("krieg.shotgun", 0), new ItemSetup("krieg.chainsword", 0), new ItemSetup("knife.skinning", 0)
                            }
                            , MaxHealth = 120f, Controller = new(0.1f, 0.5f) {
                                RadiusFindEntity = 30f, RateDamageWater = 0f, AccuracyOfFire = 3, ScaleDamageToNPC = 2f, ScaleDamageToAnimal = 2f, ScaleDamageToPlayers = 0.8f, ScaleDamageFromNPC = 0.2f, ScaleDamageFromAnimal = 0.2f, ScaleDamageFromPlayers = 0.8f
                            }
                            , ResearcherState = new SetupResearcher() {
                                BlockListPrefabsMonuments = new List<string>() {
                                    "assets/bundled/prefabs/autospawn/monument/lighthouse/lighthouse.prefab"
                                }
                            }
                            , Wear = new() {
                                CanLock = true, items = new() {
                                    new("hazmat.krieg", 0),
                                }
                            }
                            , MinerState = new() {
                                CanMiningWood = false, CanFuelUseFromChainsaw = false, CanMiningOre = false, CanMiningBarrel = true, CanMiningRoadSign = false, CanPickupCollectibleItems = false, CanLootedContainer = true, CanPickupDroppedItems = true, CanLootedCorpse = true, CanButcherCorpse = false, PrefabsCorpseToButcher = new() {
                                    "assets/rust.ai/agents/boar/boar.corpse.prefab", "polarbear.corpse", "bear.corpse", "stag.corpse", "wolf.corpse", "crocodile.corpse", "panther.corpse", "tiger.corpse", "chicken.corpse"
                                }
                                , BlockListPrefabMining = new() {
                                    "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtree03.prefab", "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtreeprefab.prefab", "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtree02.prefab"
                                }
                                , LootAmountLimitations = new() {
                                    ["wood"]
                                    = 10000, ["stones"] = 5000, ["metal.ore"] = 5000, ["sulfur.ore"] = 5000,
                                }
                            }
                            , HunterState = new() {
                                CanHunt = false, PriorityMelee = false, _radiusWeaponAttacked = 30f, _radiusMeleeAttacked = 2f,
                            }
                            , BattleState = new() {
                                _radiusWeaponAttacked = 30f, _radiusMeleeAttacked = 1f,
                            }
                            , FullState = new() {
                                Stash = new(true, true, 10, 3600f), Box = new(true, true, 0, 5, 3600f),
                            }
                            , ItemsOnSpawn = new List<LootItemSetup>() {
                                new LootItemSetup() {
                                    Item = new ItemSetup("wood", 0), Amount = 1000
                                }
                            }
                            , ItemsMiningOre = new() {
                                Items = new() {
                                    new(false, false, new("jackhammer", 0)), new(false, false, new("lumberjack.pickaxe", 0)), new(false, false, new("diverpickaxe", 0)), new(true, true, new("pickaxe", 0)), new(false, false, new("stone.pickaxe", 0)), new(false, false, new("rock", 0)),
                                }
                                ,
                            }
                            , ItemsMiningTree = new() {
                                Items = new() {
                                    new(false, false, new("chainsaw", 0)), new(false, false, new("lumberjack.hatchet", 0)), new(false, false, new("frontier_hatchet", 0)), new(true, true, new("hatchet", 0)), new(false, false, new("stonehatchet", 0)), new(false, false, new("rock", 0)),
                                }
                            }
                            , ItemsWeapon = new() {
                                CanUseAmmo = false, AmountAmmo = 300, Items = new() {
                                    new(false, true, new("krieg.shotgun", 0)), new(true, false, new("krieg.chainsword", 0)),
                                }
                            }
                            , ItemsMedical = new() {
                                Items = new() {
                                    new(true, false, 5, new("syringe.medical", 0)),
                                }
                            }
                            , ItemsButcher = new() {
                                Items = new() {
                                    new(true, false, new("knife.skinning", 0)),
                                }
                            }
                            , Phrases = new() {
                                MinerPhrases = new() {
                                    PhrasesPickupCollectable = new(30f, "uinston2/miner/pickup_collectable/1" ), PhrasesPickupItem = new(30f, "uinston2/miner/pickup_collectable/1" ), PhrasesLooting = new(30f, "uinston2/miner/looting/1" ), PhrasesBreaking = new(30f, "uinston2/miner/breaking/1" ), PhrasesMiningOre = new(30f, "uinston2/miner/mining_ore/1" ), PhrasesMiningTree = new(30f, "uinston2/miner/mining_tree/1" ), PhrasesLootingCorpse = new(30f, "uinston2/miner/looting/1" ), PhrasesButcherCorpse = new(30f, "uinston2/miner/butcher_corpse/1" ),
                                }
                                , HunterPhrases = new() {
                                    PhrasesStartAttack = new(30f, "uinston2/hunter/start_attack/1", "uinston2/hunter/start_attack/2" ),
                                }
                                , AttackerPhrases = new() {
                                    PhrasesStartAttack = new(30f, "uinston2/attacker/start_attack/1" ), PhrasesRunAway = new(30f, "uinston2/attacker/run_away/1", "uinston2/attacker/run_away/2", "uinston2/attacker/run_away/3" ), PhrasesNotVisibleTarget = new(30f, "uinston2/attacker/not_visible/1", "uinston2/attacker/not_visible/2", "uinston2/attacker/not_visible/3" ),
                                }
                                , ResearcherPhrases = new() {
                                    PhrasesBeforeMove = new(30f, "uinston2/researcher/before_move/1" ), PhrasesAfterMove = new(30f, "uinston2/researcher/after_move/1" ),
                                }
                                , FullState = new(30f, "uinston2/full_state/1", "uinston2/full_state/2" ), MedicalState = new(30f, "uinston2/medical_state/1", "uinston2/medical_state/2", "uinston2/medical_state/3" ),
                            }
                        }
                        ,
#if DebugLog && DefaultConfig
                        ["Test"]
                        = new(100000004, 3f, 50f) {
                            Enable = false, Name = "Max39ru", Corpse = DeadCorpse.Backpack, Personality = PersonalityBot.Defensive, CanRandomPointRespawn = true, MaxHealth = 150f, Controller = new(0.1f, 1f, 0f) {
                                RadiusFindEntity = 30f, RateDamageWater = 0f, AccuracyOfFire = 5, ScaleDamageToNPC = 3f, ScaleDamageToAnimal = 2f, ScaleDamageToPlayers = 1f, ScaleDamageFromNPC = 0.1f, ScaleDamageFromAnimal = 0.1f, ScaleDamageFromPlayers = 0.05f
                            }
                            , Wear = new() {
                                CanLock = true, items = new() {
                                    new("hazmatsuit.lumberjack", 0),
                                }
                            }
                            , MinerState = new() {
                                CanMiningWood = false, CanFuelUseFromChainsaw = false, CanMiningOre = true, CanMiningBarrel = true, CanMiningRoadSign = false, CanPickupCollectibleItems = true, CanLootedContainer = true, CanPickupDroppedItems = true, CanLootedCorpse = true, CanButcherCorpse = true, PrefabsCorpseToButcher = new() {
                                    "assets/rust.ai/agents/boar/boar.corpse.prefab", "polarbear.corpse", "bear.corpse", "stag.corpse", "wolf.corpse", "crocodile.corpse", "panther.corpse", "tiger.corpse", "chicken.corpse"
                                }
                                , BlockListPrefabMining = new() {
                                    "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtree03.prefab", "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtreeprefab.prefab", "assets/bundled/prefabs/autospawn/resource/vine_swinging/vineswingingtree02.prefab"
                                }
                                , LootAmountLimitations = new() {
                                    ["wood"]
                                    = 10000, ["stones"] = 5000, ["metal.ore"] = 5000, ["sulfur.ore"] = 5000,
                                }
                            }
                            , HunterState = new() {
                                PriorityMelee = false, RadiusWeaponAttacked = 30f, RadiusMeleeAttacked = 2f,
                            }
                            , BattleState = new() {
                                RadiusWeaponAttacked = 30f, RadiusMeleeAttacked = 1f,
                            }
                            , FullState = new() {
                                Stash = new(true, true, 10, 3600f), Box = new(true, true, 0, 5, 3600f),
                            }
                            , ItemsMiningOre = new() {
                                Items = new() {
                                    new(false, false, new("jackhammer", 0)), new(false, false, new("lumberjack.pickaxe", 0)), new(false, false, new("diverpickaxe", 0)), new(true, true, new("pickaxe", 0)), new(false, false, new("stone.pickaxe", 0)), new(false, true, new("rock", 0)),
                                }
                                ,
                            }
                            , ItemsMiningTree = new() {
                                Items = new() {
                                    new(false, false, new("chainsaw", 0)), new(false, false, new("lumberjack.hatchet", 0)), new(false, false, new("frontier_hatchet", 0)), new(true, true, new("hatchet", 0)), new(false, false, new("stonehatchet", 0)), new(false, true, new("rock", 0)),
                                }
                            }
                            , ItemsWeapon = new() {
                                CanUseAmmo = false, AmountAmmo = 300, AmmoInMagazine = new (5, 20), Items = new() {
                                    // new(false, true, new("shotgun.spas12", 0)),
                                    // new(true, false, new("bow.hunting", 0)),
                                    new(true, false, new("minicrossbow", 0)),  // new(true, false, new("bow.compound", 0)),
                                    // new(true, false, new("1965232394", 0)),
                                    new(true, false, new("salvaged.cleaver", 0)),
                                }
                            }
                            , ItemsMedical = new() {
                                Items = new() {
                                    new(false, true, 5, new("syringe.medical", 0)), new(true, false, 1, new("bandage", 0)),
                                }
                            }
                            , ItemsButcher = new() {
                                Items = new() {
                                    new(true, false, new("knife.skinning", 0)),
                                }
                            }
                            , Phrases = new() {
                                MinerPhrases = new() {
                                    PhrasesPickupCollectable = new(70f, "uinston2/miner/pickup_collectable/1" ), PhrasesPickupItem = new(70f, "uinston2/miner/pickup_collectable/1" ), PhrasesLooting = new(70f, "uinston2/miner/looting/1" ), PhrasesBreaking = new(70f, "uinston2/miner/breaking/1" ), PhrasesMiningOre = new(30f, "uinston2/miner/mining_ore/1" ), PhrasesMiningTree = new(70f, "uinston2/miner/mining_tree/1" ), PhrasesLootingCorpse = new(70f, "uinston2/miner/looting/1" ), PhrasesButcherCorpse = new(70f, "uinston2/miner/butcher_corpse/1" ),
                                }
                                , HunterPhrases = new() {
                                    PhrasesStartAttack = new(70f, "uinston2/hunter/start_attack/1", "uinston2/hunter/start_attack/2" ),
                                }
                                , AttackerPhrases = new() {
                                    PhrasesStartAttack = new(70f, "uinston2/attacker/start_attack/1" ), PhrasesRunAway = new(70f, "uinston2/attacker/run_away/1", "uinston2/attacker/run_away/2", "uinston2/attacker/run_away/3" ), PhrasesNotVisibleTarget = new(70f, "uinston2/attacker/not_visible/1", "uinston2/attacker/not_visible/2", "uinston2/attacker/not_visible/3" ),
                                }
                                , ResearcherPhrases = new() {
                                    PhrasesBeforeMove = new(70f, "uinston2/researcher/before_move/1" ), PhrasesAfterMove = new(70f, "uinston2/researcher/after_move/1" ),
                                }
                                , FullState = new(70f, "uinston2/full_state/1", "uinston2/full_state/2" ), MedicalState = new(70f, "uinston2/medical_state/1", "uinston2/medical_state/2", "uinston2/medical_state/3" ),
                            }
                        }
                        ,
#endif
                    }
                }
                ;
            }
        }
        public class BotSetup {
            [JsonProperty(RU ? "Активировать бота?" : "Enable bot?")]
            public bool Enable = true;
            [JsonProperty(RU ? "Какое количество этих ботов может быть заспавнено?" : "How many of these bots can be spawned?")]
            public int Amount = 1;
            [JsonProperty(RU ? "Внешность бота (работает если кол-во ботов 1, используйте id в диапазоне указанного количества знаков для генератора ID или оставьте 0, для случайной внешности)" : "Bot appearance (used if bot's amount - 1, use the id in the range of the specified number of digits for the bot ID generator or leave 0 for random appearance)")]
            private ulong id = 0;
            [JsonProperty(RU ? "Имя бота (оставьте пустым для случайного выбора)" : "Bot name (leave empty for random)")]
            public string Name = "Dennis";
            [JsonProperty(RU ? "Использовать свои рандомные имена из дата файла? (/data/RoamingNPCs/RandomNicknames, или рандомные имена из Rust будут использованы)" : "Use random names from data file? (/data/RoamingNPCs/RandomNicknames, or Rust's random names will be used)")]
            public bool UseRandomNamesData = false;
            [JsonProperty(RU ? "Разрешить нахождение в состоянии ранения?" : "Allow wounded state?")]
            public bool allowWounded = true;
            [JsonProperty(RU ? "Таймер возрождения (мин. 3 сек)" : "Respawn timer (min 3 seconds)")]
            private float timerRespawn = 3f;
            [JsonProperty(RU ? "Включить периодическую реинициализацию бота? (может улучшить производительность)" : "Enable periodic bot reinitialization? (can improve performance)")]
            public bool EnablePeriodicRespawn = false;
            [JsonProperty(RU ? "Какой режим возрождения использовать? (RandomPoint, RoadPoint, SpawnPoint, SpawnsDatabase)" : "What respawn mode to use? (RandomPoint, RoadPoint, SpawnPoint, SpawnsDatabase)")]
            public SpawnMode spawnMode = 0;
            [JsonProperty(RU ? "Какие дороги использовать для спавна? (DefaultRoads, MainRoads, SideRoads, TrailRoads, Rails)" : "What roads use to spawn? (DefaultRoads, MainRoads, SideRoads, TrailRoads, Rails)")]
            public RoadSpawnMode roadSpawnMode = 0;
            [JsonProperty(RU ? "Название файла с точками спавна (для респавна через SpawnsDatabase)" : "Spawn points filename (for SpawnsDatabase respawn mode)")]
            public string spawnsDatabaseFileName = "";
            [JsonProperty(RU ? "Максимальное здоровье" : "Maximum health")]
            public float MaxHealth = 150f;
            [JsonProperty(RU ? "Что появляется на месте смерти (PlayerCorpse, NpcCorpse, Backpack)" : "What spawns on death (PlayerCorpse, NpcCorpse, Backpack)")]
            public DeadCorpse Corpse = new();
            [JsonProperty(RU ? "Оставлять одежду при смерти на NpcCorpse?" : "Keep clothes on NpcCorpse?")]
            public bool KeepClothesNPCCorpse = true;
            [JsonProperty(RU ? "Процент уничтожения предметов при смерти, если выбран Backpack. (0 - 100%)" : "How many items will be destroyed when Backpack is selected (0 - 100%)")]
            private float destroyPercent = 0f;
            [JsonProperty(RU ? "Список предметов которые не будут выпадать при смерти" : "List of items that won't drop on death")]
            public List<ItemSetup> deathItemsBlacklist = new List<ItemSetup>();
            [JsonProperty(RU ? "Характер бота - агрессивный, мирный или оборонительный? (Aggressive, Friendly, Defensive)" : "Bot behaviour - Aggressive, Friendly, Defensive")]
            public PersonalityBot Personality = PersonalityBot.Friendly;
            [JsonProperty(RU ? "Включить рандомный характер бота?" : "Enable random bot behaviour?")]
            public bool EnableRandomPersonality = false;
            [JsonProperty(RU ? "Настройка контроллера" : "Controller setup")]
            public ControllerSetup Controller = new();
            [JsonProperty(RU ? "Предметы одежды (при возрождении)" : "Wear items (on respawn)")]
            public WearSetup Wear = new();
            [JsonProperty(RU ? "Разрешить скидывать предметы на поясе при смерти?" : "Allow dropping items on belt when dead?")]
            public bool CanDropBeltInventory = false;
            [JsonProperty(RU ? "Настройка сбора ресурсов" : "Resource collection")]
            public SetupMining MinerState = new();
            [JsonProperty(RU ? "Настройка боя с НПС и игроками" : "Fights with NPCs and players")]
            public SetupBattle BattleState = new();
            [JsonProperty(RU ? "Настройка охоты на животных" : "Animal hunting")]
            public SetupHunting HunterState = new();
            [JsonProperty(RU ? "Настройка переполнение инвентаря" : "Inventory overflow")]
            public SetupFullInventory FullState = new();
            [JsonProperty(RU ? "Настройка посещения рт" : "Monuments visit setup")]
            public SetupResearcher ResearcherState = new();
            [JsonProperty(RU ? "Лут при спавне" : "Loot on spawn")]
            public List<LootItemSetup> ItemsOnSpawn = new();
            [JsonProperty(RU ? "Предметы для добычи руды" : "Items for ore mining")]
            public ItemsList<ItemBot> ItemsMiningOre = new();
            [JsonProperty(RU ? "Предметы для добычи дерева" : "Items for tree gathering")]
            public ItemsList<ItemBot> ItemsMiningTree = new();
            [JsonProperty(RU ? "Предметы для боя" : "Items for fights")]
            public ListWeapons ItemsWeapon = new();
            [JsonProperty(RU ? "Предметы для разделки животных" : "Items for harvesting animals")]
            public ItemsList<ItemBot> ItemsButcher = new();
            [JsonProperty(RU ? "Предметы для лечения" : "Items for healing")]
            public ItemsList<AmountItemBot> ItemsMedical = new();
            [JsonProperty(RU ? "Настройка голосовых фраз при различных действиях (вы можете скачать дефолтные фразы со страницы плагина)" : "Voice phrases for different actions (you can download default voice phraes from plugin page)")]
            public SetupPhrase Phrases = new();
            [JsonIgnore]
            public List<ItemBot> itemsGiveBot = new();
            // [JsonIgnore] public bool LockBelt => true;
            public BotSetup() {
            }
            public BotSetup(ulong id, float timerRespawn, float destroyPercent = 0) {
                this.id = id;
                this.timerRespawn = timerRespawn;
                this.destroyPercent = destroyPercent;
            }
            public void Init() {
                FullState.Init();
                ItemsWeapon.Init();
                ItemsMiningOre.SetGiveItemsToList(itemsGiveBot);
                ItemsMiningTree.SetGiveItemsToList(itemsGiveBot);
                ItemsWeapon.SetGiveItemsToList(itemsGiveBot);
                ItemsButcher.SetGiveItemsToList(itemsGiveBot);
                ItemsMedical.SetGiveItemsToList(itemsGiveBot);
            }
            public bool InDeathBlackList(Item item) => item != null && deathItemsBlacklist?.Exists(x => x.GetItemDefinition() == item.info && x.SkinID == item.skin) == true;
            public int GetAmount() => Mathf.Max(1, Amount);
            public float GetTimerRespawn() => Mathf.Max(3f, timerRespawn);
            public float GetPeriodicRespawnInterval() => 900f;
            public float GetPeriodicRespawnPlayerCheckRadius() => 100f;
            public float DestroyPercent() => Mathf.Clamp(destroyPercent, 0f, 100f) / 100f;
            public ulong GetId() {
                if (id == 0) return 0;
                int digits = instance.config.GetDigits();
                if (id.ToString().Length == digits) return id;
                return BotIdGenerator.CheckAndConvert(id.ToString(), digits);
            }
            public IEnumerable<(ItemDefinition, ulong, bool)> GetToolItems(CustomPet.SlotItemTools typeItem, bool revers = false) {
                List<ItemBot> items = typeItem switch {
                    CustomPet.SlotItemTools.Pickaxe => ItemsMiningOre.GetItemsList(), CustomPet.SlotItemTools.Hatchet => ItemsMiningTree.GetItemsList(), _ => null
                }
                ;
                if (items == null) {
                    switch (typeItem) {
                        case CustomPet.SlotItemTools.Hummer : yield return (ItemManager.FindItemDefinition(200773292), 0, true);
                        yield break;
                        case CustomPet.SlotItemTools.Planner : yield return (ItemManager.FindItemDefinition(1525520776), 0, true);
                        yield break;
                        default : yield break;
                    }
                }
                for (int i = 0; i < items.Count; i++) {
                    int index = revers ? items.Count - i - 1 : i;
                    ItemBot item = items[index];
                    if (it
// ... [Code preview truncated due to length. Full source in attached file] ...

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