C#:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Oxide.Core;
using Oxide.Core.Configuration;
using Oxide.Game.Rust.Cui;
using UnityEngine;
using Apex;
using Oxide.Core.Plugins;
namespace Oxide.Plugins
{
[Info("ItemsBlocker", "https://topplugin.ru / https://discord.com/invite/5DPTsRmd3G", "1.0.3")]
public class ItemsBlocker : RustPlugin
{
#region Fields
public string Layer = "UI.ITEMSBLOCKER";
public string LayerBlur = "UI.ITEMSBLOCKERBLUR";
public Dictionary<ulong, bool> playersOpen = new Dictionary<ulong, bool>();
public bool isWipe = false;
private static readonly int PlayerLayerMask = LayerMask.GetMask("Player (Server)");
private readonly List<BasePlayer> _playersIgnore = new List<BasePlayer>();
[PluginReference] Plugin Duel;
#endregion
private bool playerOnDuel(BasePlayer player)
{
if (plugins.Find("Duel") && (bool)plugins.Find("Duel").Call("IsPlayerOnActiveDuel",player)) return true;
if (plugins.Find("OneVSOne") && (bool)plugins.Find("OneVSOne").Call("IsEventPlayer",player)) return true;
return false;
}
#region Methods
public void UpdateUI(BasePlayer player)
{
if (playersOpen[player.userID])
{
CuiElementContainer container = new CuiElementContainer();
var heightMultiplier = storedData.blocks.Where(x => x.Value > CurrentTime()).Count() / 7f * 0.02f;
var itemWidth = 0.104166f;
var itemMargin = 0.011457f;
var itemMin = 0.325521f;
var itemsCount = 0;
foreach (var item in storedData.blocks.Where(x => x.Value > CurrentTime()).OrderBy(x => x.Value).Take(3))
{
itemsCount++;
var leftTime =
$"{(int) TimeSpan.FromSeconds(storedData.blocks[item.Key] - CurrentTime()).TotalHours}:{TimeSpan.FromSeconds(storedData.blocks[item.Key] - CurrentTime()).Minutes}";
container.Add(new CuiPanel()
{
RectTransform =
{
AnchorMin = $"{itemMin} {0.539815 + heightMultiplier}",
AnchorMax = $"{itemMin + itemWidth} {0.725 + heightMultiplier}"
},
Image = {Color = HexToRGB("#FFFFFF13")}
}, Layer, Layer + $".Items.{itemsCount}");
container.Add(new CuiElement()
{
Name = Layer + $".Items.{itemsCount}.Icon",
Parent = Layer + $".Items.{itemsCount}",
Components =
{
GetItemImageComponent(item.Key),
new CuiRectTransformComponent()
{
AnchorMin = $"0 0",
AnchorMax = $"1 1"
},
}
});
container.Add(new CuiLabel()
{
RectTransform = {AnchorMin = "0.435003 -0.015", AnchorMax = "1.015 0.240001"},
Text =
{
Text = $"<b>{leftTime}</b>",
Align = TextAnchor.MiddleCenter,
Color = HexToRGB("#FFFFFF77"),
FontSize = 20,
Font = "RobotoCondensed-Bold.ttf"
}
}, Layer + $".Items.{itemsCount}", Layer + $".Items.{itemsCount}.Text");
itemMin += (itemWidth + itemMargin);
}
CuiHelper.DestroyUi(player, Layer + ".Items.1");
CuiHelper.DestroyUi(player, Layer + ".Items.2");
CuiHelper.DestroyUi(player, Layer + ".Items.3");
CuiHelper.AddUi(player, container);
timer.Once(15f, () => UpdateUI(player));
}
}
#endregion
#region Hooks
void Unload()
{
foreach (var player in BasePlayer.activePlayerList)
{
CuiHelper.DestroyUi(player, Layer);
CuiHelper.DestroyUi(player, LayerBlur);
CuiHelper.DestroyUi(player, Layer);
CuiHelper.DestroyUi(player, Layer + ".Destroy1");
}
}
void OnPlayerDisconnected(BasePlayer player, string reason)
{
if (playersOpen.ContainsKey(player.userID))
playersOpen[player.userID] = false;
_playersIgnore.Remove(player);
}
void OnServerInitialized()
{
LoadConfig();
LoadData();
if (isWipe)
{
PrintError("Очистили!");
storedData.blocks.Clear();
}
Dictionary<string, int> blockItems = new Dictionary<string, int>();
blockItems.AddRange(_config.blockAmmo);
blockItems.AddRange(_config.blockClothes);
blockItems.AddRange(_config.blockItem);
foreach (var p in BasePlayer.activePlayerList) OnPlayerConnected(p);
foreach (var item in blockItems)
{
if (!storedData.blocks.ContainsKey(item.Key))
storedData.blocks.Add(item.Key, CurrentTime() + 60 * 60 * item.Value);
}
/*var isAnyBlockedItem = storedData.blocks.Any(x => x.Value > CurrentTime());
if (!isAnyBlockedItem)
{
foreach (var key in Hooks.Keys)
Unsubscribe(key);
Interface.Oxide.NextTick(() =>
{
Puts("На сервере нет заблокированных предметов, плагин будет отключен.");
Interface.Oxide.UnloadPlugin(Name);
});
return;
}*/
SaveData();
}
private bool? CanWearItem(PlayerInventory inventory, Item item)
{
var player = inventory.containerWear.playerOwner;
if (player == null || player.IsNpc) return null;
if (playerOnDuel(player)) return null;
if (player.net.connection.authLevel>1) return null;
if (player.userID < 76560000000000000L || player.IsDestroyed) return null;
if (_playersIgnore.Contains(player)) return null;
var isBlocked = Unblock(item.info.shortname);
if (isBlocked)
{
DrawInstanceBlock(player, item);
timer.Once(2f, () =>
{
CuiHelper.DestroyUi(player, Layer + ".Destroy");
timer.Once(0.5f, () => CuiHelper.DestroyUi(player, Layer + ".Destroy1"));
});
return false;
}
return null;
}
private void DrawInstanceBlock(BasePlayer player, Item item)
{
CuiHelper.DestroyUi(player, Layer);
CuiHelper.DestroyUi(player, Layer + ".Destroy1");
CuiElementContainer container = new CuiElementContainer();
var time = storedData.blocks[item.info.shortname] - CurrentTime();
var hours = (int)(time / 3600f);
var minute = (int)(time - hours * 3600f) / 60;
var leftTime = $"{hours}ч {minute}м";
container.Add(new CuiPanel()
{
RectTransform = {AnchorMin = "0.345313 0.533333", AnchorMax = "0.641146 0.632407", OffsetMax = "0 0"},
Image = {Color = HexToRGB("#2020207C"), Material = "assets/content/ui/uibackgroundblur.mat"}
}, "Overlay", Layer + ".Destroy1");
container.Add(new CuiLabel
{
FadeOut = 0.5f,
Text = {Color = "0.9 0.9 0.9 1", Text = $"<b>ПРЕДМЕТ ЗАБЛОКИРОВАН</b>\nДо разблокировки осталось: {leftTime}", FontSize = 22, Align = TextAnchor.MiddleCenter, Font = "robotocondensed-bold.ttf" },
RectTransform = { AnchorMin = "0 0", AnchorMax = "1 1" }
}, Layer + ".Destroy1", Layer + ".Destroy");
CuiHelper.AddUi(player, container);
}
private bool? CanEquipItem(PlayerInventory inventory, Item item)
{
if (inventory==null || item == null) return null;
var player = inventory.containerBelt.playerOwner;
if (player == null || player.IsNpc) return null;
if (playerOnDuel(player)) return null;
if (player.net.connection.authLevel>1) return null;
if (player.userID < 76560000000000000L || player.IsDestroyed) return null;
var isBlocked = Unblock(item.info.shortname);
if (!isBlocked)
{
var projectile = item.GetHeldEntity() as BaseProjectile;
if (projectile != null && projectile.primaryMagazine.contents != 0)
{
isBlocked = Unblock(projectile.primaryMagazine.ammoType.shortname);
}
}
if (isBlocked)
{
DrawInstanceBlock(player, item);
timer.Once(2f, () =>
{
CuiHelper.DestroyUi(player, Layer + ".Destroy");
timer.Once(0.5f, () => CuiHelper.DestroyUi(player, Layer + ".Destroy1"));
});
if (player.inventory.containerMain.itemList.Count == 24)
{
var a = item.MoveToContainer(player.inventory.containerMain, -1, false);
if (!a)
{
item.Drop(player.ServerPosition, Vector3.up, Quaternion.identity);
return false;
}
return null;
}
return false;
}
return null;
}
public void ReplyWithHelper(BasePlayer player, string message, string[] args = null, ulong senderID = 76561198236355670, string header = "Виртуальный помощник")
{
if (args != null)
message = string.Format(message, (object[]) args);
player.SendConsoleCommand("chat.add", 0, (object) senderID, (object) string.Format("<size=16><color=#81B67A>{0}</color>:</size>\n{1}", (object) header, (object) message));
}
object OnSwitchAmmo(BasePlayer player, BaseProjectile projectile)
{
if (player is NPCPlayer || _playersIgnore.Contains(player))
return null;
if (player.net?.connection?.authLevel >= 2) return null;
if (playerOnDuel(player)) return null;
var isBlocked = Unblock(projectile.primaryMagazine.ammoType);
if (isBlocked)
{
projectile.primaryMagazine.contents = 0;
projectile.SendNetworkUpdate();
return false;
}
return null;
}
object OnReloadMagazine(BasePlayer player, BaseProjectile projectile)
{
if (player is NPCPlayer || _playersIgnore.Contains(player))
return null;
if (playerOnDuel(player)) return null;
if (player.net?.connection?.authLevel >= 2) return null;
NextTick(() =>
{
var isBlocked = Unblock(projectile.primaryMagazine.ammoType);
if (isBlocked)
{
Item item = ItemManager.CreateByItemID(projectile.primaryMagazine.ammoType.itemid, projectile.primaryMagazine.contents);
DrawInstanceBlock(player, item);
timer.Once(2f, () =>
{
CuiHelper.DestroyUi(player, Layer + ".Destroy");
timer.Once(0.5f, () => CuiHelper.DestroyUi(player, Layer + ".Destroy1"));
});
projectile.primaryMagazine.contents = 0;
projectile.SendNetworkUpdate();
if (!item.MoveToContainer(player.inventory.containerMain))
{
var findItem = player.inventory.containerMain.FindItemByItemID(item.info.itemid);
findItem.amount += item.amount;
}
player.SendNetworkUpdate();
}
});
return null;
}
object OnTurretToggle(AutoTurret turret)
{
if (turret.HasFlag(BaseEntity.Flags.On)) return null;
var list = new List<BasePlayer>(3);
Vis.Entities(turret.transform.position, 4f, list, PlayerLayerMask);
foreach (var p in list.Where(p => p.inventory.loot.entitySource == turret)) p.inventory.loot.Clear();
foreach (var item in turret.inventory.itemList)
{
var isBlocked = Unblock(item.info.shortname);
if (!isBlocked)
{
var projectile = item.GetHeldEntity() as BaseProjectile;
if (projectile != null && projectile.primaryMagazine.contents != 0)
{
isBlocked = Unblock(projectile.primaryMagazine.ammoType.shortname);
}
}
if (!isBlocked) continue;
turret.booting = false;
turret.SendNetworkUpdate();
return false;
}
return null;
}
void OnPlayerConnected(BasePlayer player)
{
if(!playersOpen.ContainsKey(player.userID))
playersOpen.Add(player.userID, false);
List<Item> items = new List<Item>();
foreach (var item in storedData.blocks.Where(x => x.Value > CurrentTime()))
{
foreach (var itemInv in player.inventory.containerBelt.itemList)
{
if (item.Key == itemInv.info.shortname)
{
items.Add(itemInv);
}
}
}
foreach (var item in items)
{
if (!item.MoveToContainer(player.inventory.containerMain, -1))
{
item.Drop(player.ServerPosition, Vector3.up, Quaternion.identity);
}
}
}
void OnNewSave(string filename)
{
Puts("Обнаружен вайп карты! Автоматически поставлен блок на предметы!");
isWipe = true;
}
#endregion
#region Commands
[ConsoleCommand("itemsblocker.reset")]
private void ResetBlocks(ConsoleSystem.Arg arg)
{
var player = arg.Connection?.player as BasePlayer;
if (player == null) return;
if (player.net?.connection?.authLevel< 2) return;
isWipe = true;
OnServerInitialized();
Puts("Время блокировок сброшено.");
}
[ConsoleCommand("UI_ItemsBlocker")]
private void cmdConsoleItemsBlocker(ConsoleSystem.Arg arg)
{
var player = arg.Connection?.player as BasePlayer;
if (player == null) return;
switch (arg.GetString(0))
{
case "close":
CuiHelper.DestroyUi(player, Layer);
CuiHelper.DestroyUi(player, LayerBlur);
playersOpen[player.userID] = false;
break;
}
}
[ChatCommand("block")]
private void cmdChatDrawBlock(BasePlayer player)
{
DrawBlockGUI(player);
}
#endregion
#region Methods
private bool Unblock(ItemDefinition itemDefinition) => Unblock(itemDefinition.shortname);
private bool Unblock(string shortname)
{
if (storedData.blocks.ContainsKey(shortname))
{
if (CurrentTime() < storedData.blocks[shortname])
{
return true;
}
}
return false;
}
private void DrawBlockGUI(BasePlayer player)
{
CuiHelper.DestroyUi(player, Layer);
CuiHelper.DestroyUi(player, LayerBlur);
CuiElementContainer container = new CuiElementContainer();
var heightMultiplier = storedData.blocks.Where(x => x.Value > CurrentTime()).Count() / 7f * 0.02f;
container.Add(new CuiPanel()
{
CursorEnabled = true,
RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1", OffsetMax = "0 0"},
Image = {Color = HexToRGB("#2020207C"), Material = "assets/content/ui/uibackgroundblur.mat"}
}, "Overlay", LayerBlur);
container.Add(new CuiButton()
{
RectTransform = {AnchorMin = "0 0", AnchorMax = "1 1"},
Button = {Command = "UI_ItemsBlocker close", Color = "0 0 0 0"},
Text = {Text = ""}
}, "Overlay", Layer);
container.Add(new CuiLabel()
{
RectTransform = {AnchorMin = $"0.285938 {0.787037f + heightMultiplier}", AnchorMax = $"0.706771 {0.87963f + heightMultiplier}"},
Text =
{
Text = "<b>БЛОКИРОВКА ПРЕДМЕТОВ</b>",
Align = TextAnchor.MiddleCenter,
FontSize = 30,
Font = "RobotoCondensed-Bold.ttf"
}
}, Layer, ".Header");
container.Add(new CuiLabel()
{
RectTransform = {AnchorMin = $"0.306251 {0.737037f + heightMultiplier}", AnchorMax = $"0.678125 {0.82963f + heightMultiplier}"},
Text =
{
Text =
"Здесь вы можете узнать когда будет доступен тот, или иной предмет.\n А также ближайшие к разблокировке предметы",
Align = TextAnchor.MiddleCenter,
FontSize = 14,
Font = "RobotoCondensed-Regular.ttf"
}
}, Layer, ".Header");
var itemWidth = 0.104166f;
var itemMargin = 0.011457f;
var itemMin = 0.325521f;
var itemsCount = 0;
foreach (var item in storedData.blocks.Where(x => x.Value > CurrentTime()).OrderBy(x => x.Value).Take(3))
{
itemsCount++;
var leftTime =
ConvertFromUnixTimestamp(storedData.blocks[item.Key] - CurrentTime()).ToString("HH:mm");
container.Add(new CuiPanel()
{
RectTransform = { AnchorMin = $"{itemMin} {0.539815 + heightMultiplier}", AnchorMax = $"{itemMin + itemWidth} {0.725 + heightMultiplier}"},
Image = {Color = HexToRGB("#FFFFFF13")}
}, Layer, Layer + $".Items.{itemsCount}");
container.Add(new CuiElement()
{
Name = Layer + $".Items.{itemsCount}.Icon",
Parent = Layer + $".Items.{itemsCount}",
Components =
{
GetItemImageComponent(item.Key),
new CuiRectTransformComponent()
{
AnchorMin = $"0 0",
AnchorMax = $"1 1"
},
}
});
container.Add(new CuiLabel()
{
RectTransform = {AnchorMin = "0.435003 -0.015", AnchorMax = "1.015 0.240001"},
Text =
{
Text = $"<b>{leftTime}</b>",
Align = TextAnchor.MiddleCenter,
Color = HexToRGB("#FFFFFF77"),
FontSize = 20,
Font = "RobotoCondensed-Bold.ttf"
}
}, Layer + $".Items.{itemsCount}", Layer + $".Items.{itemsCount}.Text");
itemMin += (itemWidth + itemMargin);
}
container.Add(new CuiPanel()
{
RectTransform = { AnchorMin = $"0.244531 {0.509722 + heightMultiplier}", AnchorMax = $"0.755469 {0.516666 + heightMultiplier}"},
Image = {Color = HexToRGB("#7B464CFF")}
}, Layer, Layer + $".Bar");
double progressMin = Convert.ToDouble(storedData.blocks.Count(x => x.Value < CurrentTime())) / Convert.ToDouble(storedData.blocks.Count);
container.Add(new CuiPanel()
{
RectTransform = { AnchorMin = $"0 0", AnchorMax = $"{progressMin} 1"},
Image = {Color = HexToRGB("#7AA369FF")}
}, Layer + $".Bar", Layer + $".Bar.Green");
if (progressMin == 1)
{
container.Add(new CuiLabel()
{
RectTransform = { AnchorMin = "0.324479 0.541667", AnchorMax = "0.663021 0.724074"},
Text = { Text = "ВСЕ ПРЕДМЕТЫ РАЗБЛОКИРОВАНЫ! ВЕСЕЛИТЕСЬ!", Align = TextAnchor.MiddleCenter, Font = "RobotoCondensed-Bold.ttf", FontSize = 32}
}, Layer);
}
itemMin = 0.180079f;
itemWidth = 0.065104f;
itemMargin = 0.010678f / 2f;
var itemHeight = 0.115741f;
var itemMinHeight = 0.362964f + heightMultiplier;
itemsCount = 0;
foreach (var item in storedData.blocks.Where(x => x.Value > CurrentTime()).OrderBy(x => x.Value).Skip(3))
{
itemsCount++;
var time = storedData.blocks[item.Key] - CurrentTime();
var hours = (int)(time / 3600f);
var minute = (int)(time - hours * 3600f) / 60;
var leftTime = $"{hours}ч {minute}м";
container.Add(new CuiPanel()
{
RectTransform = { AnchorMin = $"{itemMin} {itemMinHeight}", AnchorMax = $"{itemMin + itemWidth} {itemMinHeight + itemHeight}"},
Image = {Color = HexToRGB("#FFFFFF13")}
}, Layer, Layer + $".Items1.{itemsCount}");
container.Add(new CuiElement()
{
Name = Layer + $".Items1.{itemsCount}.Icon",
Parent = Layer + $".Items1.{itemsCount}",
Components =
{
GetItemImageComponent(item.Key),
new CuiRectTransformComponent()
{
AnchorMin = $"0 0",
AnchorMax = $"1 1"
},
}
});
container.Add(new CuiLabel()
{
RectTransform = {AnchorMin = "0 0.023993", AnchorMax = "0.959986 1"},
Text =
{
Text = $"<b>{leftTime}</b>",
Align = TextAnchor.LowerRight,
Color = HexToRGB("#FFFFFF77"),
FontSize = 16,
Font = "RobotoCondensed-Bold.ttf"
}
}, Layer + $".Items1.{itemsCount}", Layer + $".Items1.{itemsCount}.Text");
itemMin += (itemWidth + itemMargin);
if (itemsCount % 9 == 0)
{
itemMin = 0.180079f;
itemMinHeight -= ((itemMargin * 2) + itemHeight);
}
}
playersOpen[player.userID] = true;
timer.Once(15f, () => UpdateUI(player));
CuiHelper.AddUi(player, container);
}
#endregion
#region Helper
private static string HexToRGB(string hex)
{
if (string.IsNullOrEmpty(hex))
{
hex = "#FFFFFFFF";
}
var str = hex.Trim('#');
if (str.Length == 6)
str += "FF";
if (str.Length != 8)
{
throw new Exception(hex);
}
var r = byte.Parse(str.Substring(0, 2), NumberStyles.HexNumber);
var g = byte.Parse(str.Substring(2, 2), NumberStyles.HexNumber);
var b = byte.Parse(str.Substring(4, 2), NumberStyles.HexNumber);
var a = byte.Parse(str.Substring(6, 2), NumberStyles.HexNumber);
Color color = new Color32(r, g, b, a);
return $"{color.r:F2} {color.g:F2} {color.b:F2} {color.a:F2}";
}
public DateTime ConvertFromUnixTimestamp(double timestamp)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return origin.AddSeconds(timestamp);
}
#endregion
#region Config
protected override void SaveConfig()
{
Config.WriteObject(_config);
}
protected override void LoadConfig()
{
base.LoadConfig();
_config = Config.ReadObject<Configuration>();
}
protected override void LoadDefaultConfig()
{
_config = new Configuration()
{
blockAmmo = new Dictionary<string, int>()
{
{"ammo.rifle.explosive", 24}
},
blockClothes = new Dictionary<string, int>()
{
{"riot.helmet", 1},
{"roadsign.jacket", 4},
{"roadsign.kilt", 4},
{"coffeecan.helmet", 4},
{"heavy.plate.helmet", 24},
{"heavy.plate.jacket", 24},
{"heavy.plate.pants", 24},
{"metal.facemask", 24},
{"metal.plate.torso", 24},
},
blockItem = new Dictionary<string, int>()
{
{"pistol.semiauto", 4},
{"pistol.python", 4},
{"shotgun.pump", 4},
{"grenade.beancan", 4},
{"surveycharge", 4},
{"pistol.m92", 8},
{"grenade.f1", 8},
{"rifle.semiauto", 8},
{"shotgun.spas12", 8},
{"smg.mp5", 12},
{"smg.thompson", 12},
{"smg.2", 12},
{"rifle.ak", 24},
{"rifle.lr300", 24},
{"rifle.bolt", 24},
{"lmg.m249", 24},
{"explosive.timed", 24},
{"explosive.satchel", 24},
{"rocket.launcher", 24},
{"rifle.l96", 24},
}
};
}
public Configuration _config;
public class Configuration
{
public Dictionary<string, int> blockItem = new Dictionary<string, int>();
public Dictionary<string, int> blockClothes = new Dictionary<string, int>();
public Dictionary<string, int> blockAmmo = new Dictionary<string, int>();
}
#endregion
#region Utils
static readonly DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0);
static double CurrentTime() { return DateTime.UtcNow.Subtract(epoch).TotalSeconds; }
#endregion
#region Data
class StoredData
{
public readonly Dictionary<string, double> blocks = new Dictionary<string, double>();
}
void SaveData()
{
BlockData.WriteObject(storedData);
}
void LoadData()
{
BlockData = Interface.Oxide.DataFileSystem.GetFile("ItemsBlocker/itemsblocker");
try
{
storedData = BlockData.ReadObject<StoredData>();
}
catch
{
storedData = new StoredData();
}
}
StoredData storedData;
private DynamicConfigFile BlockData;
#endregion
#region Api
[HookMethod(nameof(ApiPlayerIgnore))]
void ApiPlayerIgnore(BasePlayer player, bool status)
{
if (!status) _playersIgnore.Remove(player);
else if (!_playersIgnore.Contains(player)) _playersIgnore.Add(player);
}
#endregion
public CuiRawImageComponent GetAvatarImageComponent(ulong user_id, string color = "1.0 1.0 1.0 1.0"){
if (plugins.Find("ImageLoader")) return plugins.Find("ImageLoader").Call("BuildAvatarImageComponent",user_id) as CuiRawImageComponent;
if (plugins.Find("ImageLibrary")) {
return new CuiRawImageComponent { Png = (string)plugins.Find("ImageLibrary").Call("GetImage", user_id.ToString()), Color = color, Sprite = "assets/content/textures/generic/fulltransparent.tga" };
}
return new CuiRawImageComponent {Url = "https://image.flaticon.com/icons/png/512/37/37943.png", Color = color, Sprite = "assets/content/textures/generic/fulltransparent.tga"};
}
public CuiRawImageComponent GetImageComponent(string url, string shortName="", string color = "1.0 1.0 1.0 1.0"){
if (plugins.Find("ImageLoader")) return plugins.Find("ImageLoader").Call("BuildImageComponent",url) as CuiRawImageComponent;
if (plugins.Find("ImageLibrary")) {
if (!string.IsNullOrEmpty(shortName)) url = shortName;
//Puts($"{url}: "+ (string)plugins.Find("ImageLibrary").Call("GetImage", url));
return new CuiRawImageComponent { Png = (string)plugins.Find("ImageLibrary").Call("GetImage", url), Color = color, Sprite = "assets/content/textures/generic/fulltransparent.tga"};
}
return new CuiRawImageComponent {Url = url, Color = color, Sprite = "assets/content/textures/generic/fulltransparent.tga"};
}
public CuiRawImageComponent GetItemImageComponent(string shortName){
string itemUrl = shortName;
if (plugins.Find("ImageLoader")) {itemUrl = $"https://static.moscow.ovh/images/games/rust/icons/{shortName}.png";}
return GetImageComponent(itemUrl, shortName);
}
public bool AddImage(string url,string shortName=""){
if (plugins.Find("ImageLoader")){
plugins.Find("ImageLoader").Call("CheckCachedOrCache", url);
return true;
}else
if (plugins.Find("ImageLibrary")){
if (string.IsNullOrEmpty(shortName)) shortName=url;
plugins.Find("ImageLibrary").Call("AddImage", url, shortName);
//Puts($"Add Image {shortName}");
return true;
}
return false;
}
}
}