Datenbank Befehle bei DayZ

Aus Nitradopedia
Wechseln zu: Navigation, Suche
Dayzmod header.png
Miete dir jetzt deinen eigenen prepaid DayZ Mod Server auf nitrado.net

Vor jeder Änderung an der Datenbank sollten Backups angelegt werden! Dies beugt ärgerlichem Datenverlust vor, welcher selbst durch die trivialsten Tippfehler erzeugt werden kann.

MySQL ist sehr anfällig für Groß- und Kleinschreibung, sollte ein Tabellen oder Zeilen Name in diesem Artikel nicht mir eurer Datenbank übereinstimmen, so passt diesen bitte entsprechend an.

Leere Objekte entfernen

DELETE FROM `Object_DATA` 
WHERE `LastUpdated` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 14 DAY) 
AND `Datestamp` < DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 24 DAY) 
AND ( 
(`Inventory` IS NULL) OR (`Inventory` = '[]') OR (`Inventory` = '[[[],[]],[[],[]],[[],[]]]') 
) AND `CharacterID`='0'

Dieser MySQL Befehl löscht Objekte die länger als 14 Tage nicht benutzt wurden jedoch nur wenn sie schon länger als 24 Tage auf dem Server vorhanden sind, wobei auch sichergestellt wird das diese Objekte keine Gegenstände enthalten. Außerdem wird geprüft ob das Objekt einem Spieler gehört. Zu beachten ist, das Fahrzeuge und Gebäude, welche mit dem Infistar Admin Tool erstellt wurden, von diesem Tool auch entfernt werden. Um dies zu verhindern, muss den Objekten in der Datenbank eine 'CharacterID' größer 0 zugewiesen werden.

Zerstörte Objekte entfernen

DELETE FROM `Object_DATA` WHERE ((`Damage` ='1.00000') OR (`Damage`='1'))

Dieser Befehl löscht zerstörte Objekte aus der Datenbank und schafft so etwas Platz auf der Karte.

Fahrzeuge ohne Schlüssel aufschließen

UPDATE
`Object_DATA`
SET
`Object_DATA`.`CharacterID` = 0
WHERE
`Object_DATA`.`CharacterID` <> 0
AND `Object_DATA`.`CharacterID` <= 12500
AND `Object_DATA`.`Classname` NOT LIKE 'Tent%'
AND `Object_DATA`.`Classname` NOT LIKE '%Locked'
AND `Object_DATA`.`Classname` NOT LIKE 'Land%'
AND `Object_DATA`.`Classname` NOT LIKE 'Cinder%'
AND `Object_DATA`.`Classname` NOT LIKE 'Wood%'
AND `Object_DATA`.`Classname` NOT LIKE 'Metal%'
AND `Object_DATA`.`Classname` NOT LIKE '%Storage%'
AND `Object_DATA`.`Classname` NOT IN ('OutHouse_DZ', 'GunRack_DZ', 'WorkBench_DZ', 'Sandbag1_DZ', 'FireBarrel_DZ', 'DesertCamoNet_DZ', 'StickFence_DZ', 'LightPole_DZ', 'DeerStand_DZ', 'ForestLargeCamoNet_DZ', 'Plastic_Pole_EP1_DZ', 'Hedgehog_DZ', 'FuelPump_DZ', 'Fort_RazorWire', 'SandNest_DZ', 'ForestCamoNet_DZ', 'Fence_corrugated_DZ', 'CanvasHut_DZ', 'Generator_DZ')
AND FindVehicleKeysCount(Object_DATA.CharacterID) = 0

Dieser Befehl filtert alle Fahrzeuge aus der Objekte Tabelle die abgeschlossen sind und keine Schlüssel besitzen. Anschließend werden diese Fahrzeuge aufgeschlossen.

Fahrzeuge ohne Schlüssel entfernen

