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

FREE AutomaticAuthorization : 1.1.6 1.1.6

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust;
using ProtoBuf;
namespace Oxide.Plugins {
    [Info("Automatic Authorization", "k1lly0u/Arainrr", "1.1.6", ResourceId = 2063)]
    public class AutomaticAuthorization : RustPlugin {
#region Fields
        [PluginReference]
        private readonly Plugin Clans, Friends;
        private bool initialized = false;
        private const string PERMISSION_USE = "automaticauthorization.use";
        private Dictionary<ulong, EntityEntry> playerEntites = new Dictionary<ulong, EntityEntry>();
        public class EntityEntry {
            public HashSet<AutoTurret> autoTurrets = new HashSet<AutoTurret>();
            public HashSet<BuildingPrivlidge> buildingPrivlidges = new HashSet<BuildingPrivlidge>();
        }
#endregion Fields
#region OxideHooks
        private void Init() {
            LoadData();
            UpdateData();
            permission.RegisterPermission(PERMISSION_USE, this);
            cmd.AddChatCommand(configData.chatSettings.command, this, nameof(CmdAutoAuth));
            if (!configData.pluginEnabled) {
                Unsubscribe(nameof(OnPlayerInit));
                Unsubscribe(nameof(OnEntitySpawned));
                Unsubscribe(nameof(OnEntityKill));
                Unsubscribe(nameof(CanUseLockedEntity));
            }
        }
        private void OnServerInitialized() {
            if (!configData.pluginEnabled) return;
            initialized = true;
            foreach (var entity in BaseNetworkable.serverEntities) if (entity is BaseEntity) CheckEntity(entity as BaseEntity);
        }
        private void OnPlayerInit(BasePlayer player) {
            if (player == null) return;
            if (permission.UserHasPermission(player.UserIDString, PERMISSION_USE)) CreateShareData(player.userID);
        }
        private void OnServerSave() => timer.Once(UnityEngine.Random.Range(0f, 60f), () => SaveData());
        private void Unload() => SaveData();
        private void OnEntitySpawned(BaseEntity entity) => CheckEntity(entity, true);
        private void CheckEntity(BaseEntity entity, bool justCreated = false) {
            if (!initialized || entity == null || entity.OwnerID == 0) return;
            if (entity is BuildingPrivlidge) {
                var buildingPrivlidge = entity as BuildingPrivlidge;
                if (playerEntites.ContainsKey(entity.OwnerID)) playerEntites[entity.OwnerID].buildingPrivlidges.Add(buildingPrivlidge);
                else playerEntites.Add(entity.OwnerID, new EntityEntry {
                    buildingPrivlidges = new HashSet<BuildingPrivlidge> {
                        buildingPrivlidge
                    }
                }
                );
                if (justCreated && permission.UserHasPermission(entity.OwnerID.ToString(), PERMISSION_USE)) AuthToCupboard(new HashSet<BuildingPrivlidge> {
                    buildingPrivlidge
                }
                , entity.OwnerID, true);
            }
            else if (entity is AutoTurret) {
                var autoTurret = entity as AutoTurret;
                if (playerEntites.ContainsKey(entity.OwnerID)) playerEntites[entity.OwnerID].autoTurrets.Add(autoTurret);
                else playerEntites.Add(entity.OwnerID, new EntityEntry {
                    autoTurrets = new HashSet<AutoTurret> {
                        autoTurret
                    }
                }
                );
                if (justCreated && permission.UserHasPermission(entity.OwnerID.ToString(), PERMISSION_USE)) AuthToTurret(new HashSet<AutoTurret> {
                    autoTurret
                }
                , entity.OwnerID, true);
            }
        }
        private void OnEntityKill(BaseEntity entity) {
            if (entity == null || entity.OwnerID == 0) return;
            if (entity is BuildingPrivlidge) {
                var buildingPrivlidge = entity as BuildingPrivlidge;
                foreach (var entry in playerEntites) {
                    if (entry.Value.buildingPrivlidges.Contains(buildingPrivlidge)) {
                        entry.Value.buildingPrivlidges.Remove(buildingPrivlidge);
                        return;
                    }
                }
            }
            else if (entity is AutoTurret) {
                var autoTurret = entity as AutoTurret;
                foreach (var entry in playerEntites) {
                    if (entry.Value.autoTurrets.Contains(autoTurret)) {
                        entry.Value.autoTurrets.Remove(autoTurret);
                        return;
                    }
                }
            }
        }
        private object CanUseLockedEntity(BasePlayer player, BaseLock baseLock) {
            var parentEntity = baseLock?.GetParentEntity();
            if (player == null || parentEntity == null || !baseLock.IsLocked() || parentEntity.OwnerID == 0) return null;
            if (!permission.UserHasPermission(parentEntity.OwnerID.ToString(), PERMISSION_USE)) return null;
            StoredData.ShareData shareData = GetShareData(parentEntity.OwnerID);
            if (shareData.friendsShareEntry.enabled && HasFriend(parentEntity.OwnerID, player.userID)) {
                if (baseLock is KeyLock) {
                    if (shareData.friendsShareEntry.shareKeyLock && CanUnlockEntity(parentEntity, configData.friendsShareSettings.keyLockSettings)) return true;
                }
                else if (baseLock is CodeLock) {
                    if (shareData.friendsShareEntry.shareCodeLock && CanUnlockEntity(parentEntity, configData.friendsShareSettings.codeLockSettings)) return SendUnlockedEffect(baseLock as CodeLock);
                }
            }
            if (shareData.clanShareEntry.enabled && SameClan(parentEntity.OwnerID, player.userID)) {
                if (baseLock is KeyLock) {
                    if (shareData.clanShareEntry.shareKeyLock && CanUnlockEntity(parentEntity, configData.clanShareSettings.keyLockSettings)) return true;
                }
                else if (baseLock is CodeLock) {
                    if (shareData.clanShareEntry.shareCodeLock && CanUnlockEntity(parentEntity, configData.clanShareSettings.codeLockSettings)) return SendUnlockedEffect(baseLock as CodeLock);
                }
            }
            return null;
        }
        private bool CanUnlockEntity(BaseEntity parentEntity, ConfigData.LockSettings lockConfigSettings) {
            if (parentEntity is Door) {
                if (lockConfigSettings.shareDoor) return true;
            }
            else if (parentEntity is BoxStorage) {
                if (lockConfigSettings.shareBox) return true;
            }
            else if (lockConfigSettings.shareOtherEntity) return true;
            return false;
        }
        private bool SendUnlockedEffect(CodeLock codeLock) {
            Effect.server.Run(codeLock.effectUnlocked.resourcePath, codeLock.transform.position);
            return true;
        }
#endregion OxideHooks
#region Functions
        private enum AutoAuthType {
            All, Turret, Cupboard,
        }
        private void UpdateAuthList(ulong playerID, AutoAuthType autoAuthType, bool justCreated = false) {
            if (!permission.UserHasPermission(playerID.ToString(), PERMISSION_USE) || !configData.pluginEnabled) return;
            if (!playerEntites.ContainsKey(playerID)) return;
            var autoTurrets = playerEntites[playerID].autoTurrets;
            var buildingPrivlidges = playerEntites[playerID].buildingPrivlidges;
            switch (autoAuthType) {
                case AutoAuthType.All : AuthToCupboard(buildingPrivlidges, playerID, justCreated);
                AuthToTurret(autoTurrets, playerID, justCreated);
                return;
                case AutoAuthType.Turret : AuthToTurret(autoTurrets, playerID, justCreated);
                return;
                case AutoAuthType.Cupboard : AuthToCupboard(buildingPrivlidges, playerID, justCreated);
                return;
            }
        }
        private void AuthToCupboard(HashSet<BuildingPrivlidge> buildingPrivlidges, ulong playerID, bool justCreated = false) {
            if (buildingPrivlidges.Count <= 0) return;
            List<PlayerNameID> authList = GetPlayerNameIDs(playerID, AutoAuthType.Cupboard);
            foreach (var buildingPrivlidge in buildingPrivlidges) {
                if (buildingPrivlidge == null || buildingPrivlidge.IsDestroyed) continue;
                buildingPrivlidge.authorizedPlayers = authList;
                buildingPrivlidge.SendNetworkUpdateImmediate();
            }
            var player = RustCore.FindPlayerById(playerID);
            if (player == null || !justCreated || !configData.chatSettings.sendMessage) return;
            if (authList.Count > 1) Print(player, Lang("CupboardSuccess", player.UserIDString, authList.Count - 1, buildingPrivlidges.Count));
        }
        private void AuthToTurret(HashSet<AutoTurret> autoTurrets, ulong playerID, bool justCreated = false) {
            if (autoTurrets.Count <= 0) return;
            List<PlayerNameID> authList = GetPlayerNameIDs(playerID, AutoAuthType.Turret);
            foreach (var autoTurret in autoTurrets) {
                if (autoTurret == null || autoTurret.IsDestroyed) continue;
                bool isOnline = false;
                if (autoTurret.IsOnline()) {
                    autoTurret.SetIsOnline(false);
                    isOnline = true;
                }
                autoTurret.authorizedPlayers = authList;
                autoTurret.SendNetworkUpdateImmediate();
                if (isOnline) autoTurret.SetIsOnline(true);
            }
            var player = RustCore.FindPlayerById(playerID);
            if (player == null || !justCreated || !configData.chatSettings.sendMessage) return;
            if (authList.Count > 1) Print(player, Lang("TurretSuccess", player.UserIDString, authList.Count - 1, autoTurrets.Count));
        }
        private List<PlayerNameID> GetPlayerNameIDs(ulong playerID, AutoAuthType autoAuthType) {
            List<PlayerNameID> playerNameIDs = new List<PlayerNameID>();
            HashSet<ulong> authList = GetAuthList(playerID, autoAuthType);
            foreach (var auth in authList) playerNameIDs.Add(new PlayerNameID {
                userid = auth, username = RustCore.FindPlayerById(auth)?.displayName ?? string.Empty, ShouldPool = true
            }
            );
            return playerNameIDs;
        }
        private HashSet<ulong> GetAuthList(ulong playerID, AutoAuthType autoAuthType) {
            StoredData.ShareData shareData = GetShareData(playerID);
            HashSet<ulong> sharePlayers = new HashSet<ulong> {
                playerID
            }
            ;
            if (shareData.friendsShareEntry.enabled && (autoAuthType == AutoAuthType.Turret ? shareData.friendsShareEntry.shareTurret : shareData.friendsShareEntry.shareCupboard)) foreach (var ID in GetFriends(playerID)) sharePlayers.Add(ID);
            if (shareData.clanShareEntry.enabled && (autoAuthType == AutoAuthType.Turret ? shareData.clanShareEntry.shareTurret : shareData.clanShareEntry.shareCupboard)) foreach (var ID in GetClanMembers(playerID)) sharePlayers.Add(ID);
            return sharePlayers;
        }
        private StoredData.ShareData GetShareData(ulong playerID) {
            if (!storedData.playerShareData.ContainsKey(playerID)) CreateShareData(playerID);
            return storedData.playerShareData[playerID];
        }
        private void CreateShareData(ulong playerID) {
            if (storedData.playerShareData.ContainsKey(playerID)) return;
            storedData.playerShareData.Add(playerID, new StoredData.ShareData {
                friendsShareEntry = new StoredData.ShareDataEntry {
                    enabled = configData.friendsShareSettings.enabled, shareTurret = configData.friendsShareSettings.shareTurret, shareCupboard = configData.friendsShareSettings.shareCupboard, shareKeyLock = configData.friendsShareSettings.keyLockSettings.enabled, shareCodeLock = configData.friendsShareSettings.codeLockSettings.enabled,
                }
                , clanShareEntry = new StoredData.ShareDataEntry {
                    enabled = configData.clanShareSettings.enabled, shareTurret = configData.clanShareSettings.shareTurret, shareCupboard = configData.clanShareSettings.shareCupboard, shareKeyLock = configData.clanShareSettings.keyLockSettings.enabled, shareCodeLock = configData.clanShareSettings.codeLockSettings.enabled,
                }
            }
            );
        }
        private void UpdateData() {
            foreach (var entry in storedData.playerShareData) {
                if (!configData.friendsShareSettings.enabled) entry.Value.friendsShareEntry.enabled = false;
                if (!configData.friendsShareSettings.shareCupboard) entry.Value.friendsShareEntry.shareCupboard = false;
                if (!configData.friendsShareSettings.shareTurret) entry.Value.friendsShareEntry.shareTurret = false;
                if (!configData.friendsShareSettings.keyLockSettings.enabled) entry.Value.friendsShareEntry.shareKeyLock = false;
                if (!configData.friendsShareSettings.codeLockSettings.enabled) entry.Value.friendsShareEntry.shareCodeLock = false;
                if (!configData.clanShareSettings.enabled) entry.Value.clanShareEntry.enabled = false;
                if (!configData.clanShareSettings.shareCupboard) entry.Value.clanShareEntry.shareCupboard = false;
                if (!configData.clanShareSettings.shareTurret) entry.Value.clanShareEntry.shareTurret = false;
                if (!configData.clanShareSettings.keyLockSettings.enabled) entry.Value.clanShareEntry.shareKeyLock = false;
                if (!configData.clanShareSettings.codeLockSettings.enabled) entry.Value.clanShareEntry.shareCodeLock = false;
            }
            SaveData();
        }
#region Clan
        private void OnClanDestroy(string clanName) => UpdateClanAuthList(clanName);
        private void OnClanUpdate(string clanName) => UpdateClanAuthList(clanName);
        private void UpdateClanAuthList(string clanName) {
            foreach (var member in GetClanMembers(clanName)) UpdateAuthList(member, AutoAuthType.All);
        }
        private List<ulong> GetClanMembers(ulong ownerID) {
            var clanName = Clans?.Call("GetClanOf", ownerID);
            if (clanName != null && clanName is string) return GetClanMembers((string)clanName);
            return new List<ulong>();
        }
        private List<ulong> GetClanMembers(string clanName) {
            var clan = Clans?.Call("GetClan", clanName);
            if (clan != null && clan is JObject) {
                var members = (clan as JObject).GetValue("members");
                if (members != null && members is JArray) return ((JArray)members).Select(x => ulong.Parse(x.ToString())).ToList();
            }
            return new List<ulong>();
        }
        private bool SameClan(ulong playerID, ulong otherPlayerID) {
            if (Clans == null) return false;
            if (Clans.ResourceId == 842) //Rust:IO Clans
            {
                var playerClan = Clans?.Call("GetClanOf", playerID);
                var otherPlayerClan = Clans?.Call("GetClanOf", otherPlayerID);
                if (playerClan != null && playerClan is string && otherPlayerClan != null && otherPlayerClan is string) return (string)playerClan == (string)otherPlayerClan;
                return false;
            }
            else //Clans
            {
                var isMember = Clans?.Call("IsClanMember", playerID.ToString(), otherPlayerID.ToString());
                if (isMember != null && (bool)isMember) return true;
            }
            return false;
        }
#endregion Clan
#region Friends
        private void OnFriendAdded(string playerID, string friendID) => UpdateFriendAuthList(playerID);
        private void OnFriendRemoved(string playerID, string friendID) => UpdateFriendAuthList(playerID);
        private void UpdateFriendAuthList(string playerID) => UpdateAuthList(ulong.Parse(playerID), AutoAuthType.All);
        private List<ulong> GetFriends(ulong playerID) {
            var friends = Friends?.Call("GetFriends", playerID);
            if (friends != null && friends is ulong[]) return (friends as ulong[]).ToList();
            return new List<ulong>();
        }
        private bool HasFriend(ulong playerID, ulong otherPlayerID) {
            if (Friends == null) return false;
            var friend = Friends?.Call("HasFriend", playerID, otherPlayerID);
            if (friend != null && (bool)friend) return true;
            return false;
        }
#endregion Friends
#endregion Functions
#region ChatCommands
        private void CmdAutoAuth(BasePlayer player, string command, string[] args) {
            if (!configData.pluginEnabled) {
                Print(player, Lang("PluginDisabled", player.UserIDString));
                return;
            }
            if (!permission.UserHasPermission(player.UserIDString, PERMISSION_USE)) {
                Print(player, Lang("NotAllowed", player.UserIDString));
                return;
            }
            CreateShareData(player.userID);
            if (args == null || args.Length == 0) {
                if (Clans == null && Friends == null) {
                    Print(player, Lang("NoSharePlugin", player.UserIDString));
                    return;
                }
                StringBuilder stringBuilder = new StringBuilder();
                if (Friends != null) {
                    stringBuilder.AppendLine(Lang("AutoShareFriendsStatus", player.UserIDString));
                    stringBuilder.AppendLine(Lang("AutoShareFriends", player.UserIDString, storedData.playerShareData[player.userID].friendsShareEntry.enabled ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareFriendsCupboard", player.UserIDString, storedData.playerShareData[player.userID].friendsShareEntry.shareCupboard ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareFriendsTurret", player.UserIDString, storedData.playerShareData[player.userID].friendsShareEntry.shareTurret ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareFriendsKeyLock", player.UserIDString, storedData.playerShareData[player.userID].friendsShareEntry.shareKeyLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareFriendsCodeLock", player.UserIDString, storedData.playerShareData[player.userID].friendsShareEntry.shareCodeLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                }
                if (Clans != null) {
                    stringBuilder.AppendLine(Lang("AutoShareClansStatus", player.UserIDString));
                    stringBuilder.AppendLine(Lang("AutoShareClans", player.UserIDString, storedData.playerShareData[player.userID].clanShareEntry.enabled ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareClansCupboard", player.UserIDString, storedData.playerShareData[player.userID].clanShareEntry.shareCupboard ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareClansTurret", player.UserIDString, storedData.playerShareData[player.userID].clanShareEntry.shareTurret ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareClansKeyLock", player.UserIDString, storedData.playerShareData[player.userID].clanShareEntry.shareKeyLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareClansCodeLock", player.UserIDString, storedData.playerShareData[player.userID].clanShareEntry.shareCodeLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                }
                Print(player, $"\n{stringBuilder.ToString()}");
                return;
            }
            switch (args[0].ToLower()) {
                case "af" : case "autofriends" : if (!configData.friendsShareSettings.enabled) {
                    Print(player, Lang("FriendsDisabled", player.UserIDString));
                    return;
                }
                if (args.Length <= 1) {
                    storedData.playerShareData[player.userID].friendsShareEntry.enabled = !storedData.playerShareData[player.userID].friendsShareEntry.enabled;
                    Print(player, Lang("Friends", player.UserIDString, storedData.playerShareData[player.userID].friendsShareEntry.enabled ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    UpdateAuthList(player.userID, AutoAuthType.All);
                    return;
                }
                else {
                    switch (args[1].ToLower()) {
                        case "c" : case "cupboard" : if (!configData.friendsShareSettings.shareCupboard) {
                            Print(player, Lang("FriendsCupboardDisabled", player.UserIDString));
                            return;
                        }
                        storedData.playerShareData[player.userID].friendsShareEntry.shareCupboard = !storedData.playerShareData[player.userID].friendsShareEntry.shareCupboard;
                        Print(player, Lang("FriendsCupboard", player.UserIDString, storedData.playerShareData[player.userID].friendsShareEntry.shareCupboard ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                        UpdateAuthList(player.userID, AutoAuthType.Cupboard);
                        return;
                        case "t" : case "turret" : if (!configData.friendsShareSettings.shareTurret) {
                            Print(player, Lang("FriendsTurretDisable", player.UserIDString));
                            return;
                        }
                        storedData.playerShareData[player.userID].friendsShareEntry.shareTurret = !storedData.playerShareData[player.userID].friendsShareEntry.shareTurret;
                        Print(player, Lang("FriendsTurret", player.UserIDString, storedData.playerShareData[player.userID].friendsShareEntry.shareTurret ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                        UpdateAuthList(player.userID, AutoAuthType.Turret);
                        return;
                        case "kl" : case "keylock" : if (!configData.friendsShareSettings.keyLockSettings.enabled) {
                            Print(player, Lang("FriendsKeyLockDisable", player.UserIDString));
                            return;
                        }
                        storedData.playerShareData[player.userID].friendsShareEntry.shareKeyLock = !storedData.playerShareData[player.userID].friendsShareEntry.shareKeyLock;
                        Print(player, Lang("FriendsKeyLock", player.UserIDString, storedData.playerShareData[player.userID].friendsShareEntry.shareKeyLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                        return;
                        case "cl" : case "codelock" : if (!configData.friendsShareSettings.codeLockSettings.enabled) {
                            Print(player, Lang("FriendsCodeLockDisable", player.UserIDString));
                            return;
                        }
                        storedData.playerShareData[player.userID].friendsShareEntry.shareCodeLock = !storedData.playerShareData[player.userID].friendsShareEntry.shareCodeLock;
                        Print(player, Lang("FriendsCodeLock", player.UserIDString, storedData.playerShareData[player.userID].friendsShareEntry.shareCodeLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                        return;
                        case "h" : case "help" : StringBuilder stringBuilder1 = new StringBuilder();
                        stringBuilder1.AppendLine(Lang("FriendsSyntax", player.UserIDString, configData.chatSettings.command));
                        stringBuilder1.AppendLine(Lang("FriendsSyntax1", player.UserIDString, configData.chatSettings.command));
                        stringBuilder1.AppendLine(Lang("FriendsSyntax2", player.UserIDString, configData.chatSettings.command));
                        stringBuilder1.AppendLine(Lang("FriendsSyntax3", player.UserIDString, configData.chatSettings.command));
                        stringBuilder1.AppendLine(Lang("FriendsSyntax4", player.UserIDString, configData.chatSettings.command));
                        Print(player, $"\n{stringBuilder1.ToString()}");
                        return;
                    }
                }
                Print(player, Lang("SyntaxError", player.UserIDString, configData.chatSettings.command));
                return;
                case "ac" : case "autoclan" : if (!configData.clanShareSettings.enabled) {
                    Print(player, Lang("ClansDisabled", player.UserIDString));
                    return;
                }
                if (args.Length <= 1) {
                    storedData.playerShareData[player.userID].clanShareEntry.enabled = !storedData.playerShareData[player.userID].clanShareEntry.enabled;
                    Print(player, Lang("Clans", player.UserIDString, storedData.playerShareData[player.userID].clanShareEntry.enabled ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    UpdateAuthList(player.userID, AutoAuthType.All);
                    return;
                }
                else {
                    switch (args[1].ToLower()) {
                        case "c" : case "cupboard" : if (!configData.clanShareSettings.shareCupboard) {
                            Print(player, Lang("ClansCupboardDisable", player.UserIDString));
                            return;
                        }
                        storedData.playerShareData[player.userID].clanShareEntry.shareCupboard = !storedData.playerShareData[player.userID].clanShareEntry.shareCupboard;
                        Print(player, Lang("ClansCupboard", player.UserIDString, storedData.playerShareData[player.userID].clanShareEntry.shareCupboard ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                        UpdateAuthList(player.userID, AutoAuthType.Cupboard);
                        return;
                        case "t" : case "turret" : if (!configData.clanShareSettings.shareTurret) {
                            Print(player, Lang("ClansTurretDisable", player.UserIDString));
                            return;
                        }
                        storedData.playerShareData[player.userID].clanShareEntry.shareTurret = !storedData.playerShareData[player.userID].clanShareEntry.shareTurret;
                        Print(player, Lang("ClansTurret", player.UserIDString, storedData.playerShareData[player.userID].clanShareEntry.shareTurret ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                        UpdateAuthList(player.userID, AutoAuthType.Turret);
                        return;
                        case "kl" : case "keylock" : if (!configData.clanShareSettings.keyLockSettings.enabled) {
                            Print(player, Lang("ClansKeyLockDisable", player.UserIDString));
                            return;
                        }
                        storedData.playerShareData[player.userID].clanShareEntry.shareKeyLock = !storedData.playerShareData[player.userID].clanShareEntry.shareKeyLock;
                        Print(player, Lang("ClansKeyLock", player.UserIDString, storedData.playerShareData[player.userID].clanShareEntry.shareKeyLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                        return;
                        case "cl" : case "codelock" : if (!configData.clanShareSettings.codeLockSettings.enabled) {
                            Print(player, Lang("ClansCodeLockDisable", player.UserIDString));
                            return;
                        }
                        storedData.playerShareData[player.userID].clanShareEntry.shareCodeLock = !storedData.playerShareData[player.userID].clanShareEntry.shareCodeLock;
                        Print(player, Lang("ClansCodeLock", player.UserIDString, storedData.playerShareData[player.userID].clanShareEntry.shareCodeLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                        return;
                        case "h" : case "help" : StringBuilder stringBuilder1 = new StringBuilder();
                        stringBuilder1.AppendLine(Lang("ClansSyntax", player.UserIDString, configData.chatSettings.command));
                        stringBuilder1.AppendLine(Lang("ClansSyntax1", player.UserIDString, configData.chatSettings.command));
                        stringBuilder1.AppendLine(Lang("ClansSyntax2", player.UserIDString, configData.chatSettings.command));
                        stringBuilder1.AppendLine(Lang("ClansSyntax3", player.UserIDString, configData.chatSettings.command));
                        stringBuilder1.AppendLine(Lang("ClansSyntax4", player.UserIDString, configData.chatSettings.command));
                        Print(player, $"\n{stringBuilder1.ToString()}");
                        return;
                    }
                }
                Print(player, Lang("SyntaxError", player.UserIDString, configData.chatSettings.command));
                return;
                case "h" : case "help" : if (Clans == null && Friends == null) {
                    Print(player, Lang("NoSharePlugin", player.UserIDString));
                    return;
                }
                StringBuilder stringBuilder = new StringBuilder();
                if (Friends != null) {
                    stringBuilder.AppendLine(Lang("FriendsSyntax", player.UserIDString, configData.chatSettings.command));
                    stringBuilder.AppendLine(Lang("FriendsSyntax1", player.UserIDString, configData.chatSettings.command));
                    stringBuilder.AppendLine(Lang("FriendsSyntax2", player.UserIDString, configData.chatSettings.command));
                    stringBuilder.AppendLine(Lang("FriendsSyntax3", player.UserIDString, configData.chatSettings.command));
                    stringBuilder.AppendLine(Lang("FriendsSyntax4", player.UserIDString, configData.chatSettings.command));
                }
                if (Clans != null) {
                    stringBuilder.AppendLine(Lang("ClansSyntax", player.UserIDString, configData.chatSettings.command));
                    stringBuilder.AppendLine(Lang("ClansSyntax1", player.UserIDString, configData.chatSettings.command));
                    stringBuilder.AppendLine(Lang("ClansSyntax2", player.UserIDString, configData.chatSettings.command));
                    stringBuilder.AppendLine(Lang("ClansSyntax3", player.UserIDString, configData.chatSettings.command));
                    stringBuilder.AppendLine(Lang("ClansSyntax4", player.UserIDString, configData.chatSettings.command));
                }
                Print(player, $"\n{stringBuilder.ToString()}");
                return;
                default : Print(player, Lang("SyntaxError", player.UserIDString, configData.chatSettings.command));
                return;
            }
        }
#endregion ChatCommands
#region ConfigurationFile
        private ConfigData configData;
        private class ConfigData {
            [JsonProperty(PropertyName = "Enabled plugin")]
            public bool pluginEnabled = false;
            [JsonProperty(PropertyName = "Friends share settings")]
            public ShareSettings friendsShareSettings = new ShareSettings();
            [JsonProperty(PropertyName = "Clan share settings")]
            public ShareSettings clanShareSettings = new ShareSettings();
            [JsonProperty(PropertyName = "Chat settings")]
            public ChatSettings chatSettings = new ChatSettings();
            public class ChatSettings {
                [JsonProperty(PropertyName = "Send authorization success message")]
                public bool sendMessage = true;
                [JsonProperty(PropertyName = "Chat command")]
                public string command = "autoauth";
                [JsonProperty(PropertyName = "Chat prefix")]
                public string prefix = "[AutoAuth]: ";
                [JsonProperty(PropertyName = "Chat prefix color")]
                public string prefixColor = "#00FFFF";
                [JsonProperty(PropertyName = "Chat steamID icon")]
                public ulong steamIDIcon = 0;
            }
            public class ShareSettings {
                [JsonProperty(PropertyName = "Enabled")]
                public bool enabled = false;
                [JsonProperty(PropertyName = "Share cupboard")]
                public bool shareCupboard = false;
                [JsonProperty(PropertyName = "Share turret")]
                public bool shareTurret = false;
                [JsonProperty(PropertyName = "Key lock settings")]
                public LockSettings keyLockSettings = new LockSettings();
                [JsonProperty(PropertyName = "Code lock settings")]
                public LockSettings codeLockSettings = new LockSettings();
            }
            public class LockSettings {
                [JsonProperty(PropertyName = "Enabled")]
                public bool enabled = false;
                [JsonProperty(PropertyName = "Share door")]
                public bool shareDoor = false;
                [JsonProperty(PropertyName = "Share box")]
                public bool shareBox = false;
                [JsonProperty(PropertyName = "Share other locked entities")]
                public bool shareOtherEntity = false;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            try {
                configData = Config.ReadObject<ConfigData>();
                if (configData == null) LoadDefaultConfig();
            }
            catch {
                PrintError("The configuration file is corrupted");
                LoadDefaultConfig();
            }
            SaveConfig();
        }
        protected override void LoadDefaultConfig() {
            PrintWarning("Creating a new configuration file");
            configData = new ConfigData();
        }
        protected override void SaveConfig() => Config.WriteObject(configData);
#endregion ConfigurationFile
#region DataFile
        private StoredData storedData;
        private class StoredData {
            public Dictionary<ulong, ShareData> playerShareData = new Dictionary<ulong, ShareData>();
            public class ShareData {
                public ShareDataEntry friendsShareEntry = new ShareDataEntry();
                public ShareDataEntry clanShareEntry = new ShareDataEntry();
            }
            public class ShareDataEntry {
                public bool enabled = false;
                public bool shareCupboard = false;
                public bool shareTurret = false;
                public bool shareKeyLock = false;
                public bool shareCodeLock = false;
            }
        }
        private void LoadData() {
            try {
                storedData = Interface.Oxide.DataFileSystem.ReadObject<StoredData>(Name);
            }
            catch {
                ClearData();
            }
        }
        private void ClearData() {
            storedData = new StoredData();
            SaveData();
        }
        private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(Name, storedData);
        private void OnNewSave(string filename) => ClearData();
#endregion DataFile
#region LanguageFile
        private void Print(BasePlayer player, string message) => Player.Message(player, message, $"<color={configData.chatSettings.prefixColor}>{configData.chatSettings.prefix}</color>", configData.chatSettings.steamIDIcon);
        private string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["NotAllowed"]
                = "You do not have permission to use this command", ["PluginDisabled"] = "The plugin is not enabled.Unable to use chat command", ["Enabled"] = "<color=#8ee700>Enabled</color>", ["Disabled"] = "<color=#ce422b>Disabled</color>", ["NoSharePlugin"] = "Clans and Friends is not installed on this server.Unable to automatically authorize other players", ["SyntaxError"] = "Syntax error, please enter '<color=#ce422b>/{0} <help | h></color>' to view help", ["TurretSuccess"] = "Successfully added <color=#ce422b>{0}</color> friends/clan members to <color=#ce422b>{1}</color> turrets auth list", ["CupboardSuccess"] = "Successfully added <color=#ce422b>{0}</color> friends/clan members to <color=#ce422b>{1}</color> cupboards auth list", ["FriendsSyntax"] = "<color=#ce422b>/{0} <autofriends | af></color> - Enable/Disable automatic authorization for your friends", ["FriendsSyntax1"] = "<color=#ce422b>/{0} <autofriends | af> <cupboard | c></color> - Sharing cupboard with your friends", ["FriendsSyntax2"] = "<color=#ce422b>/{0} <autofriends | af> <turret | t></color> - Sharing turret with your friends", ["FriendsSyntax3"] = "<color=#ce422b>/{0} <autofriends | af> <keylock | kl></color> - Sharing key lock with your friends", ["FriendsSyntax4"] = "<color=#ce422b>/{0} <autofriends | af> <codelock | cl></color> - Sharing code lock with your friends", ["ClansSyntax"] = "<color=#ce422b>/{0} <autoclan | ac></color> - Enable/Disable automatic authorization for your clan members", ["ClansSyntax1"] = "<color=#ce422b>/{0} <autoclan | ac> <cupboard | c></color> - Sharing cupboard with your clan members", ["ClansSyntax2"] = "<color=#ce422b>/{0} <autoclan | ac> <turret | t></color> - Sharing turret with your clan members", ["ClansSyntax3"] = "<color=#ce422b>/{0} <autoclan | ac> <keylock | kl></color> - Sharing key lock with your clan members", ["ClansSyntax4"] = "<color=#ce422b>/{0} <autoclan | ac> <codelock | cl></color> - Sharing code lock with your clan members", ["AutoShareFriendsStatus"] = "<color=#ffa500>Current friends sharing status: </color>", ["AutoShareFriends"] = "Automatically sharing with friends: {0}", ["AutoShareFriendsCupboard"] = "Automatically sharing cupboard with friends: {0}", ["AutoShareFriendsTurret"] = "Automatically sharing turret with friends: {0}", ["AutoShareFriendsKeyLock"] = "Automatically sharing key lock with friends: {0}", ["AutoShareFriendsCodeLock"] = "Automatically sharing code lock with friends: {0}", ["AutoShareClansStatus"] = "<color=#ffa500>Current clan sharing status: </color>", ["AutoShareClans"] = "Automatically sharing with clan: {0}", ["AutoShareClansCupboard"] = "Automatically sharing cupboard with clan: {0}", ["AutoShareClansTurret"] = "Automatically sharing turret with clan: {0}", ["AutoShareClansKeyLock"] = "Automatically sharing key lock with clan: {0}", ["AutoShareClansCodeLock"] = "Automatically sharing code lock with clan: {0}", ["Friends"] = "Friends automatic authorization {0}", ["FriendsCupboard"] = "Sharing cupboard with friends is {0}", ["FriendsTurret"] = "Sharing turret with friends is {0}", ["FriendsKeyLock"] = "Sharing key lock with friends is {0}", ["FriendsCodeLock"] = "Sharing code lock with friends is {0}", ["Clans"] = "Clan automatic authorization {0}", ["ClansCupboard"] = "Sharing cupboard with clan is {0}", ["ClansTurret"] = "Sharing turret with clan is {0}", ["ClansKeyLock"] = "Sharing key lock with clan is {0}", ["ClansCodeLock"] = "Sharing code lock with clan is {0}", ["FriendsDisabled"] = "Server has disabled friends sharing", ["FriendsCupboardDisabled"] = "Server has disabled sharing cupboard with friends", ["FriendsTurretDisable"] = "Server has disabled sharing turret with friends", ["FriendsKeyLockDisable"] = "Server has disabled sharing key lock with friends", ["FriendsCodeLockDisable"] = "Server has disabled sharing code lock with friends", ["ClansDisabled"] = "Server has disabled clan sharing", ["ClansCupboardDisable"] = "Server has disabled sharing cupboard with clan", ["ClansTurretDisable"] = "Server has disabled sharing turret with clan", ["ClansKeyLockDisable"] = "Server has disabled sharing key lock with clan", ["ClansCodeLockDisable"] = "Server has disabled sharing code lock with clan",
            }
            , this);
            lang.RegisterMessages(new Dictionary<string, string> {
                ["NotAllowed"]
                = "您没有权限使用该命令", ["PluginDisabled"] = "插件未启用,无法使用聊天命令", ["Enabled"] = "<color=#8ee700>已启用</color>", ["Disabled"] = "<color=#ce422b>已禁用</color>", ["NoSharePlugin"] = "服务器未没有安装战队插件和朋友插件。无法使用自动授权", ["SyntaxError"] = "语法错误, 输入 '<color=#ce422b>/{0} <help | h></color>' 查看帮助", ["TurretSuccess"] = "自动添加了 <color=#ce422b>{0}</color> 个朋友/战队成员到您的 <color=#ce422b>{1}</color> 个炮台授权列表中", ["CupboardSuccess"] = "自动添加了 <color=#ce422b>{0}</color> 个朋友/战队成员到您的 <color=#ce422b>{1}</color> 个领地柜授权列表中", ["FriendsSyntax"] = "<color=#ce422b>/{0} <autofriends | af></color> - 启用/禁用朋友自动授权", ["FriendsSyntax1"] = "<color=#ce422b>/{0} <autofriends | af> <cupboard | c></color> - 自动与朋友共享领地柜", ["FriendsSyntax2"] = "<color=#ce422b>/{0} <autofriends | af> <turret | t></color> - 自动与朋友共享炮台", ["FriendsSyntax3"] = "<color=#ce422b>/{0} <autofriends | af> <keylock | kl></color> - 自动与朋友共享钥匙锁", ["FriendsSyntax4"] = "<color=#ce422b>/{0} <autofriends | af> <codelock | cl></color> - 自动与朋友共享密码锁", ["ClansSyntax"] = "<color=#ce422b>/{0} <autoclan | ac></color> - 启用/禁用战队自动授权", ["ClansSyntax1"] = "<color=#ce422b>/{0} <autoclan | ac> <cupboard | c></color> - 自动与战队共享领地柜", ["ClansSyntax2"] = "<color=#ce422b>/{0} <autoclan | ac> <turret | t></color> - 自动与战队共享炮台", ["ClansSyntax3"] = "<color=#ce422b>/{0} <autoclan | ac> <keylock | kl></color> - 自动与战队共享钥匙锁", ["ClansSyntax4"] = "<color=#ce422b>/{0} <autoclan | ac> <codelock | cl></color> - 自动与战队共享密码锁", ["AutoShareFriendsStatus"] = "<color=#ffa500>当前朋友自动授权状态: </color>", ["AutoShareFriends"] = "自动与朋友共享: {0}", ["AutoShareFriendsCupboard"] = "自动与朋友共享领地柜: {0}", ["AutoShareFriendsTurret"] = "自动与朋友共享炮台: {0}", ["AutoShareFriendsKeyLock"] = "自动与朋友共享钥匙锁: {0}", ["AutoShareFriendsCodeLock"] = "自动与朋友共享密码锁: {0}", ["AutoShareClansStatus"] = "<color=#ffa500>当前战队自动授权状态: </color>", ["AutoShareClans"] = "自动与战队共享: {0}", ["AutoShareClansCupboard"] = "自动与战队共享领地柜: {0}", ["AutoShareClansTurret"] = "自动与战队共享炮台: {0}", ["AutoShareClansKeyLock"] = "自动与战队共享钥匙锁: {0}", ["AutoShareClansCodeLock"] = "自动与战队共享密码锁: {0}", ["Friends"] = "朋友自动授权 {0}", ["FriendsCupboard"] = "自动与朋友共享领地柜 {0}", ["FriendsTurret"] = "自动与朋友共享炮台 {0}", ["FriendsKeyLock"] = "自动与朋友共享钥匙锁 {0}", ["FriendsCodeLock"] = "自动与朋友共享密码锁 {0}", ["Clans"] = "战队自动授权 {0}", ["ClansCupboard"] = "自动与战队共享领地柜 {0}", ["ClansTurret"] = "自动与战队共享炮台 {0}", ["ClansKeyLock"] = "自动与战队共享钥匙锁 {0}", ["ClansCodeLock"] = "自动与战队共享密码锁 {0}", ["FriendsDisabled"] = "服务器已禁用朋友自动授权", ["FriendsCupboardDisabled"] = "服务器已禁用自动与朋友共享领地柜", ["FriendsTurretDisable"] = "服务器已禁用自动与朋友共享炮台", ["FriendsKeyLockDisable"] = "服务器已禁用自动与朋友共享钥匙锁", ["FriendsCodeLockDisable"] = "服务器已禁用自动与朋友共享密码锁", ["ClansDisabled"] = "服务器已禁用战队自动授权", ["ClansCupboardDisable"] = "服务器已禁用自动与战队共享领地柜", ["ClansTurretDisable"] = "服务器已禁用自动与战队共享炮台", ["ClansKeyLockDisable"] = "服务器已禁用自动与战队共享钥匙锁", ["ClansCodeLockDisable"] = "服务器已禁用自动与战队共享密码锁",
            }
            , this, "zh-CN");
        }
#endregion LanguageFile
    }
}

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