1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Downloads
  4. Galerie
    1. Alben
  5. Toolbox
    1. Passwort Generator
    2. Portchecker
  6. Mitglieder
    1. Mitgliedersuche
    2. Benutzer online
    3. Trophäen
    4. Team
Sa: 17 Mai 2025
  • Anmelden oder registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Dateien
  • Seiten
  • Bilder
  • Erweiterte Suche

Schön, dass du den Weg zu NodeZone.net gefunden hast! Aktuell bist du nicht angemeldet und kannst deshalb nur eingeschränkt auf unsere Community zugreifen. Um alle Funktionen freizuschalten, spannende Inhalte zu entdecken und dich aktiv einzubringen, registriere dich jetzt kostenlos oder melde dich mit deinem Account an.

Anmelden oder registrieren
    1. Nodezone.net Community
    2. Forum
    3. Gameserver & Hosting
    4. ArmA Series - ArmA 3 / Reforger
    5. Tutorials & Releases

    Datenmüll automatisch beseitigen

      • Altis Life
    • Shinji
    • 14. Juni 2016 um 09:09
    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 14. Juni 2016 um 09:09
      • #1

      Heyho Commu :)


      Da ich noch immer ein paar Kapazitäten habe um euch einige Dinge zu entwickeln, setze ich einfach dieses TUT noch zu meiner Referenzliste hinzu.


      Ich denke jeder kennt das Problem, Spieler kommen auf den Server, schauen sich ein paar Minuten alles an, gehen vom Server und kommen nie wieder.
      Oder aber, Spieler kommen auf den Server und wollen einfach nur die Mission abgreifen, die werden jedoch in der DB gespeichert und bleiben nun als Müll zurück.

      Mit der Zeit sammeln sich so hunderte "unbenutze" Accounts an und man verliert den Überblick.


      Dafür denke ich, habe ich eine Lösung für euch.


      Voraussetzungen:
      extDB2 <-
      AL Version 4.+ <-
      MySQL als DB <-
      gesunden Menschenverstand


      Fangen wir mit dem Code an für die Serverseitige Einstellung.

      Server -> init.sqf;

      Code
      ["resetLifeVehicles",1] spawn DB_fnc_asyncCall; // in der init.sqf im Server sollte diese Zeile stehen und darunter
      ["deleteOldPlayer",1] spawn DB_fnc_asyncCall;
      // fügen wir diese Zeile zunächst einmal ein :)


      Dies ist der Aufruf zur DB eine Prozedur zu starten (folgt noch).


      Server -> Functions\MySQL\fn_queryRequest.sqf;

      Code
      // sucht bitte folgende Zeilen:
      for "_i" from 0 to (count _old)-1 do
      {
      	_data = _old select _i;	
      	_old set[_i,[_data select 0, ([_data select 1,1] call DB_fnc_bool)]];
      };
      _queryResult set[6,_old];


      Unterhalb dieser Zeilen kommt nun folgendes:


      Code
      _query = format["DateDiffNew:%1",_uid]; 
      [_query,1] call DB_fnc_asyncCall;
      
      
      
      
      // wir updaten nur, also brauchen wir keine Results

      Nun kommen wir zum etwas Haarigem Teil.

      MySQL Einstellungen
      ACHTUNG! Wer Navicat nutzt, dem kann ich nur empfehlen "MySQL Workbench" zu nutzen. Kostenfrei wird ständig aktualisiert und man hat weit mehr Möglichkeiten etwas einzustellen.
      Diesen Part kann ich derzeit nur in Workbench bereitstellen, da ich weder Navicat nutze noch weiß ob es diese Einstellungen dort gibt.


      Zunächst editiert ihr eure Tabelle für den Spieler und fügt eine weitere Spalte ein:

      Erklärung ->
      Checkbox 1 = PK -> nicht anklicken
      Checkbox 2 = NN -> NotNull -> bitte anklicken!

      Ganz hinten ist der default wert der beim neuerstellen eines Charakters automatisch eingetragen wird. Diesen müsst ihr EXAKT so eintragen, auch mit den einfachen Anführungszeichen.

      Dieses 'NOW()' steht im übrigen dafür, die Aktuelle Uhrzeit sowie Datum in diese Spalte einzutragen. Diese wird bei der Prozedur später entscheidend sein.


      Speichert nun die Table ab und geht in den Reiter "Stored Procedures"

      Legt eine neue Prozedur an mit dem Namen

      deleteOldPlayer

      In dieser Neuen Prozedur fügt ihr nun diese Zeilen ein und speichert es vorerst ab.

      Code
      CREATE DEFINER=`MYSQL-USER`@`localhost` PROCEDURE `deleteOldPlayer`()
      BEGIN	
      	DELETE FROM `houses` WHERE `pid` IN (SELECT `playerid` FROM `players` WHERE (DATEDIFF(NOW(),`logged`) >=60));
          DELETE FROM `vehicles` WHERE `pid` IN (SELECT `playerid` FROM `players` WHERE (DATEDIFF(NOW(),`logged`) >=60));
          DELETE FROM `players` WHERE (DATEDIFF(NOW(),`logged`) >=60);
      END


      Was bedeuten diese Zeilen?
      Die Prozedur sucht nun von oben nach unten, die Tabellen Houses, Vehicles bis Players ab und nimmt dabei den Wert von 'logged'
      Ist der Zeitunterschied nun Größer oder gleich 60 (Tage) wird der Spieler einschließlich aller Häuser sowie seine Fahrzeuge aus der Datenbank UNWIDERRUFLICH gelöscht.

      Diese 60, steht für die Anzahl an Tagen. Ich empfehle eine Zahl hier zwischen 30 und 90. Quasi ein Monat bis 3 Monate.


      Achtet hier darauf EUREN Datenbank Nutzernamen einzutragen!


      Nun fehlt lediglich die Abfrage für extDB2 bzw. die kleinen Zeilen die der Datenbank sagen sollen dass sie dem Spieler das Neue Datum beim Login setzen soll:


      Code
      ;;______________________________________________________________
      [DateDiffNew]
      ;;
      SQL1_1 = UPDATE players SET logged=NOW() WHERE playerid=?; 
      
      
      
      
      SQL1_INPUTS = 1
      Number of Inputs = 1
      
      
      
      
      
      
      
      ;;______________________________________________________________
      
      
      
      
      [DeleteOldPlayer]
       
      SQL1_1 = CALL deleteOldPlayer;
      
      
      
      
      Number of Inputs = 0
      Prepared Statement Cache = false
      
      
      
      
      ;;______________________________________________________________
      Alles anzeigen

      Ziemlich einfach gestaltet oder?
      Warum der Schwierigkeitsgrad 3? -> Wie oben beschrieben, kann ich euch nicht sagen wie es bei Navicat läuft, sollte mir das jemand erklären können, wird der Eintrag nachgereicht und mit Namen versehen :)


      Ich übernehme KEINERLEI Verantwortung wenn ihr diese Zeilen nicht zum laufen bringt.


      ~ Shinji

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

      2 Mal editiert, zuletzt von Shinji (18. Juni 2016 um 19:06)

    • BEC2016
      Frischling
      Reaktionen
      4
      Trophäen
      10
      Beiträge
      15
      • 14. Juni 2016 um 16:14
      • #2

      Da Hat Woll Einer Sein Script Aus sein Alten Datei 4.0 ausgegraben

      :D :D :D

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 14. Juni 2016 um 16:17
      • #3

      Joa aber die Zeilen hatte ich damals eigentlich für Warfare erstellt.

      :)

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • dingo
      Anfänger
      Reaktionen
      8
      Trophäen
      11
      Beiträge
      43
      • 15. Juni 2016 um 20:53
      • #4

      gibst das auch für die 3.1.4.8 exdb

    • BEC2016
      Frischling
      Reaktionen
      4
      Trophäen
      10
      Beiträge
      15
      • 15. Juni 2016 um 21:04
      • #5

      Sollte gehen wenn Du da und ihr Was umschreibst

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 16. Juni 2016 um 08:14
      • #6
      Zitat von dingo

      gibst das auch für die 3.1.4.8 exdb

      Ich unterstütze eigentlich keine älteren Versionen mehr, daher kann ich ATM auch nichts dazu sagen.

      In der Theorie sollte aber nur der DB aufruf geändert werden. -> dafür einfach bei dir in der init.sqf des Servers schauen wie Tonic die deleteoldvehicles aufruft.
      Der Rest sollte gleich bleiben

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • script /Vincent/dev/null
      Kenner
      Reaktionen
      266
      Trophäen
      10
      Beiträge
      455
      • 16. Juni 2016 um 11:13
      • #7

      @Shinji Wieso nutzt du dazu SQF? Du kannst doch einfach eine neue MySQL Prozedur anlegen, die automatisch alle paar Minuten/Stunden/Tage/Wochen/Monate, etc. einen Timestamp prüft.
      Die Voraussetzung ist, dass du so eine Spalte (Timestamp = Text = UNIX-Timestamp) in der "players"-Tabelle erstellst.
      Und dann brauchst du auch den "Versionsunterschied" von Altis Life nicht mehr beachten.

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 16. Juni 2016 um 11:17
      • #8
      Zitat von script /Vincent/dev/null

      @Shinji Wieso nutzt du dazu SQF? Du kannst doch einfach eine neue MySQL Prozedur anlegen, die automatisch alle paar Minuten/Stunden/Tage/Wochen/Monate, etc. einen Timestamp prüft.
      Die Voraussetzung ist, dass du so eine Spalte (Timestamp = Text = UNIX-Timestamp) in der "players"-Tabelle erstellst.
      Und dann brauchst du auch den "Versionsunterschied" von Altis Life nicht mehr beachten.


      Ich nutze das bereits, zumindest ähnlich. Aber erkläre doch mal einem Laien wie er das dann einzustellen hat :)

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    • script /Vincent/dev/null
      Kenner
      Reaktionen
      266
      Trophäen
      10
      Beiträge
      455
      • 16. Juni 2016 um 11:18
      • #9
      Zitat von Shinji

      Ich nutze das bereits, zumindest ähnlich. Aber erkläre doch mal einem Laien wie er das dann einzustellen hat :)

      @Shinji Es gibt so etwas wie Code-Schnipsel, wenn man keine Lust hat, das zu erklären xD.
      Es ist ja nicht schwer, nur sind hier die meisten Nutzer nicht mit SQL vertraut...

      Zu mindestens ist der MySQL-Code dafür weniger, als das jetzige Tutorial. :D
      Und wenn man ganz clever ist, dann kopiert einfach den SQL-Code für die neue DB Spalte mit in den gesamten SQL-Code.

      Ohhh man.

    • Saturin78
      Profi
      Reaktionen
      409
      Trophäen
      10
      Beiträge
      1.340
      • 18. Juni 2016 um 17:18
      • #10

      Hallole,

      ich habe das so eingetragen und er setzt das Datum in die Spalte usw. Das geht soweit. Er bringt aber diese Fehlermeldung in den DB Logs. Weiß jemand an was das liegt?

      Spoiler anzeigen


      extDB2: Version: 65
      extDB2: https://github.com/Torndeco/extDB2
      extDB2: Windows Version
      Message: All development for extDB2 is done on a Linux Dedicated Server
      Message: If you would like to Donate to extDB2 Development
      Message: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2SUEFTGABTAM2
      Message: Also leave a message if there is any particular feature you would like to see added.
      Message: Thanks for all the people that have donated.
      Message: Torndeco: 20/02/15


      extDB2: Found [lexicon]extdb[/lexicon]-conf.ini
      extDB2: Detected 6 Cores, Setting up 6 Worker Threads


      [16:39:16:656588 +02:00] [Thread 4140] extDB2: Database Type: MySQL
      [16:39:16:669804 +02:00] [Thread 4140] extDB2: Database Session Pool Started
      [16:39:16:670788 +02:00] [Thread 4140] extDB2: SQL_CUSTOM_V2: Loading Template Filename: C:\server\Testserver\@extDB2\[lexicon]extDB[/lexicon]\sql_custom_v2\altis-life-rpg-4.ini
      [16:39:16:670788 +02:00] [Thread 4140] extDB2: SQL_CUSTOM_V2: Version 12 Detected, Latest Version 12 Available
      [16:39:16:884013 +02:00] [Thread 5424] extDB2: SQL_CUSTOM_V2: Error No Custom Call Not Found: Input String deleteOldPlayer
      [16:39:16:884146 +02:00] [Thread 5424] extDB2: SQL_CUSTOM_V2: Error No Custom Call Not Found: Callname deleteOldPlayer

      Ich nutze AL4.0 und exDB2.

      In dem TUT hat sich en kleiner Fehler eingeschlichen. In der Prozedur steht delteOldPlayer, das sollte doch sicher deleteOldPlayer heißen, oder nicht?

      MfG

      Saturin78

      Tapse mich wieder ins Arma3 xxx-Life rein :D

    • Shinji
      Profi
      Reaktionen
      576
      Trophäen
      10
      Beiträge
      778
      • 18. Juni 2016 um 18:17
      • #11

      Da hab ich mich wohl irgendwie verschrieben :D sorry, ist geändert.
      Danke für die Info :)

      Software Entwickler -
      Präzises Rätselraten, basierend auf unzuverlässigen Daten und fragwürdigem Wissen der Auftraggeber.

    Registrieren oder Einloggen

    Du bist noch kein Mitglied von Native-Servers.com? Registriere dich kostenlos und werde Teil einer großartigen Community!

    Benutzerkonto erstellen

    Benutzer online in diesem Thema

    • 1 Besucher

    Wichtige Links & Informationen

    Server & Hosting-Ressourcen

      Server Administration & Hosting Basics

      Windows Server Support & Guides

      Linux Server Configuration & Help

      Setting up TeamSpeak 3 & VoIP Servers

      Domains & Web Hosting for Beginners & Professionals

      Cloud Hosting, Docker & Kubernetes Tutorials

    Gameserver & Modding-Ressourcen

      ArmA 3 Tutorials & Script Collection

      Renting & Operating Gameservers

      DayZ Server Management & Help

      FiveM (GTA V) Server & Script Development

      Rust Server Modding & Administration

      Setting up & Optimizing ARK Survival Servers

    NodeZone.net – Deine Community für Gameserver, Server-Hosting & Modding

      NodeZone.net ist dein Forum für Gameserver-Hosting, Rootserver, vServer, Webhosting und Modding. Seit 2015 bietet unsere Community eine zentrale Anlaufstelle für Server-Admins, Gamer und Technikbegeisterte, die sich über Server-Management, Hosting-Lösungen und Spielemodding austauschen möchten.


      Ob Anleitungen für eigene Gameserver, Hilfe bei Root- und vServer-Konfigurationen oder Tipps zu Modding & Scripting – bei uns findest du fundiertes Wissen und praxisnahe Tutorials. Mit einer stetig wachsenden Community findest du hier Antworten auf deine Fragen, Projektpartner und Gleichgesinnte für deine Gaming- und Serverprojekte. Schließe dich NodeZone.net an und werde Teil einer aktiven Community rund um Server-Hosting, Gameserver-Management und Modding-Ressourcen.

    Wer jetzt nicht teilt ist selber Schuld:
    1. Nutzungsbestimmungen
    2. Datenschutzerklärung
    3. Impressum
    4. Urheberrechts- oder Lizenzverstoß melden
  • Trimax Design coded & layout by Gino Zantarelli 2023-2025©
    Community-Software: WoltLab Suite™