Image Manager
Über den Image Manager Der Image Manager ist ein elegantes und leistungsstarkes Tool für Entwickler, das eine leichtgewichtige Alternative zur ImageLibrary bietet. Seine einzigartige Handhabung und…
Über den Image Manager
Der Image Manager ist ein elegantes und leistungsstarkes Tool für Entwickler, das eine leichtgewichtige Alternative zur ImageLibrary bietet.
Seine einzigartige Handhabung und plugin-spezifische Rückrufe machen ihn außergewöhnlich einfach zu bedienen.
Installation
Füg das Plugin in den Order Plugins ein, dieser wird gefunden unter oxide\plugins oder carbon\plugins
Download: Image Manager
Konsolenbefehl
imagemanager.reset // kann nur von der Serverkonsole/Terminal ausgeführt werden, nicht vom Client aus.
Funktionen
Fehlerbehandlung: Gibt spezielle Debug-Informationen für Entwickler aus, wenn etwas fehlschlägt. Kann sich selbst reparieren, wenn die Dateien sv.files auf dem Server gelöscht wurden, aber keine Wipe durchgeführt wurde oder umgekehrt. Speichert Bilder mit eindeutigen Identifikatoren, um zuverlässiges Abrufen/Entfernen zu gewährleisten. Falls die Unity-Anfrage fehlschlägt, wird sie mit www erneut versucht.
Optimiertes Anfragemanagement: Verwendet Stapelverarbeitung, um Bild-Caching-Anfragen effizient zu verwalten. Entfernt automatisch Daten, die seit x Tagen nicht verwendet wurden (Standard = 30, 0 = deaktiviert). Setzt Stapellimits für Bilder (Standard = 30 & Avatare können 100 gleichzeitig pro Anfrage mit Steam API Key verarbeiten). Behält vorherige Wipe-Daten bei, um die Notwendigkeit zu reduzieren, alles bei jedem Wipe erneut zu tun. Gruppiert Anfragen in Stapel, um Ressourcen zu optimieren und Overhead zu reduzieren. Verwaltet große Mengen von Verbindungen, ohne die Leistung zu beeinträchtigen. Bearbeitet hohe Volumen von Bild-Caching-Anfragen während Serverwipes oder massenhaften Spielerwiederverbindungen. Verarbeitet und speichert Avatar-Bilder schnell mit Coroutine-basierter Ausführung. Verwaltet gleichzeitig Anfragen von mehreren Plugins ohne Konflikte oder Verlangsamungen. Erhält Reaktionsfähigkeit und Effizienz in dynamischen Serverumgebungen aufrecht.
Plugin-Kommunikation
Zusätzlich zu seiner Kernfunktionalität umfasst das System spezielle Logik, um die Kommunikation zwischen Plugins zu erleichtern. Jedes Plugin, das das Bild-Caching-System aufruft, wird benachrichtigt, wenn sein Stapel von Anfragen bereit oder abgeschlossen ist, was es ihm ermöglicht, mit seiner Logik fortzufahren, ohne auf den Abschluss aller Anfragen warten zu müssen. Diese Funktion verbessert die Flexibilität und Benutzerfreundlichkeit des Systems und gewährleistet eine reibungslose Integration mit verschiedenen Plugins und Arbeitsabläufen.
Beispiel für Plugin-Kommunikation für Bilder
// Beispiel Plugin: GUIShop
[PluginReference] private Plugin ImageManager;
private List<string> _pluginImages = new List<string>();
private Dictionary<string, string> _guishopImages = new Dictionary<string, string>();
private void OnServerInitialized()
{
// Fügt die Bilder zur Dateisystemliste für den Rückruf hinzu
if (ImageManager != null && ImageManager.IsLoaded)
ImageManager?.Call("AddImages", _pluginImages, FileStorage.Type.jpg, "GUIShop");
}
// Bei Plugin-Laden, für Nachladesituationen oder wenn das Plugin noch nicht geladen wurde.
private void OnPluginLoaded(Plugin name)
{
if (ImageManager != null && name.Name == ImageManager.Name && ImageManager.IsLoaded)
{
Puts("ImageManager wurde erkannt und GUIShop-Bilder werden jetzt verarbeitet");
// Fügt die Bilder zur Dateisystemliste für den Rückruf hinzu
ImageManager?.Call("AddImages", _pluginImages, FileStorage.Type.jpg, "GUIShop");
}
}
// Benutzerdefinierter Rückruf für GUIShop
void ImageManagerGUIShop(Dictionary<string, string> images)
{
_guishopImages = images;
// Gibt die gesendete URL als KEY mit dem Bild als Wert zurück
}
// Verwendung im GUI / UI
public void Pic(ref CuiElementContainer container, string parent, string name, string anchorMin, string anchorMax, string url)
{
CuiRawImageComponent rawImage = new CuiRawImageComponent();
rawImage.Png = _guishopImages[url];
container.Add(new CuiElement
{
Parent = parent,
Name = name,
Components =
{
rawImage,
new CuiRectTransformComponent
{
AnchorMin = anchorMin,
AnchorMax = anchorMax
}
}
});
}
Alles anzeigen
Beispiel für Plugin-Kommunikation für Avatare / Bild-Kombination
private HashSet<string> _storeImages = new HashSet<string>();
private Dictionary<string, string> _storedImages = new Dictionary<string, string>();
private Dictionary<string, string> _storedAvatars = new Dictionary<string, string>();
private void OnServerInitialized()
{
ImageManager?.Call("AddImages", _storeImages.ToList(), FileStorage.Type.jpg, "GUIShop");
}
private void OnPluginLoaded(Plugin name)
{
if (ImageManager != null && name.Name == ImageManager.Name)
{
Puts("ImageManager wurde erkannt und Bilder werden jetzt verarbeitet");
ImageManager?.Call("AddImages", _storeImages.ToList(), FileStorage.Type.jpg, "GUIShop");
}
}
// Benutzerdefinierter Rückruf für Rust ID-Bilder
private void ImageManagerRustID(Dictionary<string, string> received)
{
// Filtert die gewünschten Bilder aus der Rückgabe
foreach (var image in received)
{
if (_storeImages.Contains(image.Key))
{
_storedImages[image.Key] = image.Value;
_storeImages.Remove(image.Key);
if (_storeImages.Count == 0)
break;
}
}
}
// Aufgerufen, wenn neue Avatare gecached wurden, damit sie aktualisiert werden können
void ImageManagerPlayerConnected(Dictionary<string, string> avatars) => _storedAvatars = avatars;
// Verwendung im GUI-Beispiel
CuiRawImageComponent rawImage = new CuiRawImageComponent();
rawImage.Png = _storedAvatars[id]; // oder bei jedem Aufruf (string)ImageManager?.Call("GetAvatar", id);
// oder Bild rawImage.Png = _storedImages[key]
container.Add(new CuiElement
{
Parent = parent,
Name = name,
Components =
{
rawImage,
new CuiRectTransformComponent
{
AnchorMin = anchorMin,
AnchorMax = anchorMax
}
}
});
Alles anzeigen
API Hooks
- Avatare
- Wird aufgerufen, wenn das Plugin initial geladen/compiliert und bereit für die Nutzung ist.
- Ausgelöst, wenn neue Spieler ohne gespeichertes Bild verbunden sind.
- Ausgelöst durch Aktionen von Drittanbieter-Plugins.
- Aufgerufen, wenn Avatare entfernt wurden und die neue vollständige Liste verfügbar ist.
- Bilder
- Wird aufgerufen, wenn das Plugin initial geladen/compiliert und bereit für die Nutzung ist.
- Ausgelöst durch Aktionen von Drittanbieter-Plugins.
- Aufgerufen, wenn Bilder entfernt wurden und die neue vollständige Liste verfügbar ist.
API-Aufrufe
Diese sind API-Aufrufe, was bedeutet, dass du sie aufrufst.
ImageManager?.Call("AddImages", _pluginImages, FileStorage.Type.jpg, "GUIShop"); // Beispiel
// neue Hook, um individuelle Bildspeichertypen anzugeben
AddImages(Dictionary<string, FileStorage.Type> images, string plugin)
// Hook geändert
AddImages(List<string> images, FileStorage.Type format, string plugin)
// Hook geändert. Verwendet dies, um einen Speichertyp für alle Bilder anzugeben, die gespeichert werden sollen.
AddImage(string image, FileStorage.Type format, string plugin)
GetImage(string image) // gibt string zurück
GetImages(List<string> images) // gibt Dictionary<string, string> zurück
RemoveImage(string image)
RemoveImages(List<string> images)
AddAvatar(ulong player, string url, string plugin) // url ist optional, um benutzerdefiniertes Bild für Spieler bereitzustellen.
AddAvatar(string player, string url, string plugin) // url ist optional, um benutzerdefiniertes Bild für Spieler bereitzustellen.
AddAvatars(Dictionary<string, string> players, string plugin) // url ist optional, um benutzerdefiniertes Bild für Spieler bereitzustellen.
GetAvatar(string player) // gibt string zurück
GetAvatars(List<string> players) // gibt Dictionary<string, string> zurück
RemoveAvatar(string player)
RemoveAvatars(List<string> players)
Alles anzeigen
TODO
- MYSQL-Unterstützung hinzufügen, um eine zentrale Datenbank verfügbar zu machen statt jeder Serverinstanz.
- Discord-Unterstützung für Fehlerantworten hinzufügen.
Plugin
Angaben erfolgen ohne Gewähr auf Vollständigkeit, Richtigkeit und Aktualität.
Original-Tutorial des Plugins Image Manager von Khan
