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

FREE FMoney : 1.0.0 1.0.0

Нет прав для скачивания
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using Oxide.Core;
using Oxide.Core.Plugins;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;


namespace Oxide.Plugins
{
    [Info("FMoney", "molik", "1.0.0")]
    class FMoney : RustPlugin
    {
        Dictionary<ulong, DBSettings> DB = new Dictionary<ulong, DBSettings>();

        #region Класс
        public class DBSettings
        {
            public int Minute = 0;
            public bool Taked = false;
            public bool Menu = false;
        }
        #endregion

        #region Хуки
        void OnServerInitialized()
        {
            if (Interface.Oxide.DataFileSystem.ExistsDatafile("FMoney/PlayerList"))
                DB = Oxide.Core.Interface.Oxide.DataFileSystem.ReadObject<Dictionary<ulong, DBSettings>>("FMoney/PlayerList");

            timer.Every(360f, SaveDataBase);
            InvokeHandler.Instance.InvokeRepeating(GiveMinute, 1f, 1f);
            foreach (var player13 in BasePlayer.activePlayerList)
            {
                OnPlayerConnected(player13);
            }
        }

        void GiveMinute()
        {
            foreach (var player13 in BasePlayer.activePlayerList)
            {
                DB[player13.userID].Minute++;
                if (DB[player13.userID].Menu)
                {
                    CuiHelper.DestroyUi(player13, "timer");
                    CuiElementContainer container = new CuiElementContainer();
                    container.Add(new CuiButton
                    {
                        RectTransform = { AnchorMin = $"0 0.5", AnchorMax = $"1 0.5", OffsetMin = "0 -20", OffsetMax = "0 80" },
                        Button = { Color = "0 0 0 0", },
                        Text = { Text = CanTake(player13), Align = TextAnchor.MiddleCenter, FontSize = 20 }
                    }, Layer1, "timer");
                    CuiHelper.AddUi(player13, container);
                    
                }
            }
        }
        void Unload()
        {
            SaveDataBase();
            foreach (var player13 in BasePlayer.activePlayerList)
            {
                CuiHelper.DestroyUi(player13, Layer);
            }
            InvokeHandler.Instance.CancelInvoke(GiveMinute);
        }

        void SaveDataBase()
        {
            Oxide.Core.Interface.Oxide.DataFileSystem.WriteObject("FMoney/PlayerList", DB);
        }

        string Layer = "FMoney_Layer";
        string Layer1 = "FMoney_Layer2";
        string CanTake(BasePlayer player)
        {
            string text = "ЗАБРАТЬ";
            if (DB[player.userID].Taked) return "ПОЛУЧЕНО";
            if (DB[player.userID].Minute <= _config.PlayTime && DB[player.userID].Taked == false) return TimeToString(_config.PlayTime - DB[player.userID].Minute);
            return text;
        }
        public string TimeToString(double time)
        {
            TimeSpan elapsedTime = TimeSpan.FromSeconds(time);
            int hours = elapsedTime.Hours;
            int minutes = elapsedTime.Minutes;
            int seconds = elapsedTime.Seconds;
            int days = Mathf.FloorToInt((float)elapsedTime.TotalDays);
            string s = "";
            if (days > 0) s += $"{days} дн.";
            if (hours > 0) s += $"{hours} ч. ";
            if (minutes > 0) s += $"{minutes} мин. ";
            if (seconds >= 0) s += $"{seconds} сек.";
            else s = s.TrimEnd(' ');
            return s;
        }

