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

FREE DiscordWin : 1.1.0 1.1.0

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

namespace Oxide.Plugins
{
    [Info("DiscordWin", "Visagalis", "1.1.0")]
    [Description("Starts event to win some stuff via Discord.")]
    class DiscordWin : RustPlugin
    {
        [PluginReference]
        Plugin DiscordMessages;
        [PluginReference] 
        Plugin ServerRewards;
        [PluginReference] 
        Plugin Economics;

        string secretCode = null;
        int reward = 0;

        List<ulong> claimedReward = new List<ulong>();

        public static class DWConfig
        {
            public static bool UseEconomics = true;
            public static bool UseServerRewards = true;
            public static string WebHookUrl = "";
            public static string DiscordChannel = "#events";
            public static int RewardBase = 100;
            public static int RewardMinPlusVariance = 50;
            public static int RewardMaxPlusVariance = 100;
            public static float RewardMultiplyBaseMinVariance = 1.0f;
            public static float RewardMultiplyBaseMaxVariance = 2.5f;
            public static int EventLengthMinVariance = 300;
            public static int EventLengthMaxVariance = 900;
            public static int EventOccurenceMinVariance = 3600;
            public static int EventOccurenceMaxVariance = 7200;
            public static int EventAnnounceMinVariance = 60;
            public static int EventAnnounceMaxVariance = 120;
            public static int MaximumWinners = 0;
        }

        void LoadDefaultConfig()
        {
            Puts("Generating new config file...");
            LoadConfig();
        }

        void InitConfig()
        {
            DWConfig.UseEconomics = int.Parse(Config["Settings", "Reward with Economics"].ToString()) == 1;
            DWConfig.UseServerRewards = int.Parse(Config["Settings", "Reward with ServerRewards"].ToString()) == 1;
            DWConfig.WebHookUrl =  Config["Settings", "Discord WebhookURL"].ToString();
            DWConfig.DiscordChannel =  Config["Settings", "Discord Channel"].ToString();
            DWConfig.RewardBase =  int.Parse(Config["Settings", "Reward Base"].ToString());
            DWConfig.RewardMinPlusVariance =  int.Parse(Config["Settings", "Reward Plus Min Variance"].ToString());
            DWConfig.RewardMaxPlusVariance =  int.Parse(Config["Settings", "Reward Plus Max Variance"].ToString());
            DWConfig.RewardMultiplyBaseMinVariance =  float.Parse(Config["Settings", "Reward Multiply Base Min Variance"].ToString());
            DWConfig.RewardMultiplyBaseMaxVariance =  float.Parse(Config["Settings", "Reward Multiply Base Max Variance"].ToString());
            DWConfig.EventLengthMinVariance =  int.Parse(Config["Settings", "Event Length Min Variance (seconds)"].ToString());
            DWConfig.EventLengthMaxVariance =  int.Parse(Config["Settings", "Event Length Max Variance (seconds)"].ToString());
            DWConfig.EventOccurenceMinVariance =  int.Parse(Config["Settings", "Event Occurence Min Variance (seconds)"].ToString());
            DWConfig.EventOccurenceMaxVariance =  int.Parse(Config["Settings", "Event Occurence Max Variance (seconds)"].ToString());
            DWConfig.EventAnnounceMinVariance =  int.Parse(Config["Settings", "Event Announce Min Variance (seconds)"].ToString());
            DWConfig.EventAnnounceMaxVariance =  int.Parse(Config["Settings", "Event Announce Max Variance (seconds)"].ToString());
            DWConfig.MaximumWinners =  int.Parse(Config["Settings", "Event Max Winners Count (0 for infinity)"].ToString());
        }

