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

FREE DynamicCupShare : 1.9.1 1.9.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using Oxide.Core;
using Oxide.Core.Libraries;
using Oxide.Core.Plugins;
using UnityEngine;
using ProtoBuf;
using Newtonsoft.Json.Linq;
namespace Oxide.Plugins {
    [Info("DynamicCupShare", "S1m0n", "1.9.1", ResourceId = 20)]
    [Description("Dynamic sharing of cupboards/doors/boxes/lockers/turrets")]
    class DynamicCupShare : RustPlugin {
        [PluginReference]
        Plugin Clans;
        [PluginReference]
        Plugin Friends;
        bool configRemoval = false;
        bool Changed = false;
        bool Initialized = false;
        bool clansEnabled = false;
        bool friendsEnabled = false;
        bool friendsIOEnabled = false;
        bool friendsAPIEnabled = false;
        bool rustIOInstalled = false;
        bool pluginDisabled = false;
        bool playerDataLoaded = false;
        List<ulong> usedConsoleInput = new List<ulong>();
        Dictionary <string, bool> adminAccessEnabled = new Dictionary <string, bool>();
        StoredData playerPrefs = new StoredData();
        FieldInfo _buildingPrivilege = typeof(BasePlayer).GetField("buildingPrivilege", (BindingFlags.Instance | BindingFlags.NonPublic));
        FieldInfo _whitelistPlayers = typeof(CodeLock).GetField("whitelistPlayers", (BindingFlags.Instance | BindingFlags.NonPublic));
        FieldInfo _nextShotTime = typeof(AutoTurret).GetField("nextShotTime", (BindingFlags.Instance | BindingFlags.NonPublic));
        FieldInfo _nextTargetScanTime = typeof(AutoTurret).GetField("nextTargetScanTime", (BindingFlags.Instance | BindingFlags.NonPublic));
        FieldInfo _nextVisCheck = typeof(AutoTurret).GetField("nextVisCheck", (BindingFlags.Instance | BindingFlags.NonPublic));
        int collLayers = UnityEngine.LayerMask.GetMask(new string[] {
            "Construction", "Deployed", "Tree", "Terrain", "Resource", "World", "Water", "Default"
        }
        );
        class StoredData {
            public Dictionary<ulong, PlayerInfo> PlayerInfo = new Dictionary<ulong, PlayerInfo>();
            public StoredData() {
            }
        }
        class PlayerInfo {
            public bool CS;
            public bool DS;
            public bool BS;
            public bool TS;
            public bool LS;
            public bool AA;
            public bool CCS;
            public bool CDS;
            public bool CBS;
            public bool CLS;
            public bool CTS;
            public PlayerInfo() {
            }
        }
        string shareCommand;
        bool useFriendsApi;
        bool useFriendsIO;
        bool useClans;
        bool blockCupAuthClanMembers;
        bool blockCupAuthFriends;
        bool blockCupClearClanMembers;
        bool blockCupClearFriends;
        bool blockBuildIntoBlocked;
        string permGetClanShares;
        bool usePermGetClanShares;
        string permGetFriendShares;
        bool usePermGetFriendShares;
        string permAutoAuth;
        bool usePermAutoAuth;
        bool clanTurretShareOverride;
        bool enableCupSharing;
        bool enableDoorSharing;
        bool enableBoxSharing;
        bool enableLockerSharing;
        bool enableTurretSharing;
        bool enableAutoAuth;
        bool notifyAuthCupboard;
        bool notifyAuthTurret;
        bool CupShare;
        bool DoorShare;
        bool TurretShare;
        bool BoxShare;
        bool LockerShare;
        bool AutoAuth;
        bool ClanCupShare;
        bool ClanDoorShare;
        bool ClanBoxShare;
        bool ClanLockerShare;
        bool ClanTurretShare;
        bool toggleCupShare;
        bool toggleDoorShare;
        bool toggleTurretShare;
        bool toggleBoxShare;
        bool toggleLockerShare;
        bool toggleAutoAuth;
        bool toggleClanCupShare;
        bool toggleClanDoorShare;
        bool toggleClanBoxShare;
        bool toggleClanLockerShare;
        bool toggleClanTurretShare;
        string pluginPrefix;
        string prefixColor;
        string prefixFormat;
        string colorTextMsg;
        string colorCmdUsage;
        string colorON;
        string colorOFF;
        object GetConfig(string menu, string datavalue, object defaultValue) {
            var data = Config[menu] as Dictionary<string, object>;
            if (data == null) {
                data = new Dictionary<string, object>();
                Config[menu] = data;
                Changed = true;
            }
            object value;
            if (!data.TryGetValue(datavalue, out value)) {
                value = defaultValue;
                data[datavalue] = value;
                Changed = true;
            }
            return value;
        }
        void LoadVariables() {
            shareCommand = Convert.ToString(GetConfig("Command", "shareCommand", "share"));
            useFriendsApi = Convert.ToBoolean(GetConfig("Options", "useFriendsApi", true));
            useFriendsIO = Convert.ToBoolean(GetConfig("Options", "useFriendsIO", false));
            useClans = Convert.ToBoolean(GetConfig("Options", "useClans", true));
            permGetClanShares = Convert.ToString(GetConfig("Permission", "permGetClanShares", "dynamiccupshare.getclanshares"));
            usePermGetClanShares = Convert.ToBoolean(GetConfig("Permission", "usePermGetClanShares", false));
            permGetFriendShares = Convert.ToString(GetConfig("Permission", "permGetFriendShares", "dynamiccupshare.getfriendshares"));
            usePermGetFriendShares = Convert.ToBoolean(GetConfig("Permission", "usePermGetFriendShares", false));
            permAutoAuth = Convert.ToString(GetConfig("Permission", "permGetShares", "dynamiccupshare.autoauth"));
            usePermAutoAuth = Convert.ToBoolean(GetConfig("Permission", "usePermAutoAuth", false));
            clanTurretShareOverride = Convert.ToBoolean(GetConfig("Security", "clanTurretShareOverride", false));
            blockCupAuthClanMembers = Convert.ToBoolean(GetConfig("Security", "blockCupAuthClanMembers", true));
            blockCupAuthFriends = Convert.ToBoolean(GetConfig("Security", "blockCupAuthFriends", true));
            blockCupClearClanMembers = Convert.ToBoolean(GetConfig("Security", "blockCupClearClanMembers", true));
            blockCupClearFriends = Convert.ToBoolean(GetConfig("Security", "blockCupClearFriends", true));
            blockBuildIntoBlocked = Convert.ToBoolean(GetConfig("Security", "blockBuildIntoBlocked", true));
            notifyAuthCupboard = Convert.ToBoolean(GetConfig("Notification", "notifyAuthCupboard", true));
            notifyAuthTurret = Convert.ToBoolean(GetConfig("Notification", "notifyAuthTurret", true));
            CupShare = Convert.ToBoolean(GetConfig("PlayerDefaults", "CupShare", false));
            DoorShare = Convert.ToBoolean(GetConfig("PlayerDefaults", "DoorShare", false));
            TurretShare = Convert.ToBoolean(GetConfig("PlayerDefaults", "TurretShare", false));
            BoxShare = Convert.ToBoolean(GetConfig("PlayerDefaults", "BoxShare", false));
            LockerShare = Convert.ToBoolean(GetConfig("PlayerDefaults", "LockerShare", false));
            AutoAuth = Convert.ToBoolean(GetConfig("PlayerDefaults", "AutoAuth", true));
            ClanCupShare = Convert.ToBoolean(GetConfig("PlayerDefaults", "ClanCupShare", true));
            ClanDoorShare = Convert.ToBoolean(GetConfig("PlayerDefaults", "ClanDoorShare", true));
            ClanBoxShare = Convert.ToBoolean(GetConfig("PlayerDefaults", "ClanBoxShare", true));
            ClanLockerShare = Convert.ToBoolean(GetConfig("PlayerDefaults", "ClanLockerShare", true));
            ClanTurretShare = Convert.ToBoolean(GetConfig("PlayerDefaults", "ClanTurretShare", true));
            toggleCupShare = Convert.ToBoolean(GetConfig("PlayerToggles", "CupShare", true));
            toggleDoorShare = Convert.ToBoolean(GetConfig("PlayerToggles", "DoorShare", true));
            toggleTurretShare = Convert.ToBoolean(GetConfig("PlayerToggles", "TurretShare", true));
            toggleBoxShare = Convert.ToBoolean(GetConfig("PlayerToggles", "BoxShare", true));
            toggleLockerShare = Convert.ToBoolean(GetConfig("PlayerToggles", "LockerShare", true));
            toggleAutoAuth = Convert.ToBoolean(GetConfig("PlayerToggles", "AutoAuth", true));
            toggleClanCupShare = Convert.ToBoolean(GetConfig("PlayerToggles", "ClanCupShare", true));
            toggleClanDoorShare = Convert.ToBoolean(GetConfig("PlayerToggles", "ClanDoorShare", true));
            toggleClanBoxShare = Convert.ToBoolean(GetConfig("PlayerToggles", "ClanBoxShare", true));
            toggleClanLockerShare = Convert.ToBoolean(GetConfig("PlayerToggles", "ClanLockerShare", true));
            toggleClanTurretShare = Convert.ToBoolean(GetConfig("PlayerToggles", "ClanTurretShare", true));
            enableCupSharing = Convert.ToBoolean(GetConfig("Functions", "enableCupSharing", true));
            enableDoorSharing = Convert.ToBoolean(GetConfig("Functions", "enableDoorSharing", true));
            enableBoxSharing = Convert.ToBoolean(GetConfig("Functions", "enableBoxSharing", true));
            enableLockerSharing = Convert.ToBoolean(GetConfig("Functions", "enableLockerSharing", true));
            enableTurretSharing = Convert.ToBoolean(GetConfig("Functions", "enableTurretSharing", true));
            enableAutoAuth = Convert.ToBoolean(GetConfig("Functions", "enableAutoAuth", true));
            pluginPrefix = Convert.ToString(GetConfig("Formatting", "pluginPrefix", "DynamicShare"));
            prefixColor = Convert.ToString(GetConfig("Formatting", "prefixColor", "orange"));
            if (Config.Get("CupCheck") != null) {
                configRemoval = true;
                Config.Remove("CupCheck");
                (Config.Get("Command") as Dictionary<string, object>).Remove("checkCommand");
                (Config.Get("PlayerToggles") as Dictionary<string, object>).Remove("LockShare");
                (Config.Get("PlayerToggles") as Dictionary<string, object>).Remove("ClanLockShare");
                (Config.Get("PlayerDefaults") as Dictionary<string, object>).Remove("LockShare");
                (Config.Get("PlayerDefaults") as Dictionary<string, object>).Remove("ClanLockShare");
                (Config.Get("Functions") as Dictionary<string, object>).Remove("enableLockSharing");
            }
            if (!Changed && !configRemoval) return;
            SaveConfig();
            Changed = false;
        }
        protected override void LoadDefaultConfig() {
            Config.Clear();
            LoadVariables();
        }
        void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                {
                    "ShareEnabled", "Доступ к шкафу для друзей включен"
                }
                , {
                    "ShareDisabled", "Доступ к шкафу для друзей выключен"
                }
                , {
                    "CodesEnabled", "Доступ к дверям для друзей включен"
                }
                , {
                    "CodesDisabled", "Доступ к дверям для друзей выключен"
                }
                , {
                    "BoxesEnabled", "Доступ к ящикам для друзей включен"
                }
                , {
                    "BoxesDisabled", "Доступ к ящикам для друзей выключен"
                }
                , {
                    "LockersEnabled", "Доступ к замкам для друзей включен"
                }
                , {
                    "LockersDisabled", "Доступ к замкам для друзей выключен"
                }
                , {
                    "TurretEnabled", "Доступ к турелям для друзей включен"
                }
                , {
                    "TurretDisabled", "Доступ к турелям для друзей выключен"
                }
                , {
                    "ClanShareEnabled", "Доступ к шкафу для клана включен"
                }
                , {
                    "ClanShareDisabled", "Доступ к шкафу для клана выключен"
                }
                , {
                    "ClanCodesEnabled", "Доступ к дверям для клана включен"
                }
                , {
                    "ClanCodesDisabled", "Доступ к дверям для клана выключен"
                }
                , {
                    "ClanBoxesEnabled", "Доступ к ящикам для клана включен"
                }
                , {
                    "ClanBoxesDisabled", "Доступ к ящикам для клана выключен"
                }
                , {
                    "ClanLockersEnabled", "Доступ к замкам для клана включен"
                }
                , {
                    "ClanLockersDisabled", "Доступ к замкам для клана выключен"
                }
                , {
                    "ClanTurretEnabled", "Доступ к турелям для клана включен"
                }
                , {
                    "ClanTurretDisabled", "Доступ к турелям для клана выключен"
                }
                , {
                    "AdminAccessEnabled", "Доступ администратора включен"
                }
                , {
                    "AdminAccessDisabled", "Доступ администратора выключен"
                }
                , {
                    "AutoAuthEnabled", "Автоматическая авторизация в шкафу включена"
                }
                , {
                    "AutoAuthDisabled", "Автоматическая авторизация в шкафу выключена"
                }
                , {
                    "CupAuth", "Cupboard authorized"
                }
                , {
                    "TurretAuth", "Turret authorized"
                }
                , {
                    "NoAccess", "Вам не предоставлена эта функция"
                }
                , {
                    "NotEnabled", "На данный момент функция '<color=#ffd479>{0}</color>' не активна"
                }
                , {
                    "SwitchBlocked", "Администратор заблокировал переключатель '{0}'"
                }
                , {
                    "NotSupported", "Функция '<color=#ffd479>{0}</color>' недоступна"
                }
                , {
                    "NotFound", "Игрок '<color=#ffd479>{0}</color>' не найден."
                }
                , {
                    "NeedArgs", "Укажите никнейм игрока."
                }
                , {
                    "CupAuthBlocked", "Авторизация запрещена.Этот шкаф уже доступен вам"
                }
                , {
                    "CupAuthClearBlocked", "Очистка списка игроков с доступом запрещена"
                }
                , {
                    "BlockBuildIntoBlocked", "Вы не можете строить в запрещенной зоне!"
                }
                , {
                    "DoorClanNotShared", "Участник клана '<color=#ffd479>{0}</color>' запретил доступ к дверям"
                }
                , {
                    "BoxClanNotShared", "Участник клана '<color=#ffd479>{0}</color>' запретил доступ к ящикам"
                }
                , {
                    "LockerClanNotShared", "Участник клана '<color=#ffd479>{0}</color>' запретил доступ к замкам"
                }
                , {
                    "CupClanNotShared", "Авторизация запрещена.Участник клана '<color=#ffd479>{0}</color>' запретил доступ к шкафам"
                }
                , {
                    "AccessRights", "Вы можете получить доступ к:"
                }
                , {
                    "CommandPlgDisabled", "Плагин отключен! Свяжитесь с администратором"
                }
                , {
                    "CommandUsage", "Команда:"
                }
                , {
                    "CommandToggle", "Все переключатели переключают свои настройки (вкл<>выкл)"
                }
                , {
                    "CommandFriendCup", "Шкафы друзей:"
                }
                , {
                    "CommandFriendDoor", "Двери друзей:"
                }
                , {
                    "CommandFriendBox", "Ящики друзей:"
                }
                , {
                    "CommandFriendLocker", "Замки друзей:"
                }
                , {
                    "CommandFriendTurret", "Турели друзей:"
                }
                , {
                    "CommandAutoAuth", "Авторизация шкафа / турели:"
                }
                , {
                    "CommandClanCup", "Шкафы клана:"
                }
                , {
                    "CommandClanDoor", "Двери клана:"
                }
                , {
                    "CommandClanBox", "Ящики клана:"
                }
                , {
                    "CommandClanLocker", "Замки клана:"
                }
                , {
                    "CommandClanTurret", "Нацеливание турелей на участников клана:"
                }
                , {
                    "CommandClanTurretM", "Турели клана:"
                }
                , {
                    "CommandAdminAccess", "Доступ администратора"
                }
                , {
                    "HelpCups", "Описание для обмена шкафами"
                }
                , {
                    "HelpDoors", "Описание для обмена дверями"
                }
                , {
                    "HelpBoxes", "Описание для обмена ящиками"
                }
                , {
                    "HelpLockers", "Описание для обмена замкам"
                }
                , {
                    "HelpTurrets", "Описание для обмена турелями"
                }
                , {
                    "HelpAutoAuth", "Описание для автоматической авторизации"
                }
                , {
                    "HelpNotAvailable", "Этого раздела помощи не существуют."
                }
                , {
                    "DescriptionCups", "Предоставляет возможность обмена шкафами среди друзей / участников клана, эти игроки получают права на строительство в зоне действия ваших шкафов, которые вы ставили, и где вы сами авторизированы.Он не разделяет, если вы не авторизованы."
                }
                , {
                    "DescriptionDoors", "Предоставляет возможность обмена дверьми среди друзей / участников клана, эти игроки могут открыть все ваши запертые двери без доступа к самому кодовому замку."
                }
                , {
                    "DescriptionBoxes", "Предоставляет возможность обмена ящиками среди друзей / участников клана, эти игроки могут открыть все ваши заблокированные ящики, не имея доступа к самому кодовому замку."
                }
                , {
                    "DescriptionLockers", "Предоставляет возможность обмена замками среди друзей / участников клана, эти игроки могут открыть все ваши замки без доступа к самому кодовому замку."
                }
                , {
                    "DescriptionTurrets", "Предоставляет возможность обмена турелями среди друзей / участников клана, эти игроки не будут убиты вашими турелями, не имея доступа к турели.Эта функция может быть переопределена на стороне сервера для того, чтобы у кланов функция была включена."
                }
                , {
                    "DescriptionAutoAuth", "Включив автоматическую авторизацию для шкафов и турелей, вы можете пропустить последующие авторизации."
                }
                ,
            }
            , this);
        }
        Library lib;
        MethodInfo hasFriend;
        void InitializeRustIO() {
            lib = Interface.GetMod().GetLibrary<Library>("RustIO");
            if (lib == null || lib.GetFunction("IsInstalled") == null || (hasFriend = lib.GetFunction("HasFriend")) == null ) lib = null;
            else rustIOInstalled = true;
        }
        bool HasFriend(ulong owner, ulong friend) {
            if (friendsIOEnabled) return (bool)hasFriend.Invoke(lib, new object[] {
                owner.ToString(), friend.ToString()
            }
            );
            if (friendsAPIEnabled) return (bool)Friends.CallHook("HasFriend", owner, friend);
            return false;
        }
        bool SameClan(ulong owner, ulong member) {
            var o = Clans.CallHook("GetClanOf", owner);
            var m = Clans.CallHook("GetClanOf", member);
            if (o != null && m != null && (string)o == (string)m) return true;
            return false;
        }
        void Init() {
            LoadVariables();
            LoadDefaultMessages();
            cmd.AddChatCommand(shareCommand, this, "ShareCommand");
            cmd.AddConsoleCommand(shareCommand, this, "cShareCommand");
            LoadPlayerData();
            if (!permission.PermissionExists(permGetClanShares)) permission.RegisterPermission(permGetClanShares, this);
            if (!permission.PermissionExists(permGetFriendShares)) permission.RegisterPermission(permGetFriendShares, this);
            if (!permission.PermissionExists(permAutoAuth)) permission.RegisterPermission(permAutoAuth, this);
            var filter = Oxide.Game.Rust.RustExtension.Filter.ToList();
            filter.Add("DynamicCupShare - False (Boolean), Vanish (False (Boolean)");
            filter.Add("Vanish - False (Boolean), DynamicCupShare (False (Boolean)");
            filter.Add("DynamicCupShare - False (Boolean), TurretConfig (False (Boolean)");
            filter.Add("TurretConfig (False (Boolean), DynamicCupShare - False (Boolean)");
            Oxide.Game.Rust.RustExtension.Filter = filter.ToArray();
        }
        void LoadPlayerData() {
            playerPrefs = Interface.GetMod().DataFileSystem.ReadObject<StoredData>(this.Title);
            if (configRemoval) {
                foreach (var pref in playerPrefs.PlayerInfo.ToList()) {
                    playerPrefs.PlayerInfo[pref.Key].DS = playerPrefs.PlayerInfo[pref.Key].LS;
                    playerPrefs.PlayerInfo[pref.Key].LS = LockerShare;
                    playerPrefs.PlayerInfo[pref.Key].CDS = playerPrefs.PlayerInfo[pref.Key].CLS;
                    playerPrefs.PlayerInfo[pref.Key].CLS = ClanLockerShare;
                }
                SaveData();
            }
            playerDataLoaded = true;
        }
        void OnServerInitialized() {
            if (Initialized) return;
            InitializeRustIO();
            if (Clans && useClans) {
                clansEnabled = true;
                Puts("Plugin 'Clans' found - Clan support activated");
            }
            if (!Clans && useClans) PrintWarning("Plugin 'Clans' not found - Clan support not active");
            if (useFriendsApi || useFriendsIO) {
                if (rustIOInstalled && useFriendsIO) {
                    friendsEnabled = true;
                    friendsIOEnabled = true;
                    Puts("RustIO Friends found - Friends support activated");
                }
                else if (Friends && useFriendsApi &&!friendsEnabled) {
                    friendsEnabled = true;
                    friendsAPIEnabled = true;
                    Puts("Plugin Friends found - Friends support activated");
                }
            }
            if ((useFriendsApi || useFriendsIO) && !friendsEnabled) PrintWarning("No Friend Plugin found - Friend support not active");
            if (!clansEnabled && !friendsEnabled) {
                PrintWarning("No supported plugin found - Sharing disabled");
                pluginDisabled = true;
            }
            if(!pluginDisabled) {
                foreach(var player in BasePlayer.activePlayerList) SetPlayer(player);
                foreach(var player in BasePlayer.sleepingPlayerList) SetPlayer(player);
                Interface.Oxide.DataFileSystem.WriteObject(this.Title, playerPrefs);
                Initialized = true;
            }
        }
        void SetPlayer(BasePlayer player) {
            if (player == null) return;
            if (player.IsAdmin) adminAccessEnabled[player.UserIDString] = false;
            PlayerInfo p = null;
            if (!playerPrefs.PlayerInfo.TryGetValue(player.userID, out p)) {
                var info = new PlayerInfo();
                info.CS = CupShare;
                info.DS = DoorShare;
                info.TS = TurretShare;
                info.BS = BoxShare;
                info.LS = LockerShare;
                info.AA = AutoAuth;
                info.CCS = ClanCupShare;
                info.CDS = ClanDoorShare;
                info.CBS = ClanBoxShare;
                info.CLS = ClanLockerShare;
                info.CTS = ClanTurretShare;
                playerPrefs.PlayerInfo.Add(player.userID, info);
                return;
            }
        }
        void AddPlayerData(ulong userID) {
            var info = new PlayerInfo();
            info.CS = CupShare;
            info.DS = DoorShare;
            info.TS = TurretShare;
            info.BS = BoxShare;
            info.LS = LockerShare;
            info.AA = AutoAuth;
            info.CCS = ClanCupShare;
            info.CDS = ClanDoorShare;
            info.CBS = ClanBoxShare;
            info.CLS = ClanLockerShare;
            info.CTS = ClanTurretShare;
            playerPrefs.PlayerInfo.Add(userID, info);
        }
        void OnPlayerInit(BasePlayer player) {
            if (pluginDisabled) return;
            SetPlayer(player);
        }
        void Unload() {
            SaveData();
            var filter = Oxide.Game.Rust.RustExtension.Filter.ToList();
            filter.Remove("DynamicCupShare - False (Boolean), Vanish (False (Boolean)");
            filter.Remove("Vanish - False (Boolean), DynamicCupShare (False (Boolean)");
            filter.Add("DynamicCupShare - False (Boolean), TurretConfig (False (Boolean)");
            filter.Add("TurretConfig (False (Boolean), DynamicCupShare - False (Boolean)");
            Oxide.Game.Rust.RustExtension.Filter = filter.ToArray();
        }
        void OnServerSave() {
            SaveData();
        }
        void OnServerShutdown() {
            var turrets = UnityEngine.Object.FindObjectsOfType<AutoTurret>();
            foreach(var turret in turrets) {
                _nextShotTime.SetValue(turret, UnityEngine.Time.realtimeSinceStartup +30f);
                _nextTargetScanTime.SetValue(turret, UnityEngine.Time.realtimeSinceStartup +30f);
                _nextVisCheck.SetValue(turret, UnityEngine.Time.realtimeSinceStartup +30f);
            }
        }
        bool FreshStart() {
            if (UnityEngine.Time.realtimeSinceStartup < 30f) return true;
            return false;
        }
        void SaveData() {
            if (pluginDisabled) return;
            Interface.Oxide.DataFileSystem.WriteObject(this.Title, playerPrefs);
        }
        void OnPluginUnloaded(Plugin name) {
            if (name.Name == this.Title) return;
            if (name.Name == "Clans" && useClans && clansEnabled) {
                clansEnabled = false;
                Puts("Clans support disabled");
            }
            if (useFriendsIO && friendsIOEnabled) return;
            if (name.Name == "Friends" && useFriendsApi && friendsAPIEnabled) {
                friendsAPIEnabled = false;
                friendsEnabled = false;
                Puts("Friends support disabled");
            }
            if (!clansEnabled && !friendsEnabled && !pluginDisabled) {
                pluginDisabled = true;
                PrintWarning("Sharing functions disabled");
            }
        }
        void OnPluginLoaded(Plugin name) {
            if (name.Name == this.Title) return;
            if (name.Name == "Clans" && useClans && !clansEnabled) {
                clansEnabled = true;
                Puts("Clans support enabled");
            }
            if (useFriendsIO && friendsIOEnabled) return;
            if (name.Name == "Friends" && useFriendsApi && !friendsAPIEnabled) {
                friendsAPIEnabled = true;
                friendsEnabled = true;
                Puts("Friends support enabled");
            }
            if ((clansEnabled || friendsEnabled) && pluginDisabled) {
                pluginDisabled = false;
                Puts("Sharing functions re-enabled");
            }
        }
        object OnTurretTarget(AutoTurret turret, BaseCombatEntity entity) {
            if (pluginDisabled || !enableTurretSharing || turret == null || entity == null || !(entity is BasePlayer)) return null;
            if (!Initialized) return false;
            if (!playerPrefs.PlayerInfo.ContainsKey((turret as BaseEntity).OwnerID)) AddPlayerData((turret as BaseEntity).OwnerID);
            if ((entity as BasePlayer).IsAdmin && (bool)adminAccessEnabled[(entity as BasePlayer).UserIDString]) return true;
            if(!turret.authorizedPlayers.Any((PlayerNameID x) => x.userid == turret.OwnerID)) return null;
            if (clansEnabled && (clanTurretShareOverride || playerPrefs.PlayerInfo[(turret as BaseEntity).OwnerID].CTS) && SameClan((turret as BaseEntity).OwnerID, (entity as BasePlayer).userID)) if (usePermGetClanShares && permission.UserHasPermission((entity as BasePlayer).UserIDString, permGetClanShares) || !usePermGetClanShares || clanTurretShareOverride) return true;
            if (friendsEnabled && playerPrefs.PlayerInfo[(turret as BaseEntity).OwnerID].TS && HasFriend((turret as BaseEntity).OwnerID, (entity as BasePlayer).userID)) if (usePermGetFriendShares && permission.UserHasPermission((entity as BasePlayer).UserIDString, permGetFriendShares) || !usePermGetFriendShares) return true;
            return null;
        }
        object CanBeTargeted(object obj, object turret) {
            if (turret == null || turret is HelicopterTurret || pluginDisabled || !enableTurretSharing || (turret as BaseEntity).OwnerID == 0uL) return null;
            if (!Initialized) return false;
            if (obj == null || !(obj is BasePlayer)) return null;
            var player = obj as BasePlayer;
            if (!playerPrefs.PlayerInfo.ContainsKey((turret as BaseEntity).OwnerID)) AddPlayerData((turret as BaseEntity).OwnerID);
            if ((player.IsAdmin && (bool)adminAccessEnabled[player.UserIDString])) return false;
            if (turret is FlameTurret && player.userID == (turret as BaseEntity).OwnerID) return false;
            if(turret is AutoTurret && !(turret as AutoTurret).authorizedPlayers.Any((PlayerNameID x) => x.userid == (turret as BaseEntity).OwnerID)) return null;
            if (clansEnabled && (clanTurretShareOverride || playerPrefs.PlayerInfo[(turret as BaseEntity).OwnerID].CTS) && SameClan((turret as BaseEntity).OwnerID, player.userID)) if (usePermGetClanShares && permission.UserHasPermission(player.UserIDString, permGetClanShares) || !usePermGetClanShares || clanTurretShareOverride) return false;
            if (friendsEnabled && playerPrefs.PlayerInfo[(turret as BaseEntity).OwnerID].TS && HasFriend((turret as BaseEntity).OwnerID, player.userID)) if (usePermGetFriendShares && permission.UserHasPermission(player.UserIDString, permGetFriendShares) || !usePermGetFriendShares) return false;
            return null;
        }
        void OnEntityBuilt(Planner planner, GameObject obj) {
            if (pluginDisabled || !enableAutoAuth || planner == null || planner.GetOwnerPlayer() == null || obj.GetComponent<BaseEntity>() == null || obj.GetComponent<BaseEntity>().OwnerID == 0) return;
            BaseEntity entity = obj.GetComponent<BaseEntity>();
            BasePlayer player = planner.GetOwnerPlayer();
            if (!playerPrefs.PlayerInfo[player.userID].AA) return;
            if (usePermAutoAuth && !permission.UserHasPermission(player.UserIDString, permAutoAuth)) return;
            if (entity is BuildingPrivlidge) {
                (entity as BuildingPrivlidge).authorizedPlayers.Add(new PlayerNameID {
                    userid = player.userID, username = player.displayName
                }
                );
                obj.AddComponent<CupboardAutoAuth>().justPlaced = true;
                entity.SendNetworkUpdateImmediate(true);
                if (notifyAuthCupboard) PrintToChat(player, string.Format(prefixFormat, prefixColor, pluginPrefix) + string.Format(lang.GetMessage("CupAuth", this, player.UserIDString)));
            }
            else if (entity is AutoTurret) {
                (entity as AutoTurret).authorizedPlayers.Add(new PlayerNameID {
                    userid = player.userID, username = player.displayName
                }
                );
                entity.SendNetworkUpdateImmediate(true);
                if (notifyAuthTurret) PrintToChat(player, string.Format(prefixFormat, prefixColor, pluginPrefix) + string.Format(lang.GetMessage("TurretAuth", this, player.UserIDString)));
            }
        }
        object OnCupboardAuthorize(BuildingPrivlidge privilege, BasePlayer player) {
            if (pluginDisabled || !enableCupSharing || privilege == null || player == null || privilege.OwnerID == player.userID) return null;
            if (!playerPrefs.PlayerInfo.ContainsKey(privilege.OwnerID)) AddPlayerData(privilege.OwnerID);
            if (player.IsAdmin && (bool)adminAccessEnabled[player.UserIDString]) return null;
            if(!privilege.authorizedPlayers.Any((PlayerNameID x) => x.userid == privilege.OwnerID)) return null;
            if (clansEnabled && SameClan(privilege.OwnerID, player.userID)) {
                if (blockCupAuthClanMembers) {
                    if (playerPrefs.PlayerInfo[privilege.OwnerID].CCS) {
                        player.SetPlayerFlag(BasePlayer.PlayerFlags.HasBuildingPrivilege, true);
                        PrintToChat(player, string.Format(prefixFormat, prefixColor, pluginPrefix) + string.Format(lang.GetMessage("Авторизация запрещена.Этот шкаф уже доступен вам", this, player.UserIDString)));
                        return true;
                    }
                    else {
                        var member = rust.FindPlayerById(privilege.OwnerID);
                        if (member != null) PrintToChat(player, string.Format(prefixFormat, prefixColor, pluginPrefix) + string.Format(lang.GetMessage("Авторизация запрещена.Участник клана '<color=#ffd479>{0}</color>' запретил доступ к шкафам", this, player.UserIDString), member.displayName));
                        return true;
                    }
                }
                else {
                    return null;
                }
            }
            if (friendsEnabled && HasFriend(privilege.OwnerID, player.userID)) {
                if (blockCupAuthFriends) {
                    if (playerPrefs.PlayerInfo[privilege.OwnerID].CS) player.SetPlayerFlag(BasePlayer.PlayerFlags.HasBuildingPrivilege, true);
                    PrintToChat(player, string.Format(prefixFormat, prefixColor, pluginPrefix) + string.Format(lang.GetMessage("Авторизация запрещена.Этот шкаф уже доступен вам", this, player.UserIDString)));
                    return true;
                }
            }
            return null;
        }
        object OnCupboardDeauthorize(BuildingPrivlidge privilege, BasePlayer player) {
            if (pluginDisabled || !enableCupSharing || privilege == null || player == null || privilege.OwnerID == player.userID) return null;
            if (!playerPrefs.PlayerInfo.ContainsKey(privilege.OwnerID)) AddPlayerData(privilege.OwnerID);
            if (player.IsAdmin && (bool)adminAccessEnabled[player.UserIDString]) return null;
            if(!privilege.authorizedPlayers.Any((PlayerNameID x) => x.userid == privilege.OwnerID)) return null;
            if (clansEnabled && playerPrefs.PlayerInfo[privilege.OwnerID].CCS && SameClan(privilege.OwnerID, player.userID)) {
                privilege.authorizedPlayers.RemoveAll((PlayerNameID x) => x.userid == player.userID);
                privilege.SendNetworkUpdate();
                return true;
            }
            if (friendsEnabled && playerPrefs.PlayerInfo[privilege.OwnerID].CS && HasFriend(privilege.OwnerID, player.userID)) {
                privilege.authorizedPlayers.RemoveAll((PlayerNameID x) => x.userid == player.userID);
                privilege.SendNetworkUpdate();
                return true;
            }
            return null;
        }
        object OnCupboardClearList(BuildingPrivlidge privilege, BasePlayer player) {
            if (pluginDisabled || !enableCupSharing || privilege == null || player == null || privilege.OwnerID == player.userID) return null;
            if (!playerPrefs.PlayerInfo.ContainsKey(privilege.OwnerID)) AddPlayerData(privilege.OwnerID);
            if (player.IsAdmin && (bool)adminAccessEnabled[player.UserIDString]) return null;
            if(!privilege.authorizedPlayers.Any((PlayerNameID x) => x.userid == privilege.OwnerID)) return null;
            if (clansEnabled && blockCupClearClanMembers && SameClan(privilege.OwnerID, player.userID)) {
                PrintToChat(player, string.Format(prefixFormat, prefixColor, pluginPrefix) + string.Format(lang.GetMessage("Очистка списка игроков с доступом запрещена", this, player.UserIDString)));
                return true;
            }
            if (friendsEnabled && blockCupClearFriends && HasFriend(privilege.OwnerID, player.userID)) {
                PrintToChat(player, string.Format(prefixFormat, prefixColor, pluginPrefix) + string.Format(lang.GetMessage("Очистка списка игроков с доступом запрещена", this, player.UserIDString)));
                return true;
            }
            return null;
        }
        object CanBuild(Planner plan, Construction prefab) {
            if (pluginDisabled || !enableCupSharing || plan == null || plan.GetOwnerPlayer() == null || prefab == null) return null;
            var player = plan.GetOwnerPlayer();
            Ray targetRay = player.eyes.BodyRay();
            RaycastHit raycastHit;
            Vector3 targetPosition;
            if (GamePhysics.Trace(targetRay, 0f, out raycastHit, prefab.maxplaceDistance, 27328768, QueryTriggerInteraction.Ignore)) targetPosition = targetRay.origin + targetRay.direction * raycastHit.distance;
            else targetPosition = targetRay.origin + targetRay.direction * prefab.maxplaceDistance;
            BuildingPrivlidge cup = BuildingPrivlidge.Get(targetPosition, new Quaternion(), prefab.bounds);
            if (cup == null) return null;
            if (player.IsAdmin && (bool)adminAccessEnabled[player.UserIDString]) {
                prefab.canBypassBuildingPermission = true;
                return null;
            }
            if(!cup.AnyAuthed() || cup.authorizedPlayers.Any((PlayerNameID x) => x.userid == player.userID) || !cup.authorizedPlayers.Any((PlayerNameID x) => x.userid == cup.OwnerID) || !playerPrefs.PlayerInfo.ContainsKey(cup.OwnerID)) return null;
            if ((!usePermGetClanShares || usePermGetClanShares && permission.UserHasPermission(player.UserIDString, permGetClanShares))) {
                if (clansEnabled && playerPrefs.PlayerInfo[cup.OwnerID].CCS && SameClan(cup.OwnerID, player.userID)) {
                    prefab.canBypassBuildingPermission = true;
                    return null;
                }
                if (friendsEnabled && playerPrefs.PlayerInfo[cup.OwnerID].CS && HasFriend(cup.OwnerID, plan.GetOwnerPlayer().userID)) {
                    prefab.canBypassBuildingPermission = true;
                    return null;
                }
            }
            if (blockBuildIntoBlocked) {
                PrintToChat(plan.GetOwnerPlayer(), string.Format(prefixFormat, prefixColor, pluginPrefix) + string.Format(lang.GetMessage("Вы не можете строить в запрещенной зоне!", this, plan.GetOwnerPlayer().UserIDString)));
                return false;
            }
            return null;
        }
        uint FirstPrivID(BasePlayer player) {
            var privs = (List<BuildingPrivlidge>)_buildingPrivilege.GetValue(player);
            if (privs == null || privs.Count == 0) return 0;
            return privs.OrderBy(c => c.net.ID).ToList().First().net.ID;
        }
        BuildingPrivlidge FirstPriv(BasePlayer player) {
            BuildingPrivlidge firstPriv = null;
            List<BuildingPrivlidge> buildingPrivilege = (List<BuildingPrivlidge>)_buildingPrivilege.GetValue(player);
            if (buildingPrivilege == null || buildingPrivilege.Count == 0) return firstPriv;
            buildingPrivilege.RemoveAll(p => p == null);
            if (buildingPrivilege.Count == 0) return firstPriv;
            return buildingPrivilege.OrderBy(c => c.net.ID).ToList().First();
        }
        private class CupboardAutoAuth : MonoBehaviour {
            public bool justPlaced = false;
        }
        void OnEntityEnter(TriggerBase trigger, BaseEntity entity) {
            if (pluginDisabled || !enableCupSharing || entity == null || !(trigger is BuildPrivilegeTrigger) || !(entity is BasePlayer)) return;
            var enterCup = (trigger as BuildPrivilegeTrigger).privlidgeEntity;
            if (!playerPrefs.PlayerInfo.ContainsKey(enterCup.OwnerID)) AddPlayerData(enterCup.OwnerID);
            var obj = enterCup.gameObject.GetComponent<CupboardAutoAuth>();
            var player = entity as BasePlayer;
            if (obj != null && obj is CupboardAutoAuth) {
                GameObject.Destroy(obj);
                if (enterCup.OwnerID == player.userID) return;
                if (enterCup.OwnerID != player.userID && !player.CanBuild()) return;
            }
            NextTick(() => CheckCupAccess(player));
        }
        void OnEntityLeave(TriggerBase trigger, BaseEntity entity) {
            if (pluginDisabled || !enableCupSharing || entity == null || !(trigger is BuildPrivilegeTrigger) || !(entity is BasePlayer)) return;
            NextTick(() => CheckCupAccess(entity as BasePlayer));
        }
        void OnPlayerRespawned(BasePlayer player) {
            if (pluginDisabled || !enableCupSharing || player == null || player.CanBuild()) return;
            if (player.HasPlayerFlag(BasePlayer.PlayerFlags.InBuildingPrivilege)) CheckCupAccess(player);
        }
        void OnPlayerSleepEnded(BasePlayer player) {
            if (player.IsAdmin && !adminAccessEnabled.ContainsKey(player.UserIDString)) adminAccessEnabled[player.UserIDString] = false;
            if (pluginDisabled || !enableCupSharing || player == null || player.CanBuild()) return;
            if (player.HasPlayerFlag(BasePlayer.PlayerFlags.InBuildingPrivilege)) CheckCupAccess(player);
        }
        void CheckCupAccess(BasePlayer player) {
            if (player.CanBuild()) return;
            var cup = FirstPriv(player);
            if (cup == null || cup.OwnerID == 0) return;
            if (!playerPrefs.PlayerInfo.ContainsKey(cup.OwnerID)) AddPlayerData(cup.OwnerID);
            if (player.IsAdmin && !adminAccessEnabled.ContainsKey(player.UserIDString)) adminAccessEnabled[player.UserIDString] = false;
            if (player.IsAdmin && (bool)adminAccessEnabled[player.UserIDString]) {
                player.SetPlayerFlag(BasePlayer.PlayerFlags.HasBuildingPrivilege, true);
                return;
            }
            if(!cup.AnyAuthed() || cup.authorizedPlayers.Any((PlayerNameID x) => x.userid == player.userID) || !cup.authorizedPlayers.Any((PlayerNameID x) => x.userid == cup.OwnerID) ) return;
            if (clansEnabled && playerPrefs.PlayerInfo[cup.OwnerID].CCS && SameClan(cup.OwnerID, player.userID) && (usePermGetClanShares && permission.UserHasPermission(player.UserIDString, permGetClanShares) || !usePermGetClanShares)) {
                player.SetPlayerFlag(BasePlayer.PlayerFlags.HasBuildingPrivilege, true);
                return;
            }
            if (friendsEnabled && playerPrefs.PlayerInfo[cup.OwnerID].CS && HasFriend(cup.OwnerID, player.userID) && (usePermGetFriendShares && permission.UserHasPermission(player.UserIDString, permGetFriendShares) || !usePermGetFriendShares)) {
                player.SetPlayerFlag(BasePlayer.PlayerFlags.HasBuildingPrivilege, true);
                return;
            }
        }
        object CanUseLockedEntity(BasePlayer player, BaseLock code) {
            if (!code.IsLocked() || (code is CodeLock && (_whitelistPlayers.GetValue(code) as List<ulong>).Contains(player.userID)) || (code is KeyLock && code.HasLockPermission(player))) return true;
            if (pluginDisabled || player == null || code == null || code is KeyLock) return null;
            if (!playerPrefs.PlayerInfo.ContainsKey(code.GetParentEntity().OwnerID)) AddPlayerData(code.GetParentEntity().OwnerID);
            ulong owner = code.GetParentEntity().OwnerID;
            if (player.IsAdmin && (bool)adminAccessEnabled[player.UserIDString]) return true;
            bool hasClanShare = usePermGetClanShares && permission.UserHasPermission(player.UserIDString, permGetClanShares) || !usePermGetClanShares;
            bool hasFriendShare = usePermGetFriendShares && permission.UserHasPermission(player.UserIDString, permGetFriendShares) || !usePermGetFriendShares;
            if (clansEnabled && code.GetParentEntity() is Door && enableDoorSharing && playerPrefs.PlayerInfo[owner].CDS && SameClan(owner, player.userID) && hasClanShare) return true;
            else if (clansEnabled && ((code.GetParentEntity() is BoxStorage && enableBoxSharing && playerPrefs.PlayerInfo[owner].CBS) || (code.GetParentEntity() is Locker && enableLockerSharing && playerPrefs.PlayerInfo[owner].CBS)) && SameClan(owner, player.userID) && hasClanShare) return true;
            else if (friendsEnabled && code.GetParentEntity() is Door && enableDoorSharing && playerPrefs.PlayerInfo[owner].DS && HasFriend(owner, player.userID) &&hasFriendShare) return true;
            else if (friendsEnabled && ((code.GetParentEntity() is BoxStorage && enableBoxSharing && playerPrefs.PlayerInfo[owner].BS) || (code.GetParentEntity() is Locker && enableLockerSharing && playerPrefs.PlayerInfo[owner].LS)) && HasFriend(owner, player.userID) && hasFriendShare) return true;
            else if (clansEnabled && code.GetParentEntity() is Door && enableDoorSharing && !playerPrefs.PlayerInfo[owner].CDS && SameClan(owner, player.userID) && hasClanShare) {
                var member = rust.FindPlayerById(owner);
                if (member != null) PrintToChat(player, string.Format(prefixFormat, prefixColor, pluginPrefix) + string.Format(lang.GetMessage("Участник клана '{0}' запретил доступ к дверям", this, player.UserIDString), member.displayName));
                return false;
            }
            else if (clansEnabled && code.GetParentEntity() is BoxStorage && enableBoxSharing && !playerPrefs.PlayerInfo[owner].CBS && SameClan(owner, player.userID) && hasClanShare) {
                var member = rust.FindPlayerById(owner);
                if (member != null) PrintToChat(player, string.Format(prefixFormat, prefixColor, pluginPrefix) + string.Format(lang.GetMessage("Участник клана '{0}' запретил доступ к ящикам", this, player.UserIDString), member.displayName));
                return false;
            }
            else if (clansEnabled && code.GetParentEntity() is Locker &&
// ... [Code preview truncated due to length. Full source in attached file] ...

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