Check inventory script/de
From OpenSimulator
m (→Überprüfen des Inventarskript) |
(→Verwendungszweck) |
||
(15 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Quicklinks|Check inventory script}}{{ReleaseInfo}} | {{Quicklinks|Check inventory script}}{{ReleaseInfo}} | ||
− | == | + | == Check Inventory Script == |
Vor 2022 akzeptierten die Viewer jede Form von Inventar. | Vor 2022 akzeptierten die Viewer jede Form von Inventar. | ||
Line 29: | Line 29: | ||
* Öffnen Sie das Skript mit Ihrem bevorzugten Editor und überprüfen Sie das oberste Setup auf $database_info Variablen. Tragen Sie hier die Verbindungsdaten ein, sodass sich das Skript mit Ihrer Grid-Datenbank, welche die Inventoryfolder-Tabelle enthält, verbinden kann. | * Öffnen Sie das Skript mit Ihrem bevorzugten Editor und überprüfen Sie das oberste Setup auf $database_info Variablen. Tragen Sie hier die Verbindungsdaten ein, sodass sich das Skript mit Ihrer Grid-Datenbank, welche die Inventoryfolder-Tabelle enthält, verbinden kann. | ||
− | * Führen Sie das Skript aus: <pre style="color: | + | * Führen Sie das Skript aus: <pre style="color: black"> php check_inventory.php FirstName LastName </pre> Dadurch wird das Skript ausgeführt, das nach schwerwiegenden Inventarfehlern sucht. |
− | * Führen Sie das Skript aus: <pre style="color: | + | * Führen Sie das Skript aus: <pre style="color: black"> php check_inventory.php FirstName LastName true</pre> Führt das Skript aus und sucht nach optionalen doppelten Ordnern desselben Typs. |
Das Skript kann auch für alle Benutzer ausgeführt werden, aber die Ausgabe wird ziemlich groß sein. Es ist am besten, wenn möglich, die Ausgabe in eine Datei zu leiten. | Das Skript kann auch für alle Benutzer ausgeführt werden, aber die Ausgabe wird ziemlich groß sein. Es ist am besten, wenn möglich, die Ausgabe in eine Datei zu leiten. | ||
− | <pre style="color: | + | <pre style="color: black"> php check_inventory.php everyone true</pre> Führt das Skript aus und sucht nach optionalen doppelten Ordnern desselben Typs für alle Benutzer in der UserAccounts-Tabelle. |
− | + | ||
− | + | ||
<div style="background-color:#FFA0A0; padding:10px; padding-bottom:5px; border: 1px #FF544F solid"> | <div style="background-color:#FFA0A0; padding:10px; padding-bottom:5px; border: 1px #FF544F solid"> | ||
− | '''Wenn dies kompliziert oder gefährlich erscheint, liegt dies daran, dass Änderungen in der Datenbank problematisch sein können. Wenn Sie dies lieber jemandem mit mehr Wissen überlassen möchten, können Sie sich gerne an die Leute im IRC wenden, um Hilfe zu erhalten, oder einen der vielen [http://opensimulator.org/wiki/FAQ#OpenSimulator_in_the_Wild providers of OpenSim hosted services].''' | + | '''Vorsicht, es können alle doppelten Verzeichnisse komplett gelöscht werden, sodass gar kein Verzeichnis mehr vorhanden ist. Wenn dies kompliziert oder gefährlich erscheint, liegt dies daran, dass Änderungen in der Datenbank problematisch sein können. Wenn Sie dies lieber jemandem mit mehr Wissen überlassen möchten, können Sie sich gerne an die Leute im IRC wenden, um Hilfe zu erhalten, oder einen der vielen [http://opensimulator.org/wiki/FAQ#OpenSimulator_in_the_Wild providers of OpenSim hosted services].''' |
</div> | </div> | ||
Line 48: | Line 46: | ||
Die Inventareinrichtung sollte einen einzelnen Stammordner namens "My Inventory" haben. Alle Ordner sollten unterhalb dieses Ordners sortiert werden. | Die Inventareinrichtung sollte einen einzelnen Stammordner namens "My Inventory" haben. Alle Ordner sollten unterhalb dieses Ordners sortiert werden. | ||
− | <pre style="color: red">Achtung!!! Auch wenn | + | <pre style="color: red">Achtung!!! Auch wenn Ihnen im Inventar Deutsche Namen der Standartverzeichnisse angezeigt werden, müssen sie beim zugriff die Englischen Namen dieser Ordner benutzen.</pre> |
− | Die üblichen Ordner für Kleidung, Gegenstände und sogar Papierkorb haben bestimmte Typen, die | + | Die üblichen Ordner für Kleidung, Gegenstände und sogar der Papierkorb haben bestimmte Typen, die deren Symbole setzen und eine Möglichkeit bieten, eingehende Gegenstände entsprechend zu sortieren. Nur ein Satz Ordnet sollte existieren, aber OpenSim fügt einen zweiten Satz Order zum Inventar unter dem Ordner „Mein Koffer“ (My Suitcase) hinzu, der für das HG1.0-Protokoll verwendet wird. |
Weitere Informationen zu den Ordnertypen finden Sie in der [http://opensimulator.org/wiki/Inventoryfolders Database documentation] | Weitere Informationen zu den Ordnertypen finden Sie in der [http://opensimulator.org/wiki/Inventoryfolders Database documentation] | ||
− | Um Probleme zu lösen, muss die Bestandsstruktur auf die richtige, von den | + | Um Probleme zu lösen, muss die Bestandsstruktur auf die richtige, von den Viewern akzeptierte Struktur zurückgesetzt werden. Dazu müssen Sie die Datenbanktabelle "inventoryfolders" bearbeiten. Dies kann über die Befehlszeile oder über externe Programme wie [https://dbeaver.io/ DBeaver] oder [https://www.navicat.com/en/ Navicat] geschehen, je nachdem was Sie bevorzugen. |
Line 64: | Line 62: | ||
==== Benutzer suchen ==== | ==== Benutzer suchen ==== | ||
− | Verwenden Sie entweder Filter oder eine SQL-Abfrage, um | + | Verwenden Sie entweder Filter oder eine SQL-Abfrage, um einen Benutzer auszuwählen. Hierzu wird der Filter für die "AgentID" = Benutzer UUID verwendet. |
<pre style="color: darkblue"> SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' ;</pre> | <pre style="color: darkblue"> SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' ;</pre> | ||
Line 70: | Line 68: | ||
==== Überprüfen der spezifischen Ordner ==== | ==== Überprüfen der spezifischen Ordner ==== | ||
− | Das Skript sucht nach Ordnern, die nicht vom Typ "-1" sind, was auf einen normalen Ordner hinweist | + | Das Skript sucht nach Ordnern, die nicht vom Typ "-1" sind, was auf einen normalen Ordner hinweist den ein Benutzer erstellen könnte. Um nur diese Ordner abzurufen, fügen Sie einen Filter hinzu, um nur Ordner anzuzeigen, die nicht von diesem Typ sind. |
<pre style="color: darkblue"> SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' AND `type` != '-1' ;</pre> | <pre style="color: darkblue"> SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' AND `type` != '-1' ;</pre> | ||
Line 76: | Line 74: | ||
==== Duplikate finden ==== | ==== Duplikate finden ==== | ||
− | Die Ordner unter "My Suitcase" zu finden ist jetzt ganz einfach. Sie sollten den Ordner "My Inventory" in den ausgewählten Zeilen sehen, der auch die parentFolderID anzeigt, die ein null key sein sollte | + | Die Ordner unter "My Suitcase" zu finden ist jetzt ganz einfach. Sie sollten den Ordner "My Inventory" in den ausgewählten Zeilen sehen, der auch die parentFolderID anzeigt, die ein null key sein sollte "00000000-0000-0000-0000-000000000000". Sie können die folderID auch hier sehen. Diese UUID ist bei alle richtigen anderen Inventarordner wie "Clothing", "Objects" und "Trash" in ihrer jeweiligen parentFolderID zu sehen. Dadurch wird eine Hierarchie erstellt, die mit "My Inventory" beginnt und sich bis zu allen Ordnern in der Inventarstruktur erstreckt. |
− | Wenn Sie die Abfrage jetzt nach dem folderName sortieren, werden die Duplikate und ihre übergeordnete parentFolderID | + | Wenn Sie die Abfrage jetzt nach dem folderName sortieren, werden die Duplikate und ihre übergeordnete parentFolderID sichtbar. Speziell Ordner die nicht auf den Ordner "My Inventory", sondern auf den Ordner "My Suitcase" und seine folderID zeigen kann man so leicht erkennen. |
<pre style="color: darkblue"> SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' AND `type` != '-1' ORDER BY folderName DESC;</pre> | <pre style="color: darkblue"> SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' AND `type` != '-1' ORDER BY folderName DESC;</pre> | ||
− | + | Der Ornder "My Suitcase" ist unter "My Inventory" angelegt was an der parentfolderID zu erkennen ist. | |
==== Duplikate entfernen ==== | ==== Duplikate entfernen ==== | ||
Line 88: | Line 86: | ||
Sofern Sie das HG1.0-Protokoll nicht mit dem Ordner „My Suitcase“ ausführen, um Elemente im Hypergrid freizugeben, ohne Ihr gesamtes Inventar offenzulegen, benötigen Sie den Ordner oder seine Unterordner nicht wirklich. | Sofern Sie das HG1.0-Protokoll nicht mit dem Ordner „My Suitcase“ ausführen, um Elemente im Hypergrid freizugeben, ohne Ihr gesamtes Inventar offenzulegen, benötigen Sie den Ordner oder seine Unterordner nicht wirklich. | ||
− | Es ist jedoch möglicherweise nicht die beste Idee, den Ordner vollständig zu entfernen, wenn er möglicherweise Elemente enthält, die der Benutzer dort abgelegt hat. Ändern Sie stattdessen einfach den Typ jedes doppelten Ordners auf "-1", um sie zu normalen Ordnern zu machen. | + | Es ist jedoch möglicherweise nicht die beste Idee, den Ordner vollständig zu entfernen, wenn er möglicherweise Elemente enthält, die der Benutzer dort abgelegt hat. Ändern Sie stattdessen einfach den Typ jedes doppelten Ordners auf "-1", um sie zu normalen Ordnern zu machen. Alle Ordner unter "My Suitcase" sollten so den Typ "-1" haben. |
<pre style="color: darkblue"> UPDATE inventoryfolders SET `type` = '-1' WHERE `AgentID` = 'user-uuid' AND `parentFolderID` != 'folderID of My Inventory' AND `parentFolderID` != '00000000-0000-0000-0000-000000000000'; </pre> | <pre style="color: darkblue"> UPDATE inventoryfolders SET `type` = '-1' WHERE `AgentID` = 'user-uuid' AND `parentFolderID` != 'folderID of My Inventory' AND `parentFolderID` != '00000000-0000-0000-0000-000000000000'; </pre> | ||
− | Dadurch werden alle Ordner so eingestellt, dass sie für diesen bestimmten Benutzer "-1" | + | Dadurch werden alle Ordner so eingestellt, dass sie für diesen bestimmten Benutzer den Typ "-1" haben, wenn der übergeordnete Ordner nicht "My Inventory" ist, wodurch alle Unterordner von "My Suitcase" geändert werden. |
==== Überprüfung fehlerhafter Root Ordner ==== | ==== Überprüfung fehlerhafter Root Ordner ==== | ||
Line 104: | Line 102: | ||
<pre style="color: darkblue"> UPDATE inventoryfolders SET `type` = '8' WHERE `AgentID` = 'user-uuid' AND `folderName` = 'My Inventory'; </pre> | <pre style="color: darkblue"> UPDATE inventoryfolders SET `type` = '8' WHERE `AgentID` = 'user-uuid' AND `folderName` = 'My Inventory'; </pre> | ||
− | Diese Abfragen können, sollten aber wahrscheinlich nicht für alle Benutzer ausgeführt werden | + | Diese Abfragen können, sollten aber wahrscheinlich nicht für alle Benutzer ausgeführt werden. Indem man die where-Klausel, welche die UUID des Agenten angibt, weglässt können alle Benutzer abgeändert werden. '''Wir empfehlen dringend, dass Sie sich das Inventar jedes Benutzers separat ansehen und nur bei Bedarf Änderungen vornehmen die mit dem Benutzer abgesprochen sind!!!''' |
[[Category:German Translations]] | [[Category:German Translations]] |
Latest revision as of 21:54, 1 October 2024
Contents |
[edit] Check Inventory Script
Vor 2022 akzeptierten die Viewer jede Form von Inventar.
Dies hat sich nun geändert, da Viewern neuer Code hinzugefügt wurde, um zu überprüfen, ob die Bestandsstruktur ordnungsgemäß eingerichtet ist.
Leider weisen aufgrund von Fehlern und Änderungen in OpenSim einige ältere Inventare von Benutzern, die vor 2015 erstellt wurden,
problematische Strukturen auf, die dazu führen können, dass das Inventar nicht geladen oder die Anmeldung vollständig blockiert wird.
Dieses Skript soll Grid-Betreibern eine Möglichkeit geben, das Inventar eines Benutzers oder aller Benutzer zu validieren,
um zu sehen bei welchen wahrscheinlich Probleme auftreten und was genau falsch ist.
Wir beschreiben hier auch die Schritte und Tools zur Behebung dieser Probleme.
[edit] Das Skript
Derzeit ein Github-Gist der Einfachheit halber, bitte richten Sie Probleme oder Anfragen an IRC
[edit] Verwendungszweck
Das Skript erfordert einen Server, auf dem PHP7.4 installiert ist.
- Öffnen Sie das Skript mit Ihrem bevorzugten Editor und überprüfen Sie das oberste Setup auf $database_info Variablen. Tragen Sie hier die Verbindungsdaten ein, sodass sich das Skript mit Ihrer Grid-Datenbank, welche die Inventoryfolder-Tabelle enthält, verbinden kann.
- Führen Sie das Skript aus:
php check_inventory.php FirstName LastName
Dadurch wird das Skript ausgeführt, das nach schwerwiegenden Inventarfehlern sucht.
- Führen Sie das Skript aus:
php check_inventory.php FirstName LastName true
Führt das Skript aus und sucht nach optionalen doppelten Ordnern desselben Typs.
Das Skript kann auch für alle Benutzer ausgeführt werden, aber die Ausgabe wird ziemlich groß sein. Es ist am besten, wenn möglich, die Ausgabe in eine Datei zu leiten.
php check_inventory.php everyone trueFührt das Skript aus und sucht nach optionalen doppelten Ordnern desselben Typs für alle Benutzer in der UserAccounts-Tabelle.
Vorsicht, es können alle doppelten Verzeichnisse komplett gelöscht werden, sodass gar kein Verzeichnis mehr vorhanden ist. Wenn dies kompliziert oder gefährlich erscheint, liegt dies daran, dass Änderungen in der Datenbank problematisch sein können. Wenn Sie dies lieber jemandem mit mehr Wissen überlassen möchten, können Sie sich gerne an die Leute im IRC wenden, um Hilfe zu erhalten, oder einen der vielen providers of OpenSim hosted services.
[edit] So lösen Sie Probleme
Die Inventareinrichtung sollte einen einzelnen Stammordner namens "My Inventory" haben. Alle Ordner sollten unterhalb dieses Ordners sortiert werden.
Achtung!!! Auch wenn Ihnen im Inventar Deutsche Namen der Standartverzeichnisse angezeigt werden, müssen sie beim zugriff die Englischen Namen dieser Ordner benutzen.
Die üblichen Ordner für Kleidung, Gegenstände und sogar der Papierkorb haben bestimmte Typen, die deren Symbole setzen und eine Möglichkeit bieten, eingehende Gegenstände entsprechend zu sortieren. Nur ein Satz Ordnet sollte existieren, aber OpenSim fügt einen zweiten Satz Order zum Inventar unter dem Ordner „Mein Koffer“ (My Suitcase) hinzu, der für das HG1.0-Protokoll verwendet wird.
Weitere Informationen zu den Ordnertypen finden Sie in der Database documentation
Um Probleme zu lösen, muss die Bestandsstruktur auf die richtige, von den Viewern akzeptierte Struktur zurückgesetzt werden. Dazu müssen Sie die Datenbanktabelle "inventoryfolders" bearbeiten. Dies kann über die Befehlszeile oder über externe Programme wie DBeaver oder Navicat geschehen, je nachdem was Sie bevorzugen.
[edit] Erstellen einer Sicherung
Verwenden Sie Tools wie sqldump oder die oben genannten Datenbanktools, um zuerst eine Sicherungskopie der Inventoryfolders-Tabelle zu erstellen, bevor Sie Änderungen an der Tabelle vornehmen!
[edit] Benutzer suchen
Verwenden Sie entweder Filter oder eine SQL-Abfrage, um einen Benutzer auszuwählen. Hierzu wird der Filter für die "AgentID" = Benutzer UUID verwendet.
SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' ;
[edit] Überprüfen der spezifischen Ordner
Das Skript sucht nach Ordnern, die nicht vom Typ "-1" sind, was auf einen normalen Ordner hinweist den ein Benutzer erstellen könnte. Um nur diese Ordner abzurufen, fügen Sie einen Filter hinzu, um nur Ordner anzuzeigen, die nicht von diesem Typ sind.
SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' AND `type` != '-1' ;
[edit] Duplikate finden
Die Ordner unter "My Suitcase" zu finden ist jetzt ganz einfach. Sie sollten den Ordner "My Inventory" in den ausgewählten Zeilen sehen, der auch die parentFolderID anzeigt, die ein null key sein sollte "00000000-0000-0000-0000-000000000000". Sie können die folderID auch hier sehen. Diese UUID ist bei alle richtigen anderen Inventarordner wie "Clothing", "Objects" und "Trash" in ihrer jeweiligen parentFolderID zu sehen. Dadurch wird eine Hierarchie erstellt, die mit "My Inventory" beginnt und sich bis zu allen Ordnern in der Inventarstruktur erstreckt.
Wenn Sie die Abfrage jetzt nach dem folderName sortieren, werden die Duplikate und ihre übergeordnete parentFolderID sichtbar. Speziell Ordner die nicht auf den Ordner "My Inventory", sondern auf den Ordner "My Suitcase" und seine folderID zeigen kann man so leicht erkennen.
SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' AND `type` != '-1' ORDER BY folderName DESC;
Der Ornder "My Suitcase" ist unter "My Inventory" angelegt was an der parentfolderID zu erkennen ist.
[edit] Duplikate entfernen
Sofern Sie das HG1.0-Protokoll nicht mit dem Ordner „My Suitcase“ ausführen, um Elemente im Hypergrid freizugeben, ohne Ihr gesamtes Inventar offenzulegen, benötigen Sie den Ordner oder seine Unterordner nicht wirklich.
Es ist jedoch möglicherweise nicht die beste Idee, den Ordner vollständig zu entfernen, wenn er möglicherweise Elemente enthält, die der Benutzer dort abgelegt hat. Ändern Sie stattdessen einfach den Typ jedes doppelten Ordners auf "-1", um sie zu normalen Ordnern zu machen. Alle Ordner unter "My Suitcase" sollten so den Typ "-1" haben.
UPDATE inventoryfolders SET `type` = '-1' WHERE `AgentID` = 'user-uuid' AND `parentFolderID` != 'folderID of My Inventory' AND `parentFolderID` != '00000000-0000-0000-0000-000000000000';
Dadurch werden alle Ordner so eingestellt, dass sie für diesen bestimmten Benutzer den Typ "-1" haben, wenn der übergeordnete Ordner nicht "My Inventory" ist, wodurch alle Unterordner von "My Suitcase" geändert werden.
[edit] Überprüfung fehlerhafter Root Ordner
Neuere Versionen von OpenSim legen den Ordner „My Suitcase“ als Typ ab, der keinen Konflikt verursacht, normalerweise geben Sie „100“ ein, aber ältere Versionen haben ihn als Typ „8“ oder „9“ abgelegt, was einen schwerwiegenden Fehler verursacht. Um dies zu beheben, ändern Sie den Typ auf „100“.
UPDATE inventoryfolders SET `type` = '100' WHERE `AgentID` = 'user-uuid' AND `folderName` = 'My Suitcase';
In einigen Fällen ist der Ordner "My Inventory" möglicherweise noch vom alten Typ "9", was ebenfalls Probleme verursacht. Um dies zu beheben, muss es in Typ "8" geändert werden.
UPDATE inventoryfolders SET `type` = '8' WHERE `AgentID` = 'user-uuid' AND `folderName` = 'My Inventory';
Diese Abfragen können, sollten aber wahrscheinlich nicht für alle Benutzer ausgeführt werden. Indem man die where-Klausel, welche die UUID des Agenten angibt, weglässt können alle Benutzer abgeändert werden. Wir empfehlen dringend, dass Sie sich das Inventar jedes Benutzers separat ansehen und nur bei Bedarf Änderungen vornehmen die mit dem Benutzer abgesprochen sind!!!