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

FREE OxidationTrollRocketMan : 1.0.2 1.0.2

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
/**
 * OxidationTrollRocketMan - Troll's kit - The rocketman
 * Copyright (C) 2021 kasvoton [kasvoton@projectoxidation.com]
 *
 * All Rights Reserved.* DO NOT DISTRIBUTE THIS SOFTWARE.*
 * You should have received a copy of the EULA along with this software.* If not, see <https://projectoxidation.com/license/eula.txt>.*
 *
 *                #################################
 *               ###  I AM AVAILABLE FOR HIRING  ###
 *                #################################
 *
 * IF YOU WANT A CUSTOM PLUGIN FOR YOUR SERVER GET INTO CONTACT WITH ME SO
 * WE CAN DISCUSS YOUR NEED IN DETAIL.I CAN BUILD PLUGINS FROM SCRATCH OR
 * MODIFY EXISTING ONES DEPENDING ON THE COMPLEXITY.*
 */

using System;
using UnityEngine;

namespace Oxide.Plugins
{
	[Info("OxidationTrollRocketMan", "kasvoton", "1.0.2")]
	[Description("Project Oxidation :: Troll's kit :: The rocketman")]

	public class OxidationTrollRocketMan : RustPlugin
	{
		private static readonly string UsePermission
			= "oxidationtrollrocketman.use";

		//
		// --- UMOD EVENTS -----------------------------------------------------
		//
		private void Loaded()
			=> permission.RegisterPermission(UsePermission, this);

		private void Unload()
		{
			foreach (OxidationRocketManAI Behaviour in UnityEngine.Object.FindObjectsOfType<OxidationRocketManAI>())
				if (Behaviour != null) UnityEngine.Object.Destroy(Behaviour);
		}

		private object CanDismountEntity(BasePlayer Player, BaseMountable Entity)
		{
			if (Player == null || Entity == null) return null;

			OxidationRocketManAI Behaviour = Player.GetComponent<OxidationRocketManAI>();
			if (Behaviour == null) return null;
			return false;
		}

		private void OnPlayerCorpseSpawned(BasePlayer Player, LootableCorpse Corpse)
		{
			if (Player == null || Corpse == null) return;

			OxidationRocketManAI Behaviour = Player.GetComponent<OxidationRocketManAI>();
			if (Behaviour == null) return;

			for(int x = 0; x < Corpse.containers.Length; x++)
				while(Corpse.containers[x].itemList.Count > 0)
					Corpse.containers[x].itemList[0].DropAndTossUpwards(Corpse.transform.position, 2f);

			Corpse.SendNetworkUpdateImmediate();
		}

		//
		// --- COMMANDS --------------------------------------------------------
		//
		[ChatCommand("troll.rocketman")]
		private void OxidationTrollRocketManCommand(BasePlayer Player, string Command, string[] args)
		{
			if (Player == null || args.Length == 0) return;
			if (!Player.IsAdmin && !CanUseCommand(Player.UserIDString)) return;

			BasePlayer Victim = covalence.Players.FindPlayer(args[0])?.Object as BasePlayer;
			if (Victim == null) return;

			OxidationRocketManAI Behaviour = Victim.gameObject.AddComponent<OxidationRocketManAI>();
		}

		[ConsoleCommand("troll.rocketman")]
		private void OxidationTrollRocketManRcon(ConsoleSystem.Arg arg)
		{
			if (!arg.IsAdmin || ! arg.HasArgs(1)) return;

			BasePlayer Victim = arg.GetPlayer(0);
			if (Victim == null || !Victim.IsConnected)
			{
				SendReply(arg, $"Player not found or not connected to the server.");
				return;
			}

			OxidationRocketManAI Behaviour = Victim.gameObject.AddComponent<OxidationRocketManAI>();
			SendReply(arg, $"Command executed.");
		}

		//
		// --- HELPERS ---------------------------------------------------------
		//
		private bool CanUseCommand(string SteamID)
			=> permission.UserHasPermission(SteamID, UsePermission);

		//
		// --- BEHAVIOURS ------------------------------------------------------
		//
		internal class OxidationRocketManAI : MonoBehaviour
		{
			protected BasePlayer Victim;
			internal void Awake()
				=> Victim = GetComponent<BasePlayer>();

			internal void OnEnable()
				=> Victim.PauseFlyHackDetection(10f);

			internal void OnDisable()
				=> Victim.ResetAntiHack();

			internal void Start()
			{
				try
				{
					BaseEntity Rocket = GameManager.server.CreateEntity(
						"assets/prefabs/ammo/rocket/rocket_basic.prefab",
						Victim.transform.position + new Vector3(0, 2f, 0));
					if (Rocket == null) throw new Exception();

					ServerProjectile RocketP = Rocket.GetComponent<ServerProjectile>();
					if (RocketP == null) throw new Exception();

					RocketP.gravityModifier *= -1f;
					RocketP.InitializeVelocity(Vector3.forward * 4f);

					TimedExplosive RocketE = Rocket.GetComponent<TimedExplosive>();
					if (RocketE == null) throw new Exception();

					RocketE.timerAmountMax = 10f;
					RocketE.timerAmountMin = 8f;

					Rocket.enableSaving = false;
					Rocket.Spawn();

					BaseChair Seat = GameManager.server.CreateEntity(
						"assets/prefabs/misc/summer_dlc/beach_chair/beachchair.deployed.prefab",
						Rocket.transform.position) as BaseChair;
					if (Seat == null) throw new Exception();

					Seat.SetParent(Rocket);
					Seat.transform.localPosition = new Vector3(0.00f, -0.10f, 0.00f);
					Seat.transform.localRotation = Quaternion.Euler(0.00f, 180.00f, 0.00f);

					Seat.enableSaving = false;
					Seat.skinID = 13003;
					Seat.Spawn();

					Victim.inventory.containerBelt.capacity = 0;
					Victim.SendNetworkUpdate();
					Seat.MountPlayer(Victim);
				}
				catch
				{
					UnityEngine.Object.Destroy(this);
				}
			}

			internal void FixedUpdate()
			{
				if (!Victim.isMounted) UnityEngine.Object.Destroy(this);
			}

			internal void OnDestroy()
			{
				Victim.inventory.containerBelt.capacity = 6;
				Victim.DieInstantly();
			}
		}
	}
}

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