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

FREE BlueprintShare : 1.1.3 1.1.3

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

namespace Oxide.Plugins
{
    [Info("Blueprint Share", "c_creep", "1.1.3")]
    [Description("Allows players to share researched blueprints with their friends, clan or team")]

    class BlueprintShare : CovalencePlugin
    {
        #region Fields

        [PluginReference] private Plugin Clans, ClansReborn, Friends;

        private Dictionary<string, bool> sharingEnabledList = new Dictionary<string, bool>();

        private DynamicConfigFile playerData;

        private bool sharingEnabled = true, clansEnabled = true, friendsEnabled = true, teamsEnabled = true;

        #endregion

        #region Oxide Hooks

        private void Init()
        {
            permission.RegisterPermission("blueprintshare.toggle", this);

            LoadDefaultConfig();

            playerData = Interface.Oxide.DataFileSystem.GetFile("BlueprintShare");

            sharingEnabledList = playerData.ReadObject<Dictionary<string, bool>>();
        }

        private void OnPlayerInit(BasePlayer player)
        {
            if (sharingEnabledList.ContainsKey(player.UserIDString))
            {
                sharingEnabled = sharingEnabledList[player.UserIDString];
            }
            else
            {
                sharingEnabledList.Add(player.UserIDString, sharingEnabled);

                playerData.WriteObject(sharingEnabledList);
            }
        }

        private void OnItemAction(Item item, string action, BasePlayer player)
        {
            if (player != null && action == "study" && (InClan(player.userID) || HasFriends(player.userID) || InTeam(player.userID)) && item.IsBlueprint() && sharingEnabled)
            {
                var itemShortName = item.blueprintTargetDef.shortname;

                if (string.IsNullOrEmpty(itemShortName)) return;

                item.Remove();

                UnlockBlueprint(player, itemShortName);
            }
        }

        #endregion

        #region Config

        protected override void LoadDefaultConfig()
        {
            Config["ClansEnabled"] = clansEnabled = GetConfigValue("ClansEnabled", true);
            Config["FriendsEnabled"] = friendsEnabled = GetConfigValue("FriendsEnabled", true);
            Config["TeamsEnabled"] = teamsEnabled = GetConfigValue("TeamsEnabled", true);

            SaveConfig();
        }

        private T GetConfigValue<T>(string name, T defaultValue)
        {
            return Config[name] == null ? defaultValue : (T)Convert.ChangeType(Config[name], typeof(T));
        }

        #endregion

        #region Localization

        protected override void LoadDefaultMessages()
        {
            lang.RegisterMessages(new Dictionary<string, string>
            {
                ["Prefix"] = "[#D85540][Blueprint Share] [/#]",
                ["ArgumentsErrorMessage"] = "Error, incorrect arguments.Try /bs help.",
                ["HelpMessage"] = "[#D85540]Blueprint Share Help:[/#]\n\n[#D85540]/bs toggle[/#] - Toggles the sharing of blueprints.",
                ["ToggleOnMessage"] = "You have enabled sharing blueprints.",
                ["ToggleOffMessage"] = "You have disabled sharing blueprints.",
                ["NoPermissionMessage"] = "You don't have permission to use this command!"
            }, this);
        }

        private string GetLangValue(string key, string id = null)
        {
            return covalence.FormatText(lang.GetMessage(key, this, id));
        }

        #endregion

        #region General Methods

        private void UnlockBlueprint(BasePlayer player, string itemShortName)
        {
            if (player == null) return;
            if (string.IsNullOrEmpty(itemShortName)) return;

            var playerUID = player.userID;

            var playersToShareWith = new List<BasePlayer>();

            if (clansEnabled && (Clans != null || ClansReborn != null) && InClan(playerUID))
            {
                playersToShareWith.AddRange(GetClanMembers(playerUID));
            }

            if (friendsEnabled && Friends != null && HasFriends(playerUID))
            {
                playersToShareWith.AddRange(GetFriends(playerUID));
            }
            
            if (teamsEnabled && InTeam(playerUID))
            {
                playersToShareWith.AddRange(GetTeamMembers(playerUID));
            }

            foreach (BasePlayer sharePlayer in playersToShareWith)
            {
                if (sharePlayer != null)
                {
                    var blueprintComponent = sharePlayer.blueprints;

                    if (blueprintComponent == null) return;

                    var itemDefinition = GetItemDefinition(itemShortName);

                    if (itemDefinition == null) return;

                    blueprintComponent.Unlock(itemDefinition);

                    var soundEffect = new Effect("assets/prefabs/deployable/research table/effects/research-success.prefab", sharePlayer.transform.position, Vector3.zero);

                    if (soundEffect == null) return;

                    EffectNetwork.Send(soundEffect, sharePlayer.net.connection);
                }
            }
        }

