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

FREE Friendsbyfermens : 1.0.0 1.0.0

Нет прав для скачивания
C#:
using Newtonsoft.Json;
using Oxide.Core;
using Oxide.Core.Plugins;
using ProtoBuf;
using Rust;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using ru = Oxide.Game.Rust;
namespace Oxide.Plugins {
    [Info("Friendsbyfermens", "TopPlugin.ru", "1.0.0")]
    [Description("Система друзей и FF")]
    class Friendsbyfermens : RustPlugin {
#region Config
        private PluginConfig config;
        protected override void LoadDefaultConfig() {
            config = PluginConfig.DefaultConfig();
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            config = Config.ReadObject<PluginConfig>();
        }
        protected override void SaveConfig() {
            Config.WriteObject(config);
        }
        private class PluginConfig {
            [JsonProperty("Максимальное количество игроков в команде")]
            public int maxcount;
            [JsonProperty("Префикс")]
            public string prefix;
            [JsonProperty("Максимальное количество символов в теге команды")]
            public int max;
            [JsonProperty("Минимальное количество символов в теге команды")]
            public int min;
            [JsonProperty("Запрещенные названия в теге команде")]
            public string[] blacklist;
            public static PluginConfig DefaultConfig() {
                return new PluginConfig() {
                    maxcount = 3, prefix = "<color=#ff8000>TopFriends™</color> ", min = 2, max = 4, blacklist = new string[] {
                        "MOD", "MODR", "ADMI", "ADM"
                    }
                    ,
                }
                ;
            }
        }
#endregion
        [PluginReference]
        private Plugin OneVSOne, Battles;
        private void OnEntityTakeDamage(BaseCombatEntity entity, HitInfo info) {
            if (entity == null || info == null) return;
            if (entity is BasePlayer && info.Initiator is BasePlayer) {
                BasePlayer takeDamage = entity.ToPlayer();
                if (takeDamage == null) return;
                BasePlayer initiator = info.InitiatorPlayer;
                if (initiator == null || initiator == takeDamage || takeDamage.currentTeam == 0) return;
                settings one;
                if (takeDamage.currentTeam == initiator.currentTeam && setplayers.TryGetValue(initiator.userID, out one) && one.ff) {
                    if (OneVSOne != null && OneVSOne.Call<bool>("IsEventPlayer", takeDamage) || Battles != null && Battles.Call<bool>("IsPlayerOnBattle", takeDamage.userID)) return;
                    clear(info);
                }
            }
        }
        void clear(HitInfo info) {
            info.damageTypes = new DamageTypeList();
            info.HitEntity = null;
            info.HitMaterial = 0;
            info.PointStart = Vector3.zero;
        }
        Dictionary<SamSite, BuildingPrivlidge> samsites = new Dictionary<SamSite, BuildingPrivlidge>();
        private object OnSamSiteTarget(SamSite samSite, BaseCombatEntity target) {
            if (target is BaseMountable || target is HotAirBalloon) {
                List<BasePlayer> players = new List<BasePlayer>();
                Vis.Entities(target.transform.position, 2.5f, players);
                if (players == null || players.Count == 0) return null;
                BuildingPrivlidge buildingPrivlidge;
                if (!samsites.TryGetValue(samSite, out buildingPrivlidge) || buildingPrivlidge.IsDestroyed) {
                    buildingPrivlidge = samSite.GetBuildingPrivilege();
                    if (buildingPrivlidge == null) return null;
                    samsites[samSite] = buildingPrivlidge;
                }
                if (players.Any(player => buildingPrivlidge.IsAuthed(player))) return false;
            }
            return null;
        }
        private object OnTurretTarget(AutoTurret turret, BaseCombatEntity entity) {
            if (entity == null) return null;
            BasePlayer player = entity.ToPlayer();
            if (player == null) return null;
            if (turret.OwnerID == 0) return null;
            if (player.Team != null) {
                if(player.Team.members.Any(x=> turret.authorizedPlayers.Any(z => x == z.userid && setplayers.ContainsKey(x) && setplayers[x].turret))) {
                    turret.authorizedPlayers.Add(GetPlayerNameId(player));
                    turret.SendNetworkUpdate();
                    return false;
                }
            }
            return null;
        }
        private static PlayerNameID GetPlayerNameId(BasePlayer player) {
            var playerNameId = new PlayerNameID() {
                userid = player.userID, username = player.displayName
            }
            ;
            return playerNameId;
        }
        private object CanUseLockedEntity(BasePlayer player, BaseLock baseLock) {
            if (player == null || baseLock == null || baseLock.GetEntity() == null || !baseLock.IsLocked()) return null;
            ulong ownerID = baseLock.GetEntity().OwnerID;
            if (ownerID.Equals(0)) return null;
            if (player.Team != null && player.Team.members.Contains(ownerID) && setplayers.ContainsKey(ownerID) && setplayers[ownerID].codelock) {
                Effect.server.Run("assets/prefabs/locks/keypad/effects/lock.code.unlock.prefab", baseLock.transform.position);
                return true;
            }
            return null;
        }
        private void Save() {
            Interface.Oxide.DataFileSystem.WriteObject("Friendsbyfermens", setplayers);
        }
        private void Unload() {
            /*   teams.Clear();
            foreach (var z in RelationshipManager.ServerInstance.teams)
            {
                PLAYERTEAM pLAYERTEAM;
                if (!teams.TryGetValue(z.Key, out pLAYERTEAM))
                {
                    teams.Add(z.Key, new PLAYERTEAM { members = new List<ulong>() });
                    pLAYERTEAM = teams[z.Key];
                }
                pLAYERTEAM.teamLeader = z.Value.teamLeader;
                pLAYERTEAM.teamName = z.Value.teamName;
                pLAYERTEAM.members.AddRange(z.Value.members);
            }
            if(teams.Count > 0) Interface.Oxide.DataFileSystem.WriteObject("teams", teams);*/
            Save();
        }
        private void initializeset(ulong id) {
            if (!setplayers.ContainsKey(id)) setplayers.Add(id, new settings());
        }
        private static Dictionary<ulong, PLAYERTEAM> teams = new Dictionary<ulong, PLAYERTEAM>();
        class PLAYERTEAM {
            public string teamName;
            public ulong teamLeader;
            public List<ulong> members;
        }
        private void OnServerInitialized() {
            PrintWarning("\n-----------------------------\n" + "     Author - https://topplugin.ru/\n" + "     VK - https://vk.com/rustnastroika\n" + "     Discord - https://discord.com/invite/5DPTsRmd3G\n" + "-----------------------------");
            if(config.blacklist == null) {
                config.blacklist = new string[] {
                    "MOD", "MODR", "ADMI", "ADM"
                }
                ;
                config.max = 4;
                config.min = 2;
                SaveConfig();
            }
            setplayers = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, settings>>("Friendsbyfermens");
            foreach (var z in BasePlayer.activePlayerList) initializeset(z.userID);
            RelationshipManager.maxTeamSize = config.maxcount;
            var com = Interface.Oxide.GetLibrary<ru.Libraries.Command>(null);
            com.AddChatCommand("friend", this, "COMMANDER");
            com.AddChatCommand("team", this, "COMMANDER");
            com.AddConsoleCommand("friend", this, "CmdConsolecommandinvite");
            com.AddConsoleCommand("team", this, "CmdConsolecommandinvite");
        }
        private void OnPlayerConnected(BasePlayer player) {
            if (!player.IsConnected) return;
            if (player.IsReceivingSnapshot) {
                timer.Once(1f, () => OnPlayerConnected(player));
                return;
            }
            initializeset(player.userID);
        }
        Dictionary<ulong, settings> setplayers = new Dictionary<ulong, settings>();
        class settings {
            public bool ff = true;
            public bool turret = true;
            public bool codelock = true;
        }
        void CmdConsolecommandinvite(ConsoleSystem.Arg arg) {
            var player = arg.Player();
            if (player == null || !arg.HasArgs()) return;
            COMMANDER(player, "friend", arg.Args);
        }
        private void COMMANDER(BasePlayer player, string command, string[] args) {
            if (string.IsNullOrEmpty(command)) command = "friend";
            settings settings;
            if (!setplayers.TryGetValue(player.userID, out settings)) {
                setplayers.Add(player.userID, new settings());
                settings = setplayers[player.userID];
            }
            if (args != null && args.Length > 0) {
                if(args.Length == 2) {
                    if (args[0] == "invite") {
                        if (player.Team == null) {
                            player.Command("chat.add", 2, 0, config.prefix + "Создайте сначала команду!");
                            return;
                        }
                        if (!player.Team.teamLeader.Equals(player.userID)) {
                            player.Command("chat.add", 2, 0, config.prefix + "Только лидер команды может приглашать в команду!");
                            return;
                        }
                        var listplayers = BasePlayer.activePlayerList.Where(z => z.displayName.Contains(args[1]));
                        int countfiend = listplayers.Count();
                        if (countfiend == 1) {
                            BasePlayer friend = listplayers.FirstOrDefault();
                            if (friend.Team != null) {
                                player.Command("chat.add", 2, 0, config.prefix + $"Игрок <color=#ff8000>'{friend.displayName}'</color> уже состоит в другой команде.");
                                return;
                            }
                            player.Team.SendInvite(friend);
                            player.Command("chat.add", 2, 0, config.prefix + $"Игроку <color=#ff8000>'{friend.displayName}'</color> отправлено приглашение в команду.");
                        }
                        else if (countfiend.Equals(0)) {
                            player.Command("chat.add", 2, 0, config.prefix + $"Игрок <color=#ff8000>'{args[1]}'</color> не найден.");
                            return;
                        }
                        else {
                            player.Command("chat.add", 2, 0, config.prefix + $"Найдено несколько игроков: <color=#ff8000>{string.Join(" ", listplayers.Select(p => p.displayName).ToArray())}</color>");
                            return;
                        }
                    }
                    else if(args[0] == "name") {
                        if (player.Team == null) {
                            player.Command("chat.add", 2, 0, config.prefix + "У вас нет команды!");
                            return;
                        }
                        if (player.Team.teamLeader != player.userID) {
                            player.Command("chat.add", 2, 0, config.prefix + "Только лидер команды может менять тим <color=#ff8000>ТЕГ</color>");
                            return;
                        }
                        if (args[1].Length < config.min || args[1].Length > config.max) {
                            player.Command("chat.add", 2, 0, config.prefix + $"Название должно состоять от 2-х до 4-х символов!\nПример: /{command} name Just");
                            return;
                        }
                        string name = args[1].ToUpper();
                        if (config.blacklist.Contains(name) || RelationshipManager.ServerInstance.teams.Any(x => !string.IsNullOrEmpty(x.Value.teamName) && x.Value.teamName == name)) {
                            player.Command("chat.add", 2, 0, config.prefix + "Этот тим <color=#ff8000>ТЕГ</color> уже занят!");
                            return;
                        }
                        player.Team.teamName = name;
                        List<Network.Connection> sendto = Network.Net.sv.connections.Where(x => player.Team.members.Contains(x.userid)).ToList();
                        string text = config.prefix + $"Игрок <color=#ff8000>{player.displayName}</color> изменил тим <color=#ff8000>ТЕГ</color> на <color=#32C8C8>{name}</color>";
                        ConsoleNetwork.SendClientCommand(sendto, "chat.add", 0, player.UserIDString, text);
                    }
                }
                else if(args.Length == 1) {
                    if(args[0] == "create") {
                        if (player.Team != null) {
                            player.Command("chat.add", 2, 0, config.prefix + "У вас уже есть команда!");
                            return;
                        }
                        player.Command("relationshipmanager.trycreateteam");
                    }
                    else if(args[0] == "ff") {
                        if (player.Team == null) {
                            player.Command("chat.add", 2, 0, config.prefix + "У вас нет команды!");
                            return;
                        }
                        /*  if (!player.Team.teamLeader.Equals(player.userID))
                          {
                              player.Command("chat.add", 2, 0, config.prefix + "Только лидер команды может менять этот параметр!");
                              return;
                          }*/
                        if (settings.ff) {
                            settings.ff = false;
                            foreach (var z in player.Team.members) {
                                BasePlayer gg = BasePlayer.FindByID(z);
                                if (player == null) continue;
                                gg.Command("chat.add", 2, 0, config.prefix + $"Игрок <color=#ff8000>{player.displayName}</color> включил урон по тиммейтам!");
                            }
                        }
                        else {
                            settings.ff = true;
                            List<Network.Connection> sendto = Network.Net.sv.connections.Where(x => player.Team.members.Contains(x.userid)).ToList();
                            string text = config.prefix + $"Игрок <color=#ff8000>{player.displayName}</color> выключил урон по тиммейтам.";
                            ConsoleNetwork.SendClientCommand(sendto, "chat.add", 0, player.UserIDString, text);
                        }
                    }
                    else if (args[0] == "codelock") {
                        if (player.Team == null) {
                            player.Command("chat.add", 2, 0, config.prefix + "У вас нет команды!");
                            return;
                        }
                        if (settings.codelock) {
                            settings.codelock = false;
                            List<Network.Connection> sendto = Network.Net.sv.connections.Where(x => player.Team.members.Contains(x.userid)).ToList();
                            string text = config.prefix + $"Игрок <color=#ff8000>{player.displayName}</color> запретил пользоваться его замками!";
                            ConsoleNetwork.SendClientCommand(sendto, "chat.add", 0, player.UserIDString, text);
                        }
                        else {
                            settings.codelock = true;
                            List<Network.Connection> sendto = Network.Net.sv.connections.Where(x => player.Team.members.Contains(x.userid)).ToList();
                            string text = config.prefix + $"Игрок <color=#ff8000>{player.displayName}</color> разрешил пользоваться его замками.";
                            ConsoleNetwork.SendClientCommand(sendto, "chat.add", 0, player.UserIDString, text);
                        }
                    }
                    else if (args[0] == "turret") {
                        if (player.Team == null) {
                            player.Command("chat.add", 2, 0, config.prefix + "У вас нет команды!");
                            return;
                        }
                        if (settings.turret) {
                            settings.turret = false;
                            List<Network.Connection> sendto = Network.Net.sv.connections.Where(x => player.Team.members.Contains(x.userid)).ToList();
                            string text = config.prefix + $"Игрок <color=#ff8000>{player.displayName}</color> отключил автоматическую авторизацию в его турелях!";
                            ConsoleNetwork.SendClientCommand(sendto, "chat.add", 0, player.UserIDString, text);
                        }
                        else {
                            settings.turret = true;
                            List<Network.Connection> sendto = Network.Net.sv.connections.Where(x => player.Team.members.Contains(x.userid)).ToList();
                            string text = config.prefix + $"Теперь туррели игрока <color=#ff8000>{player.displayName}</color> для вас безобидны.";
                            ConsoleNetwork.SendClientCommand(sendto, "chat.add", 0, player.UserIDString, text);
                        }
                    }
                }
            }
            else {
                if (player.Team == null) player.Command("chat.add", 2, 0, config.prefix + $"Создайте сначала команду!\n             <color=#ff8000>/{command} create</color> - создать команду.");
                else player.Command("chat.add", 2, 0, config.prefix + $"\n\n    <color=#FF0077><3</color>     <color=#ff8000>/{command} name</color> <color=#32C8C8>ТЕГ</color> - изменить тим <color=#32C8C8>ТЕГ</color>.\n    <color=#FF0077><3</color>     <color=#ff8000>/{command} invite</color> <color=#32C8C8>никнейм</color> - пригласить в команду \n {onoff(settings.codelock)} <color=#ff8000>/{command} codelock</color> - разрешить тиммейтам пользоваться вашими замками.\n {onoff(setplayers[player.userID].turret)} <color=#ff8000>/{command} turret</color> - авторизовывать тиммейтов в ваших туреллях, когда они на них агряться.\n {onoff(setplayers[player.userID].ff)} <color=#ff8000>/{command} ff</color> - выключить урон по тиммейтам.");
            }
        }
        private bool IsPvp(ulong id) {
            settings settings;
            if (!setplayers.TryGetValue(id, out settings)) return true;
            return settings.ff;
        }
        private bool IsTurret(ulong id) {
            settings settings;
            if (!setplayers.TryGetValue(id, out settings)) return true;
            return settings.turret;
        }
        private bool IsCodelock(ulong id) {
            settings settings;
            if (!setplayers.TryGetValue(id, out settings)) return true;
            return settings.codelock;
        }
        string onoff(bool on) {
            if (on) return "<color=#29F500> - On -</color>";
            else return "<color=#FF0B00>- Off -</color>";
        }
    }
}

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

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

Сверху