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

FREE FSystem : 0.2 0.2

Нет прав для скачивания
C#:
using Oxide.Core;
using Oxide.Core.Configuration;
using Oxide.Core.Plugins;
using System;
using System.Collections.Generic;

namespace Oxide.Plugins
{
    [Info("FSystem", "modified by setfps ", 0.2)]
    [Description("Вспомогательный плагин для FSystem (Client)")]
    public class FSystem : RustPlugin
    {

        Teams data = Interface.Oxide.DataFileSystem.ReadObject<Teams>("PlayerData"); //дата
        List<char> a;

        void OnPlayerInit(BasePlayer player)
        {
            if (player == null) return;
            if (player.HasPlayerFlag(BasePlayer.PlayerFlags.ReceivingSnapshot))
            {
                timer.Once(1f, () =>
                {
                    OnPlayerInit(player);
                });
                return;
            }
            timer.Once(30f, () =>
            {
                SendPlayerUpdate(player);
            });
            SendPlayerUpdate(player);
        }

        struct Team
        {
            public string Name;
            public ulong Owner;
            public List<ulong> Members;
            public List<ulong> Invited;
        }
        void Init()
        {
            string b = "abcdefghijklmnopqrstuvwxyz";
            a = new List<char>(b.ToCharArray());
            foreach (BasePlayer player in BasePlayer.activePlayerList)
            {
                SendPlayerUpdate(player);
            }
        }


        private class Teams
        {
            public HashSet<Team> teams = new HashSet<Team>();

            public Teams()
            {
            }
        }

        bool TeamExists(string name)
        {
            name = name.ToLower();
            foreach (Team team in data.teams)
            {
                if (team.Name.ToLower() == name) return true;
            }
            return false;
        }

        bool InTeam(ulong steamid)
        {
            foreach (Team team in data.teams)
            {
                if (team.Owner == steamid) return true;
                if (team.Members != null && team.Members.Contains(steamid)) return true;
            }
            return false;
        }
        ulong[] GetHisTeam(ulong steamid)
        {
            List<ulong> players = new List<ulong>();
            Team a = GetTeamEx(steamid);
            if (a.Owner != steamid) players.Add(a.Owner);
            foreach (ulong member in a.Members)
                if (member != steamid) players.Add(member);
            return players.ToArray();
        }

        string GetTeam(ulong steamid)
        {
            foreach (Team team in data.teams)
            {
                if (team.Owner == steamid || team.Members.Contains(steamid)) return team.Name;
            }
            return "";
        }

        Team GetTeamEx(string name)
        {
            name = name.ToLower();
            foreach (Team team in data.teams)
            {
                if (team.Name.ToLower() == name) return team;
            }
            return new Team();
        }

        Team GetTeamEx(ulong steamid)
        {
            foreach (Team team in data.teams)
            {
                if (team.Owner == steamid || team.Members.Contains(steamid)) return team;
            }
            return new Team();
        }

        bool IsOwner(ulong steamid)
        {
            foreach (Team team in data.teams)
            {
                if (team.Owner == steamid) return true;
            }
            return false;
        }

        bool HasTeamate(ulong a, ulong b)
        {
            if (!InTeam(a) || !InTeam(b)) return false;
            if (GetTeam(a) == GetTeam(b)) return true;
            return false;
        }

        void OnPlayerDie(BasePlayer player)
        {
            Team team = GetTeamEx(player.userID);
            SendPlayerUpdate(player);
        }
        void OnPlayerRespawn(BasePlayer player)
        {
            Team team = GetTeamEx(player.userID);
            SendPlayerUpdate(player);
            BasePlayer owner = BasePlayer.FindByID(team.Owner);
            if (owner != null) SendPlayerUpdate(owner);
        }
        void OnPlayerRespawned(BasePlayer player)
        {
            Team team = GetTeamEx(player.userID);
            SendPlayerUpdate(player);
            BasePlayer owner = BasePlayer.FindByID(team.Owner);
            if (owner != null) SendPlayerUpdate(owner);
        }


