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

FREE AutoSkinTeam : 1.0.0 1.0.0

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

namespace Oxide.Plugins
{
    [Info("AutoSkinTeam", "Feyzi/Toolcub", "1.0.0")]
    public class AutoSkinTeam : RustPlugin
    {
        [PluginReference]
        private Plugin Clans;

        private HashSet<ulong> disabledChanges = new HashSet<ulong>();

        private const string PermUse = "autoskinteam.use";

        private void Init()
        {
            LoadData();
            permission.RegisterPermission(PermUse, this);
        }

        private void OnServerInitialized()
        {
            if (Clans == null)
            {
                Puts($"NO CLANS PLUGIN FOUND! UNLOADING PLUGIN!");
                Server.Command($"o.unload {Name}");
                return;
            }

            cmd.AddChatCommand("skinteam", this, nameof(ReskinCommand));
            cmd.AddChatCommand("autoskin", this, nameof(ReskinToggleCommand));
        }

        private void Unload()
        {
            SaveData();
        }

        private void ReskinCommand(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, PermUse))
            {
                SendReply(player, Lang("NoPermission", player.UserIDString));
                return;
            }

            string clanTag = Clans.Call<string>("GetClanOf", player);
            if (string.IsNullOrEmpty(clanTag))
            {
                SendReply(player, Lang("NoClan", player.UserIDString));
                return;
            }

            JObject newClan = Clans.Call<JObject>("GetClan", clanTag);
            string clanOwner = (string)newClan["owner"];

            if (clanOwner != player.UserIDString)
            {
                bool validMod = false;
                foreach (string mod in newClan["moderators"])
                {
                    if (mod == player.UserIDString)
                    {
                        validMod = true;
                        break;
                    }
                }

                if (!validMod)
                {
                    SendReply(player, Lang("NotClanOwner", player.UserIDString));
                    return;
                }
            }

            SetSkins(player, (JArray)newClan["members"]);
        }

        private void ReskinToggleCommand(BasePlayer player, string command, string[] args)
        {
            if (!permission.UserHasPermission(player.UserIDString, PermUse))
            {
                SendReply(player, Lang("NoPermission", player.UserIDString));
                return;
            }

            if (disabledChanges.Contains(player.userID))
            {
                disabledChanges.Remove(player.userID);
                SendReply(player, Lang("SkinningEnabled", player.UserIDString));
            }
            else
            {
                disabledChanges.Add(player.userID);
                SendReply(player, Lang("SkinningDisabled", player.UserIDString));
            }
        }

        private void SetSkins(BasePlayer owner, JArray members)
        {
            Dictionary<string, ulong> playerSkins = new Dictionary<string, ulong>();
            foreach (var clothing in owner.inventory.containerWear.itemList)
                playerSkins.Add(clothing.info.shortname, clothing.skin);
            
            if (playerSkins.Count == 0)
            {
                SendReply(owner, Lang("NoItems", owner.UserIDString));
                return;
            }
            
            foreach (string member in members)
            {
                if (owner.UserIDString == member) 
                    continue;
                
                BasePlayer target = BasePlayer.FindAwakeOrSleeping(member);
                
                if (target == null) 
                    continue;
                
                if (disabledChanges.Contains(target.userID)) 
                    continue;
                
                bool changedAny = false;
                foreach (var item in target.inventory.containerWear.itemList)
                {
                    if (playerSkins.ContainsKey(item.info.shortname))
                    {
                        item.skin = playerSkins[item.info.shortname];
                        item.MarkDirty();
                        changedAny = true;
                    }
                }
                
                if (changedAny)
                    SendReply(target, Lang("SkinsUserUpdated", target.UserIDString));
            }
            SendReply(owner, Lang("SkinsUpdated", owner.UserIDString));
        }

        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["NoClan"] = "You are not in a clan!",
                ["NotClanOwner"] = "You are not a clan owner or moderator!",
                ["NoItems"] = "You don't have any wearable items on you!",
                ["SkinsUpdated"] = "Your teammates' skins have been updated!",
                ["SkinsUserUpdated"] = "Your skins have been updated by the clan owner.\nTo disable this feature, run /autoskin.",
                ["SkinningEnabled"] = "Clan owner skin synchronization has been enabled.",
                ["SkinningDisabled"] = "Clan owner skin synchronization has been disabled.",
                ["NoPermission"] = "You don't have permission to use this command!",
            }, this);
        }

        private string Lang(string key, string id = null, params object[] args) => string.Format(lang.GetMessage(key, this, id), args);

        private void LoadData()
        {
            disabledChanges = Interface.Oxide.DataFileSystem.ReadObject<HashSet<ulong>>(Name);
            timer.Every(Core.Random.Range(500, 700), SaveData);
        }

        private void SaveData() => Interface.Oxide.DataFileSystem.WriteObject(Name, disabledChanges);
    }
}

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