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

FREE WaterJunk : 1.0.1 1.0.1

Нет прав для скачивания
C#:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using System.Linq;
using Oxide.Core;
using Rust;
using Newtonsoft.Json;
using Facepunch;
namespace Oxide.Plugins {
    [Info("WaterJunk", "Nimant", "1.0.1")]
    class WaterJunk : RustPlugin {
        private static WaterJunk rymlmTePzV;
        private static bool YEeXWTKJGfbBNnridSUhopAugsqU = false;
        private static bool GDrpIUQdwTfF = false;
        private static int ypvVZJdFgSCZFSxJ;
        private static int UPMzJRWYGEhiABUMujpus;
        private static int YtbMObKcOb;
        private static Dictionary<string, int> FZjYeUpepDaYV = new Dictionary<string, int>();
        private static Hash<string, List<Vector3>> NfQCVVZLggASLWHGKlzdnJTeOSprI = new Hash<string, List<Vector3>>();
        private static List<string> skgEwgawkEdCtU = new List<string>() {
            "assets/prefabs/misc/divesite/divesite_a.prefab", "assets/prefabs/misc/divesite/divesite_b.prefab", "assets/prefabs/misc/divesite/divesite_c.prefab", "assets/prefabs/misc/junkpile_water/junkpile_water_a.prefab", "assets/prefabs/misc/junkpile_water/junkpile_water_b.prefab", "assets/prefabs/misc/junkpile_water/junkpile_water_c.prefab"
        }
        ;
        private void Init() {
            fXuUPHHvkieVLpBXOFP();
            rymlmTePzV = this;
        }
        private void OnServerInitialized() {
            YtbMObKcOb = (int)Math.Round((IaGgoWxyOQHXZQRZEmxk.JHowPsRrqVYNMQuTYLF*TerrainMeta.Size.x*TerrainMeta.Size.z)/380000f);
            FZjYeUpepDaYV.Clear();
            foreach(var kWXidzBqcIV in IaGgoWxyOQHXZQRZEmxk.GfyTMmypSmyQxduXePS) FZjYeUpepDaYV.Add(kWXidzBqcIV.Key, (int)Math.Round((kWXidzBqcIV.Value*YtbMObKcOb)/100f));
            var eEYsszhrsEkrltF = new GameObject().AddComponent<RZjCxJjJeTOdQdVIUBtaaDu>();
            MeIXwGlTgkqDUItoIwheCKWebnU();
        }
        private BaseEntity OGEilmAGdPVTF(string luTMuulwxnEAYcLBgOnY, Vector3 dvYaEGWudLZFqsNFcbf) {
            var cxsLpEzudkXNjTNoDJCMFDJfHyudOW = Instantiate.GameObject(GameManager.server.FindPrefab(luTMuulwxnEAYcLBgOnY), dvYaEGWudLZFqsNFcbf, Quaternion.Euler(0, UnityEngine.Random.Range(0.0f, 360.0f), 0));
            cxsLpEzudkXNjTNoDJCMFDJfHyudOW.name = luTMuulwxnEAYcLBgOnY;
            SceneManager.MoveGameObjectToScene(cxsLpEzudkXNjTNoDJCMFDJfHyudOW, Rust.Server.EntityScene);
            UnityEngine.Object.Destroy(cxsLpEzudkXNjTNoDJCMFDJfHyudOW.GetComponent<Spawnable>());
            if (!cxsLpEzudkXNjTNoDJCMFDJfHyudOW.activeSelf) cxsLpEzudkXNjTNoDJCMFDJfHyudOW.SetActive(true);
            BaseEntity wMghgkVGtZu = cxsLpEzudkXNjTNoDJCMFDJfHyudOW.GetComponent<BaseEntity>();
            return wMghgkVGtZu;
        }
        private void MeIXwGlTgkqDUItoIwheCKWebnU() {
            if (YEeXWTKJGfbBNnridSUhopAugsqU) CommunityEntity.ServerInstance.StartCoroutine(wOPUuozLtUwqLCiBXzs());
            timer.Once(30f, MeIXwGlTgkqDUItoIwheCKWebnU);
        }
        private IEnumerator wOPUuozLtUwqLCiBXzs() {
            foreach(var eEpAvnuOdVyHGEDQ in skgEwgawkEdCtU) {
                if (!IaGgoWxyOQHXZQRZEmxk.HpgKUMGDsnFDSd && eEpAvnuOdVyHGEDQ.Contains("junk")) continue;
                if (!IaGgoWxyOQHXZQRZEmxk.pihxFMuncQhTZlLIrrORtmmjzvUZjI && eEpAvnuOdVyHGEDQ.Contains("divesite")) continue;
                var MsdJyHktoMGrfSFy = (BaseNetworkable.serverEntities.OfType<BaseEntity>().Where(b => b.PrefabName == eEpAvnuOdVyHGEDQ && !b.IsDestroyed)).GroupBy(x=> pOmnwiHqaz(x.transform.position)).ToDictionary(x=> x.Key, x=> x.Count());
                foreach(var vjBgvyrLpCjbNGSvNpjnFlsnhq in FZjYeUpepDaYV.Where(x=> NfQCVVZLggASLWHGKlzdnJTeOSprI.ContainsKey(x.Key))) {
                    if (!MsdJyHktoMGrfSFy.ContainsKey(vjBgvyrLpCjbNGSvNpjnFlsnhq.Key)) MsdJyHktoMGrfSFy.Add(vjBgvyrLpCjbNGSvNpjnFlsnhq.Key, 0);
                    for(int ii=MsdJyHktoMGrfSFy[vjBgvyrLpCjbNGSvNpjnFlsnhq.Key];ii<vjBgvyrLpCjbNGSvNpjnFlsnhq.Value;ii++) {
                        object dvYaEGWudLZFqsNFcbf = ZmIelINErvaSGpvDevJHh(eEpAvnuOdVyHGEDQ.Contains("junk"), vjBgvyrLpCjbNGSvNpjnFlsnhq.Key);
                        if (!(dvYaEGWudLZFqsNFcbf is Vector3)) continue;
                        var PNteHUiqifhXQHfMiXbQ = OGEilmAGdPVTF(eEpAvnuOdVyHGEDQ, (Vector3)dvYaEGWudLZFqsNFcbf);
                        PNteHUiqifhXQHfMiXbQ.enableSaving = false;
                        PNteHUiqifhXQHfMiXbQ.Spawn();
                        yield return null;
                    }
                }
            }
        }
        private object ZmIelINErvaSGpvDevJHh(bool aRGsUFlRSW, string vjBgvyrLpCjbNGSvNpjnFlsnhq) {
            Vector3 OHwOfKtafn = NfQCVVZLggASLWHGKlzdnJTeOSprI[vjBgvyrLpCjbNGSvNpjnFlsnhq].ElementAt(UnityEngine.Random.Range(0, NfQCVVZLggASLWHGKlzdnJTeOSprI[vjBgvyrLpCjbNGSvNpjnFlsnhq].Count - 1));
            if (OHwOfKtafn == Vector3.zero) return null;
            OHwOfKtafn = aRGsUFlRSW ? new Vector3(OHwOfKtafn.x, 0f, OHwOfKtafn.z) : new Vector3(OHwOfKtafn.x, OHwOfKtafn.y - 0.75f, OHwOfKtafn.z);
            bool kHWgjumifwlKHHUGleZziw = false;
            if (!aRGsUFlRSW) {
                if (!lMFKYJvChh(OHwOfKtafn, new Vector3(OHwOfKtafn.x-20f, 300, OHwOfKtafn.z)) || !lMFKYJvChh(OHwOfKtafn, new Vector3(OHwOfKtafn.x+20f, 300, OHwOfKtafn.z)) || !lMFKYJvChh(OHwOfKtafn, new Vector3(OHwOfKtafn.x, 300, OHwOfKtafn.z-20f)) || !lMFKYJvChh(OHwOfKtafn, new Vector3(OHwOfKtafn.x, 300, OHwOfKtafn.z+20f))) kHWgjumifwlKHHUGleZziw = true;
            }
            int DvUAKvmDPwLCnsoDB = 0;
            if (!kHWgjumifwlKHHUGleZziw) {
                List<BaseEntity> lzNsjmVKXLpoj = Facepunch.Pool.GetList<BaseEntity>();
                Vis.Entities(OHwOfKtafn, 25f, lzNsjmVKXLpoj, LayerMask.GetMask("Construction", "Deployable", "Player (Server)", "World"));
                DvUAKvmDPwLCnsoDB = lzNsjmVKXLpoj.Count;
                Facepunch.Pool.FreeList(ref lzNsjmVKXLpoj);
            }
            if (DvUAKvmDPwLCnsoDB > 0 || kHWgjumifwlKHHUGleZziw) {
                if (++UPMzJRWYGEhiABUMujpus > 300) {
                    if (!GDrpIUQdwTfF) {
                        PrintWarning("Не все водные мусорные кучи или корабли заспавнились в нужном количестве.Попробуйте уменьшить рейт спавна и перезагрузить сервер.");
                        GDrpIUQdwTfF = true;
                    }
                    return null;
                }
                return ZmIelINErvaSGpvDevJHh(aRGsUFlRSW, vjBgvyrLpCjbNGSvNpjnFlsnhq);
            }
            UPMzJRWYGEhiABUMujpus = 0;
            return OHwOfKtafn;
        }
        private class RZjCxJjJeTOdQdVIUBtaaDu : MonoBehaviour {
            private List<Vector3> PqLefdErMlDjxSrzmVbcuSLxBNwsx = new List<Vector3>();
            private IEnumerator LUYTyCLMeXqyCfblqG() {
                int YUXslQJDIUTZwMDsmdZvs = (int)Math.Round(TerrainMeta.Size.x / -2f);
                int bbmPkxILCEjMzPCPAxUANIpv = (int)Math.Round(TerrainMeta.Size.z / -2f);
                int OJJdVqumZFOLHSMOvngruZKSvp = (int)Math.Round(TerrainMeta.Size.x / 2f);
                int XRnomdQoIpepXngZcyw = (int)Math.Round(TerrainMeta.Size.z / 2f);
                float DpmYNsFEvtbLrCghLMoDzAOuxCD = 18f*18f;
                var KMYLEWqABqjNLAIlABC = IaGgoWxyOQHXZQRZEmxk.GfyTMmypSmyQxduXePS;
                RaycastHit jEBFoApbsxfXy;
                float bMUCwwwoqfGQkzQZPDb = 0f;
                string vjBgvyrLpCjbNGSvNpjnFlsnhq = "";
                int DvUAKvmDPwLCnsoDB = 0;
                Vector3 dFbQyGxPDcpDGaGdgc = default(Vector3);
                for(int x = YUXslQJDIUTZwMDsmdZvs; x < OJJdVqumZFOLHSMOvngruZKSvp; x += 15) {
                    for(int z = bbmPkxILCEjMzPCPAxUANIpv; z < XRnomdQoIpepXngZcyw; z += 15) {
                        if (++DvUAKvmDPwLCnsoDB % 50 == 0) yield return null;
                        bMUCwwwoqfGQkzQZPDb = TerrainMeta.HeightMap.GetHeight(new Vector3(x, 0f, z));
                        if (bMUCwwwoqfGQkzQZPDb < -20f) {
                            dFbQyGxPDcpDGaGdgc = new Vector3(x, bMUCwwwoqfGQkzQZPDb, z);
                            Physics.SphereCast(new Vector3(dFbQyGxPDcpDGaGdgc.x, 300, dFbQyGxPDcpDGaGdgc.z), 2.5f, Vector3.down, out jEBFoApbsxfXy, 400, LayerMask.GetMask("Terrain", "World"));
                            if (jEBFoApbsxfXy.point.y >= -20f || (jEBFoApbsxfXy.collider != null && jEBFoApbsxfXy.collider.name != "Terrain")) continue;
                            dFbQyGxPDcpDGaGdgc.y = jEBFoApbsxfXy.point.y;
                            if (!PqLefdErMlDjxSrzmVbcuSLxBNwsx.Exists(r=>(dFbQyGxPDcpDGaGdgc - r).sqrMagnitude < DpmYNsFEvtbLrCghLMoDzAOuxCD)) {
                                vjBgvyrLpCjbNGSvNpjnFlsnhq = pOmnwiHqaz(dFbQyGxPDcpDGaGdgc);
                                PqLefdErMlDjxSrzmVbcuSLxBNwsx.Add(dFbQyGxPDcpDGaGdgc);
                                if (!NfQCVVZLggASLWHGKlzdnJTeOSprI.ContainsKey(vjBgvyrLpCjbNGSvNpjnFlsnhq)) NfQCVVZLggASLWHGKlzdnJTeOSprI.Add(vjBgvyrLpCjbNGSvNpjnFlsnhq, new List<Vector3>());
                                NfQCVVZLggASLWHGKlzdnJTeOSprI[vjBgvyrLpCjbNGSvNpjnFlsnhq].Add(dFbQyGxPDcpDGaGdgc);
                            }
                        }
                    }
                }
            }
            private IEnumerator Start() {
                rymlmTePzV.Puts("Генерируются места спавна водных мусорных куч и кораблей...");
                yield return StartCoroutine("LUYTyCLMeXqyCfblqG");
                StopCoroutine("LUYTyCLMeXqyCfblqG");
                ypvVZJdFgSCZFSxJ = PqLefdErMlDjxSrzmVbcuSLxBNwsx.Count;
                if (ypvVZJdFgSCZFSxJ > 0) {
                    rymlmTePzV.Puts($"Места спавна водных мусорных куч и кораблей созданы.");
                    YEeXWTKJGfbBNnridSUhopAugsqU = true;
                }
                else rymlmTePzV.PrintError($"Места спавна водных мусорных куч и кораблей не созданы.Работа плагина невозможна!");
                Destroy(this);
            }
        }
        private static string pOmnwiHqaz(Vector3 dvYaEGWudLZFqsNFcbf) {
            Dictionary<string, float> tNDhjdSjHGoVTVVV = new Dictionary<string, float> {
                {
                    "Arctic", TerrainMeta.BiomeMap.GetBiome(dvYaEGWudLZFqsNFcbf, TerrainBiome.ARCTIC)
                }
                , {
                    "Arid", TerrainMeta.BiomeMap.GetBiome(dvYaEGWudLZFqsNFcbf, TerrainBiome.ARID)
                }
                , {
                    "Temperate", TerrainMeta.BiomeMap.GetBiome(dvYaEGWudLZFqsNFcbf, TerrainBiome.TEMPERATE)
                }
                , {
                    "Tundra", TerrainMeta.BiomeMap.GetBiome(dvYaEGWudLZFqsNFcbf, TerrainBiome.TUNDRA)
                }
            }
            ;
            return tNDhjdSjHGoVTVVV.OrderByDescending(x => x.Value).ToArray()[0].Key;
        }
        private bool lMFKYJvChh(Vector3 vnIwGEXCLLZvTjtJlXWyjIr, Vector3 dvYaEGWudLZFqsNFcbf) {
            RaycastHit jEBFoApbsxfXy;
            Physics.SphereCast(dvYaEGWudLZFqsNFcbf, 2.5f, Vector3.down, out jEBFoApbsxfXy, 400, LayerMask.GetMask("Terrain", "World"));
            return !((jEBFoApbsxfXy.point.y >= vnIwGEXCLLZvTjtJlXWyjIr.y && (jEBFoApbsxfXy.point.y - vnIwGEXCLLZvTjtJlXWyjIr.y) > 2.5f) || (jEBFoApbsxfXy.point.y < vnIwGEXCLLZvTjtJlXWyjIr.y && (vnIwGEXCLLZvTjtJlXWyjIr.y - jEBFoApbsxfXy.point.y) > 2.5f) );
        }
        private static ieXyiKBEfkpHDQArZurKwtJ IaGgoWxyOQHXZQRZEmxk;
        private class ieXyiKBEfkpHDQArZurKwtJ {
            [JsonProperty(PropertyName = "Разрешить спавн кораблей")]
            public bool pihxFMuncQhTZlLIrrORtmmjzvUZjI;
            [JsonProperty(PropertyName = "Разрешить спавн мусорных куч на воде")]
            public bool HpgKUMGDsnFDSd;
            [JsonProperty(PropertyName = "Рейт спавна мусорных куч и кораблей")]
            public float JHowPsRrqVYNMQuTYLF;
            [JsonProperty(PropertyName = "Распределение мусорных куч и кораблей по биомам (0-100%)")]
            public Dictionary<string, int> GfyTMmypSmyQxduXePS {
                get;
                set;
            }
        }
        private void fXuUPHHvkieVLpBXOFP() => IaGgoWxyOQHXZQRZEmxk = Config.ReadObject<ieXyiKBEfkpHDQArZurKwtJ>();
        protected override void LoadDefaultConfig() {
            IaGgoWxyOQHXZQRZEmxk = new ieXyiKBEfkpHDQArZurKwtJ {
                pihxFMuncQhTZlLIrrORtmmjzvUZjI = true, HpgKUMGDsnFDSd = true, JHowPsRrqVYNMQuTYLF = 1f, GfyTMmypSmyQxduXePS = new Dictionary<string, int> {
                    {
                        "Arid", 48
                    }
                    , {
                        "Temperate", 48
                    }
                    , {
                        "Tundra", 4
                    }
                    , {
                        "Arctic", 0
                    }
                }
            }
            ;
            yDsmKgWJiXJgWPpVwKaDY(IaGgoWxyOQHXZQRZEmxk);
        }
        private void yDsmKgWJiXJgWPpVwKaDY(ieXyiKBEfkpHDQArZurKwtJ ACtrHeKLLDmTTJCBdLvXG) => Config.WriteObject(ACtrHeKLLDmTTJCBdLvXG, true);
    }
}

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

Другие ресурсы пользователя 15FPS

Сверху