DELETE FROM
`Object_DATA`
WHERE
`Object_DATA`.`CharacterID` <> 0
AND `Object_DATA`.`CharacterID` <= 12500
AND `Object_DATA`.`Classname` NOT LIKE 'Tent%'
AND `Object_DATA`.`Classname` NOT LIKE '%Locked'
AND `Object_DATA`.`Classname` NOT LIKE 'Land%'
AND `Object_DATA`.`Classname` NOT LIKE 'Cinder%'
AND `Object_DATA`.`Classname` NOT LIKE 'Wood%'
AND `Object_DATA`.`Classname` NOT LIKE 'Metal%'
AND `Object_DATA`.`Classname` NOT LIKE '%Storage%'
AND
`Object_DATA`.`Classname` NOT IN ('OutHouse_DZ', 'GunRack_DZ', 
'WorkBench_DZ', 'Sandbag1_DZ', 'FireBarrel_DZ', 'DesertCamoNet_DZ', 
'StickFence_DZ', 'LightPole_DZ', 'DeerStand_DZ', 
'ForestLargeCamoNet_DZ', 'Plastic_Pole_EP1_DZ', 'Hedgehog_DZ', 
'FuelPump_DZ', 'Fort_RazorWire', 'SandNest_DZ', 'ForestCamoNet_DZ', 
'Fence_corrugated_DZ', 'CanvasHut_DZ', 'Generator_DZ')
AND FindVehicleKeysCount(Object_DATA.CharacterID) = 0;

Dieser Befehl löscht alle Fahrzeuge aus der Datenbank, zu denen kein Schlüssel gefunden werden konnte.

Händler Inventar auffüllen

UPDATE `traders_data` 
SET qty=100 
WHERE qty <= 10 
AND afile<>'trade_any_vehicle' 
AND afile<>'trade_any_weapons' 
AND afile<>'trade_items' 
AND afile<>'trade_any_boat' 
AND afile<>'trade_backpacks'

Dieser Befehl setzt die Menge der Gegenstände im Händler Inventar auf 100, sollten diese unter 10 fallen. Die betroffenen Gegenstände sind als AND Abfragen im Befehl zu sehen und können so beliebig manipuliert werden.

Objekte zum Händler Inventar hinzufügen

INSERT INTO `Traders_Data` (`item`,`qty`,`buy`,`sell`,`order`,`tid`,`afile`) VALUES
('["DMR",3]', 1000, '[1,"ItemBriefcase100oz",1]', '[3,"ItemGoldBar10oz",1]',0, 526, 'trade_weapons'),
('["SUV",2]', 1000, '[1,"ItemBriefcase100oz",1]', '[3,"ItemGoldBar10oz",1]',0, 535, 'trade_any_vehicle),
('["ItemSoda",1]', 1000, '[4,"ItemGoldBar10oz",1]', '[1,"ItemGoldBar10oz",1]',0, 529, 'trade_items');

Dieser Befehl fügt Objekte zu bestehenden Händlern hinzu, in diesem Fall 3 Stück in einer sogenannten Query. Die einzufügenden Datensätze sind hinter der VALUES Direktive definiert, wobei die von runden klammern umschlossene Werte einen Datensatz darstellen. Die Datensätze müssen mit Kommas abgetrennt sein, der letzte schließt die Query mit einem Semikolon ab.

Hilfreiche kleine Befehle

Nur einen bestimmten Gegenstand beim Händler nachfüllen

UPDATE `Traders_DATA` SET qty=100 WHERE `item` LIKE '%ItemVault%' AND qty < 100;

Dieser Befehl füllt den durch ItemVault definierten Gegenstand bei allen Händlern nach. Es muss nicht der vollständige Name des Gegenstands ausgeschrieben werden, jedoch sollte beachtet werden, dass die verwendete Abkürzung nicht auch auf einen anderen Gegenstand zutrifft, da dieser sonst auch betroffen wäre.

Alle Fahrzeuge reparieren

UPDATE Object_DATA SET parts="[]" AND SET damage="0";

Dieser Befehl repariert alle in der Datenbank eingetragenen Fahrzeuge. Praktisch ist, dass dieser Befehl einfach erweitert werden kann, um die Menge der betroffenen Fahrzeuge einzugrenzen.