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

FREE BalanceStatus : 1.0.4 1.0.4

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using Facepunch;
using Newtonsoft.Json;
using Oxide.Core.Plugins;
namespace Oxide.Plugins {
    [Info("Balance Status", "YaMang -w-", "1.0.4")]
    [Description("YaMang-w-")]
    internal class BalanceStatus : RustPlugin {
        private readonly string _HidePerm = $"BalanceStatus.hide";
#pragma warning disable CS0649 // 필드에는 할당되지 않으므로 항상 기본값을 사용합니다.[PluginReference] private Plugin SimpleStatus, ImageLibrary, Economics, ServerRewards;
#pragma warning restore CS0649 // 필드에는 할당되지 않으므로 항상 기본값을 사용합니다.private List<string> statusIds = new List<string>();
#region Hook
        void OnServerInitialized() {
            if (ServerRewards == null) {
                _config.balanceSettings.balances["ServerRewards"].Enable = false;
                PrintWarning("ServerRewards can't be enabled !");
            }
            if (Economics == null) {
                _config.balanceSettings.balances["Economics"].Enable = false;
                PrintWarning("Economics can't be enabled !");
            }
            permission.RegisterPermission(_HidePerm, this);
            SaveConfig();
            foreach (var balance in _config.balanceSettings.balances) {
                if(!balance.Value.Enable) continue;
                string image = "";
                if(!string.IsNullOrEmpty(balance.Value.Image)) {
                    if (!balance.Value.Image.StartsWith("item")) {
                        ImageLibrary.Call<bool>("AddImage", balance.Value.Image, $"BS_{balance.Value.Title}", 0UL);
                        image = $"BS_{balance.Value.Title}";
                    }
                    else image = balance.Value.Image;
                }
                SimpleStatus.CallHook("CreateStatus", this, balance.Key, new Dictionary<string, object> {
                    ["color"]
                    = HexToColor(balance.Value.BackgroundColor), ["title"] = balance.Value.Title, ["titleColor"] = HexToColor(balance.Value.TitleColor), ["text"] = "0", ["textColor"] = HexToColor(balance.Value.TextColor), ["icon"] = image, ["iconColor"] = "1 1 1 1", ["rank"] = balance.Value.Rank
                }
                );
                statusIds.Add(balance.Key);
            }
            foreach (var player in BasePlayer.activePlayerList) {
                if (permission.UserHasPermission(player.UserIDString, _HidePerm)) continue;
                foreach (var status in statusIds) {
                    SetStatus(player.UserIDString, status);
                }
            }
            timer.Every(_config.balanceSettings.RefreshTime, UpdateBalance);
        }
        private void OnPlayerConnected(BasePlayer player) {
            if (permission.UserHasPermission(player.UserIDString, _HidePerm)) return;
            foreach (var status in statusIds) {
                SetStatus(player.UserIDString, status);
            }
        }
        private void OnPlayerDiscconnected(BasePlayer player) {
            foreach (var status in statusIds) {
                SetStatus(player.UserIDString, status, 0);
            }
        }
        private void Unload() {
            foreach (var player in BasePlayer.activePlayerList) {
                foreach (var status in statusIds) {
                    SetStatus(player.UserIDString, status, 0);
                }
            }
        }
#endregion
#region Commands
        [ChatCommand("bs")]
        private void BSCMD(BasePlayer player) {
            if(!permission.UserHasPermission(player.UserIDString, _HidePerm)) {
                permission.GrantUserPermission(player.UserIDString, _HidePerm, this);
                PrintToChat(player, Lang("BS_Hide"));
            }
            else {
                permission.RevokeUserPermission(player.UserIDString, _HidePerm);
                PrintToChat(player, Lang("BS_Show"));
            }
        }
#endregion
#region Helper
        private void UpdateBalance() {
            if (statusIds.Count == 0) return;
            foreach (var player in BasePlayer.activePlayerList) {
                if (permission.UserHasPermission(player.UserIDString, _HidePerm)) continue;
                foreach (var status in statusIds) {
                    object amount = GetBalances(player, status);
                    switch (status) {
                        case "ServerRewards" : SetStatusProperty(player.UserIDString, status, new Dictionary<string, object> {
                            ["text"]
                            = $"{Lang("BS_ServerRewards", amount)}"
                        }
                        );
                        break;
                        case "Economics" : SetStatusProperty(player.UserIDString, status, new Dictionary<string, object> {
                            ["text"]
                            = $"{Lang("BS_Economics", amount)}"
                        }
                        );
                        break;
                        case "Scrap" : SetStatusProperty(player.UserIDString, status, new Dictionary<string, object> {
                            ["text"]
                            = $"{Lang("BS_Scrap", amount)}"
                        }
                        );
                        break;
                        case "CustomItem" : SetStatusProperty(player.UserIDString, status, new Dictionary<string, object> {
                            ["text"]
                            = $"{Lang("BS_CustomItem", amount)}"
                        }
                        );
                        break;
                    }
                }
            }
        }
        private object GetBalances(BasePlayer player, string status) {
            object amount = null;
            if (status == "Economics") amount = Economics.Call("Balance", player.UserIDString);
            else if (status == "ServerRewards") amount = ServerRewards.Call("CheckPoints", player.UserIDString);
            else if (status == "Scrap") {
                var items = Pool.Get<List<Item>>();
                player.inventory.GetAllItems(items);
                int scraps = 0;
                if (items.Count() == 0) return 0;
                var s = items.Where(x => x.info.shortname == "scrap");
                foreach (var item in s) {
                    scraps += item.amount;
                }
                Pool.Free(ref items);
                amount = scraps;
            }
            //else if (status == "CustomItem")
            //{
            //    var items = Pool.Get<List<Item>>();
            //    player.inventory.GetAllItems(items);
            //    int customitem = 0;
            //    if (items.Count() == 0)
            //        return 0;
            //    var config = _config.balanceSettings.balances["CustomItem"];
            //    string[] splitString = config.Image.Substring(9).Split('-');
            //    string shortname = splitString[0].ToString();
            //    string skinid = splitString[1].ToString();
            //    var s = items.Where(x => x.info.shortname == shortname && x.skin == Convert.ToUInt64(skinid));
            //    foreach (var item in s)
            //    {
            //        customitem += item.amount;
            //    }
            //    Pool.Free(ref items);
            //    amount = customitem;
            //}
            return amount;
        }
        //MEVENT
        private static string HexToColor(string HEX, float Alpha = 100) {
            if (string.IsNullOrEmpty(HEX)) HEX = "#FFFFFF";
            var str = HEX.Trim('#');
            if (str.Length != 6) throw new Exception(HEX);
            var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
            var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
            var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
            return $"{(double)r / 255} {(double)g / 255} {(double)b / 255} {Alpha / 100f}";
        }
#endregion
#region Config
        private ConfigData _config;
        private class ConfigData {
            [JsonProperty(PropertyName = "Balance Settings")]
            public BalanceSettings balanceSettings {
                get;
                set;
            }
            public Core.VersionNumber Version {
                get;
                set;
            }
        }
        protected override void LoadConfig() {
            base.LoadConfig();
            _config = Config.ReadObject<ConfigData>();
            if (_config.Version < Version) UpdateConfigValues();
            Config.WriteObject(_config, true);
        }
        protected override void LoadDefaultConfig() => _config = GetBaseConfig();
        private ConfigData GetBaseConfig() {
            return new ConfigData {
                balanceSettings = new BalanceSettings() {
                    RefreshTime = 10f, balances = new Dictionary<string, Balances>() {
                        {
                            "Economics", new Balances() {
                                Enable = true, BackgroundColor = "4CAF50", Title = "Economics", TitleColor = "FFFF00", Image = "https://i.imgur.com/jyTe69j.png", ImageColor = "FFFF00", Rank = 0
                            }
                        }
                        , {
                            "ServerRewards", new Balances() {
                                Enable = true, BackgroundColor = "FFD700", Title = "ServerRewards", TitleColor = "FFFF00", Image = "https://i.imgur.com/jyTe69j.png", ImageColor = "FFFF00", Rank = 0
                            }
                        }
                        , {
                            "Scrap", new Balances() {
                                Enable = true, BackgroundColor = "FFD700", Title = "Scraps", TitleColor = "FFFF00", Image = "itemid:-932201673", ImageColor = "FFFFFF", Rank = 0
                            }
                        }
                        //{
                        //    "CustomItem", new Balances()
                        //    {
                        //        Enable = false,
                        //        BackgroundColor = "FFD700",
                        //        Title = "Test",
                        //        TitleColor = "FFFF00",
                        //        Image = "itemskin:rifle.ak-3339500254",
                        //        ImageColor = "FFFFFF",
                        //        Rank = 0
                        //    }
                        //}
                    }
                }
                , Version = Version
            }
            ;
        }
        public class BalanceSettings {
            public float RefreshTime {
                get;
                set;
            }
            public Dictionary<string, Balances> balances {
                get;
                set;
            }
        }
        public class Balances {
            public bool Enable {
                get;
                set;
            }
            public string BackgroundColor {
                get;
                set;
            }
            public string Title {
                get;
                set;
            }
            public string TitleColor {
                get;
                set;
            }
            public string TextColor {
                get;
                set;
            }
            public string Image {
                get;
                set;
            }
            public string ImageColor {
                get;
                set;
            }
            public int Rank {
                get;
                set;
            }
        }
        protected override void SaveConfig() => Config.WriteObject(_config, true);
        private void UpdateConfigValues() {
            PrintWarning("Config update detected! Updating config values...");
            _config.Version = Version;
            PrintWarning("Config update completed!");
        }
#endregion
#region Lang
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                {
                    "BS_Economics", "{0} Eco"
                }
                , {
                    "BS_Scrap", "{0} Scraps"
                }
                , {
                    "BS_CustomItem", "{0}"
                }
                , {
                    "BS_ServerRewards", "{0} RP"
                }
                , {
                    "BS_Hide", "Hide Balance Status"
                }
                , {
                    "BS_Show", "Show Balance Status"
                }
            }
            , this);
        }
        private string Lang(string key, params object[] args) {
            return string.Format(lang.GetMessage(key, this), args);
        }
#endregion
#region Simple Status
        private void CreateStatus(string statusid, string backgroundColor = "1 1 1 1", string title = "Text", string titleColor = "1 1 1 1", string text = null, string textColor = "1 1 1 1", string imageName = null, string imageColor = "1 1 1 1") => SimpleStatus?.CallHook("CreateStatus", this, statusid, backgroundColor, title, titleColor, text, textColor, imageName, imageColor);
        private void SetStatus(string userId, string statusId, int duration = int.MaxValue, bool pauseOffline = false) => SimpleStatus?.CallHook("SetStatus", userId, statusId, duration, pauseOffline);
        private void SetStatusTitle(string userId, string statusId, string title = null) => SimpleStatus?.CallHook("SetStatusTitle", userId, statusId, title);
        private void SetStatusProperty(string userId, string statusId, Dictionary<string, object> properties) => SimpleStatus?.CallHook("SetStatusProperty", userId, statusId, properties);
        private int GetDuration(string userId, string statusId) => (int)SimpleStatus?.CallHook("GetDuration", userId, statusId);
#endregion
    }
}

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