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

FREE SpawnToPlayer : 0.1.1 0.1.1

Нет прав для скачивания
C#:
using System.Collections.Generic;
using UnityEngine;
using Rust;
using Oxide.Game.Rust.Cui;
using Oxide.Core.Plugins;
using System.Reflection;
using System;
using System.Linq;
using System.Globalization;
using Oxide.Core.Configuration;
using Oxide.Core;
using UnityEngine.SceneManagement;
using Facepunch;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Linq;
using UnityEngine.AI;

namespace Oxide.Plugins
{
    [Info("SpawnToPlayer", "BarakudaX777", "0.1.1")]
    [Description("Spawn entity to player")]
    class SpawnToPlayer : RustPlugin
    {
        #region Класс
        public class SpawnElement
        {
            [JsonProperty("Название")] public string name;
            [JsonProperty("ID предмета для замены")] public int item;
            [JsonProperty("Скин")] public ulong skin;
            [JsonProperty("Префаб")] public string prefab;
            [JsonProperty("Допускать спавн на землю")] public bool inGround;
            [JsonProperty("Допускать спавн на строениях")] public bool inConstr;
        }
        private Configuration config;
        public class Configuration
        {
            [JsonProperty("Элементы")] public List<SpawnElement> SpawnElements;
			public static Configuration GetNewCong()
            {
                return new Configuration
                {
                    SpawnElements = new List<SpawnElement>
                    {
                        new SpawnElement
                        {
							name = "sedan",
							item=-295829489,
							skin = 1773629815,
                            prefab = "assets/content/vehicles/sedan_a/sedantest.entity.prefab",
							inGround = true,
							inConstr=false
                        },						
                        new SpawnElement
                        {
							name = "horse",
							item=-295829489,
							skin = 1766455225,
                            prefab = "assets/rust.ai/nextai/testridablehorse.prefab",
							inGround = true,
							inConstr=false
                        },
                    }
                };
            }
        }
        #endregion
        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                config = Config.ReadObject<Configuration>();
                if (config?.SpawnElements == null) LoadDefaultConfig();
            }
            catch
            {
                PrintWarning($"Что то с этим конфигом не так! 'oxide/config/{Name}', создаём новую конфигурацию!");
                LoadDefaultConfig();
            }

            NextTick(SaveConfig);
        }
        protected override void LoadDefaultConfig() => config = Configuration.GetNewCong();
		private minorVersion=175;
		protected override void SaveConfig() => Config.WriteObject(config);	
        [ConsoleCommand("spawnto")]
        void SpawntoConsoleCommand(ConsoleSystem.Arg arg)
        {
            if (arg == null || arg.FullString.Length == 0){PrintError("Не указаны параметры");return;}
		    BasePlayer player = BasePlayer.Find(arg.Args[0]);
		    if (player == null){PrintError($"[Ошибка] Не удается найти игрока {arg.Args[0]}");return;}
            if (!player.IsAdmin){SendReply(player, "Команда доступна только администраторам");return;}
		    string name = arg.Args[1];
		    if (string.IsNullOrEmpty(name)){PrintError($"[Ошибка] Не указан параметр префаба");return;}
			foreach (var el in config.SpawnElements)
			{
				if ((el==null)|| (name!=el.name)) continue;
				GiveEntityElement(player,el);
				SendReply(player, "Предмет получен");
				continue;
			}
        }
	    private void GiveEntityElement(BasePlayer player,SpawnElement sp)
	    {		
		    Item ent = ItemManager.CreateByItemID(sp.item, 1, sp.skin);
		    ent.MoveToContainer(player.inventory.containerMain);
	    }
		void OnEntityBuilt(Planner planner, GameObject gameobject)
        {
	        BaseEntity entity = gameobject.ToBaseEntity(); 
	        BasePlayer player = planner.GetOwnerPlayer();
	        if(player == null || entity == null) return;
	        foreach (var el in config.SpawnElements)
			{
				if (entity.skinID != el.skin) continue;
				entity.Kill();
				Vector3 ePos = entity.transform.position;
				BaseEntity EntityElement = GameManager.server.CreateEntity(el.prefab, ePos, entity.transform.rotation, true);
				RaycastHit rHit;
				if (Physics.Raycast(new Vector3(ePos.x,ePos.y+1, ePos.z), Vector3.down, out rHit, 2f, LayerMask.GetMask(new string[] {"Construction"})) && rHit.GetEntity() != null)
				{
					if (!el.inConstr){
						player.ChatMessage("Данный предмет нельзя ставить на строения (фундамент, потолки и тд)");
						GiveEntityElement(player,el);
						EntityElement.Kill();
						continue;
					}
				}
				else
				{
					if (!el.inGround){
						player.ChatMessage("Данный предмет не может распологаться на земле");
						GiveEntityElement(player,el);
						EntityElement.Kill();
						continue;
					}
				}	
				EntityElement.OwnerID = player.userID;
				EntityElement.Spawn();
			}
        }
    }
}

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