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

FREE MyMini : 1.0.9 1.0.9

Нет прав для скачивания
C#:
using System.Collections.Generic;
using UnityEngine;
using Oxide.Core;

namespace Oxide.Plugins;

[Info("MyMini", "&anhe", "1.0.9")]
[Description("Spawns a personal minicopter using /mymini, /mini and /fly.")]
public class MyMini : RustPlugin
{
    private const string PermissionUse = "mymini.use";
    private const string DataFile = "MyMini";

    private Dictionary<ulong, ulong> playerMinis = new();

    private void Init() =>
        permission.RegisterPermission(PermissionUse, this);

    private void OnServerInitialized()
    {
        playerMinis =
            Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, ulong>>(DataFile)
            ?? new Dictionary<ulong, ulong>();
    }

    private void OnServerSave() =>
        Interface.Oxide.DataFileSystem.WriteObject(DataFile, playerMinis);

    private void Unload() =>
        Interface.Oxide.DataFileSystem.WriteObject(DataFile, playerMinis);

    [ChatCommand("mymini")]
    [ChatCommand("mini")]
    [ChatCommand("fly")]
    private void MyMiniCommand(BasePlayer player, string command, string[] args)
    {
        if (!permission.UserHasPermission(player.UserIDString, PermissionUse))
            return;

        if (playerMinis.TryGetValue(player.userID, out ulong oldMiniId))
        {
            BaseNetworkable oldEntity =
                BaseNetworkable.serverEntities.Find(new NetworkableId(oldMiniId));

            if (oldEntity is BaseEntity oldMini && !oldMini.IsDestroyed)
                oldMini.Kill();
        }

        Vector3 position = player.transform.position + Vector3.up * .32f;
        Vector3 direction = player.eyes.BodyForward();
        direction.y = 0f;

        int obstacleMask = LayerMask.GetMask(
            "World",
            "Construction",
            "Deployed"
        );

        if (
            Physics.Raycast(position, direction, 3f, obstacleMask, QueryTriggerInteraction.Ignore) ||
            Physics.Raycast(position, -direction, 4f, obstacleMask, QueryTriggerInteraction.Ignore) ||
            Physics.Raycast(position, player.transform.right, 4f, obstacleMask, QueryTriggerInteraction.Ignore) ||
            Physics.Raycast(position, -player.transform.right, 4f, obstacleMask, QueryTriggerInteraction.Ignore)
        )
        {
            SendReply(player, "There is not enough space.");
            return;
        }

        if (
            GameManager.server.CreateEntity(
                "assets/content/vehicles/minicopter/minicopter.entity.prefab",
                position,
                Quaternion.LookRotation(direction)
            ) is not BaseEntity mini
        ) {
            SendReply(player, "Failed to spawn the minicopter.");
            return;
        }
        
        mini.Spawn();
        playerMinis[player.userID] = mini.net.ID.Value;

        if (
            mini.GetComponentInChildren<StorageContainer>() is StorageContainer fuelStorage &&
            ItemManager.CreateByName("lowgradefuel", 500) is Item fuel
        )
            fuel.MoveToContainer(fuelStorage.inventory);

        if (mini is Minicopter _mini)
        {
            _mini.AttemptMount(player);
            using (var setFlags = _mini.StartSetFlags(BaseEntity.FlagsUpdateMode.SendNetworkUpdate_Flags))
            {
                setFlags.Set(BaseEntity.Flags.On, true);
            }
        }
    }
}

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