        private ItemDefinition GetItemDefinition(string itemShortName)
        {
            if (string.IsNullOrEmpty(itemShortName)) return null;

            var itemDefinition = ItemManager.FindItemDefinition(itemShortName.ToLower());

            return itemDefinition;
        }

        #endregion

        #region Clan Methods

        private bool InClan(ulong playerUID)
        {
            if (ClansReborn == null && Clans == null) return false;

            var clanName = Clans?.Call<string>("GetClanOf", playerUID);

            return clanName != null;
        }

        private List<BasePlayer> GetClanMembers(ulong playerUID)
        {
            var membersList = new List<BasePlayer>();

            var clanName = Clans?.Call<string>("GetClanOf", playerUID);

            if (!string.IsNullOrEmpty(clanName))
            {
                var clan = Clans?.Call<JObject>("GetClan", clanName);

                if (clan != null && clan is JObject)
                {
                    var members = (clan as JObject).GetValue("members");

                    if (members != null && members is JArray)
                    {
                        foreach (var member in (JArray)members)
                        {
                            ulong clanMemberUID;

                            if (!ulong.TryParse(member.ToString(), out clanMemberUID)) continue;

                            var clanMember = RustCore.FindPlayerById(clanMemberUID);

                            membersList.Add(clanMember);
                        }
                    }
                }
            }
            return membersList;
        }

        #endregion

        #region Friends Methods

        private bool HasFriends(ulong playerUID)
        {
            if (Friends == null) return false;

            var friendsList = Friends.Call<ulong[]>("GetFriends", playerUID);

            return friendsList != null && friendsList.Length != 0;
        }

        private List<BasePlayer> GetFriends(ulong playerUID)
        {
            var friendsList = new List<BasePlayer>();

            var friends = Friends.Call<ulong[]>("GetFriends", playerUID);

            foreach (var friendUID in friends)
            {
                var friend = RustCore.FindPlayerById(friendUID);

                friendsList.Add(friend);
            }

            return friendsList;
        }

        #endregion

        #region Team Methods

        private bool InTeam(ulong playerUID)
        {
            var player = RustCore.FindPlayerById(playerUID);

            var playersCurrentTeam = RelationshipManager.Instance.FindTeam(player.currentTeam);

            return playersCurrentTeam != null;
        }

        private List<BasePlayer> GetTeamMembers(ulong playerUID)
        {
            var membersList = new List<BasePlayer>();

            var player = RustCore.FindPlayerById(playerUID);

            var playersCurrentTeam = RelationshipManager.Instance.FindTeam(player.currentTeam);

            var teamMembers = playersCurrentTeam.members;

            foreach (var teamMemberUID in teamMembers)
            {
                var teamMember = RustCore.FindPlayerById(teamMemberUID);

                membersList.Add(teamMember);
            }

            return membersList;
        }

        #endregion

        #region Chat Commands

        [Command("blueprintshare", "bs")]
        private void ToggleCommand(IPlayer player, string command, string[] args)
        {
            var playerUID = player.Id;

            if (args.Length < 1)
            {
                player.Reply(GetLangValue("Prefix", playerUID) + GetLangValue("ArgumentsErrorMessage", playerUID));

                return;
            }

            switch (args[0].ToLower())
            {
                case "help":
                    {
                        player.Reply(GetLangValue("HelpMessage", playerUID));

                        break;
                    }
                case "toggle":
                    {
                        if (permission.UserHasPermission(playerUID, "blueprintshare.toggle"))
                        {
                            if (sharingEnabled)
                            {
                                sharingEnabled = false;

                                player.Reply(GetLangValue("Prefix", playerUID) + GetLangValue("ToggleOffMessage", playerUID));
                            }
                            else
                            {
                                sharingEnabled = true;

                                player.Reply(GetLangValue("Prefix", playerUID) + GetLangValue("ToggleOnMessage", playerUID));
                            }

                            sharingEnabledList[playerUID] = sharingEnabled;

                            playerData.WriteObject(sharingEnabledList);
                        }
                        else
                        {
                            player.Reply(GetLangValue("Prefix", playerUID) + GetLangValue("NoPermissionMessage", playerUID));
                        }
                        break;
                    }
                default:
                    {
                        break;
                    }
            }
        }

        #endregion

        #region API

        private bool SharingEnabled(string playerUID)
        {
            if (sharingEnabledList.ContainsKey(playerUID))
            {
                return sharingEnabledList[playerUID];
            }
            else
            {
                return false;
            }
        }

        #endregion
    }
}

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