        void SendPlayerUpdate(BasePlayer player)
        {
            if (player == null) return;
            if (!InTeam(player.userID))
            {
                player.SendConsoleCommand("friendList");
                return;
            }
            string x = "friendList";
            Team team = GetTeamEx(player.userID);
            if (team.Name.Length < 1) return;
            x += $":{team.Owner}";
            if (team.Members != null)
            {
                foreach (ulong member in team.Members)
                {
                    x += $":{member}";
                }
            }
            player.SendConsoleCommand(x);
        }

        [ChatCommand("t")]
        void дапиздецотправкавтимусообщений(BasePlayer player, string command, string[] args)
        {
            if (args.Length < 1)
            {
                SendReply(player, "\nИспользование команды:\n/t \"Сообщение\"");
                return;
            }
            if (!InTeam(player.userID))
            {
                SendReply(player, "\nУ вас нет команды!");
                return;
            }
            Team team = GetTeamEx(player.userID);
            if (team.Name.Length < 1) return;
            string msg = string.Join(" ", args);
            if (msg.Contains("<") || msg.Contains(">") || msg.Contains("://") || msg.Contains("connect")) return;
            string message = $"<size=13><color=#AB274F>[TEAM]</color> {player.displayName}: {msg}</size>";
            BasePlayer owner = BasePlayer.FindByID(team.Owner);
            if (owner != null) owner.SendConsoleCommand("chat.add", player.userID, message);
            foreach (ulong member in team.Members)
            {
                BasePlayer memberPlayer = BasePlayer.FindByID(member);
                if (memberPlayer != null)
                    memberPlayer.SendConsoleCommand("chat.add", player.userID, message);
            }
        }

