C#:
// Все права принадлежат дискорд сообществу https://discord.gg/VgNHPpNrz6
using System;
using System.Collections.Generic;
using System.ComponentModel;
using Newtonsoft.Json;
using Oxide.Core.Configuration;
using Oxide.Core.Plugins;
namespace Oxide.Plugins
{
[Info("Magic Images Panel", "MJSU", "1.0.3")]
[Description("Displays images in Magic Panel")]
public class MagicImagesPanel : RustPlugin
{
#region Class Fields
[PluginReference] private readonly Plugin MagicPanel;
private PluginConfig _pluginConfig; //Plugin Config
private enum UpdateEnum { All = 1, Panel = 2, Image = 3, Text = 4 }
#endregion
#region Setup & Loading
protected override void LoadDefaultConfig()
{
PrintWarning("Loading Default Config");
}
protected override void LoadConfig()
{
string path = $"{Manager.ConfigPath}/MagicPanel/{Name}.json";
DynamicConfigFile newConfig = new DynamicConfigFile(path);
if (!newConfig.Exists())
{
LoadDefaultConfig();
newConfig.Save();
}
try
{
newConfig.Load();
}
catch (Exception ex)
{
RaiseError("Failed to load config file (is the config file corrupt?) (" + ex.Message + ")");
return;
}
newConfig.Settings.DefaultValueHandling = DefaultValueHandling.Populate;
_pluginConfig = AdditionalConfig(newConfig.ReadObject<PluginConfig>());
newConfig.WriteObject(_pluginConfig);
}
private PluginConfig AdditionalConfig(PluginConfig config)
{
config.Panels = config.Panels ?? new Hash<string, PanelData>
{
[$"{Name}_1"] = new PanelData
{
Panel = new Panel
{
Image = new PanelImage
{
Enabled = true,
Color = "#FFFFFFFF",
Order = 0,
Width = 1f,
Url = "https://i.postimg.cc/RZsqGW4n/FnVe2Fl.png",
Padding = new TypePadding(0.05f, 0.05f, 0.05f, 0.05f)
}
},
PanelSettings = new PanelRegistration
{
BackgroundColor = "#FFF2DF00",
Dock = "image",
Order = 0,
Width = 0.09f
},
Enabled = true
},
[$"{Name}_2"] = new PanelData
{
Panel = new Panel
{
Image = new PanelImage
{
Enabled = true,
Color = "#FFFFFFFF",
Order = 0,
Width = 1f,
Url = "https://i.postimg.cc/RZsqGW4n/FnVe2Fl.png",
Padding = new TypePadding(0.05f, 0.05f, 0.05f, 0.05f)
}
},
PanelSettings = new PanelRegistration
{
BackgroundColor = "#FFF2DF00",
Dock = "image",
Order = 0,
Width = 0.09f
},
Enabled = true
}
};
return config;
}
private void OnServerInitialized()
{
MagicPanelRegisterPanels();
}
private void MagicPanelRegisterPanels()
{
if (MagicPanel == null)
{
PrintError("Missing plugin dependency MagicPanel: https://umod.org/plugins/magic-panel");
return;
}
foreach (KeyValuePair<string,PanelData> panel in _pluginConfig.Panels)
{
if (!panel.Value.Enabled)
{
continue;
}
MagicPanel?.Call("RegisterGlobalPanel", this, panel.Key, JsonConvert.SerializeObject(panel.Value.PanelSettings), nameof(GetPanel));
}
}
#endregion
#region MagicPanel Hook
private Hash<string, object> GetPanel(string panelName)
{
Panel panel = _pluginConfig.Panels[panelName].Panel;
return panel.ToHash();
}
#endregion
#region Classes
private class PluginConfig
{
[JsonProperty(PropertyName = "Image Panels")]
public Hash<string, PanelData> Panels { get; set; }
}
private class PanelData
{
[JsonProperty(PropertyName = "Panel Settings")]
public PanelRegistration PanelSettings { get; set; }
[JsonProperty(PropertyName = "Panel Layout")]
public Panel Panel { get; set; }
[DefaultValue(true)]
[JsonProperty(PropertyName = "Enabled")]
public bool Enabled { get; set; }
}
private class PanelRegistration
{
public string Dock { get; set; }
public float Width { get; set; }
public int Order { get; set; }
public string BackgroundColor { get; set; }
}
private class Panel
{
public PanelImage Image { get; set; }
public Hash<string, object> ToHash()
{
return new Hash<string, object>
{
[nameof(Image)] = Image.ToHash(),
};
}
}
private abstract class PanelType
{
public bool Enabled { get; set; }
public string Color { get; set; }
public int Order { get; set; }
public float Width { get; set; }
public TypePadding Padding { get; set; }
public virtual Hash<string, object> ToHash()
{
return new Hash<string, object>
{
[nameof(Enabled)] = Enabled,
[nameof(Color)] = Color,
[nameof(Order)] = Order,
[nameof(Width)] = Width,
[nameof(Padding)] = Padding.ToHash(),
};
}
}
private class PanelImage : PanelType
{
public string Url { get; set; }
public override Hash<string, object> ToHash()
{
Hash<string, object> hash = base.ToHash();
hash[nameof(Url)] = Url;
return hash;
}
}
private class TypePadding
{
public float Left { get; set; }
public float Right { get; set; }
public float Top { get; set; }
public float Bottom { get; set; }
public TypePadding(float left, float right, float top, float bottom)
{
Left = left;
Right = right;
Top = top;
Bottom = bottom;
}
public Hash<string, object> ToHash()
{
return new Hash<string, object>
{
[nameof(Left)] = Left,
[nameof(Right)] = Right,
[nameof(Top)] = Top,
[nameof(Bottom)] = Bottom
};
}
}
#endregion
}
}