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
Mi: 21 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. Hilfeforum

    Arma 3 extDB im Script benutzen?

      • Mapping & Modding
    • Zimtzimt
    • 24. Mai 2017 um 20:11
    • Geschlossen
    • Erledigt
    • Zimtzimt
      Anfänger
      Reaktionen
      2
      Trophäen
      10
      Beiträge
      67
      • 24. Mai 2017 um 20:11
      • #1

      Ich würde gerne wissen ob es irgendwo eine Anleitung gibt, wie man mit extDB richtig arbeitet wenn man kein Exile Wasteland oder Altis Life hat. WIe kann man eine Datenbank aufrufen und wie kann man Variablen darin speichern ?

      Ich bin im Bereich Datenbanken und Arma 3 noch relativ unerfahren würde mich daher über eine Antwort freuen.


      LG,

      Fabian

    • Stig
      Profi
      Reaktionen
      598
      Trophäen
      9
      Beiträge
      941
      • 24. Mai 2017 um 20:46
      • #2

      Ich hab mir das vor einer Weile auch mal angeguckt, hier ein paar grobe Basics, letztendlich musst du alle extDB Wiki Seiten durchlesen und dich durchquälen und probieren bis es geht.

      Zudem brauchst du logischerweise ein ganz bisschen Grundlagen in SQL, damit du Queries schreiben kannst.

      Aber zur Verwendung

      Erstmal musst du extDB einrichten (MySQL Server, Datenbank in MySQL einrichten, extDB Mod + Abhängigkeiten, extDB Config machen).

      Wenn der extDB eingerichtet ist, kannst du es mit "extDB3" callExtension "A:B:C(:D:...)" ansprechen.

      "A:B:C(:D:...)" ist immer ein String, aus dem extDB Anweisungen (z.B. eine Datenbankabfrage) interpretiert.

      Es werden immer verschiedene Anweisungen/Parameter mit einem Doppelpunkt getrennt.

      Das grundsätzliche Format der Calls via callExtension zu extDB ist immer A:B:C(:D:...), wobei...

      ...A eine Zahl ist, die den Typ der Anweisung angibt.

      ...B ein Befehl ist.

      ... und alle weiteren Zonen nach den ":" eventuelle weitere Parameter darstellen.


      Beispiel "extDB3" callExtension "9:ADD_DATABASE:Database" :

      9 - 9 bedeuted Systemanweisung (im Prinzip eine Anweisung die an extDB direkt geht und nicht zur Datenbank soll)

      ADD_DATABASE - Befehl für extDB um eine Verbindung zur Datenbank herzustellen.

      Database - Parameter für ADD_DATABASE, sagt dass die Verbindung zu der Datenbank mit den Daten hergestellt werden soll, die in der Config bei [Database] stehen.

      Genaueres hier:

      https://bitbucket.org/torndeco/extdb…3%20-%20General

      Um einfache SQL Statements zur Datenbank zu schicken und die Antwort zu bekommen, musst du eine Verbindung zur DB einrichten und ein Protokoll eröffnen (Protokoll sagt hauptsächlich aus welche Datenbankverbindung genutzt werden soll und wie).

      Das geht z.B. so:

      "extDB3" callExtension "9:ADD_DATABASE:Database"

      "extDB3" callExtension "9:ADD_DATABASE_PROTOCOL:Database:SQL:SQL:TEXT"

      Dann kann man schon einfache, synchrone SQL Statements ausführen:

      Z.B.

      "extDB3" callExtension ("0:SQL:" +  format ["INSERT INTO spieler (pid,name) VALUES ('%1','%2')",_steamID,_name]);


      Diese Seiten solltest du dir durchlesen und rumprobieren, testen und lernen: https://bitbucket.org/torndeco/extdb3/wiki/Contents

      Diese Nachricht wurde automatisch generiert. Antworten auf diese Nachricht können nicht empfangen werden. Bitte wenden Sie sich mit Anliegen an einen Administrator.

    • Zimtzimt
      Anfänger
      Reaktionen
      2
      Trophäen
      10
      Beiträge
      67
      • 24. Mai 2017 um 20:56
      • #3

      Vielen vielen dank für deine ausführlich Antwort sie wird mir bestimmt helfen. Ich habe nur eine Frage bzw. einen Codeschnipsel den ich nicht ganz verstehe:

      Zitat von Stig

      "extDB3" callExtension ("0:SQL:" + format ["INSERT INTO spieler (pid,name) VALUES ('%1','%2')",_steamID,_name]);

      Wofür steht das (pid,name) als Spieler ist wahrscheinlich der Table der erstellt wird und die Values sind halt die Daten das ist klar. Aber wofür (pid,name) ?

      Und könntest du mir ein Beispiel schreiben, wie ich diese Daten dann aus der Datenbank abrufen kann ? Also beispiel in der datenbank steht halt nen Wert money drin welcher 200 Beträgt und der soll dann halt zur Variable werden, mit der ich im Script arbeiten kann ? Dafür wäre ich dir sehr dankbar, was ich ohnehin schon bin.


      LG Fabian

    • Stig
      Profi
      Reaktionen
      598
      Trophäen
      9
      Beiträge
      941
      • 24. Mai 2017 um 21:06
      • #4

      Die Tabelle heißt spieler und in dieser gibt es u.a. die Spalten pid und name.

      INSERT INTO tabellenname (spalte1, spalte2, ...) VALUES ('wertfürspalte1','wertfürspalte2',...)

      Das erstellt eine neue Reihe in tabellenname und füllt in dieser neuen Reihe spalte1 mit wertfürspalte1 und spalte2 mit wertfürspalte2.


      So könntest du das abfragen:

      SELECT spalte1 FROM tabellenname WHERE spalte2 = 'wert'

      Das gibt dir den Inhalt von spalte1 in tabellenname wieder in der Reihe (oder den Reihen), wo spalte2 == wert ist.

      Vor den Statements immer 0:SQL, also für 0=synchrone Abfrage und SQL=Protokoll mit Namen "SQL" benutzen

      Beachte das extDB immer verschachtelte Ergebnisse zurückgibt.

      Also nicht die rohen Ergebnisse, sondern z.B.:

      [1,[ergebnisse]]

      Diese Nachricht wurde automatisch generiert. Antworten auf diese Nachricht können nicht empfangen werden. Bitte wenden Sie sich mit Anliegen an einen Administrator.

    • Zimtzimt
      Anfänger
      Reaktionen
      2
      Trophäen
      10
      Beiträge
      67
      • 24. Mai 2017 um 21:22
      • #5

      Nochmals vielen dank, jetzt verstehe ich wie es gemeint war.

      Wie bekomme ich denn aus dem verschachtelten Ergebniss eine rohe Zahl ? Tut mir leid wenn ich mich jetzt ein bischen dumm anstelle aber wie gesagt ich bin noch relativ frisch.


      LG,

      Fabian

    • Stig
      Profi
      Reaktionen
      598
      Trophäen
      9
      Beiträge
      941
      • 24. Mai 2017 um 21:36
      • #6

      extDB wirft dir immer ein String zurück, in dem ein Array steht.

      Bei synchronen Abfragen entweder

      [1,daten]

      oder

      [0,"fehlermeldung"].

      Aber weil das ganze als String verpackt ist ("[1,daten]"), musst du es erst in ein Array umwandeln, um einfacher auf die Daten zugreifen zu können. Die Daten selbst sind meist auch irgendwie in weiteren Array verpackt.

      Dafür gibt es verschiedene Methoden, aber BIS hat letztens eine neue eingeführt, die das wesentlich einfacher macht:

      https://community.bistudio.com/wiki/parseSimpleArray

      So bekommst du ein Array:

      _array = parseSimpleArray _rohesErgebnisvonExtDB

      _array select 0 gibt dir dann den Typ vom Ergebnis (0=error, 1=erfolg, ...) und in

      _array select 1 stehen die ergebnisse (meist weitere arrays).

      Aus denen kannst du dann die gewollte Zahl rausfischen.

      Diese Nachricht wurde automatisch generiert. Antworten auf diese Nachricht können nicht empfangen werden. Bitte wenden Sie sich mit Anliegen an einen Administrator.

    • Zimtzimt
      Anfänger
      Reaktionen
      2
      Trophäen
      10
      Beiträge
      67
      • 24. Mai 2017 um 21:39
      • #7

      Gut vielen dank!

      Werde ich demnächst ausprobieren.


      LG,

      Fabian

    • Zimtzimt
      Anfänger
      Reaktionen
      2
      Trophäen
      10
      Beiträge
      67
      • 25. Mai 2017 um 15:46
      • #8

      Muss ich vor das SELECT spalte1 FROM tabellenname WHERE spalte2 = 'wert' auch ein "extDB3" callExtension packen ?

    • Zimtzimt
      Anfänger
      Reaktionen
      2
      Trophäen
      10
      Beiträge
      67
      • 25. Mai 2017 um 22:19
      • #9

      Kann mir irgendjemand bei dem Thema helfen ? Vielleicht sogar via Teamspeak ?

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 26. Mai 2017 um 01:17
      • #10

      gut dir mal das an

      Code
      _query = format ["SELECT houses.id, houses.pid, houses.pos, players.name, houses.garage FROM houses INNER JOIN players WHERE houses.owned='1' AND houses.pid = players.pid LIMIT %1,10",_x];
      _queryResult = [_query,2,true] call DB_fnc_asyncCall;

      vielleicht hilft es dir weiter

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • Zimtzimt
      Anfänger
      Reaktionen
      2
      Trophäen
      10
      Beiträge
      67
      • 26. Mai 2017 um 10:43
      • #11

      DB_fnc_asyncCall habe ich nicht das ist ja aus Altis Life und ich bin ja dabei eine eigene Mission zu erstellen. Wie bekomme ich dann aus dem _query Ergebniss ein normale Variable ?

      Immoment sieht das Script so aus:

      Code
      _db_name = "MilRP";
      _result = "extDB3" callExtension format["9:ADD_DATABASE:%1",_db_name];
      _protokoll = "extDB3" callExtension "9:ADD_DATABASE_PROTOCOL:MilRP:SQL:SQL:TEXT";
      
      if (!(_result isEqualTo "[1]") && isServer) then {
          diag_log "extDB3: Error.";
          hint format["extDB3: Error..... %1", _result];
      };
              
              
      _uid = getPlayerUID player;
      _name = name player;
      
      
      _insert = "extDB3" callExtension format["0:SQL:INSERT INTO spieler (pid, name) VALUES('%1', '%2')",
          _uid,
          _name
      ];
      //DB Beschreiben
      
      
      _currentMoney_roh = "extDB3" callExtension format["0:SQL:SELECT money FROM spieler WHERE pid='%1'",_uid];
      if(!isNil _currentMoney_roh) then {
      hint format["Der Array %1 wurde von der Datenbank abgefragt", _currentMoney_roh];
      sleep 5;
      } else {
      
          hint "Es gibt keinen Datenbankeintrag zu deinem Spieler.";
          sleep 5;
          hint "Es wird versucht dein Geld auf 100 zu setzten und ein Datenbankeintrag zu erstellen.";
          sleep 5;
          currentMoney = 100;
          _insertall = "extDB3" callExtension format ["0:SQL:INSERT INTO players(pid, name, money) VALUES('%1', '%2', '%3')",
          _uid,
          _name,
          currentMoney
          ];
          _currentMoney_roh = "extDB3" callExtension format["0:SQL:SELECT money FROM spieler WHERE pid='%1'",_uid];
          if(isNil _currentMoney_roh) exitwith {
              hint "Der Datenbankeintrag konnte nicht beschrieben werden.";
              sleep 5;
              };
      };
      
      _currentMoney_array = parseSimpleArray _currentMoney_roh;
      hint format["Der umgewandelte Array lautet %1", _currentMoney_array];
      sleep 10;
      
      
      currentMoney = _currentMoney_array select [1];
      _error = _currentMoney_array select [0];
      hint format["Dein Geld wurde abgerufen. Es beträgt %1",currentMoney];
      sleep 10;
      };
      Alles anzeigen

      Jedoch wird mir dann Angezeigt der umgewandelte Array lautet <null>. Also wird der nicht richtig umgewandelt. Was soll ich da tun ?

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 26. Mai 2017 um 10:48
      • #12

      Du solltest dann aber das mit dem insert, update und delete kapseln. Alles andere macht keinen sinn

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • Zimtzimt
      Anfänger
      Reaktionen
      2
      Trophäen
      10
      Beiträge
      67
      • 26. Mai 2017 um 13:18
      • #13

      Das verstehe ich nicht ganz kannst du mir ein beispiel dafür schicken ?

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 26. Mai 2017 um 13:25
      • #14

      Schaue dir die DB_fnc_asyncCall; von Altis_life an bzw. alles was du so im life_server unter MYSQL findest. Sorry aber es wird dir niemand ein komplettes DB Framework zur Verfügung stellen.

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • Zimtzimt
      Anfänger
      Reaktionen
      2
      Trophäen
      10
      Beiträge
      67
      • 26. Mai 2017 um 13:46
      • #15

      Es geht hier überhaupt nicht darum, dass ich ein komplettes DB Framework möchte ich will einfach nur eine Variable in einer Datenbank schreiben und sie dann auch wieder abrufen können. Und beim schreiben dieses Scriptes brauche ich hilfe weil ich mich mit extDB nicht so gut auskenne.

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 26. Mai 2017 um 14:38
      • #16

      Hi,

      also ich habe mir eben noch ein paar Gedanken zu dem gemacht, was Du möchtest. Ich denke nicht, dass Du aus der Mission Datei direkten Zugriff auf die DB bekommst. Ich vermute Du musst auch eine Server Komponente (mod) entwickeln, die sich um die Sachen der Clients kümmert.

      Man könnte theoretisch den DB Teil aus dem life_server heraustrennen und anschliessend das Ganze über den Client (Mission) ansprechen. Heißt Du musst zwingend ein FrameWork für dein Vorhaben entwickeln.

      Gruß,

      moeck

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • Stig
      Profi
      Reaktionen
      598
      Trophäen
      9
      Beiträge
      941
      • 26. Mai 2017 um 14:47
      • #17

      Das braucht kein Servermod, es geht auch von der Mission aus.

      Diese Nachricht wurde automatisch generiert. Antworten auf diese Nachricht können nicht empfangen werden. Bitte wenden Sie sich mit Anliegen an einen Administrator.

    • blackfisch
      Legende
      Reaktionen
      2.944
      Trophäen
      9
      Beiträge
      5.966
      Dateien
      6
      Bilder
      63
      • 26. Mai 2017 um 14:50
      • #18

      ja, dann muss es trotzdem serverseitig ausgeführt werden ^^ macht dann aber trotzdem Sinn es in eine Servermod auszulagern, um unbefugte Datenbankaktionen zu minimieren

      #MakeArmaNotWar

      Kein Support via PN & Steam! / No Support via DM & Steam!


      Mit freundlichen Grüßen
      blackfisch
      ______________________

      Web: blackfisch.me

      GitHub: GitHub.com/blackfisch

      Mail: [email protected]

      ______________________
      Wichtige Links:
      [Erklärung|Leitfaden] Code Optimierung

      [Tutorial] life_fnc_MP zu remoteExec

      Ohne Logs & entsprechende Dateien kein Support!

      ______________________

    • Zimtzimt
      Anfänger
      Reaktionen
      2
      Trophäen
      10
      Beiträge
      67
      • 26. Mai 2017 um 15:17
      • #19

      Gut dann ist das voll doch noch zu Schwierig für mich. Dann muss ich es erstmal über Profil Namespace Regeln

    Registrieren oder Einloggen

    Du bist noch kein Mitglied von NodeZone.net? Registriere dich kostenlos und werde Teil einer großartigen Community!

    Registrieren

    Ähnliche Themen

    • Suche ExtDB3 Dokumentation

      • DERYANNEK
      • 26. Mai 2017 um 21:49
      • Hilfeforum

    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™