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
Fr: 16 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. Server & Hosting
    4. Windows-Server

    ; fehlt, aber nach einigen Versuchen wills immernoch nicht.

    • ESLotherwise
    • 8. Dezember 2022 um 05:45
    • Erledigt
    • ESLotherwise
      Amateur
      Reaktionen
      75
      Trophäen
      8
      Beiträge
      229
      Dateien
      3
      • 8. Dezember 2022 um 05:45
      • #1

      Hey!

      Nach langer Zeit wieder in der A3 Szene unterwegs und habe mich gleich mal an etwas probiert um die Spielzeit abzuspeichern.

      Folgendes ist dabei entstanden:

      Code
      // Save player UID and playtime to extDB3
      playerUID = getPlayerUID player;
      playtime = missionTime;
      [_result, _error] = callExtension "extDB3";
      "PlayerUID", playerUID, playtime;
      
      // Define the interval in seconds between updates
      interval = 300;
      
      while {true} do {
          // Loop through all players
          forEach playerList do {
              // Get the player UID
              playerUID = getPlayerUID _x;
      
              // Get the player's current playtime
              playtime = missionTime;
      
              // Update the player's playtime in the database
              updatePlayerPlaytimeInDB playerUID playtime;
          }
      
          // Wait for the specified interval before updating again
          sleep interval;
      }
      Alles anzeigen

      Nun spuckt mir der RPT Log folgendes aus:

      Code
      Error in expression <aytime = missionTime;
      [_result, _error] = callExtension "extDB3"; "PlayerUID" pl>
        Error position: <= callExtension "extDB3"; "PlayerUID" pl>
        Error Missing ;
      File mpmissions\__cur_mp.takistan\functions\Utility\fn_Playtime.sqf..., line 4
      Error in expression <aytime = missionTime;
      [_result, _error] = callExtension "extDB3"; "PlayerUID" pl>
        Error position: <= callExtension "extDB3"; "PlayerUID" pl>
        Error Missing ;
      File mpmissions\__cur_mp.takistan\functions\Utility\fn_Playtime.sqf..., line 4

      Schon einiges probiert, überall mal nen ; hinzugefügt, Code umgeschrieben, Syntax Checker drüber und selbst AI drüber aber keiner spuckt mir irgendetwas aus.

      Vielleicht, hat ja einer von euch gerade eine Idee dazu.

      Ich probiere weiter und melde mich sollte dies geklappt haben.

      Vielen Dank im vorraus

      Einmal editiert, zuletzt von ESLotherwise (8. Dezember 2022 um 05:53)

    • felixsch
      Amateur
      Reaktionen
      15
      Trophäen
      9
      Beiträge
      215
      Bilder
      4
      • 8. Dezember 2022 um 06:16
      • #2

      Das soll aber SQF sein oder?

      25720-panthor-only-logo-shadow-autoscaled-pngPanthor Life DEV

      https://panthor.de (Scripter | Designer | Modder) [ehemals ReallifeRPG]

    • ESLotherwise
      Amateur
      Reaktionen
      75
      Trophäen
      8
      Beiträge
      229
      Dateien
      3
      • 8. Dezember 2022 um 07:17
      • #3
      Zitat von felixsch

      Das soll aber SQF sein oder?

      Korrekt.

    • ESLotherwise
      Amateur
      Reaktionen
      75
      Trophäen
      8
      Beiträge
      229
      Dateien
      3
      • 8. Dezember 2022 um 07:52
      • #4
      Code
      // Define the interval in seconds between updates
      interval = 300;
      
      while {true} do {
          // Loop through all players
          forEach playerList do {
              // Get the player UID and playtime
              playerUID = getPlayerUID _x;
              playtime = missionTime;
      
              // Update the player's playtime in the database
              callExtension "extDB3" playerUID playtime;
          }
      
          // Wait for the specified interval before updating again
          sleep interval;
      }
      Alles anzeigen

      Spuckt nun

      Code
      Error in expression <rval = 300;
      
      while {true} do {
      
      forEach playerList do {
      
      playerUID = getPlayerUI>
        Error position: <playerList do {
      
      playerUID = getPlayerUI>
        Error Missing ;
      File mpmissions\Antistasi-Takistan-2-5-3-Plus-1-8-3-2.takistan\functions\Utility\fn_Playtime.sqf..., line 6
      Error in expression <rval = 300;
      
      while {true} do {
      
      forEach playerList do {
      
      playerUID = getPlayerUI>
        Error position: <playerList do {
      
      playerUID = getPlayerUI>
        Error Missing ;
      File mpmissions\Antistasi-Takistan-2-5-3-Plus-1-8-3-2.takistan\functions\Utility\fn_Playtime.sqf..., line 6
      Alles anzeigen

      Aus und ich denke es wird auch anschließend wieder auf den Fehler aus OP verwiesen.

    • blackfisch
      Legende
      Reaktionen
      2.944
      Trophäen
      9
      Beiträge
      5.966
      Dateien
      6
      Bilder
      63
      • 8. Dezember 2022 um 10:24
      • #5

      deine forEach Syntax haut nicht hin, daher vermutlich der Fehler: https://community.bistudio.com/wiki/forEach

      #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!

      ______________________

    • Henne
      Nerd
      Reaktionen
      155
      Trophäen
      7
      Beiträge
      840
      Bilder
      7
      • 8. Dezember 2022 um 10:41
      • #6

      Wie Blackfisch schon geschrieben hat, ist die forEach-Schleife fehlerhaft.

      Hast du die Variable "playerList" irgendwo definiert die du in deiner forEach-Schleife verwenden möchtest? Denn ansonsten wird es ebenfalls einen Fehler werfen.

      Wie es im zweiten Code auch macht.

      Im ersten Code bezieht sich der Fehler auf Zeile 4.

      Die Zeile sieht so aus: [_result, _error] = callExtension "extDB3";

      Du versuchst den Returnwert von callExtension in einem Array zuspeichern. Das klappt natürlich nicht. Du kannst es nur in einer Variable speichern.

      Auch ist die Frage, was du mit Zeile 5 im ersten Code erreichen möchtest. -> "PlayerUID", playerUID, playtime;

      Auch Zeile 20 vom ersten Code ist sehr interessant. Keine Ahnung was du da machen möchtest. -> updatePlayerPlaytimeInDB playerUID playtime;

      Wie felixsch angemerkt hat, hat dein Code nicht soviel mit SQF zutun. Du solltest dir daher den Syntax von SQF nochmal anschauen. ;)

      2 Mal editiert, zuletzt von Henne (8. Dezember 2022 um 10:51)

    • blackfisch
      Legende
      Reaktionen
      2.944
      Trophäen
      9
      Beiträge
      5.966
      Dateien
      6
      Bilder
      63
      • 8. Dezember 2022 um 10:45
      • #7
      Zitat von Henne

      Wie Blackfisch schon geschrieben hat, ist die forEach-Schleife fehlerhaft. Allerdings ist dies nicht der angegebene Fehler. Denn er bricht (wie angegeben) bereits in Zeile 4 ab.

      Die Zeile sieht so aus: [_result, _error] = callExtension "extDB3";

      Du versuchst den Returnwert von callExtension in einem Array zuspeichern. Das klappt natürlich nicht. Du kannst es nur in einer Variable speichern.

      Auch ist die Frage, was du mit Zeile 5 erreichen möchtest. -> "PlayerUID", playerUID, playtime;

      Hast du die Variable "playerList" irgendwo definiert die du in deiner forEach-Schleife verwenden möchtest? Denn ansonsten wird es einen Fehler werfen.

      Auch Zeile 20 ist sehr interessant. Keine Ahnung was du da machen möchtest. -> updatePlayerPlaytimeInDB playerUID playtime;

      Alles anzeigen

      da hab ich irgendwie volle Kanone drübergelesen :D Sowas passiert wohl, wenn man nur halbherzig liest

      Sieht mir aus, als setzt da jemand Gewohnheiten aus anderen Programmiersprachen ein. Schön wär's, wenn SQF List Unpacking hätte ^^;)

      #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!

      ______________________

    • ESLotherwise
      Amateur
      Reaktionen
      75
      Trophäen
      8
      Beiträge
      229
      Dateien
      3
      • 8. Dezember 2022 um 11:03
      • #8
      Zitat von Henne

      Wie Blackfisch schon geschrieben hat, ist die forEach-Schleife fehlerhaft.

      Hast du die Variable "playerList" irgendwo definiert die du in deiner forEach-Schleife verwenden möchtest? Denn ansonsten wird es ebenfalls einen Fehler werfen.

      Wie es im zweiten Code auch macht.

      Im ersten Code bezieht sich der Fehler auf Zeile 4.

      Die Zeile sieht so aus: [_result, _error] = callExtension "extDB3";

      Du versuchst den Returnwert von callExtension in einem Array zuspeichern. Das klappt natürlich nicht. Du kannst es nur in einer Variable speichern.

      Auch ist die Frage, was du mit Zeile 5 im ersten Code erreichen möchtest. -> "PlayerUID", playerUID, playtime;

      Auch Zeile 20 vom ersten Code ist sehr interessant. Keine Ahnung was du da machen möchtest. -> updatePlayerPlaytimeInDB playerUID playtime;

      Wie felixsch angemerkt hat, hat dein Code nicht soviel mit SQF zutun. Du solltest dir daher den Syntax von SQF nochmal anschauen. ;)

      Alles anzeigen

      Wie blackfish gesagt hat, scheint als würde ich Gewohnheiten gerade zu übertragen.

      Zu Zeile 4: Wie genau würdest du das jetzt lösen? Da wär ich jetzt aufgeschmissen.

      Zeile 5:

      Normalerweise würde die Zeile so aussehen:

      [_result, _error] = callExtension "extDB3"; "PlayerUID", playerUID, playtime;

      Zeile 20 wurde bereits entfernt wie im 2. zu sehen.

    • Henne
      Nerd
      Reaktionen
      155
      Trophäen
      7
      Beiträge
      840
      Bilder
      7
      • 8. Dezember 2022 um 11:23
      • #9

      Der richtige Syntax von callExtension ist folgender: "<EXTENSION>" callExtension <PARAMETER>

      So zum Beispiel bei extDB3: "extDB3" callExtension "CALL_TYPE:PROTOCOL_NAME:DATA"

      Doku extDB3 -> https://github.com/SteezCram/extDB3/wiki

      Du möchtest am Schluss etwas haben wie sowas: "extDB3" callExtension "0:sql:updatePlayerTime:[<playerUID>, <time>]"

    • ESLotherwise
      Amateur
      Reaktionen
      75
      Trophäen
      8
      Beiträge
      229
      Dateien
      3
      • 8. Dezember 2022 um 12:03
      • #10
      Zitat von Henne

      Der richtige Syntax von callExtension ist folgender: "<EXTENSION>" callExtension <PARAMETER>

      So zum Beispiel bei extDB3: "extDB3" callExtension "CALL_TYPE:PROTOCOL_NAME:DATA"

      Doku extDB3 -> https://github.com/SteezCram/extDB3/wiki

      Du möchtest am Schluss etwas haben wie sowas: "extDB3" callExtension "0:sql:updatePlayerTime:[<playerUID>, <time>]"

      Vielen Dank, Ich gehe aus etwas wie das hier?
      Bin leider noch auf Arbeit und habe keine Möglichkeit zu testen, möchte nur die Richtung Testen.

      Code
      playerList = allPlayers;
      
      // Define the interval in seconds between updates
      interval = 300;
      
      while {true} do {
          // Loop through all players
          forEach playerList do {
              // Get the player UID
              playerUID = getPlayerUID _x;
      
              // Get the player's current playtime
              playtime = missionTime;
      
              // Update the player's playtime in the database
              "extDB3" callExtension "0:sql:updatePlayerTime:[<playerUID>, <playtime>]"
          }
      
          // Wait for the specified interval before updating again
          sleep interval;
      }
      Alles anzeigen
    • Henne
      Nerd
      Reaktionen
      155
      Trophäen
      7
      Beiträge
      840
      Bilder
      7
      • 8. Dezember 2022 um 12:49
      • #11

      Werte die mit < > umrundet sind, zählen als Platzhalter für deine Werte. Du musst also deine Werte entsprechend eintragen. Auch erwartet callExtension einen String. Bedeutet du musst dir den String entsprechend zusammenbauen.

      Auch musst du das Protokoll und den Querynamen vorher festlegen. Ich habe dort nur Werte eingetragen die sinnvoll sind. Die aber nicht zwingend deinen Werten entsprechen.

    • ESLotherwise
      Amateur
      Reaktionen
      75
      Trophäen
      8
      Beiträge
      229
      Dateien
      3
      • 8. Dezember 2022 um 12:59
      • #12

      Okay! Vielen dank!

      Ich schaue mir das Zuhause nochmal an und ich denke, dass dies dann erledigt sein soll.

      Vielen Vielen Dank an euch!

    • ESLotherwise
      Amateur
      Reaktionen
      75
      Trophäen
      8
      Beiträge
      229
      Dateien
      3
      • 10. Dezember 2022 um 16:13
      • #13
      Code
      playerList = allPlayers;
      
      // Define the interval in seconds between updates
      interval = 10;
      
      while {true} do {
          // Loop through all players
          {
              // Get the player UID
              playerUID = getPlayerUID _x;
      
              // Get the player's current playtime
              playtime = missionTime;
      
              // Check if the player's data exists in the database
              "extDB3" callExtension ["0:sql:checkPlayer:[playerUID]"];
      
              // If the player's data exists in the database, update it
              IF (playerDataExists) THEN
                  "extDB3" callExtension ["0:sql:updatePlayerTime:[playerUID, playtime]"];
              // If the player's data does not exist in the database, insert it
              ELSE
                  "extDB3" callExtension ["0:sql:insertPlayerTime:[playerUID, playtime]"];
              END IF;
          } forEach playerList;
      
          // Wait for the specified interval before updating again
          sleep interval;
      };
      Alles anzeigen

      Bin soweit nun, sollte hoffentlich auch so funktionieren - forEach korrekt umgebaut und die Statements auf mich angepasst.
      Leider bekomme ich noch den Error:

      Code
      Error in expression <ayerTime:[playerUID, playtime]"];
      
      ELSE
      "extDB3" callExtension ["0:sql:insertPla>
        Error position: <"extDB3" callExtension ["0:sql:insertPla>
        Error Missing ;
      File \functions\Utility\fn_Playtime.sqf..., line 23
      Error in expression <ayerTime:[playerUID, playtime]"];
      
      ELSE
      "extDB3" callExtension ["0:sql:insertPla>
        Error position: <"extDB3" callExtension ["0:sql:insertPla>
        Error Missing ;
      File \functions\Utility\fn_Playtime.sqf..., line 23
      Alles anzeigen

      Aber soweit ich sehe sind alle Argumente mit einem Semicolon geschlossen. Wo sollte hier also der Fehler liegen?

    • Comredert
      Frischling
      Trophäen
      7
      Beiträge
      4
      • 10. Dezember 2022 um 16:51
      • #14

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

      und vielleicht noch wichtiger:

      https://community.bistudio.com/wiki/SQF_Synta…s_of_Precedence

    • Henne
      Nerd
      Reaktionen
      155
      Trophäen
      7
      Beiträge
      840
      Bilder
      7
      • 10. Dezember 2022 um 16:51
      • #15

      Du übernimmst wieder den Syntax von anderen Sprachen. -> else

      Auch erwartet callExtension (so wie du es verwenden möchtest) einen String. Du gibst ein Array an.

    • ESLotherwise
      Amateur
      Reaktionen
      75
      Trophäen
      8
      Beiträge
      229
      Dateien
      3
      • 10. Dezember 2022 um 18:24
      • #16
      Zitat von Comredert

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

      und vielleicht noch wichtiger:

      https://community.bistudio.com/wiki/SQF_Synta…s_of_Precedence

      Zitat von Henne

      Du übernimmst wieder den Syntax von anderen Sprachen. -> else

      Auch erwartet callExtension (so wie du es verwenden möchtest) einen String. Du gibst ein Array an.

      Habe es jetzt folgendermaßen in ein String umfunktioniert:

      Code
      "extDB3" callExtension "0:sql:updatePlayerTime:[playerUID, playtime]";

      und auch wieder den Syntax übernommen, vergesse meistens echt das wir in SQF sind.

      Code
      playerList = allPlayers;
      
      // Define the interval in seconds between updates
      interval = 10;
      
      while {true} do
      {
          // Loop through all players
          {
              // Get the player UID
              playerUID = getPlayerUID _x;
      
              // Get the player's current playtime
              playtime = missionTime;
      
              // Check if the player's data exists in the database
              "extDB3" callExtension "0:sql:checkPlayer:[playerUID]";
      
              // If the player's data exists in the database, update it
              if (playerDataExists) then
              {
                  "extDB3" callExtension "0:sql:updatePlayerTime:[playerUID, playtime]";
              } else {
                  "extDB3" callExtension "0:sql:insertPlayerTime:[playerUID, playtime]";
              }
          } forEach playerList;
      
          // Wait for the specified interval before updating again
          sleep interval;
      };
      Alles anzeigen

      Script gibt erneut wieder keinen Error aus, aber auch die Datenbank füllt sich nicht.

      Wie sage ich denn extDB3, welchen Table er benutzen soll?

      Muss ich zu Anfang ein Select Statement für die Tabelle "players" noch adden, oder gibt es dort eine Möglichkeit das in die einzelnen callExtensions mit reinzuballern?

      Vielen Dank für die Hilfe erneut!

    • Henne
      Nerd
      Reaktionen
      155
      Trophäen
      7
      Beiträge
      840
      Bilder
      7
      • 10. Dezember 2022 um 19:54
      • #17

      Daher hatte ich bereits das Wiki von extDB3 gesendet. Dort wird aufgeführt wie man Querys erstellt und sie aufruft. Siehe -> https://github.com/SteezCram/extD…-sql_custom.ini

    • ESLotherwise
      Amateur
      Reaktionen
      75
      Trophäen
      8
      Beiträge
      229
      Dateien
      3
      • 10. Dezember 2022 um 20:01
      • #18

      Ach das ist das aktuelle? Ich dachte du hast nur auf etwas verwiesen.

      Ich seh nur, dass es keine neue Versionen gibt und suche verzweifelt auch nach einer eigenen Docs Seite aber scheine dabei dies zu übersehen. Schade das extDB nicht weiter maintained ist.

      Vielen Dank!

    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. Verhaltensregeln
    3. Datenschutzerklärung
    4. Impressum
    5. Urheberrechts- oder Lizenzverstoß melden
  • Trimax Design coded & layout by Gino Zantarelli 2023-2025©
    Community-Software: WoltLab Suite™