        void LoadConfig()
        {
            SetConfig("Settings", "Reward with Economics", "1"); // UseEconomics
            SetConfig("Settings", "Reward with ServerRewards", "1"); // UseServerRewards
            SetConfig("Settings", "Discord WebhookURL", ""); //WebHookUrl
            SetConfig("Settings", "Discord Channel", "#events"); //DiscordChannel
            SetConfig("Settings", "Reward Base", "100"); // RewardBase
            SetConfig("Settings", "Reward Plus Min Variance", "50"); // RewardMinPlusVariance
            SetConfig("Settings", "Reward Plus Max Variance", "100"); // RewardMaxPlusVariance
            SetConfig("Settings", "Reward Multiply Base Min Variance", "1.0"); // RewardMultiplyBaseMinVariance
            SetConfig("Settings", "Reward Multiply Base Max Variance", "2.5"); // RewardMultiplyBaseMaxVariance
            SetConfig("Settings", "Event Length Min Variance (seconds)", "300"); // EventLengthMinVariance
            SetConfig("Settings", "Event Length Max Variance (seconds)", "900"); // EventLengthMaxVariance
            SetConfig("Settings", "Event Occurence Min Variance (seconds)", "3600"); // EventOccurenceMinVariance
            SetConfig("Settings", "Event Occurence Max Variance (seconds)", "900"); // EventOccurenceMaxVariance
            SetConfig("Settings", "Event Announce Min Variance (seconds)", "60"); // EventAnnounceMinVariance
            SetConfig("Settings", "Event Announce Max Variance (seconds)", "90"); // EventAnnounceMaxVariance
            SetConfig("Settings", "Event Max Winners Count (0 for infinity)", "0"); // MaximumWinners
        }

        void SetConfig(params object[] args)
        {
            List<string> stringArgs = (from arg in args select arg.ToString()).ToList();
            stringArgs.RemoveAt(args.Length - 1);

            if (Config.Get(stringArgs.ToArray()) == null) Config.Set(args);
        }

        void OnServerInitialized()
        {
            LoadConfig();
            InitConfig();
            int minReward = (int)(DWConfig.RewardBase * DWConfig.RewardMultiplyBaseMinVariance + DWConfig.RewardMinPlusVariance);
            int maxReward = (int)(DWConfig.RewardBase * DWConfig.RewardMultiplyBaseMaxVariance + DWConfig.RewardMaxPlusVariance);

            Puts($"Event will happen every approx.{(DWConfig.EventOccurenceMinVariance + DWConfig.EventOccurenceMaxVariance)/2} seconds.");
            Puts($"Event will last for approx.{(DWConfig.EventLengthMinVariance + DWConfig.EventLengthMaxVariance)/2} seconds.");
            if(DWConfig.MaximumWinners > 0)
                Puts($"Or until {DWConfig.MaximumWinners} player claims reward.");
            Puts($"Event will announce every approx.{(DWConfig.EventAnnounceMinVariance + DWConfig.EventAnnounceMaxVariance)/2} seconds.");
            Puts($"Event will reward approx.{(minReward + maxReward)/2} points for Economics: {DWConfig.UseEconomics} and ServerRewards: {DWConfig.UseServerRewards}.");
            timer.Once(UnityEngine.Random.Range(DWConfig.EventOccurenceMinVariance, DWConfig.EventOccurenceMaxVariance), StartEvent);
        }

        void Unloaded()
        {
            EndEvent("\nPlugin unloaded!");
        }

        [ChatCommand("get")]
        void cmdTest(BasePlayer player, string command, string[] args)
        {
            if (string.IsNullOrEmpty(secretCode))
            {
                Tell(player, "¡El evento no ha comenzado todavía!");
                return;
            }
            if(args.Length != 1 || args[0] != secretCode)
            {
                Tell(player, "¡Has introducido un código secreto incorrecto!");
                return;
            }
            
            if(args[0] == secretCode)
            {
                if (claimedReward.Contains(player.userID))
                    Tell(player, "¡Ya has reclamado esta recompensa!");
                else
                {
                    claimedReward.Add(player.userID);
                    Tell(player, $"Has conseguido <color=orange>{reward}</color> Pesos!");
                    SendMessageToDiscord($"`{player.displayName}` ha conseguido `{reward}` Pesos!", ":information_source:");
                    if(DWConfig.UseServerRewards)
                        ServerRewards?.Call("AddPoints", player.userID, reward);
                    if(DWConfig.UseEconomics)
                        Economics?.Call("Deposit", player.userID, (double)reward);
                }

                if (DWConfig.MaximumWinners > 0 && DWConfig.MaximumWinners <= claimedReward.Count)
                    EndEvent($"\nCantidad máxima de jugadores ({DWConfig.MaximumWinners}) ha reclamado el premio!");
            }
        }

