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

FREE SharedAuth : 1.0.1 1.0.1

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

namespace Oxide.Plugins
{
    [Info("Shared Auth", "Iv Misticos", "1.0.1")]
    [Description("Make sharing auth better")]
    public class SharedAuth : RustPlugin
    {
        #region Variables

#pragma warning disable 649
        [PluginReference]
        // ReSharper disable once InconsistentNaming
        private Plugin Clans,
            // ReSharper disable once InconsistentNaming
            Friends; // Okay lol you wanted to be it like that
#pragma warning restore 649
        
        private static List<PlayerData> _data = new List<PlayerData>();

        private const string PermissionUse = "sharedauth.use";
        private const string PermissionAdmin = "sharedauth.admin";

        private static SharedAuth _ins;
        
        #endregion
        
        #region Configuration
        
        private static Configuration _config = new Configuration();

        private class Configuration
        {
            [JsonProperty(PropertyName = "Use Permission")]
            public bool UsePermission = true;
            
            [JsonProperty(PropertyName = "Command")]
            public string Command = "sauth";
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                _config = Config.ReadObject<Configuration>();
                if (_config == null) throw new Exception();
            }
            catch
            {
                Config.WriteObject(_config, false, $"{Interface.Oxide.ConfigDirectory}/{Name}.jsonError");
                PrintError("The configuration file contains an error and has been replaced with a default config.\n" +
                           "The error configuration file was saved in the.jsonError extension");
                LoadDefaultConfig();
            }

            SaveConfig();
        }

        protected override void LoadDefaultConfig() => _config = new Configuration();

        protected override void SaveConfig() => Config.WriteObject(_config);
        
        #endregion
        
        #region Data
        
        private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(Name, _data);

        private void LoadData()
        {
            try
            {
                _data = Interface.Oxide.DataFileSystem.ReadObject<List<PlayerData>>(Name);
            }
            catch (Exception e)
            {
                PrintError(e.ToString());
            }

            if (_data == null) _data = new List<PlayerData>();
        }

        private class PlayerData
        {
            private BasePlayer GetPlayer() => BasePlayer.FindByID(ID) ?? BasePlayer.FindSleeping(ID);

            private RelationshipManager.PlayerTeam GetTeam()
            {
                foreach (var kvp in RelationshipManager.Instance.playerTeams)
                {
                    if (kvp.Value.members.Contains(ID))
                        return kvp.Value;
                }

                return null;
            }
            
            public ulong ID;
            public bool Enabled = true;

            // ReSharper disable once RedundantDefaultMemberInitializer
            public bool AllowTeamAuth = false;
            public bool AllowTeamUse = true;
            // ReSharper disable once RedundantDefaultMemberInitializer
            public bool AllowFriendsAuth = false;
            public bool AllowFriendsUse = true;
            // ReSharper disable once RedundantDefaultMemberInitializer
            public bool AllowClanAuth = false;
            // ReSharper disable once RedundantDefaultMemberInitializer
            public bool AllowClanUse = false;

            public bool IsAdmin()
            {
                var player = GetPlayer();
                return _ins.permission.UserHasPermission(ID.ToString(), PermissionAdmin)
                       || player == null && player.IsAdmin;
            }

            public bool IsTeamMember(ulong target)
            {
                var team = GetTeam();
                return team != null && team.members.IndexOf(target) != -1;
            }

            private bool IsFriendsAPIFriend(ulong target) => _ins.Friends.Call<bool>("IsFriend", ID, target);

            private bool IsClansRebornMember(ulong target) => _ins.Clans.Call<string>("GetClanOf", ID) ==
                                                             _ins.Clans.Call<string>("GetClanOf", target);

            public bool IsClanMember(ulong target)
            {
                return _ins.Clans != null && IsClansRebornMember(target);
            }

            public bool IsFriend(ulong target)
            {
                return _ins.Friends != null && IsFriendsAPIFriend(target);
            }
            
            public static PlayerData GetPlayerData(ulong id)
            {
                for (var i = 0; i < _data.Count; i++)
                {
                    if (_data[i].ID == id)
                        return _data[i];
                }

                var data = new PlayerData {ID = id};
                _data.Add(data);
                return data;
            }
        }
        
