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

FREE NoOffline : 1.0.3 1.0.3

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

namespace Oxide.Plugins
{
    [Info("NoOffline", "RFC1920", "1.0.3")]
    [Description("Disables offline raid based on building privilege members, friends, clans, or teams")]
    class NoOffline : RustPlugin
    {
        [PluginReference]
        private readonly Plugin Friends, Clans, RustIO;
        private ConfigData configData;

        private object OnEntityTakeDamage(BaseCombatEntity entity, HitInfo hitinfo)
        {
            if (entity == null) return null;
            if (hitinfo.damageTypes.GetMajorityDamageType() == Rust.DamageType.Decay) return null;

            bool foundOnline = false;
            BuildingPrivlidge tc = entity.GetBuildingPrivilege();

            if (tc != null)
            {
                DoLog("Checking authorized players");
                foreach (ulong playerid in tc.authorizedPlayers.Select(x => x.userid).ToArray())
                {
                    DoLog($"Checking player {playerid}");
                    BasePlayer player = BasePlayer.Find(playerid.ToString());
                    if (player != null && BasePlayer.activePlayerList.Contains(player))
                    {
                        DoLog($"Damage allowed because an authorized player, {player.displayName}, is online.");
                        foundOnline = true;
                    }
                    if (configData.Options.HonorRelationships)
                    {
                        foreach (BasePlayer peep in BasePlayer.activePlayerList)
                        {
                            if (IsFriend(peep.userID, playerid))
                            {
                                DoLog($"Damage allowed because a friend of an authorized player, {peep.displayName}, is online.");
                                foundOnline = true;
                            }
                        }
                    }
                }
                if (foundOnline) return null; // Normal behavior
                return true;
            }

            return null;
        }

        private void DoLog(string message)
        {
            if (configData.Options.debug) Interface.Oxide.LogInfo(message);
        }

        private bool IsFriend(ulong playerid, ulong ownerid)
        {
            if (configData.Options.useFriends && Friends != null)
            {
                object fr = Friends?.CallHook("AreFriends", playerid, ownerid);
                if (fr != null && (bool)fr)
                {
                    return true;
                }
            }
            if (configData.Options.useClans && Clans != null)
            {
                string playerclan = (string)Clans?.CallHook("GetClanOf", playerid);
                string ownerclan = (string)Clans?.CallHook("GetClanOf", ownerid);
                if (playerclan != null && ownerclan != null && playerclan == ownerclan)
                {
                    return true;
                }
            }
            if (configData.Options.useTeams)
            {
                BasePlayer player = BasePlayer.FindByID(playerid);
                if (player != null)
                {
                    if (player.currentTeam != 0)
                    {
                        RelationshipManager.PlayerTeam playerTeam = RelationshipManager.ServerInstance.FindTeam(player.currentTeam);
                        if (playerTeam != null && playerTeam.members.Contains(ownerid))
                        {
                            return true;
                        }
                    }
                }
            }
            return false;
        }

        #region config
        private void LoadConfigVariables()
        {
            configData = Config.ReadObject<ConfigData>();

            configData.Version = Version;
            SaveConfig(configData);
        }

        protected override void LoadDefaultConfig()
        {
            Puts("Creating new config file.");
            ConfigData config = new ConfigData
            {
                Version = Version
            };

            SaveConfig(config);
        }
        private void SaveConfig(ConfigData config)
        {
            Config.WriteObject(config, true);
        }

        public class ConfigData
        {
            public Options Options = new Options();
            public VersionNumber Version;
        }

        public class Options
        {
            public bool debug;
            public bool useFriends;
            public bool useClans;
            public bool useTeams;
            public bool HonorRelationships;
        }
        #endregion
    }
}

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