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

FREE UnlimitedItems : 1.0.1 1.0.1

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

namespace Oxide.Plugins
{
    [Info("Unlimited Items", "Lincoln", "1.0.1")]
    [Description("Allows players with permission to have unlimited items in their inventory.")]
    class UnlimitedItems : RustPlugin
    {
        #region Fields
        private const string PermissionName = "unlimiteditems.use";
        private const string ForcePermissionName = "unlimiteditems.force";
        private const string Prefix = "<color=#f1c232>[Unlimited Items]</color>";
        private Configuration _config;
        private StoredData _storedData;
        #endregion

        #region Data Classes
        private class StoredData
        {
            public Dictionary<ulong, bool> PlayerToggles = new Dictionary<ulong, bool>();
        }

        private class Configuration
        {
            [JsonProperty("Enable Unlimited Items")]
            public bool EnableUnlimitedItems { get; set; } = true;

            [JsonProperty("Enable Health Restoration")]
            public bool EnableHealthRestoration { get; set; } = true;
        }
        #endregion

        #region Data Management
        private void LoadData()
        {
            _storedData = Interface.Oxide.DataFileSystem.ReadObject<StoredData>(Name) ?? new StoredData();
        }

        private void SaveData()
        {
            Interface.Oxide.DataFileSystem.WriteObject(Name, _storedData);
        }

        private bool IsUnlimitedEnabled(BasePlayer player)
        {
            if (!_storedData.PlayerToggles.TryGetValue(player.userID, out bool enabled))
            {
                _storedData.PlayerToggles[player.userID] = true;
                SaveData();
                return true;
            }
            return enabled;
        }

        private void ToggleUnlimited(BasePlayer player, bool enabled)
        {
            _storedData.PlayerToggles[player.userID] = enabled;
            SaveData();
        }
        #endregion

        #region Configuration
        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                _config = Config.ReadObject<Configuration>();
                if (_config == null) LoadDefaultConfig();
            }
            catch
            {
                PrintError("Configuration file is corrupted, creating new default config");
                LoadDefaultConfig();
            }
            SaveConfig();
        }

        protected override void LoadDefaultConfig()
        {
            _config = new Configuration
            {
                EnableUnlimitedItems = true,
                EnableHealthRestoration = true
            };
        }

        protected override void SaveConfig() => Config.WriteObject(_config, true);

        private void UpdateConfigValues()
        {
            PrintWarning("Configuration update detected! Updating config values...");
        }
        #endregion

        #region Localization
        private void LoadMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["NoPermission"] = $"{Prefix} You do not have permission to use unlimited items.",
                ["PluginDisabled"] = $"{Prefix} This plugin is currently disabled.",
                ["ToggleOn"] = $"{Prefix} Unlimited items enabled.",
                ["ToggleOff"] = $"{Prefix} Unlimited items disabled.",
                ["ToggleUsage"] = $"{Prefix} Usage: /ui to enable/disable unlimited items.",
                ["ForceEnabled"] = $"{Prefix} Your unlimited items are forced on and cannot be toggled."
            }, this);
        }

        private string GetMessage(string key, string userId = null, params object[] args)
        {
            return string.Format(lang.GetMessage(key, this, userId), args);
        }
        #endregion

        #region Oxide Hooks
        private void Init()
        {
            permission.RegisterPermission(PermissionName, this);
            permission.RegisterPermission(ForcePermissionName, this);
            LoadMessages();
            LoadData();
            PrintWarning("UnlimitedItems plugin initialized!");
            PrintWarning($"Permission {PermissionName} registered: {permission.PermissionExists(PermissionName)}");
            PrintWarning($"Permission {ForcePermissionName} registered: {permission.PermissionExists(ForcePermissionName)}");
        }

        private bool HasUnlimitedItemsPermission(BasePlayer player)
        {
            if (!_config.EnableUnlimitedItems) return false;
            if (permission.UserHasPermission(player.UserIDString, ForcePermissionName)) return true;
            return permission.UserHasPermission(player.UserIDString, PermissionName) && IsUnlimitedEnabled(player);
        }

        object OnItemUse(Item item, int amount)
        {
            if (item == null || amount <= 0 || !_config.EnableUnlimitedItems) return null;
            BasePlayer player = item.GetOwnerPlayer();
            if (player != null && HasUnlimitedItemsPermission(player))
            {
                item.amount += amount;
                item.MarkDirty();
                return false;
            }
            return null;
        }

        object OnItemDeploy(Item item, BaseEntity entity)
        {
            if (item == null || entity == null || !_config.EnableUnlimitedItems) return null;
            BasePlayer player = item.GetOwnerPlayer();
            if (player != null && HasUnlimitedItemsPermission(player))
            {
                item.amount++;
                item.MarkDirty();
                if (_config.EnableHealthRestoration && entity is BaseCombatEntity combatEntity)
                {
                    combatEntity.SetHealth(combatEntity.MaxHealth());
                    combatEntity.SendNetworkUpdateImmediate();
                }
                return false;
            }
            return null;
        }

        [ChatCommand("ui")]
        private void CmdToggleUnlimited(BasePlayer player, string command, string[] args)
        {
            PrintWarning($"UI command called by {player.displayName} (ID: {player.UserIDString})");
            PrintWarning($"Has permission {PermissionName}: {permission.UserHasPermission(player.UserIDString, PermissionName)}");
            PrintWarning($"Has permission {ForcePermissionName}: {permission.UserHasPermission(player.UserIDString, ForcePermissionName)}");
            PrintWarning($"Plugin enabled: {_config.EnableUnlimitedItems}");

            if (!permission.UserHasPermission(player.UserIDString, PermissionName))
            {
                player.ChatMessage(GetMessage("NoPermission", player.UserIDString));
                return;
            }

            if (permission.UserHasPermission(player.UserIDString, ForcePermissionName))
            {
                player.ChatMessage(GetMessage("ForceEnabled", player.UserIDString));
                return;
            }

            if (!_config.EnableUnlimitedItems)
            {
                player.ChatMessage(GetMessage("PluginDisabled", player.UserIDString));
                return;
            }

            bool currentState = IsUnlimitedEnabled(player);
            ToggleUnlimited(player, !currentState);
            player.ChatMessage(GetMessage(currentState ? "ToggleOff" : "ToggleOn", player.UserIDString));
        }
        #endregion
    }
}

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