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

FREE AutomaticAuthorization : 1.1.12 1.1.12

Нет прав для скачивания
C#:
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.12", ResourceId = 2063)]
    public class AutomaticAuthorization : RustPlugin
    {
        #region Fields

        [PluginReference] private readonly Plugin Clans, Friends;
        private const string PERMISSION_USE = "automaticauthorization.use";
        private readonly 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 Oxide Hooks

        private void Init()
        {
            LoadData();
            UpdateData();
            Unsubscribe(nameof(OnEntitySpawned));
            permission.RegisterPermission(PERMISSION_USE, this);
            cmd.AddChatCommand(configData.chatS.command, this, nameof(CmdAutoAuth));
        }

        private void OnServerInitialized()
        {
            if (!configData.teamShareS.enabled)
            {
                Unsubscribe(nameof(OnTeamLeave));
                Unsubscribe(nameof(OnTeamKick));
                Unsubscribe(nameof(OnTeamAcceptInvite));
            }
            if (!configData.friendsShareS.enabled)
            {
                Unsubscribe(nameof(OnFriendAdded));
                Unsubscribe(nameof(OnFriendRemoved));
            }
            if (!configData.clanShareS.enabled)
            {
                Unsubscribe(nameof(OnClanUpdate));
                Unsubscribe(nameof(OnClanDestroy));
            }
            Subscribe(nameof(OnEntitySpawned));
            foreach (var entity in BaseNetworkable.serverEntities)
                CheckEntity(entity as BaseEntity);
        }

        private void OnPlayerConnected(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 (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);
                return;
            }
            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;
                    }
                }
                return;
            }
            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 || parentEntity.OwnerID == 0 || !baseLock.IsLocked()) return null;
            if (!permission.UserHasPermission(parentEntity.OwnerID.ToString(), PERMISSION_USE)) return null;
            var shareData = GetShareData(parentEntity.OwnerID);
            if (shareData.friendsShareEntry.enabled && HasFriend(parentEntity.OwnerID, player.userID))
            {
                if (baseLock is KeyLock && shareData.friendsShareEntry.shareKeyLock && CanUnlockEntity(parentEntity, configData.friendsShareS.keyLockS))
                    return true;
                if (baseLock is CodeLock && shareData.friendsShareEntry.shareCodeLock && CanUnlockEntity(parentEntity, configData.friendsShareS.codeLockS))
                    return SendUnlockedEffect(baseLock as CodeLock);
            }
            if (shareData.clanShareEntry.enabled && SameClan(parentEntity.OwnerID, player.userID))
            {
                if (baseLock is KeyLock && shareData.clanShareEntry.shareKeyLock && CanUnlockEntity(parentEntity, configData.clanShareS.keyLockS))
                    return true;
                if (baseLock is CodeLock && shareData.clanShareEntry.shareCodeLock && CanUnlockEntity(parentEntity, configData.clanShareS.codeLockS))
                    return SendUnlockedEffect(baseLock as CodeLock);
            }
            if (shareData.teamShareEntry.enabled && SameTeam(parentEntity.OwnerID, player.userID))
            {
                if (baseLock is KeyLock && shareData.teamShareEntry.shareKeyLock && CanUnlockEntity(parentEntity, configData.teamShareS.keyLockS))
                    return true;
                if (baseLock is CodeLock && shareData.teamShareEntry.shareCodeLock && CanUnlockEntity(parentEntity, configData.teamShareS.codeLockS))
                    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 Oxide Hooks

        #region Functions

        private enum AutoAuthType
        {
            All,
            Turret,
            Cupboard,
        }

        private void UpdateAuthList(ulong playerID, AutoAuthType autoAuthType)
        {
            if (!permission.UserHasPermission(playerID.ToString(), PERMISSION_USE)) return;
            EntityEntry entityEntry;
            if (!playerEntites.TryGetValue(playerID, out entityEntry)) return;
            switch (autoAuthType)
            {
                case AutoAuthType.All:
                    AuthToCupboard(entityEntry.buildingPrivlidges, playerID);
                    AuthToTurret(entityEntry.autoTurrets, playerID);
                    return;

                case AutoAuthType.Turret:
                    AuthToTurret(entityEntry.autoTurrets, playerID);
                    return;

                case AutoAuthType.Cupboard:
                    AuthToCupboard(entityEntry.buildingPrivlidges, playerID);
                    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.Clear();
                foreach (var friend in authList) buildingPrivlidge.authorizedPlayers.Add(friend);
                buildingPrivlidge.SendNetworkUpdateImmediate();
            }
            var player = RustCore.FindPlayerById(playerID);
            if (player == null) return;
            if (justCreated && configData.chatS.sendMessage && 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.Clear();
                foreach (var friend in authList) autoTurret.authorizedPlayers.Add(friend);
                if (isOnline) autoTurret.SetIsOnline(true);
                autoTurret.SendNetworkUpdateImmediate();
            }
            var player = RustCore.FindPlayerById(playerID);
            if (player == null) return;
            if (justCreated && configData.chatS.sendMessage && 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);
            playerNameIDs.AddRange(authList.Select(auth => new PlayerNameID { userid = auth, username = RustCore.FindPlayerById(auth)?.displayName ?? string.Empty, ShouldPool = true }));
            return playerNameIDs;
        }

        private HashSet<ulong> GetAuthList(ulong playerID, AutoAuthType autoAuthType)
        {
            var shareData = GetShareData(playerID);
            HashSet<ulong> sharePlayers = new HashSet<ulong> { playerID };
            if (shareData.friendsShareEntry.enabled && (autoAuthType == AutoAuthType.Turret ? shareData.friendsShareEntry.shareTurret : shareData.friendsShareEntry.shareCupboard))
            {
                var friends = GetFriends(playerID);
                foreach (var friend in friends)
                    sharePlayers.Add(friend);
            }
            if (shareData.clanShareEntry.enabled && (autoAuthType == AutoAuthType.Turret ? shareData.clanShareEntry.shareTurret : shareData.clanShareEntry.shareCupboard))
            {
                var clanMembers = GetClanMembers(playerID);
                foreach (var member in clanMembers)
                    sharePlayers.Add(member);
            }
            if (shareData.teamShareEntry.enabled && (autoAuthType == AutoAuthType.Turret ? shareData.teamShareEntry.shareTurret : shareData.teamShareEntry.shareCupboard))
            {
                var teamMembers = GetTeamMembers(playerID);
                foreach (var member in teamMembers)
                    sharePlayers.Add(member);
            }
            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.friendsShareS.enabled,
                    shareTurret = configData.friendsShareS.shareTurret,
                    shareCupboard = configData.friendsShareS.shareCupboard,
                    shareKeyLock = configData.friendsShareS.keyLockS.enabled,
                    shareCodeLock = configData.friendsShareS.codeLockS.enabled,
                },
                clanShareEntry = new StoredData.ShareDataEntry
                {
                    enabled = configData.clanShareS.enabled,
                    shareTurret = configData.clanShareS.shareTurret,
                    shareCupboard = configData.clanShareS.shareCupboard,
                    shareKeyLock = configData.clanShareS.keyLockS.enabled,
                    shareCodeLock = configData.clanShareS.codeLockS.enabled,
                },
                teamShareEntry = new StoredData.ShareDataEntry
                {
                    enabled = configData.teamShareS.enabled,
                    shareTurret = configData.teamShareS.shareTurret,
                    shareCupboard = configData.teamShareS.shareCupboard,
                    shareKeyLock = configData.teamShareS.keyLockS.enabled,
                    shareCodeLock = configData.teamShareS.codeLockS.enabled,
                }
            });
        }

        private void UpdateData()
        {
            foreach (var entry in storedData.playerShareData)
            {
                if (!configData.friendsShareS.enabled) entry.Value.friendsShareEntry.enabled = false;
                if (!configData.friendsShareS.shareCupboard) entry.Value.friendsShareEntry.shareCupboard = false;
                if (!configData.friendsShareS.shareTurret) entry.Value.friendsShareEntry.shareTurret = false;
                if (!configData.friendsShareS.keyLockS.enabled) entry.Value.friendsShareEntry.shareKeyLock = false;
                if (!configData.friendsShareS.codeLockS.enabled) entry.Value.friendsShareEntry.shareCodeLock = false;

                if (!configData.clanShareS.enabled) entry.Value.clanShareEntry.enabled = false;
                if (!configData.clanShareS.shareCupboard) entry.Value.clanShareEntry.shareCupboard = false;
                if (!configData.clanShareS.shareTurret) entry.Value.clanShareEntry.shareTurret = false;
                if (!configData.clanShareS.keyLockS.enabled) entry.Value.clanShareEntry.shareKeyLock = false;
                if (!configData.clanShareS.codeLockS.enabled) entry.Value.clanShareEntry.shareCodeLock = false;

                if (!configData.teamShareS.enabled) entry.Value.teamShareEntry.enabled = false;
                if (!configData.teamShareS.shareCupboard) entry.Value.teamShareEntry.shareCupboard = false;
                if (!configData.teamShareS.shareTurret) entry.Value.teamShareEntry.shareTurret = false;
                if (!configData.teamShareS.keyLockS.enabled) entry.Value.teamShareEntry.shareKeyLock = false;
                if (!configData.teamShareS.codeLockS.enabled) entry.Value.teamShareEntry.shareCodeLock = false;
            }
            SaveData();
        }

        #region Clans

        private void OnClanDestroy(string clanName) => UpdateClanAuthList(clanName);

        private void OnClanUpdate(string clanName) => UpdateClanAuthList(clanName);

        private void UpdateClanAuthList(string clanName)
        {
            var clanMembers = GetClanMembers(clanName);
            foreach (var member in clanMembers)
                UpdateAuthList(member, AutoAuthType.All);
        }

        private List<ulong> GetClanMembers(ulong playerID)
        {
            if (Clans == null) return new List<ulong>();
            var clanName = Clans.Call("GetClanOf", playerID);
            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 friendID)
        {
            if (Clans == null) return false;
            //Clans
            var isMember = Clans.Call("IsClanMember", playerID.ToString(), friendID.ToString());
            if (isMember != null) return (bool)isMember;
            //Rust:IO Clans
            var playerClan = Clans.Call("GetClanOf", playerID);
            if (playerClan == null) return false;
            var friendClan = Clans.Call("GetClanOf", friendID);
            if (friendClan == null) return false;
            return (string)playerClan == (string)friendClan;
        }

        #endregion Clans

        #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)
        {
            if (Friends == null) return new List<ulong>();
            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 friendID)
        {
            if (Friends == null) return false;
            var hasFriend = Friends.Call("HasFriend", playerID, friendID);
            if (hasFriend != null && (bool)hasFriend) return true;
            return false;
        }

        #endregion Friends

        #region Teams

        private void OnTeamLeave(RelationshipManager.PlayerTeam playerTeam, BasePlayer player)
        {
            NextTick(() =>
            {
                if (playerTeam == null || player == null) return;
                if (!playerTeam.members.Contains(player.userID))
                    UpdateTeamAuthList(playerTeam.members);
            });
        }

        private void OnTeamAcceptInvite(RelationshipManager.PlayerTeam playerTeam, BasePlayer player)
        {
            NextTick(() =>
            {
                if (playerTeam == null || player == null) return;
                if (playerTeam.members.Contains(player.userID))
                    UpdateTeamAuthList(playerTeam.members);
            });
        }

        private void OnTeamKick(RelationshipManager.PlayerTeam playerTeam, BasePlayer player, ulong target)
        {
            NextTick(() =>
            {
                if (playerTeam == null) return;
                if (!playerTeam.members.Contains(target))
                    UpdateTeamAuthList(playerTeam.members);
            });
        }

        private void UpdateTeamAuthList(List<ulong> teamMembers)
        {
            if (teamMembers.Count <= 0) return;
            foreach (var member in teamMembers)
                UpdateAuthList(member, AutoAuthType.All);
        }

        private List<ulong> GetTeamMembers(ulong playerID)
        {
            if (!RelationshipManager.TeamsEnabled()) return new List<ulong>();
            var playerTeam = RelationshipManager.Instance.FindPlayersTeam(playerID);
            if (playerTeam != null) return playerTeam.members;
            return new List<ulong>();
        }

        private bool SameTeam(ulong playerID, ulong friendID)
        {
            if (!RelationshipManager.TeamsEnabled()) return false;
            var playerTeam = RelationshipManager.Instance.FindPlayersTeam(playerID);
            if (playerTeam == null) return false;
            var friendTeam = RelationshipManager.Instance.FindPlayersTeam(friendID);
            if (friendTeam == null) return false;
            return playerTeam == friendTeam;
        }

        #endregion Teams

        #endregion Functions

        #region ChatCommands

        private void CmdAutoAuth(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, PERMISSION_USE))
            {
                Print(player, Lang("NotAllowed", player.UserIDString));
                return;
            }
            CreateShareData(player.userID);
            if (args == null || args.Length == 0)
            {
                bool flag = false;
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.AppendLine();
                if (Friends != null && configData.friendsShareS.enabled)
                {
                    flag = true;
                    var shareDataEntry = storedData.playerShareData[player.userID].friendsShareEntry;
                    stringBuilder.AppendLine(Lang("AutoShareFriendsStatus", player.UserIDString));
                    stringBuilder.AppendLine(Lang("AutoShareFriends", player.UserIDString, shareDataEntry.enabled ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareFriendsCupboard", player.UserIDString, shareDataEntry.shareCupboard ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareFriendsTurret", player.UserIDString, shareDataEntry.shareTurret ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareFriendsKeyLock", player.UserIDString, shareDataEntry.shareKeyLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareFriendsCodeLock", player.UserIDString, shareDataEntry.shareCodeLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                }
                if (Clans != null && configData.clanShareS.enabled)
                {
                    flag = true;
                    var shareDataEntry = storedData.playerShareData[player.userID].clanShareEntry;
                    stringBuilder.AppendLine(Lang("AutoShareClansStatus", player.UserIDString));
                    stringBuilder.AppendLine(Lang("AutoShareClans", player.UserIDString, shareDataEntry.enabled ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareClansCupboard", player.UserIDString, shareDataEntry.shareCupboard ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareClansTurret", player.UserIDString, shareDataEntry.shareTurret ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareClansKeyLock", player.UserIDString, shareDataEntry.shareKeyLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareClansCodeLock", player.UserIDString, shareDataEntry.shareCodeLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                }
                if (RelationshipManager.TeamsEnabled() && configData.teamShareS.enabled)
                {
                    flag = true;
                    var shareDataEntry = storedData.playerShareData[player.userID].teamShareEntry;
                    stringBuilder.AppendLine(Lang("AutoShareTeamsStatus", player.UserIDString));
                    stringBuilder.AppendLine(Lang("AutoShareTeams", player.UserIDString, shareDataEntry.enabled ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareTeamsCupboard", player.UserIDString, shareDataEntry.shareCupboard ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareTeamsTurret", player.UserIDString, shareDataEntry.shareTurret ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareTeamsKeyLock", player.UserIDString, shareDataEntry.shareKeyLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                    stringBuilder.AppendLine(Lang("AutoShareTeamsCodeLock", player.UserIDString, shareDataEntry.shareCodeLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                }
                if (!flag)
                {
                    Print(player, Lang("UnableAutoAuth", player.UserIDString));
                    return;
                }
                Print(player, stringBuilder.ToString());
                return;
            }
            switch (args[0].ToLower())
            {
                case "af":
                case "autofriends":
                    if (!configData.friendsShareS.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;
                    }
                    switch (args[1].ToLower())
                    {
                        case "c":
                        case "cupboard":
                            if (!configData.friendsShareS.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.friendsShareS.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.friendsShareS.keyLockS.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.friendsShareS.codeLockS.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();
                            stringBuilder1.AppendLine(Lang("FriendsSyntax", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("FriendsSyntax1", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("FriendsSyntax2", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("FriendsSyntax3", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("FriendsSyntax4", player.UserIDString, configData.chatS.command));
                            Print(player, stringBuilder1.ToString());
                            return;
                    }
                    Print(player, Lang("SyntaxError", player.UserIDString, configData.chatS.command));
                    return;

                case "ac":
                case "autoclan":
                    if (!configData.clanShareS.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;
                    }
                    switch (args[1].ToLower())
                    {
                        case "c":
                        case "cupboard":
                            if (!configData.clanShareS.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.clanShareS.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.clanShareS.keyLockS.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.clanShareS.codeLockS.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();
                            stringBuilder1.AppendLine(Lang("ClansSyntax", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("ClansSyntax1", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("ClansSyntax2", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("ClansSyntax3", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("ClansSyntax4", player.UserIDString, configData.chatS.command));
                            Print(player, stringBuilder1.ToString());
                            return;
                    }
                    Print(player, Lang("SyntaxError", player.UserIDString, configData.chatS.command));
                    return;

                case "at":
                case "autoteam":
                    if (!configData.teamShareS.enabled)
                    {
                        Print(player, Lang("TeamsDisabled", player.UserIDString));
                        return;
                    }
                    if (args.Length <= 1)
                    {
                        storedData.playerShareData[player.userID].teamShareEntry.enabled = !storedData.playerShareData[player.userID].teamShareEntry.enabled;
                        Print(player, Lang("Teams", player.UserIDString, storedData.playerShareData[player.userID].teamShareEntry.enabled ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                        UpdateAuthList(player.userID, AutoAuthType.All);
                        return;
                    }
                    switch (args[1].ToLower())
                    {
                        case "c":
                        case "cupboard":
                            if (!configData.clanShareS.shareCupboard)
                            {
                                Print(player, Lang("TeamsCupboardDisable", player.UserIDString));
                                return;
                            }
                            storedData.playerShareData[player.userID].teamShareEntry.shareCupboard = !storedData.playerShareData[player.userID].teamShareEntry.shareCupboard;
                            Print(player, Lang("TeamsCupboard", player.UserIDString, storedData.playerShareData[player.userID].teamShareEntry.shareCupboard ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                            UpdateAuthList(player.userID, AutoAuthType.Cupboard);
                            return;

                        case "t":
                        case "turret":
                            if (!configData.clanShareS.shareTurret)
                            {
                                Print(player, Lang("TeamsTurretDisable", player.UserIDString));
                                return;
                            }
                            storedData.playerShareData[player.userID].teamShareEntry.shareTurret = !storedData.playerShareData[player.userID].teamShareEntry.shareTurret;
                            Print(player, Lang("TeamsTurret", player.UserIDString, storedData.playerShareData[player.userID].teamShareEntry.shareTurret ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                            UpdateAuthList(player.userID, AutoAuthType.Turret);
                            return;

                        case "kl":
                        case "keylock":
                            if (!configData.clanShareS.keyLockS.enabled)
                            {
                                Print(player, Lang("TeamsKeyLockDisable", player.UserIDString));
                                return;
                            }
                            storedData.playerShareData[player.userID].teamShareEntry.shareKeyLock = !storedData.playerShareData[player.userID].teamShareEntry.shareKeyLock;
                            Print(player, Lang("TeamsKeyLock", player.UserIDString, storedData.playerShareData[player.userID].teamShareEntry.shareKeyLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));
                            return;

                        case "cl":
                        case "codelock":
                            if (!configData.clanShareS.codeLockS.enabled)
                            {
                                Print(player, Lang("TeamsCodeLockDisable", player.UserIDString));
                                return;
                            }
                            storedData.playerShareData[player.userID].teamShareEntry.shareCodeLock = !storedData.playerShareData[player.userID].teamShareEntry.shareCodeLock;
                            Print(player, Lang("TeamsCodeLock", player.UserIDString, storedData.playerShareData[player.userID].teamShareEntry.shareCodeLock ? Lang("Enabled", player.UserIDString) : Lang("Disabled", player.UserIDString)));

                            return;

                        case "h":
                        case "help":
                            StringBuilder stringBuilder1 = new StringBuilder();
                            stringBuilder1.AppendLine();
                            stringBuilder1.AppendLine(Lang("TeamsSyntax", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("TeamsSyntax1", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("TeamsSyntax2", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("TeamsSyntax3", player.UserIDString, configData.chatS.command));
                            stringBuilder1.AppendLine(Lang("TeamsSyntax4", player.UserIDString, configData.chatS.command));
                            Print(player, stringBuilder1.ToString());
                            return;
                    }
                    Print(player, Lang("SyntaxError", player.UserIDString, configData.chatS.command));
                    return;

                case "h":
                case "help":
                    bool flag = false;
                    StringBuilder stringBuilder = new StringBuilder();
                    stringBuilder.AppendLine();
                    if (Friends != null && configData.friendsShareS.enabled)
                    {
                        flag = true;
                        stringBuilder.AppendLine(Lang("FriendsSyntax", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("FriendsSyntax1", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("FriendsSyntax2", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("FriendsSyntax3", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("FriendsSyntax4", player.UserIDString, configData.chatS.command));
                    }
                    if (Clans != null && configData.clanShareS.enabled)
                    {
                        flag = true;
                        stringBuilder.AppendLine(Lang("ClansSyntax", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("ClansSyntax1", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("ClansSyntax2", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("ClansSyntax3", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("ClansSyntax4", player.UserIDString, configData.chatS.command));
                    }
                    if (RelationshipManager.TeamsEnabled() && configData.teamShareS.enabled)
                    {
                        flag = true;
                        stringBuilder.AppendLine(Lang("TeamsSyntax", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("TeamsSyntax1", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("TeamsSyntax2", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("TeamsSyntax3", player.UserIDString, configData.chatS.command));
                        stringBuilder.AppendLine(Lang("TeamsSyntax4", player.UserIDString, configData.chatS.command));
                    }
                    if (!flag)
                    {
                        Print(player, Lang("UnableAutoAuth", player.UserIDString));
                        return;
                    }
                    Print(player, stringBuilder.ToString());
                    return;

                default:
                    Print(player, Lang("SyntaxError", player.UserIDString, configData.chatS.command));
                    return;
            }
        }

        #endregion ChatCommands

        #region ConfigurationFile

        private ConfigData configData;

        private class ConfigData
        {
            [JsonProperty(PropertyName = "Clear Share Data On Map Wipe")]
            public bool clearDataOnWipe = false;

            [JsonProperty(PropertyName = "Friends share settings")]
            public ShareSettings friendsShareS = new ShareSettings();

            [JsonProperty(PropertyName = "Clan share settings")]
            public ShareSettings clanShareS = new ShareSettings();

            [JsonProperty(PropertyName = "Team share settings")]
            public ShareSettings teamShareS = new ShareSettings();

            [JsonProperty(PropertyName = "Chat settings")]
            public ChatSettings chatS = 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 steam
// ... [Code preview truncated due to length. Full source in attached file] ...

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

Другие ресурсы пользователя 15FPS

Сверху