Check inventory script/de

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(How to resolve issues)
(Duplikate finden)
Line 79: Line 79:
  
 
Wenn Sie die Abfrage jetzt nach dem folderName sortieren, werden die Duplikate und ihre übergeordnete parentFolderID leicht angezeigt, die nicht auf "My Inventory", sondern auf den Ordner "My Suitcase" und seine folderID zeigen.
 
Wenn Sie die Abfrage jetzt nach dem folderName sortieren, werden die Duplikate und ihre übergeordnete parentFolderID leicht angezeigt, die nicht auf "My Inventory", sondern auf den Ordner "My Suitcase" und seine folderID zeigen.
 
 
  
 
<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>

Revision as of 23:18, 12 May 2022

Contents

Überprüfen des Inventarskript

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.

Das Skript

Derzeit ein Github-Gist der Einfachheit halber, bitte richten Sie Probleme oder Anfragen an IRC

Check Inventory Script

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. Stellen Sie sie so ein, dass sie sich mit Ihrer Grid-Datenbank verbinden, die die Inventoryfolder-Tabelle enthält.
  • Führen Sie das Skript über aus
     php check_inventory.php FirstName LastName 
    Dadurch wird das Skript ausgeführt, das nach schwerwiegenden Inventarfehlern sucht.
  • Führen Sie das Skript über 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 true
Führt das Skript aus und sucht nach optionalen doppelten Ordnern desselben Typs für alle Benutzer in der UserAccounts-Tabelle.



Wenn dies kompliziert oder gefährlich erscheint, liegt dies daran, dass Änderungen in der Datenbank normalerweise direkt vorgenommen werden. 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.

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 Papierkorb haben bestimmte Typen, die ihnen ihre Symbole geben und eine Möglichkeit bieten, eingehende Gegenstände entsprechend zu sortieren. Nur ein Satz davon soll existieren, aber OpenSim fügt einen zweiten Satz dieser Ordner zum Inventar unter dem Ordner „Mein Koffer“ 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 Zuschauern akzeptierte Einrichtung zurückgesetzt werden. Dazu müssen Sie die Datenbanktabelle "inventoryfolders" bearbeiten. Dies kann über die Befehlszeile oder über externe Programme wie DBeaver oder Navicat je nachdem, was Sie bevorzugen.


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!


Benutzer suchen

Verwenden Sie entweder Filter oder eine SQL-Abfrage, um nur den Benutzer auszuwählen, um den wir uns mit dem Filter für die "AgentID" in den Inventarordnern kümmern.

 SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' ;

Ü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' ;

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, dh "00000000-0000-0000-0000-000000000000". Sie können die folderID auch hier sehen. Diese UUID ist das, was alle richtigen anderen Inventarordner wie Clothing, Objects und Trash in ihrer jeweiligen parentFolderID anzeigen. 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 leicht angezeigt, die nicht auf "My Inventory", sondern auf den Ordner "My Suitcase" und seine folderID zeigen.

 SELECT * FROM inventoryfolders WHERE `AgentID` = 'user-uuid' AND `type` != '-1' ORDER BY folderName DESC;

Observe, the "My Suitcase" folder's parent folder is also "My Inventory" folder.

Remove duplicates

Unless you are running the HG1.0 protocol using the "My Suitcase" folder to share items on the hypergrid without exposing your entire inventory you don't actually need the folder or it's sub-folders.

However, removing the folder entirely when it might contain items the user placed there might not be the best idea. Instead simply change the type of each duplicate folder to "-1" to make them regular folders.

 UPDATE inventoryfolders SET `type` = '-1' WHERE `AgentID` = 'user-uuid' AND `parentFolderID` != 'folderID of My Inventory' AND `parentFolderID` != '00000000-0000-0000-0000-000000000000'; 

This will set all folders to type "-1" for that specific user if the parent folder is not "My Inventory", which will change all "My Suitcase" sub-folders.

Checking bad root folders

Newer versions of OpenSim will put the "My Suitcase" folder as a type that does not conflict, usually type "100", but older versions will have put it as type "8" or "9", which causes a fatal error. To resolve this change the type to "100".

 UPDATE inventoryfolders SET `type` = '100' WHERE `AgentID` = 'user-uuid' AND `folderName` = 'My Suitcase'; 

In some cases the "My Inventory" folder might still be of the old type "9", which will also causes issues. To resolve this it needs to be changed to type "8".

 UPDATE inventoryfolders SET `type` = '8' WHERE `AgentID` = 'user-uuid' AND `folderName` = 'My Inventory'; 

These queries can, but probably should not be, run for all users by omitting the where clause specifying the agent UUID. We strongly suggest you look at each users inventory separately and make changes as required!!

General
About This Wiki