        [ChatCommand("money")]
        void GiveMoney(BasePlayer player)
        {
            CuiElementContainer container = new CuiElementContainer();
            DB[player.userID].Menu = true;
            container.Add(new CuiPanel
            {
                CursorEnabled = true,
                RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0" },
                Image = { Color = "0.235 0.227 0.180 0.90", Material = "assets/icons/greyout.mat" }
            }, "Overlay", Layer);

            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = $"0 0", AnchorMax = $"1 1", OffsetMin = "0 0", OffsetMax = "0 0" },
                Button = { Color = "0 0 0 0", Command = "f_money_close"},
                Text = { Text = $"", Align = TextAnchor.MiddleCenter, FontSize = 12, Color = "0.8 0.8 0.8 0" }
            }, Layer);

            container.Add(new CuiPanel
            {
                CursorEnabled = true,
                RectTransform = { AnchorMin = "0.5 0.5", AnchorMax = "0.5 0.5", OffsetMin = "-210 -100", OffsetMax = "210 100" },
                Image = { Color = "0.36 0.34 0.32 0.75", Material = "assets/icons/greyout.mat" }
            }, Layer, Layer1);

            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = $"0 1", AnchorMax = $"1 1", OffsetMin = "0 -40", OffsetMax = "0 10" },
                Button = { Color = "0 0 0 0", },
                Text = { Text = "БОНУСНЫЙ БАЛАНС", Align = TextAnchor.MiddleCenter, FontSize = 23 }
            }, Layer1);

            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = $"0 0.5", AnchorMax = $"1 0.5", OffsetMin = "0 -50", OffsetMax = "0 0" },
                Button = { Color = "0 0 0 0", },
                Text = { Text = $"Чтобы получить бонус нужно отыграть:\n{_config.PlayTime / 60} минут!", Align = TextAnchor.MiddleCenter, FontSize = 14, Color = "1 0.6 0 0.8" }
            }, Layer1);
            int Minute = DB[player.userID].Minute;

            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = $"0 0.5", AnchorMax = $"1 0.5", OffsetMin = "0 -20", OffsetMax = "0 80" },
                Button = { Color = "0 0 0 0", },
                Text = { Text = CanTake(player), Align = TextAnchor.MiddleCenter, FontSize = 20 }
            }, Layer1, "timer");

            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-236 3", OffsetMax = "-106 33" },
                Button = { Color = "0.38 0.71 0.12 0.7", Material = "assets/icons/greyout.mat", Command = Minute == 60 ? "take_reward" : "f_money_close" },
                Text = { Text = $"ПОЛУЧИТЬ БОНУС", Align = TextAnchor.MiddleCenter, FontSize = 13, Color = "0.9 0.9 0.9 0.95" }
            }, Layer1);

            container.Add(new CuiButton
            {
                RectTransform = { AnchorMin = "1 0", AnchorMax = "1 0", OffsetMin = "-103 3", OffsetMax = "-3 33" },
                Button = { Color = "0.46 0.44 0.42 1.00", Material = "assets/icons/greyout.mat", Command = "f_money_close" },
                Text = { Text = $"ЗАКРЫТЬ", Align = TextAnchor.MiddleCenter, FontSize = 13, Color = "0.8 0.8 0.8 0.95" }
            }, Layer1);
            CuiHelper.DestroyUi(player, Layer);
            CuiHelper.AddUi(player, container);
        }

        [ConsoleCommand("f_money_close")]
        void CloseGui(ConsoleSystem.Arg args)
        {
            BasePlayer player = args.Player();
            DB[player.userID].Menu = false;
            CuiHelper.DestroyUi(player, Layer);
        }
        [ConsoleCommand("take_reward")]
        void TakeReward(ConsoleSystem.Arg args)
        {
            BasePlayer player = args.Player();
            DB[player.userID].Menu = false;
            CuiHelper.DestroyUi(player, Layer);

            if (DB[player.userID].Minute >= _config.PlayTime && !DB[player.userID].Taked)
            {
                SendRequest(player);
            }
        }
        private bool errorState = false;
        private void SendRequest(BasePlayer p)
        {
            webrequest.Enqueue($"http://gamestores.app/api?shop_id={_config.ShopID}&secret={_config.APIKey}&action=moneys&type=plus&steam_id={p.UserIDString}&amount={_config.GiveBonus}&mess={"Награда за игру на сервере."}", "", (code, answer) =>
            {
                var deserializedJSON = JsonConvert.DeserializeObject<Dictionary<string, string>>(answer);
                if (code == 200 && deserializedJSON["result"] == "success")
                {
                    p.ChatMessage($"Вам добавлено {_config.GiveBonus} руб. на баланс магазина!");
                }
                else
                {
                    PrintError($"Error on send request. Code - {code}, answer result - {deserializedJSON["result"]}");
                    errorState = true;
                }
            }, this, Core.Libraries.RequestMethod.POST);
        }
        void OnPlayerConnected(BasePlayer player)
        {
            if (!DB.ContainsKey(player.userID))
                DB.Add(player.userID, new DBSettings());
        }

        [ChatCommand("take_reward")]
        void TakeReward(BasePlayer p)
        {
            if (!p.IsAdmin)
                return;
            SendRequest(p);
        }
        
        #endregion
        
        #region Cfg
        
        private ConfigData _config;
        public class ConfigData
        {
            [JsonProperty("Номер магазина!")]
            public string ShopID = "";
            
            [JsonProperty("Секретный ключ")]
            public string APIKey = "";
            
            [JsonProperty("Сколько игроку нужно отыграть чтобы получить бонус (в секундах)")]
            public int PlayTime = 3600;

            [JsonProperty("Бонус который будет даваться на баланс")]
            public int GiveBonus = 50;

            public static ConfigData GetNewCong()
            {
                ConfigData newConfig = new ConfigData();
                newConfig.ShopID = "";
                newConfig.APIKey = "";
                newConfig.PlayTime = 3600;
                newConfig.GiveBonus = 50;
                return newConfig;
            }
        }
        protected override void LoadConfig()
        {
            base.LoadConfig();
            try
            {
                _config = Config.ReadObject<ConfigData>();
                
            }
            catch
            {
                LoadDefaultConfig();
            }

            NextTick(SaveConfig);
        }
        protected override void LoadDefaultConfig() => _config = ConfigData.GetNewCong();
        protected override void SaveConfig() => Config.WriteObject(_config);
        
        #endregion
    }
}

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