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

FREE PortableVehicles : 1.0.11 1.0.11

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System.Linq;
using UnityEngine;

namespace Oxide.Plugins
{
    [Info("Portable Vehicles", "Orange", "1.0.11")]
    [Description("Give vehicles as item to your players")]
    public class PortableVehicles : RustPlugin
    {
        #region Vars

        private Dictionary<ulong, string> skins = new Dictionary<ulong, string>
        {
            {1742627792, "assets/content/vehicles/boats/rhib/rhib.prefab"},
            {1742651766, "assets/content/vehicles/boats/rowboat/rowboat.prefab"},
            {1742653197, "assets/content/vehicles/minicopter/minicopter.entity.prefab"},
            {1742652663, "assets/content/vehicles/sedan_a/sedantest.entity.prefab"},
            {1771792500, "assets/prefabs/npc/ch47/ch47.entity.prefab"},
            {1771792987, "assets/prefabs/deployable/hot air balloon/hotairballoon.prefab"},
            {1773898864, "assets/rust.ai/nextai/testridablehorse.prefab"},
            {1856165291, "assets/content/vehicles/scrap heli carrier/scraptransporthelicopter.prefab"},
            {2160249787, "assets/content/vehicles/modularcar/2module_car_spawned.entity.prefab"},
            {2160250208, "assets/content/vehicles/modularcar/3module_car_spawned.entity.prefab"},
            {2160251723, "assets/content/vehicles/modularcar/4module_car_spawned.entity.prefab"},
        };

        private const string itemName = "box.repair.bench";
        private const string command = "portablevehicles.give";
        private const string permPickup = "portablevehicles.pickup";

        #endregion

        #region Oxide Hooks

        private void Init()
        {
            cmd.AddConsoleCommand(command, this, nameof(cmdGiveConsole));
            permission.RegisterPermission(permPickup, this);
        }

        private void OnEntityBuilt(Planner plan, GameObject go)
        {
            CheckPlacement(plan, go);
        }

        private void OnHammerHit(BasePlayer player, HitInfo info)
        {
            CheckPickup(player, info?.HitEntity?.GetComponent<BaseVehicle>());
        }

        #endregion

        #region Commands

        private void cmdGiveConsole(ConsoleSystem.Arg arg)
        {
            if (arg.IsAdmin == false)
            {
                Message(arg, "Permission");
                return;
            }

            var args = arg.Args;
            if (args == null || args?.Length < 2)
            {
                Message(arg, "Usage");
                return;
            }

            var player = FindPlayer(arg, args[0]);
            if (player == null)
            {
                return;
            }

            var skin = GetSkin(args[1]);
            if (skin == 0)
            {
                Message(arg, "Usage");
                return;
            }

            GiveItem(player, skin);
        }

        #endregion

        #region Core

        private void CheckPlacement(Planner plan, GameObject go)
        {
            var entity = go.ToBaseEntity();
            if (entity == null)
            {
                return;
            }

            var player = plan.GetOwnerPlayer();
            var prefab = (string) null;
            if (!skins.TryGetValue(entity.skinID, out prefab))
            {
                return;
            }

            var transform = entity.transform;
            var position = transform.position;
            var rotation = transform.rotation;
            var owner = entity.OwnerID;
            NextTick(() => {
                entity?.Kill();
            });


            var vehicle = GameManager.server.CreateEntity(prefab, position, rotation)?.GetComponent<BaseVehicle>();
            if (vehicle != null)
            {
                vehicle.OwnerID = owner;
                vehicle.Spawn();

                if (vehicle.mountPoints != null && vehicle.mountPoints.Count > 0)
                {
                    var driverSeat = vehicle.mountPoints.FirstOrDefault()?.mountable;
                    if (driverSeat != null)
                    {
                        driverSeat.MountPlayer(player);
                        player.SendNetworkUpdate();
                    }
                }
            }
        }

        private void CheckPickup(BasePlayer player, BaseVehicle entity)
        {
            if (entity == null)
            {
                return;
            }

            if (entity.OwnerID != player.userID)
            {
                Message(player, "Pickup Ownership");
                return;
            }

            var fs = entity.GetFuelSystem();
            if (fs != null && fs.GetFuelContainer().IsLocked() == false && fs.HasFuel())
            {
                Message(player, "Fuel");
                return;
            }

            foreach (var value in skins)
            {
                if (value.Value == entity.PrefabName)
                {
                    if (permission.UserHasPermission(player.UserIDString, permPickup))
                    {
                        NextTick(() => {
                entity?.Kill();
            });

                        GiveItem(player, value.Key);
                    }

                    return;
                }
            }
        }

        private BasePlayer FindPlayer(ConsoleSystem.Arg arg, string nameOrID)
        {
            var targets = BasePlayer.activePlayerList.Where(x =>
                x.UserIDString == nameOrID || x.displayName.ToLower().Contains(nameOrID.ToLower())).ToList();

            if (targets.Count == 0)
            {
                Message(arg, "No Player");
                return null;
            }

            if (targets.Count > 1)
            {
                Message(arg, "Multiple Players");
                return null;
            }

            return targets[0];
        }

        private void GiveItem(BasePlayer player, ulong skinID)
        {
            var item = ItemManager.CreateByName(itemName, 1, skinID);
            if (item != null)
            {
                item.name = "Portable Vehicle";
                player.GiveItem(item);
                Message(player, "Received");
            }
        }

        private ulong GetSkin(string name)
        {
            switch (name.ToLower())
            {
                case "rhib":
                case "militaryboat":
                case "military":
                    return 1742627792;

                case "boat":
                case "rowboat":
                case "motorboat":
                    return 1742651766;

                case "copter":
                case "minicopter":
                    return 1742653197;

                case "car":
                case "sedan":
                    return 1742652663;

                case "balloon":
                case "hotairballoon":
                    return 1771792987;

                case "ch":
                case "ch47":
                case "chinook":
                    return 1771792500;

                case "horse":
                case "testridablehorse":
                    return 1773898864;

                case "scrap":
                case "scraphelicopter":
                case "helicopter":
                    return 1856165291;
                
                case "car2":
                    return 2160249787;
                
                case "car3":
                    return 2160250208;
                
                case "car4":
                    return 2160251723;

                default:
                    return 0;
            }
        }

        #endregion

        #region Localization 1.1.1

        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                {"Usage", "Usage: portablevehicles.give [steamID / player name] [vehicle name]\n"},
                {"Permission", "You don't have permission to use that!"},
                {"Received", "You received portable vehicle!"},
                {"No Player", "There are no players with that Name or steamID!"},
                {"Multiple Players", "There are many players with that Name:\n{0}"},
                {"Pickup Ownership", "Only owner can pickup vehicles!"},
                {"Fuel", "You need to remove fuel from vehicle first!"}
            }, this);
        }

        private void Message(ConsoleSystem.Arg arg, string messageKey, params object[] args)
        {
            var message = GetMessage(messageKey, null, args);
            var player = arg.Player();
            if (player != null)
            {
                player.ChatMessage(message);
            }
            else
            {
                Puts(message);
            }
        }

        private void Message(BasePlayer player, string messageKey, params object[] args)
        {
            if (player == null)
            {
                return;
            }

            var message = GetMessage(messageKey, player.UserIDString, args);
            player.ChatMessage(message);
        }

        private string GetMessage(string messageKey, string playerID, params object[] args)
        {
            return string.Format(lang.GetMessage(messageKey, this, playerID), args);
        }

        #endregion
    }
}

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