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

FREE BMoney : 1.0.0 1.0.0

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

namespace Oxide.Plugins
{
	[Info("BMoney", "King", "1.0.0")]
	public class BMoney : RustPlugin
	{
        #region [Vars]
        [PluginReference] private Plugin ImageLibrary = null;
        private List<ulong> openUI = new List<ulong>();
        private const string Layer = "BMoney.Layer";
        #endregion
    
        #region [ImageLibrary]
        private bool HasImage(string imageName, ulong imageId = 0) => (bool)ImageLibrary.Call("HasImage", imageName, imageId);
        private bool AddImage(string url, string shortname, ulong skin = 0) => (bool)ImageLibrary?.Call("AddImage", url, shortname, skin);
        private string GetImage(string shortname, ulong skin = 0) => (string)ImageLibrary?.Call("GetImage", shortname, skin);
        #endregion

        #region [Data]
        Dictionary<ulong, playerData> _playerList = new Dictionary<ulong, playerData>();

		public class playerData
		{
			public int Second;

            public int Taken;
        }

		private playerData GetPlayerData(ulong member)
		{
			if (!_playerList.ContainsKey(member))
				_playerList.Add(member, new playerData());

			return _playerList[member];
		}

		private void SavePlayer()
		{
			Interface.Oxide.DataFileSystem.WriteObject($"{Name}/PlayerList", _playerList);
		}

		private void LoadPlayer()
		{
			try
			{
				_playerList = Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, playerData>>($"{Name}/PlayerList");
			}
			catch (Exception e)
			{
				PrintError(e.ToString());
			}

			if (_playerList == null) _playerList = new Dictionary<ulong, playerData>();
		}
        #endregion

        #region [Oxide]
		private void Init()
		{
			LoadPlayer();
		}

        private void OnServerInitialized()
        {
            AddImage("https://pic.moscow.ovh/images/2024/12/11/fb5d68a643e07f412e5bee88a2c0abff.png", $"{Name}.ImageFon");
            
            foreach (var player in BasePlayer.activePlayerList)
            {
                OnPlayerConnected(player);
            }

            timer.Every(1, TimeHandle);
        }

		private void Unload()
		{
			foreach (var player in BasePlayer.activePlayerList)
            {
                CuiHelper.DestroyUi(player, Layer);
            }

			SavePlayer();
		}

		private void OnNewSave(string filename)
		{
            foreach (var playerData in _playerList)
            {
                playerData.Value.Second = 0;
                playerData.Value.Taken = 0;
            }

            SavePlayer();
		}
        #endregion

        #region [Rust]
        private void OnPlayerConnected(BasePlayer player)
        {
            var data = GetPlayerData(player.userID);
            if (data == null) return;

            if (data.Taken < config._Settings.howTakeBonus)
            {
                if (!openUI.Contains(player.userID))
                    openUI.Add(player.userID);
                MainUi(player, "all");
            }
        }

		private void OnPlayerDisconnected(BasePlayer player)
		{
            if (openUI.Contains(player.userID))
                openUI.Remove(player.userID);
		}
        #endregion

        #region [UI]
        private void MainUi(BasePlayer player, String Type)
        {
            switch(Type)
            {
                case "all":
                {
                    var container = new CuiElementContainer();

                    var data = GetPlayerData(player.userID);
                    if (data == null) return;

                    container.Add(new CuiPanel
                    {
                        RectTransform = { AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "-141 -211", OffsetMax = "0 -168" },
                        Image = { Color = "0 0 0 0.25", Sprite = "assets/content/ui/ui.background.tiletex.psd" }
                    }, "Overlay", Layer);

                    container.Add(new CuiElement
                    {
                        Parent = Layer,
                        Components =
                        {
                            new CuiRawImageComponent { Png = GetImage($"{Name}.ImageFon") },
                            new CuiRectTransformComponent { AnchorMin = "0 0", AnchorMax = "1 1" }
                        }
                    });

                    container.Add(new CuiLabel
                    {
                        Text = { Text = $"{config._Settings.playerBonus}р на баланс", Color = "1 1 1 0.85", FontSize = 16, Font = "robotocondensed-bold.ttf", Align = TextAnchor.UpperCenter },
                        RectTransform = { AnchorMin = "0 0", AnchorMax = "1 0.98" },
                    }, Layer);

                    container.Add(new CuiLabel
                    {
                        Text = { Text = $"{GetFormatTime(TimeSpan.FromSeconds(config._Settings.howPlay - data.Second))}", Color = "1 1 1 0.85", FontSize = 8, Font = "robotocondensed-regular.ttf", Align = TextAnchor.MiddleCenter },
                        RectTransform = { AnchorMin = "0 0", AnchorMax = "1 0.86" },
                    }, Layer, Layer + ".TextUpdate");

                    container.Add(new CuiLabel
                    {
                        Text = { Text = $"{config._Settings.nameShop}", Color = "1 1 1 0.85", FontSize = 8, Font = "robotocondensed-regular.ttf", Align = TextAnchor.MiddleCenter },
                        RectTransform = { AnchorMin = "0 0", AnchorMax = "1 0.43" },
                    }, Layer);

                    container.Add(new CuiButton
                    {
                        RectTransform = { AnchorMin = "-0.1 0", AnchorMax = "0 1" },
                        Button = { Color = "1 1 1 0", Command = "BMoney_UI" },
                        Text = { Text = "›", FontSize = 22, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter, Color = "1 1 1 0.65" }
                    }, Layer);

                    CuiHelper.DestroyUi(player, Layer);
                    CuiHelper.AddUi(player, container);
                    break;
                }
                case "openMenu":
                {   
                    var container = new CuiElementContainer();

                    container.Add(new CuiButton
                    {
                        RectTransform = { AnchorMin = "1 1", AnchorMax = "1 1", OffsetMin = "-25 -211", OffsetMax = "0 -168" },
                        Button = { Color = "1 1 1 0", Command = "BMoney_UI" },
                        Text = { Text = "‹", FontSize = 22, Font = "robotocondensed-bold.ttf", Align = TextAnchor.MiddleCenter, Color = "1 1 1 0.65" }
                    }, "Overlay", Layer);

                    CuiHelper.DestroyUi(player, Layer);
                    CuiHelper.AddUi(player, container);
                    break;
                }
            }
        }
        #endregion

