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

FREE FreeCraft : 1.0.0 1.0.0

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

namespace Oxide.Plugins
{
    [Info("FreeCraft", "YourName", "1.0.0")]
    public class FreeCraft : RustPlugin
    {
        private Dictionary<ulong, bool> freeCraftingPlayers = new Dictionary<ulong, bool>();
        private readonly Dictionary<ulong, BaseEntity> playerWorkbenches = new Dictionary<ulong, BaseEntity>();
        private const string WorkbenchPrefab = "assets/prefabs/deployable/tier 3 workbench/workbench3.deployed.prefab";
        /// <summary>
        /// Множитель для количества ресурсов
        /// </summary>
        private const int ResourceMultiplier = 1000;

        private void Init()
        {
            permission.RegisterPermission("freecraft.admin", this);
            LoadData();
        }

        private void OnServerInitialized()
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                if (playerWorkbenches.ContainsKey(player.userID))
                {
                    SpawnWorkbench(player);
                }
            }
        }

        private void Unload()
        {
            foreach (BaseEntity workbench in playerWorkbenches.Values)
            {
                if (workbench?.IsDestroyed == false)
                {
                    workbench.Kill();
                }
            }
            SaveData();
        }

        [ChatCommand("freecrafting")]
        private void FreeCraftingCommand(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, "freecraft.admin"))
            {
                SendReply(player, "У вас нет прав на использование этой команды!");
                return;
            }

            if (args.Length == 0)
            {
                SendReply(player, "Использование: /freecrafting <ник/steamid>");
                return;
            }

            BasePlayer targetPlayer = FindPlayer(args[0]);
            if (targetPlayer == null)
            {
                SendReply(player, "Игрок не найден!");
                return;
            }

            ulong targetId = targetPlayer.userID;
            if (!freeCraftingPlayers.ContainsKey(targetId))
            {
                freeCraftingPlayers[targetId] = true;
                SendReply(player, $"Бесплатный крафт включен для игрока {targetPlayer.displayName}");
                SendReply(targetPlayer, "Для вас включен бесплатный крафт!");
            }
            else
            {
                freeCraftingPlayers.Remove(targetId);
                SendReply(player, $"Бесплатный крафт выключен для игрока {targetPlayer.displayName}");
                SendReply(targetPlayer, "Бесплатный крафт отключен!");
            }
            SaveData();
        }

        [ChatCommand("noworkbench")]
        private void NoWorkbenchCommand(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, "freecraft.admin"))
            {
                SendReply(player, "У вас нет прав на использование этой команды!");
                return;
            }

            if (args.Length == 0)
            {
                SendReply(player, "Использование: /noworkbench <ник/steamid>");
                return;
            }

            BasePlayer targetPlayer = FindPlayer(args[0]);
            if (targetPlayer == null)
            {
                SendReply(player, "Игрок не найден!");
                return;
            }

            ulong targetId = targetPlayer.userID;
            if (!playerWorkbenches.ContainsKey(targetId))
            {
                SpawnWorkbench(targetPlayer);
                SendReply(player, $"Крафт без верстака включен для игрока {targetPlayer.displayName}");
                SendReply(targetPlayer, "Для вас включен крафт без верстака!");
            }
            else
            {
                RemoveWorkbench(targetPlayer);
                SendReply(player, $"Крафт без верстака выключен для игрока {targetPlayer.displayName}");
                SendReply(targetPlayer, "Крафт без верстака отключен!");
            }
            SaveData();
        }

        private void SpawnWorkbench(BasePlayer player)
        {
            RemoveWorkbench(player);

            BaseEntity workbench = GameManager.server.CreateEntity(WorkbenchPrefab, player.transform.position + new Vector3(0f, -1f, 0f));
            if (workbench == null)
            {
                return;
            }

            workbench.Spawn();
            workbench.enableSaving = false;
            workbench.GetComponent<BoxCollider>().enabled = false;
            workbench.GetComponent<MeshRenderer>().enabled = false;

            playerWorkbenches[player.userID] = workbench;
        }

        private void RemoveWorkbench(BasePlayer player)
        {
            BaseEntity workbench;
            if (playerWorkbenches.TryGetValue(player.userID, out workbench))
            {
                if (workbench?.IsDestroyed == false)
                {
                    workbench.Kill();
                }
                playerWorkbenches.Remove(player.userID);
            }
        }

        private void OnPlayerDisconnected(BasePlayer player)
        {
            if (player == null)
            {
                return;
            }

            RemoveWorkbench(player);
        }

        private void OnTick()
        {
            foreach (KeyValuePair<ulong, BaseEntity> entry in playerWorkbenches)
            {
                BasePlayer player = BasePlayer.FindByID(entry.Key);
                BaseEntity workbench = entry.Value;

                if (player == null || workbench?.IsDestroyed != false)
                {
                    continue;
                }

                Vector3 newPos = player.transform.position + new Vector3(0f, -1f, 0f);
                if (workbench.transform.position != newPos)
                {
                    workbench.transform.position = newPos;
                }
            }
        }

        private BasePlayer FindPlayer(string nameOrId)
        {
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                string playerName = player.displayName.ToLowerInvariant();
                string searchName = nameOrId.ToLowerInvariant();

                if (playerName.Contains(searchName) ||
                    player.UserIDString.Equals(nameOrId, StringComparison.OrdinalIgnoreCase))
                {
                    return player;
                }
            }
            return null;
        }

        private object OnItemCraft(ItemCrafter itemCrafter, ItemBlueprint blueprint, int amount)
        {
            if (itemCrafter == null)
            {
                return null;
            }

            if (blueprint == null)
            {
                return null;
            }

            if (blueprint.ingredients == null)
            {
                return null;
            }

            BasePlayer player = itemCrafter.GetComponent<BasePlayer>();
            if (player == null)
            {
                return null;
            }

            if (freeCraftingPlayers.ContainsKey(player.userID))
            {
                foreach (ItemAmount ingredient in blueprint.ingredients)
                {
                    PlayerInventory inventory = player.inventory.GetComponent<PlayerInventory>();
                    if (inventory == null)
                    {
                        continue;
                    }

                    if (inventory.containerMain == null)
                    {
                        continue;
                    }

                    inventory.containerMain.AddItem(ingredient.itemDef, (int)(ingredient.amount * amount * ResourceMultiplier), 0);
                }
            }

            return null;
        }

        private object CanCraft(ItemCrafter itemCrafter, ItemBlueprint blueprint, int amount)
        {
            if (itemCrafter == null)
            {
                return null;
            }

            if (blueprint == null)
            {
                return null;
            }

            BasePlayer player = itemCrafter.GetComponent<BasePlayer>();
            return player == null ? (object)null : freeCraftingPlayers.ContainsKey(player.userID) || (object)null;
        }

        private void SaveData()
        {
            if (freeCraftingPlayers != null)
            {
                Interface.Oxide.DataFileSystem.WriteObject($"{Name}/freecrafting", freeCraftingPlayers);
            }

            Dictionary<ulong, bool> workbenchPlayers = new Dictionary<ulong, bool>();
            foreach (ulong player in playerWorkbenches.Keys)
            {
                workbenchPlayers[player] = true;
            }
            Interface.Oxide.DataFileSystem.WriteObject($"{Name}/workbenches", workbenchPlayers);
        }

        private void LoadData()
        {
            freeCraftingPlayers = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, bool>>($"{Name}/freecrafting") ?? new Dictionary<ulong, bool>();
            Dictionary<ulong, bool> workbenchPlayers = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, bool>>($"{Name}/workbenches") ?? new Dictionary<ulong, bool>();

            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                if (workbenchPlayers.ContainsKey(player.userID))
                {
                    SpawnWorkbench(player);
                }
            }
        }

        protected override void LoadDefaultConfig()
        {
            PrintWarning("New config created");
        }
    }
}

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