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

FREE FireworksMonitor : 1.0.1 1.0.1

Нет прав для скачивания
C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
 // ReSharper disable CheckNamespace
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Newtonsoft.Json;
using UnityEngine;
using UnityEngine.Networking;
namespace Oxide.Plugins {
    [Info("Fireworks Monitor", "hoppel & Mr.Blue", "1.0.1" )]
    [Description("Send a message to discord with an image of the firework pattern set by the user" )]
    public class FireworksMonitor : RustPlugin {
#region Configuration
        private const string WEBHOOK_INTRO = "https://support.discord.com/hc/en-us/articles/228383668-Intro-to-Webhooks";
        private static int? _embedColor;
        private class PluginConfiguration {
            [JsonProperty("Discord Webhook" )]
            public string DiscordWebhook;
            [JsonProperty("Embed Color" )]
            public string EmbedColor;
        }
        private PluginConfiguration _config;
        private void Init() {
            _config = Config.ReadObject<PluginConfiguration>();
            _embedColor = FromHex(_config.EmbedColor );
            if(_config.DiscordWebhook == WEBHOOK_INTRO ) {
                PrintWarning($"Please set the discord webhook in the configuration file! ({WEBHOOK_INTRO})" );
                Unsubscribe(nameof(OnFireworkDesignChanged ) );
            }
        }
        protected override void LoadDefaultConfig() {
            Config.WriteObject(GetDefaultConfig(), true );
        }
        private PluginConfiguration GetDefaultConfig() {
            return new PluginConfiguration {
                DiscordWebhook = WEBHOOK_INTRO, EmbedColor = "#54a8fc"
            }
            ;
        }
#endregion
#region Localization
        protected override void LoadDefaultMessages() {
            lang.RegisterMessages(new Dictionary<string, string> {
                ["EmbedTitle"]
                = "Firework design changed or created!", ["EmbedBody"] = "**Player:**\n{playerName}\n{playerId}\n[Steam Profile](https://steamcommunity.com/profiles/{playerId})\n\n**Firework owner:**\n{ownerName}\n{ownerId}\n[Steam Profile](https://steamcommunity.com/profiles/{ownerId})\n\n**Server:\n**{serverName}"
            }
            , this );
        }
        private string FormatMessage(string key, BasePlayer player, BasePlayer fireworkOwner ) {
            return lang.GetMessage(key, this ).Replace("{playerName}", player.displayName ).Replace("{playerId}", player.UserIDString ).Replace("{ownerName}", fireworkOwner.displayName ).Replace("{ownerId}", fireworkOwner.UserIDString ).Replace("{serverName}", covalence.Server.Name );
        }
#endregion
#region Firework Logic
        private static readonly Texture2D DrawingTexture = new Texture2D(240, 240 );
        private void OnFireworkDesignChanged(PatternFirework entity, ProtoBuf.PatternFirework.Design design, BasePlayer player ) {
            var stars = design?.stars;
            if(stars == null || stars.Count == 0 ) {
                return;
            }
            DrawingTexture.Clear(Color.black );
            foreach(var star in stars ) {
                var color = new Color(star.color.r, star.color.g, star.color.b );
                var scaledX = (int) ((star.position.x - -1 ) * 100 ) + 20;
                var scaledY = (int) ((star.position.y - -1 ) * 100 ) + 20;
                // Draw the points a bit bigger
                var xCondition = scaledX + 6;
                var yCondition = scaledY + 6;
                for(var x = scaledX - 3; x < xCondition; x++ ) {
                    for(var y = scaledY - 3; y < yCondition; y++ ) {
                        DrawingTexture.SetPixel(x, y, color );
                    }
                }
            }
            var encodedPng = DrawingTexture.EncodeToPNG();
            SendDiscordEmbed(encodedPng, player, entity.OwnerID );
        }
        private void SendDiscordEmbed(byte[] image, BasePlayer player, ulong fireworkOwnerId ) {
            var fireworkOwner = BasePlayer.FindByID(fireworkOwnerId );
            var title = FormatMessage("EmbedTitle", player, fireworkOwner );
            var description = FormatMessage("EmbedBody", player, fireworkOwner );
            var payload = new {
                embeds = new[] {
                    new {
                        title, description, color = _embedColor, image = new {
                            url = "attachment://image.png"
                        }
                        , timestamp = DateTime.Now
                    }
                }
            }
            ;
            var form = new WWWForm();
            form.AddBinaryData("file", image, "image.png" );
            form.AddField("payload_json", JsonConvert.SerializeObject(payload ) );
            ServerMgr.Instance.StartCoroutine(HandleUpload(_config.DiscordWebhook, form ) );
        }
        private IEnumerator HandleUpload(string url, WWWForm data ) {
            var www = UnityWebRequest.Post(url, data );
            yield return www.SendWebRequest();
            if(www.isNetworkError || www.isHttpError ) {
                Puts($"Failed to post firework image to discord: {www.error}" );
            }
        }
#endregion
#region Helpers
        private static int? FromHex(string value ) {
            var match = Regex.Match(value, "#?([0-9a-f]{6})" );
            if(!match.Success ) {
                return null;
            }
            return int.Parse(match.Groups[1].Value, System.Globalization.NumberStyles.HexNumber );
        }
#endregion
    }
}

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