        #region [ConsoleCommand]
        [ConsoleCommand("BMoney_UI")]
        private void cmdBMoney(ConsoleSystem.Arg arg)
        {
            var player = arg.Player();
            if (player == null) return;

            if (openUI.Contains(player.userID))
            {
				openUI.Remove(player.userID);
                MainUi(player, "openMenu");
            }
            else
            {
				openUI.Add(player.userID);
                MainUi(player, "all");
            }
        }
        #endregion

        #region [Functional]
		private void TimeHandle()
		{
			foreach (var player in BasePlayer.activePlayerList) 
            {
                var data = GetPlayerData(player.userID);
                if (data == null || data.Taken >= config._Settings.howTakeBonus) continue;

                if (openUI.Contains(player.userID))
                {
                    var container = new CuiElementContainer();

                    container.Add(new CuiLabel
                    {
                        Text = { Text = $"{GetFormatTime(TimeSpan.FromSeconds(config._Settings.howPlay - data.Second))}", Color = "1 1 1 0.85", FontSize = 8, Font = "robotocondensed-regular.ttf", Align = TextAnchor.MiddleCenter },
                        RectTransform = { AnchorMin = "0 0", AnchorMax = "1 0.86" },
                    }, Layer, Layer + ".TextUpdate");

                    CuiHelper.DestroyUi(player, Layer + ".TextUpdate");
                    CuiHelper.AddUi(player, container);
                }

                data.Second++;
                if (data.Second >= config._Settings.howPlay)
                {
                    RewardPlayer(player);
                    data.Second = 0;
                    data.Taken++;
                    if (data.Taken >= config._Settings.howTakeBonus)
                    {
                        CuiHelper.DestroyUi(player, Layer);
                        if (openUI.Contains(player.userID))
                            openUI.Remove(player.userID);
                    }
                }
            }
		}

        private void RewardPlayer(BasePlayer player)
        {
            string request = $"http://gamestores.ru/api?shop_id={config._Settings.shopID}&secret={config._Settings.secretKeyShop}&action=moneys&type=plus&steam_id={player.userID}&amount={config._Settings.playerBonus}&mess=ActiveBonus";
            webrequest.Enqueue(request, null, (code, response) =>
            {
                if (response.Contains("fail"))
                {
                    player.ChatMessage($"Вы не получили {config._Settings.playerBonus} руб на баланс");
                }
                else
                {
                    player.ChatMessage($"Вы получили {config._Settings.playerBonus} руб на баланс");
                }
            }, this, Core.Libraries.RequestMethod.GET);
        }

        private string GetFormatTime(TimeSpan timespan)
        {
            return string.Format(timespan.TotalHours >= 1 ? "{2:00}:{0:00}:{1:00}" : "{0:00}:{1:00}", timespan.Minutes, timespan.Seconds, System.Math.Floor(timespan.TotalHours));
        }
        #endregion

        #region [Config]
        private PluginConfig config;

        protected override void LoadDefaultConfig()
        {
            config = PluginConfig.DefaultConfig();
        }

        protected override void LoadConfig()
        {
            base.LoadConfig();
            config = Config.ReadObject<PluginConfig>();

            if (config.PluginVersion < Version)
                UpdateConfigValues();

            Config.WriteObject(config, true);
        }

        private void UpdateConfigValues()
        {
            PluginConfig baseConfig = PluginConfig.DefaultConfig();
            if (config.PluginVersion < Version)
            {
                config.PluginVersion = Version;
                if (Version == new VersionNumber(1, 0, 0))
                {
                    //
                }

                PrintWarning("Config checked completed!");
            }
            config.PluginVersion = Version;
        }

        protected override void SaveConfig()
        {
            Config.WriteObject(config);
        }

        private class PluginConfig
        {
            [JsonProperty("Основые настройки плагина")]
            public Settings _Settings;

            [JsonProperty("Config version")]
            public VersionNumber PluginVersion = new VersionNumber();

            public static PluginConfig DefaultConfig()
            {
                return new PluginConfig()
                {
                    _Settings = new Settings()
                    {
                        shopID = string.Empty,
                        secretKeyShop = string.Empty,
                        nameShop = "bolotorust.xyz",
                        playerBonus = 60,
                        howPlay = 3600,
                        howTakeBonus = 2,
                        Command = "money",
                    },
                    PluginVersion = new VersionNumber()
                };
            }
        }

        public class Settings
        {
            [JsonProperty("ID магазина в сервисе")]
            public string shopID;

            [JsonProperty("Секретный ключ магазина в сервисе")]
            public string secretKeyShop;

            [JsonProperty("Ссылка на магазин ( bolotorust.xyz )")]
            public string nameShop;

            [JsonProperty("Бонус в виде баланса для игрока")]
            public int playerBonus;

            [JsonProperty("Сколько нужно отыграть чтобы получить бонус ( Секунды )")]
            public int howPlay;

            [JsonProperty("Сколько раз можно получить бонус")]
            public int howTakeBonus;

            [JsonProperty("Команда для открытия меню плагина FMoney")]
            public string Command;
        }
        #endregion
    }
}

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