        void Tell(BasePlayer player, string message)
        {
            Player.Message(player, message);
        }

        void Broadcast(string message)
        {
            Server.Broadcast(message);
        }

        void StartEvent()
        {
            double finalMultiplyVariance = 1;
            if (DWConfig.RewardMultiplyBaseMinVariance > 1)
                finalMultiplyVariance = UnityEngine.Random.Range(DWConfig.RewardMultiplyBaseMinVariance, DWConfig.RewardMultiplyBaseMaxVariance);

            int finalPlusVariance = 0;
            if (DWConfig.RewardMaxPlusVariance > 1)
                finalPlusVariance = UnityEngine.Random.Range(DWConfig.RewardMinPlusVariance, DWConfig.RewardMaxPlusVariance);

            reward = (int)(DWConfig.RewardBase * finalMultiplyVariance + finalPlusVariance);
            secretCode = Guid.NewGuid().ToString().Replace("-", "").ToUpper();
            SendMessageToDiscord($"¡El evento del Servidor x20 ha empezado! Escribe `/get {secretCode}` en el juego para obtener `{reward}` Pesos!", ":star:");
            ContinueslyBroadcast();
            timer.Once(UnityEngine.Random.Range(DWConfig.EventLengthMinVariance, DWConfig.EventLengthMaxVariance), () => EndEvent());
        }

        void ContinueslyBroadcast()
        {
            if (string.IsNullOrEmpty(secretCode) || reward == 0)
                return;

            if (claimedReward.Count == 0)
            {
                Broadcast($"<color=red>ATENCIÓN -</color> ¡El evento para ganar <color=orange>{reward}</color> Pesos ha comenzado!" +
                $"\nÚnete a nuestro servidor de Discord, comprueba el canal <color=orange>{DWConfig.DiscordChannel}</color> para reclamar el premio");
            }
            else
            {
                Broadcast($"¡El evento para ganar <color=orange>{reward}</color> Pesos ha comenzado!" +
                    $"\nÚnete a nuestro servidor de Discord, comprueba el canal <color=orange>{DWConfig.DiscordChannel}</color> para reclamar el premio!");
            }

            timer.Once(UnityEngine.Random.Range(DWConfig.EventAnnounceMinVariance, DWConfig.EventAnnounceMaxVariance), ContinueslyBroadcast);
        }

        void EndEvent(string reason = "")
        {
            if (secretCode == null || reward == 0)
                return;

            secretCode = null;
            SendMessageToDiscord($"¡El evento del Servidor x20 para obtener `{reward}` Pesos ha finalizado!{reason}", ":checkered_flag:");
            Broadcast($"¡El evento del Servidor x20 para obtener <color=orange>{reward}</color> Pesos ha finalizado!{reason}");

            reward = 0;
            claimedReward.Clear();
            timer.Once(UnityEngine.Random.Range(DWConfig.EventOccurenceMinVariance, DWConfig.EventOccurenceMaxVariance), StartEvent);
        }

        void SendMessageToDiscord(string message, string icon = ":bulb:")
        {
            if (string.IsNullOrEmpty(DWConfig.WebHookUrl))
                Interface.Oxide.LogWarning(
                    $"WARNING! Discord webhook URL is not defined! Message which wasn't sent: {message}");
            else
                DiscordMessages?.Call("API_SendTextMessage", DWConfig.WebHookUrl, $"{icon} {message}");
        }
    }
}

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