C#:
using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using Oxide.Core;
using Oxide.Core.Plugins;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;
using Facepunch;
using Newtonsoft.Json;
namespace Oxide.Plugins {
[Info("MiniCopterSpawn", "Nimant", "1.0.2")]
class MiniCopterSpawn : RustPlugin {
private const string ochhGsQvnEZsPAfHGMjrERiaiYhL = "assets/content/vehicles/minicopter/minicopter.entity.prefab";
private static bool kQANBDTEjLJ = false;
private static int QYvJbtQuxlnSEICgB = LayerMask.GetMask("Terrain", "World", "Construction", "Deployable", "Deployed", "Default", "Tree", "Resource");
private static List<CzYosNSGwOYukuJ> gjBFeuDRRCuja = new List<CzYosNSGwOYukuJ>();
private static System.Random geXaCLpuPgjnBDeHPya = new System.Random();
private class CzYosNSGwOYukuJ {
public int NmdvKMgXWdloUortj;
public int lqsaexUsLhbNu;
public int WUbqjfahnVSNvvRGxdkvejGHUz;
public int AXmZrRWpdMjSVzYhTxFY;
public CzYosNSGwOYukuJ(int NmdvKMgXWdloUortj, int lqsaexUsLhbNu, int WUbqjfahnVSNvvRGxdkvejGHUz, int AXmZrRWpdMjSVzYhTxFY) {
this.NmdvKMgXWdloUortj = NmdvKMgXWdloUortj;
this.lqsaexUsLhbNu = lqsaexUsLhbNu;
this.WUbqjfahnVSNvvRGxdkvejGHUz = WUbqjfahnVSNvvRGxdkvejGHUz;
this.AXmZrRWpdMjSVzYhTxFY = AXmZrRWpdMjSVzYhTxFY;
}
}
private void OnServerInitialized() {
gjBFeuDRRCuja.Clear();
for(int EgRjPLKJiLFnznAkyfmE=0; EgRjPLKJiLFnznAkyfmE < (int)Math.Round((decimal)World.Size/1000);
EgRjPLKJiLFnznAkyfmE++) {
for(int BnEtKBzWTLTMkEfKuDAUUqj=0; BnEtKBzWTLTMkEfKuDAUUqj < (int)Math.Round((decimal)World.Size/1000);
BnEtKBzWTLTMkEfKuDAUUqj++) {
var si = new CzYosNSGwOYukuJ(1000*EgRjPLKJiLFnznAkyfmE-(int)World.Size/2, 1000*EgRjPLKJiLFnznAkyfmE+(1000-1)-(int)World.Size/2, 1000*BnEtKBzWTLTMkEfKuDAUUqj-(int)World.Size/2, 1000*BnEtKBzWTLTMkEfKuDAUUqj+(1000-1)-(int)World.Size/2);
gjBFeuDRRCuja.Add(si);
}
}
timer.Once(3f, sPybWsbgHXFinTsQWGzQfnQHnG);
}
private static int XOcOBShcwqosvRhTiDC() => BaseNetworkable.serverEntities.OfType<MiniCopter>().Count();
private static int dRKmZxrzoogJjITnm(int NmdvKMgXWdloUortj, int lqsaexUsLhbNu, int WUbqjfahnVSNvvRGxdkvejGHUz, int AXmZrRWpdMjSVzYhTxFY) {
int QgEUKGpirOBxEPrhVOyfZ = 0;
var CDstSWEiHs = new HashSet<MiniCopter>(BaseNetworkable.serverEntities.OfType<MiniCopter>());
foreach(var pqQjHSrDsQCCRq in CDstSWEiHs) {
if (pqQjHSrDsQCCRq == null || pqQjHSrDsQCCRq.IsDestroyed) continue;
if (pqQjHSrDsQCCRq.transform.position.x > NmdvKMgXWdloUortj && pqQjHSrDsQCCRq.transform.position.x <= lqsaexUsLhbNu && pqQjHSrDsQCCRq.transform.position.z > WUbqjfahnVSNvvRGxdkvejGHUz && pqQjHSrDsQCCRq.transform.position.z <= AXmZrRWpdMjSVzYhTxFY) QgEUKGpirOBxEPrhVOyfZ++;
}
return QgEUKGpirOBxEPrhVOyfZ;
}
private void sPybWsbgHXFinTsQWGzQfnQHnG() {
if (!kQANBDTEjLJ) CommunityEntity.ServerInstance.StartCoroutine(WjEEZbEfuHTZJSiZXAXVlGllB());
timer.Once(60f, sPybWsbgHXFinTsQWGzQfnQHnG);
}
private IEnumerator WjEEZbEfuHTZJSiZXAXVlGllB() {
kQANBDTEjLJ = true;
var yHLjffhzxqnGgbqgTjlgtNK = (int)Math.Round(MiniCopter.population * gjBFeuDRRCuja.Count());
var DvXlJeFcXPBwShzkQxuJHz = XOcOBShcwqosvRhTiDC();
if (DvXlJeFcXPBwShzkQxuJHz < yHLjffhzxqnGgbqgTjlgtNK) {
int pwSZZCdrBImUYkatddkHlRUR = 0;
foreach(var WjSQiRnQarMhXPdAzE in gjBFeuDRRCuja) {
var lqxzGCpULoRD = dRKmZxrzoogJjITnm(WjSQiRnQarMhXPdAzE.NmdvKMgXWdloUortj, WjSQiRnQarMhXPdAzE.lqsaexUsLhbNu, WjSQiRnQarMhXPdAzE.WUbqjfahnVSNvvRGxdkvejGHUz, WjSQiRnQarMhXPdAzE.AXmZrRWpdMjSVzYhTxFY);
for(int EgRjPLKJiLFnznAkyfmE = lqxzGCpULoRD; EgRjPLKJiLFnznAkyfmE < (int)Math.Floor(MiniCopter.population);
EgRjPLKJiLFnznAkyfmE++) {
BaseEntity dSfQqSmFaRfAjN = null;
var QgEUKGpirOBxEPrhVOyfZ = CVDmkslmGrxBeudcz(WjSQiRnQarMhXPdAzE, ref dSfQqSmFaRfAjN);
yield return new WaitForSeconds(0.01f);
if (QgEUKGpirOBxEPrhVOyfZ) pwSZZCdrBImUYkatddkHlRUR++;
else break;
}
}
if (DvXlJeFcXPBwShzkQxuJHz+pwSZZCdrBImUYkatddkHlRUR < yHLjffhzxqnGgbqgTjlgtNK) {
int sHdOidoEzQpCtpMRaxKIRs = 0;
while(DvXlJeFcXPBwShzkQxuJHz+pwSZZCdrBImUYkatddkHlRUR < yHLjffhzxqnGgbqgTjlgtNK && sHdOidoEzQpCtpMRaxKIRs < 16) {
var ANEqGBWAzJxhgJUOLSbIBuV = gjBFeuDRRCuja[geXaCLpuPgjnBDeHPya.Next(0, gjBFeuDRRCuja.Count())];
BaseEntity dSfQqSmFaRfAjN = null;
var QgEUKGpirOBxEPrhVOyfZ = CVDmkslmGrxBeudcz(ANEqGBWAzJxhgJUOLSbIBuV, ref dSfQqSmFaRfAjN);
if (QgEUKGpirOBxEPrhVOyfZ) pwSZZCdrBImUYkatddkHlRUR++;
else sHdOidoEzQpCtpMRaxKIRs++;
yield return new WaitForSeconds(0.01f);
}
}
}
kQANBDTEjLJ = false;
}
private bool CVDmkslmGrxBeudcz(CzYosNSGwOYukuJ WjSQiRnQarMhXPdAzE, ref BaseEntity dSfQqSmFaRfAjN) {
Vector3 OMNbglnHrExigfTvXZnFzOzCz = default(Vector3);
for(int EgRjPLKJiLFnznAkyfmE=0; EgRjPLKJiLFnznAkyfmE < 80; EgRjPLKJiLFnznAkyfmE++) {
var DhapgcDNfrEXPuB = UnityEngine.Random.Range(WjSQiRnQarMhXPdAzE.NmdvKMgXWdloUortj, WjSQiRnQarMhXPdAzE.lqsaexUsLhbNu);
var TroASBVlpglN = UnityEngine.Random.Range(WjSQiRnQarMhXPdAzE.WUbqjfahnVSNvvRGxdkvejGHUz, WjSQiRnQarMhXPdAzE.AXmZrRWpdMjSVzYhTxFY);
if (SItrgbbrBJ(DhapgcDNfrEXPuB, TroASBVlpglN, ref OMNbglnHrExigfTvXZnFzOzCz)) {
if (!PaGteIELkdJJQBbIpxFkEwWPssv(OMNbglnHrExigfTvXZnFzOzCz, 0.4f)) continue;
if (OMNbglnHrExigfTvXZnFzOzCz.y < 0.5f) continue;
var XrGiOlMaodyOhvoP = aWXJFlPaCKyINKeBkrlwIaq(OMNbglnHrExigfTvXZnFzOzCz);
if (XrGiOlMaodyOhvoP != null) {
dSfQqSmFaRfAjN = XrGiOlMaodyOhvoP;
return true;
}
}
}
return false;
}
private bool PaGteIELkdJJQBbIpxFkEwWPssv(Vector3 ZpLihHuVTCSS, float ofDVRHdZoREOc) {
RaycastHit wcqhZuytrHLmultBu;
var FOVPCTGrRSTYpDihjodLV = "79";
var jhttrqgBwMBj = ZpLihHuVTCSS + new Vector3(-1f, 500f, 0f);
if (Physics.Raycast(jhttrqgBwMBj, Vector3.down, out wcqhZuytrHLmultBu, 1000f, QYvJbtQuxlnSEICgB)) {
if (Math.Abs(ZpLihHuVTCSS.y - wcqhZuytrHLmultBu.point.y) >= ofDVRHdZoREOc) return false;
}
else return false;
jhttrqgBwMBj = ZpLihHuVTCSS + new Vector3(0f, 500f, -1f);
if (Physics.Raycast(jhttrqgBwMBj, Vector3.down, out wcqhZuytrHLmultBu, 1000f, QYvJbtQuxlnSEICgB)) {
if (Math.Abs(ZpLihHuVTCSS.y - wcqhZuytrHLmultBu.point.y) >= ofDVRHdZoREOc) return false;
}
else return false;
jhttrqgBwMBj = ZpLihHuVTCSS + new Vector3(1f, 500f, 0f);
if (Physics.Raycast(jhttrqgBwMBj, Vector3.down, out wcqhZuytrHLmultBu, 1000f, QYvJbtQuxlnSEICgB)) {
if (Math.Abs(ZpLihHuVTCSS.y - wcqhZuytrHLmultBu.point.y) >= ofDVRHdZoREOc) return false;
}
else return false;
jhttrqgBwMBj = ZpLihHuVTCSS + new Vector3(0f, 500f, 1f);
if (Physics.Raycast(jhttrqgBwMBj, Vector3.down, out wcqhZuytrHLmultBu, 1000f, QYvJbtQuxlnSEICgB)) {
if (Math.Abs(ZpLihHuVTCSS.y - wcqhZuytrHLmultBu.point.y) >= ofDVRHdZoREOc) return false;
}
else return false;
return true;
}
private bool SItrgbbrBJ(int DhapgcDNfrEXPuB, int TroASBVlpglN, ref Vector3 OMNbglnHrExigfTvXZnFzOzCz) {
Vector3 ZpLihHuVTCSS = new Vector3(DhapgcDNfrEXPuB, 500f, TroASBVlpglN);
RaycastHit wcqhZuytrHLmultBu;
var QgEUKGpirOBxEPrhVOyfZ = Physics.SphereCast(ZpLihHuVTCSS, 2f, Vector3.down, out wcqhZuytrHLmultBu, 1000, QYvJbtQuxlnSEICgB);
if (!QgEUKGpirOBxEPrhVOyfZ) return false;
if (wcqhZuytrHLmultBu.collider.name != "Terrain") return false;
OMNbglnHrExigfTvXZnFzOzCz = new Vector3(DhapgcDNfrEXPuB, wcqhZuytrHLmultBu.point.y, TroASBVlpglN);
return true;
}
private BaseEntity aWXJFlPaCKyINKeBkrlwIaq(Vector3 OMNbglnHrExigfTvXZnFzOzCz) {
if (OMNbglnHrExigfTvXZnFzOzCz == default(Vector3)) return null;
BaseEntity dSfQqSmFaRfAjN = wBIDjbjiOzcXtRnGyncShh(OMNbglnHrExigfTvXZnFzOzCz);
dSfQqSmFaRfAjN.Spawn();
return dSfQqSmFaRfAjN;
}
private BaseEntity wBIDjbjiOzcXtRnGyncShh(Vector3 position2) {
var gameObject = Instantiate.GameObject(GameManager.server.FindPrefab(ochhGsQvnEZsPAfHGMjrERiaiYhL), position2, Quaternion.Euler(0, UnityEngine.Random.Range(0.0f, 360.0f), 0));
gameObject.name = ochhGsQvnEZsPAfHGMjrERiaiYhL;
SceneManager.MoveGameObjectToScene(gameObject, Rust.Server.EntityScene);
UnityEngine.Object.Destroy(gameObject.GetComponent<Spawnable>());
if (!gameObject.activeSelf) gameObject.SetActive(true);
BaseEntity WtKBPLubRIHvuClwY = gameObject.GetComponent<BaseEntity>();
return WtKBPLubRIHvuClwY;
}
}
}