        [ChatCommand("team")]
        void TeamCommand(BasePlayer player, string command, string[] args)
        {
            if (player == null) return;
            if (args.Length < 1)
            {
                if (!InTeam(player.userID))
                {
                    SendReply(player, "<color=#0080FF>RAINBOW RUST</color>\n<color=#FFFF00>Доступные команды:</color>\n/team create - <color=#00FF00>Создать команду</color>\n/team join - <color=#FF0000>Вступить в команду</color>");
                    return;
                }
                Team team = GetTeamEx(player.userID);
                string online = $"\nСейчас онлайн: ";
                foreach (ulong member in team.Members)
                {
                    BasePlayer mem = BasePlayer.Find(member.ToString());
                    if (mem != null) online += mem.displayName + ", ";
                }
                BasePlayer mem2 = BasePlayer.Find(team.Owner.ToString());
                if (mem2 != null) online += mem2.displayName;
                if (!IsOwner(player.userID))
                {
                    SendReply(player, $"{online}\nДоступные команды:\n<color=#AB274F>/team leave</color> - Покинуть команду\n<color=#AB274F>/t</color> - Чат команды");
                    return;
                }
                SendReply(player, $"{online}\nДоступные команды:\n<color=#AB274F>/team invite</color> - Пригласить игрока\n<color=#AB274F>/team remove</color> - Удалить команду\n<color=#AB274F>/t</color> - Чат команды");
                return;
            }
            if (args[0] == "create")
            {
                if (args.Length < 2)
                {
                    SendReply(player, "<color=#FFFF00>Использование команды:</color>\n/team create <color=#00FF80>\"Название команды\"</color>");
                    return;
                }
                if (InTeam(player.userID))
                {
                    SendReply(player, "У вас уже есть команда!");
                    return;
                }
                if (args[1].Length < 3 || args[1].Length > 9)
                {
                    SendReply(player, "Название команды должно быть более 2 и не более 8 символов!");
                    return;
                }
                foreach (char i in args[1].ToLower().ToCharArray())
                {
                    if (!a.Contains(i))
                    {
                        SendReply(player, "Разрешено использовать только лат.символы!");
                        return;
                    }
                }
                if (TeamExists(args[1]))
                {
                    SendReply(player, "Команда с таким названием уже есть!");
                    return;
                }
                SendReply(player, "\nВы успешно создали команду!");
                data.teams.Add(new Team()
                {
                    Name = args[1],
                    Owner = player.userID,
                    Invited = new List<ulong>() { },
                    Members = new List<ulong>() { }
                });
                Interface.Oxide.DataFileSystem.WriteObject("PlayerData", data);
            }
            if (args[0] == "invite")
            {
                if (args.Length < 2)
                {
                    SendReply(player, "Использование команды:\n<color=#AB274F>/team invite</color> \"Никнейм / SteamID\"");
                    return;
                }
                if (!InTeam(player.userID))
                {
                    SendReply(player, "У вас нет команды!");
                    return;
                }
                if (!IsOwner(player.userID))
                {
                    SendReply(player, "Вы не создатель команды!");
                    return;
                }
                BasePlayer invitable = BasePlayer.Find(args[1]);
                if (invitable == null)
                {
                    SendReply(player, "Игрок не найден!");
                    return;
                }
                if (InTeam(invitable.userID))
                {
                    SendReply(player, "Данный игрок уже находится в команде!");
                    return;
                }
                Team team = GetTeamEx(player.userID);
                team.Invited.Add(invitable.userID);
                data.teams.Remove(team);
                data.teams.Add(team);
                Interface.Oxide.DataFileSystem.WriteObject("PlayerData", data);
                SendReply(player, $"\nВы успешно пригласили игрока {invitable.displayName}!");
                SendReply(invitable, $"\nВас пригласили в команду {team.Name}!\nДля входа используйте: <color=#AB274F>/team join</color> {team.Name}");
            }
            if (args[0] == "join")
            {
                if (args.Length < 2)
                {
                    SendReply(player, "Использование команды:\n<color=#AB274F>/team join</color> \"Название команды\"");
                    return;
                }
                if (InTeam(player.userID))
                {
                    SendReply(player, "Вы уже в команде!");
                    return;
                }
                Team team = GetTeamEx(args[1]);
                if (team.Name.Length < 1)
                {
                    SendReply(player, "\nТакой команды не существует!");
                    return;
                }
                if (!team.Invited.Contains(player.userID))
                {
                    SendReply(player, "\nВы не были приглашены в данную команду!");
                    return;
                }
                SendReply(player, $"\nВы вступили в команду {team.Name}!");
                team.Invited.Remove(player.userID);
                team.Members.Add(player.userID);
                data.teams.Remove(team);
                data.teams.Add(team);
                Interface.Oxide.DataFileSystem.WriteObject("PlayerData", data);
                SendPlayerUpdate(player);
                BasePlayer owner = BasePlayer.FindByID(team.Owner);
                if (owner != null) SendPlayerUpdate(owner);
                foreach (ulong member in team.Members)
                {
                    BasePlayer m = BasePlayer.FindByID(member);
                    if (m != null) SendPlayerUpdate(m);
                }
            }
            if (args[0] == "leave")
            {
                if (!InTeam(player.userID))
                {
                    SendReply(player, "\nВы не находитесь в команде!");
                    return;
                }
                if (IsOwner(player.userID))
                {
                    SendReply(player, "\nВы являетесь создателем команды!");
                    return;
                }
                Team team = GetTeamEx(player.userID);
                if (team.Name.Length < 1)
                {
                    SendReply(player, "\nОшибка!");
                    return;
                }
                SendReply(player, $"\nВы покинули команду {team.Name}!");
                team.Members.Remove(player.userID);
                data.teams.Remove(team);
                data.teams.Add(team);
                Interface.Oxide.DataFileSystem.WriteObject("PlayerData", data);
                BasePlayer owner = BasePlayer.FindByID(team.Owner);
                if (owner != null) SendPlayerUpdate(owner);
                foreach (ulong member in team.Members)
                {
                    BasePlayer m = BasePlayer.FindByID(member);
                    if (m != null) SendPlayerUpdate(m);
                }
            }
            if (args[0] == "remove")
            {
                if (!InTeam(player.userID))
                {
                    SendReply(player, "\nВы не находитесь в команде!");
                    return;
                }
                if (!IsOwner(player.userID))
                {
                    SendReply(player, "\nВы не являетесь создателем команды!");
                    return;
                }
                SendReply(player, "\nВы успешно удалили команду!");
                Team team = GetTeamEx(player.userID);
                data.teams.Remove(team);
                Interface.Oxide.DataFileSystem.WriteObject("PlayerData", data);
                BasePlayer owner = BasePlayer.FindByID(team.Owner);
                if (owner != null) SendPlayerUpdate(owner);
                foreach (ulong member in team.Members)
                {
                    BasePlayer m = BasePlayer.FindByID(member);
                    if (m != null) SendPlayerUpdate(m);
                }
            }
        }
    }
}

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

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

Сверху