        #endregion
        
        #region Hooks

        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                { "Help", "Shared Auth Help:\n" +
                          "enabled true/false - Enabled/disabled\n" +
                          "ta true/false - Auto team auth\n" +
                          "tu true/false - Allow team use without code\n" +
                          "fa true/false - Auto friends auth\n" +
                          "fu true/false - Allow friends use without code\n" +
                          "ca true/false - Auto clan auth\n" +
                          "cu true/false - Allow clan use without code" },
                { "Success", "Success." },
                { "No Permission", "You don't have enough permissions." },
            }, this);
        }

        private void OnServerInitialized()
        {
            _ins = this;

            LoadData();
            
            permission.RegisterPermission(PermissionUse, this);
            permission.RegisterPermission(PermissionAdmin, this);
            
            AddCovalenceCommand(_config.Command, "CommandChatSharedAuth");
        }

        private void Unload() => SaveData();

        private void OnServerSave() => SaveData();

        private object CanUseLockedEntity(BasePlayer player, BaseEntity door)
        {
            if (!CanUse(player.UserIDString))
                return null;

            var data = PlayerData.GetPlayerData(player.userID);
            if (!data.Enabled)
                return null;

            return data.IsAdmin() || data.AllowTeamUse && data.IsTeamMember(door.OwnerID) ||
                   data.AllowFriendsUse && data.IsFriend(door.OwnerID) ||
                   data.AllowClanUse && data.IsClanMember(door.OwnerID)
                ? (object) true
                : null;
        }
        
        private object OnCodeEntered(BaseEntity codeLock, BasePlayer player, string code)
        {
            if (!CanUse(player.UserIDString))
                return null;
            
            var data = PlayerData.GetPlayerData(player.userID);
            if (!data.Enabled)
                return null;

            return data.IsAdmin() || data.AllowTeamAuth && data.IsTeamMember(codeLock.OwnerID) ||
                   data.AllowFriendsAuth && data.IsFriend(codeLock.OwnerID) ||
                   data.AllowClanAuth && data.IsFriend(codeLock.OwnerID)
                ? (object) true
                : null;
        }
        
        #endregion
        
        #region Commands

        private void CommandChatSharedAuth(IPlayer iplayer, string command, string[] args)
        {
            if (iplayer.IsServer || !iplayer.IsConnected)
                return;

            var player = iplayer.Object as BasePlayer;
            if (player == null)
                return;
            
            if (!CanUse(player.UserIDString))
            {
                player.ChatMessage(GetMsg("No Permission", player.UserIDString));
                return;
            }
            
            if (args.Length < 2)
            {
                player.ChatMessage(GetMsg("Help", player.UserIDString));
                return;
            }

            var data = PlayerData.GetPlayerData(player.userID);
            var isTrue = args[1].Equals("true", StringComparison.CurrentCultureIgnoreCase) ||
                         args[1].Equals("yes", StringComparison.CurrentCultureIgnoreCase);
            
            switch (args[0])
            {
                case "enabled":
                {
                    data.Enabled = isTrue;
                    break;
                }

                case "ta":
                {
                    data.AllowTeamAuth = isTrue;
                    break;
                }

                case "tu":
                {
                    data.AllowTeamUse = isTrue;
                    break;
                }

                case "fa":
                {
                    data.AllowFriendsAuth = isTrue;
                    break;
                }

                case "fu":
                {
                    data.AllowFriendsUse = isTrue;
                    break;
                }

                case "ca":
                {
                    data.AllowClanAuth = isTrue;
                    break;
                }

                case "cu":
                {
                    data.AllowClanUse = isTrue;
                    break;
                }

                default:
                {
                    player.ChatMessage(GetMsg("Help", player.UserIDString));
                    return;
                }
            }
            
            player.ChatMessage(GetMsg("Success", player.UserIDString));
        }
        
        #endregion
        
        #region Helpers

        private string GetMsg(string key, string userId = null) => lang.GetMessage(key, this, userId);

        private bool CanUse(string id) => !_config.UsePermission || permission.UserHasPermission(id, PermissionUse);

        #endregion
    }
}

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