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. Tutorials & Releases

    [TUTORIAL] Nummernschild Verändern

      • Altis Life
    • Natic
    • 24. Januar 2019 um 21:57
    • Natic
      Fortgeschrittener
      Reaktionen
      66
      Trophäen
      9
      Beiträge
      408
      • 24. Januar 2019 um 21:57
      • #1

      Moin NN,

      Der XFireFighter und ich haben uns mal hingesetzt und das Nummernschild System von DE100 nutzbar gemacht.

      Copy & Paste ist nicht möglich Quellcode durchlesen und verstehen ;)

      Schritt 1:

      erstelle eine Datei Namens fn_changePlate.sqf

      Code
      /*
      Author: McKenzie
      Edit by: Natic
      Description: Allows to Customize the Number Plate of any Vehicle. 
      
      */
      params[
        ["_myPlate","",[""]]
      ];
      private["_query"];
      private _myVehicle = CursorTarget;
      
      if (!(_myVehicle isKindOf "Car")) exitWith {
          hint format["Du kannst nur an Bodenfahrzeuge das Nummernschild verändern!"];
      };
      
      if (_myVehicle distance Player > 6) exitWith {
           hint format["Du stehst zu weit weg, um das Nummernschild zu verändern!"];
      };
      
      if (side player isEqualTo west) exitWith {
          hint format["Du bist im Dienst, lasse lieber die Finge davon"];
      };
      
      if (_myPlate isEqualTo " ") exitWith {
          hint format ["Das Nummernschild ist ungültig"];
      };
      
      life_action_inUse = true;
      _action = [
       format ["Soll das Nummernschild permanent geändert werden?"],
       "Nummernschild - Generator",
       localize "STR_Global_Yes",
       localize "STR_Global_No"
      ] call BIS_fnc_guiMessage;
      
      private _oldPlate = getPlateNumber _myVehicle;
      if (_action) then {
      
       _query = format["SELECT FROM vehicles (plate) WHERE '%1'",_oldPlate];
                      diag_log format["Query: %1",_query];
                      waitUntil{!DB_Async_Active};
                      [_query,1] call DB_fnc_asyncCall;
      
       
       _query = format["INSERT INTO vehicles WHERE (plate) '%1'",_myplate]; 
                      diag_log format["Query: %1",_query];
                      waitUntil{!DB_Async_Active};
                      [_query,1] call DB_fnc_asyncCall;
      
      _myVehicle setPlateNumber _myPlate;
      hint format["Du hast dein Nummernschild erfolgreich von %1 in %2 umgemeldet",_oldPlate,_myPlate];
      } else {
              _myVehicle setPlateNumber _myPlate;
              hint format["Du hast dein Nummernschild verändert!"];
      };
      Alles anzeigen

      Schritt 2:

      erstelle eine Datei Namens fn_requestOwner.sqf

      Code
      /*
      Author: McKenzie
      Edit: Natic
      Description: Provides the Owner of the NumberPlate
      */
      
      params [
        ["_PlateNumber","",[""]]
      ];
      private["_query","_owner","_plate"];
      
      if (!(side player in [WEST,INDEPENDENT])) exitWith {
          hint format["Du hast keinen Zugang, zu einem Haltersystem"];
      };
      
      if (Vehicle player isEqualTo player) exitWith {
           hint format ["Du musst in einem Fahrzeug sitzen um den Bordcomputer bedienen zu können"];
      };
      
      if (_PlateNumber isEqualTo " ") exitWith {
          Hint format ["Ungültiges Nummernschild"];
      };
      
      _query = format["SELECT FROM vehicles (plate) WHERE '%1'",_plate];
                      diag_log format["Query: %1",_query];
                      waitUntil{!DB_Async_Active};
                      [_query,1] call DB_fnc_asyncCall;
      
      if (_plate == _PlateNumber) then {
          _query = format["SELECT FROM vehicles (owner) WHERE '%1'",_owner];
                      diag_log format["Query: %1",_query];
                      waitUntil{!DB_Async_Active};
                      [_query,1] call DB_fnc_asyncCall;
      hint format["Der Halter des Fahrzeuges ist: %1",_owner];
      } else {
          hint format["Das Kennzeichen ist ungültig"];
      };
      Alles anzeigen

      Schritt 3:

      erstelle eine Datei Namens fn_checkPlate.hpp

      Code
      class checkPlate
      {
              idd =4001;
              movingenable = 0;
              class Controlsbackground
              {
                  class TBackground: Life_RscText
                  {
                      idc = -1;
                      x = 0.333298 * safezoneW + safezoneX;
                      y = 0.346 * safezoneH + safezoneY;
                      w = 0.335156 * safezoneW;
                      h = 0.286 * safezoneH;
                      colorBackground[] = {1,1,1,0.3};
                      colorActive[] = {1,1,1,0.3};
                      text = "";
                  };
      
                  class THeader: Life_RscText
                  {
                      idc = -1;
                      text = "Straßenverkehrsamt - Halterabfrage"; //--- ToDo: Localize;
                      x = 0.42 * safezoneW + safezoneX;
                      y = 0.379 * safezoneH + safezoneY;
                      w = 0.228 * safezoneW;
                      h = 0.044 * safezoneH;
                      colorText[] = {0,1,0,0.8};
                      colorBackground[] = {1,1,1,0};
                      colorActive[] = {1,1,1,0.3};
                      sizeEx = 0.06;
                  };
              };
          class Controls
          {
              class TButton: Life_RscButton
              {
                  idc = -1;
                  text = "Schließen"; //--- ToDo: Localize;
                  x = 0.572187 * safezoneW + safezoneX;
                  y = 0.577 * safezoneH + safezoneY;
                  w = 0.0876563 * safezoneW;
                  h = 0.033 * safezoneH;
                  colorBorder[] = {0,1,0,0.3};
                  colorDisabled[] = {0,1,0,0.3};
                  colorBackground[] = {0,1,0,0.3};
                  colorBackgroundDisabled[] = {0,1,0,0.3};
                  colorBackgroundActive[] = {0,1,0,0.3};
                  colorFocused[] = {0,1,0,0.5};
                  colorActive[] = {0,1,0,0.5};
                  action = "closeDialog 0;";
              };
              class TButton2: Life_RscButton
              {
                  idc = -1;
                  text = "Überprüfen"; //--- ToDo: Localize;
                  x = 0.45875 * safezoneW + safezoneX;
                  y = 0.577 * safezoneH + safezoneY;
                  w = 0.0876563 * safezoneW;
                  h = 0.033 * safezoneH;
                  colorBorder[] = {0,1,0,0.3};
                  colorDisabled[] = {0,1,0,0.3};
                  colorBackground[] = {0,1,0,0.3};
                  colorBackgroundDisabled[] = {0,1,0,0.3};
                  colorFocused[] = {0,1,0,0.5};
                  colorBackgroundActive[] = {0,1,0,0.3};
                  colorActive[] = {0,1,0,0.5};
                  tooltip = "Bitte beachte, dass das Kennzeichen geklaut sein könnte"; //--- ToDo: Localize;
                  action = "([ctrlText 5001]) call mis_fnc_requestOwner;closeDialog 0;";
              };
      
              class TPlateNumber: Life_RscEdit
              {
                  idc = 5001;
                  text = "";
                  x = 0.365937 * safezoneW + safezoneX;
                  y = 0.467 * safezoneH + safezoneY;
                  w = 0.273281 * safezoneW;
                  h = 0.033 * safezoneH;
                  colorBackground[] = {1,1,1,0.8};
                  colorActive[] = {1,1,1,0.8};
              };
          };
      };
      Alles anzeigen

      Schritt 4:

      Erstelle eine Datei Namens numberPlate.hpp

      Code
      class numberPlate
      {
          idd =4000;
          movingenable = 0;
          class Controlsbackground
          {
              class TBackground: Life_RscText
              {
                  idc = 2200;
                  x = 0.333298 * safezoneW + safezoneX;
                  y = 0.346 * safezoneH + safezoneY;
                  w = 0.335156 * safezoneW;
                  h = 0.286 * safezoneH;
                  colorBackground[] = {1,1,1,0.3};
                  colorActive[] = {1,1,1,0.3};
                  text = "";
              };
      
              class THeader: Life_RscText
              {
                  idc = 1000;
                  text = "Nummernschild Generator"; //--- ToDo: Localize;
                  x = 0.391094 * safezoneW + safezoneX;
                  y = 0.379 * safezoneH + safezoneY;
                  w = 0.228 * safezoneW;
                  h = 0.044 * safezoneH;
                  colorText[] = {0,1,0,0.8};
                  colorBackground[] = {1,1,1,0};
                  colorActive[] = {1,1,1,0.3};
                  sizeEx = 0.06;
              };
          };
          class Controls
          {
              class TButton: Life_RscButton
              {
                  idc = 1600;
                  text = "Schließen"; //--- ToDo: Localize;
                  x = 0.572187 * safezoneW + safezoneX;
                  y = 0.577 * safezoneH + safezoneY;
                  w = 0.0876563 * safezoneW;
                  h = 0.033 * safezoneH;
                  colorBorder[] = {0,1,0,0.3};
                  colorDisabled[] = {0,1,0,0.3};
                  colorBackground[] = {0,1,0,0.3};
                  colorBackgroundDisabled[] = {0,1,0,0.3};
                  colorBackgroundActive[] = {0,1,0,0.3};
                  colorFocused[] = {0,1,0,0.5};
                  colorActive[] = {0,1,0,0.5};
                  action = "closeDialog 0;";
              };
      
              class TButton3: Life_RscButton
              {
                  idc = 1602;
                  text = "Hilfe"; //--- ToDo: Localize;
                  x = 0.345313 * safezoneW + safezoneX;
                  y = 0.577 * safezoneH + safezoneY;
                  w = 0.0876563 * safezoneW;
                  h = 0.033 * safezoneH;
                  colorBorder[] = {0,1,0,0.3};
                  colorDisabled[] = {0,1,0,0.3};
                  colorBackground[] = {0,1,0,0.3};
                  colorBackgroundDisabled[] = {0,1,0,0.3};
                  colorBackgroundActive[] = {0,1,0,0.3};
                  colorFocused[] = {0,1,0,0.5};
                  colorActive[] = {0,1,0,0.5};
                  action = "Hint format [""mit diesem Werkzeug, kannst du das KFZ-Kennzeichen eines Autos manipulieren, dazu muss du nahe an das Auto heran und das Item nutzen. Beachte, dass du Kennzeichen von anderen Fahrzeugen nutzen kannst um deine Identität zu verschleiern. Leider haben nicht alle Arma 3 Autos ein Kennzeichen""];";
              };
      
              class TButton2: Life_RscButton
              {
                  idc = 1601;
                  text = "Anpassen"; //--- ToDo: Localize;
                  x = 0.45875 * safezoneW + safezoneX;
                  y = 0.577 * safezoneH + safezoneY;
                  w = 0.0876563 * safezoneW;
                  h = 0.033 * safezoneH;
                  colorBorder[] = {0,1,0,0.3};
                  colorDisabled[] = {0,1,0,0.3};
                  colorBackground[] = {0,1,0,0.3};
                  colorBackgroundDisabled[] = {0,1,0,0.3};
                  colorFocused[] = {0,1,0,0.5};
                  colorBackgroundActive[] = {0,1,0,0.3};
                  colorActive[] = {0,1,0,0.5};
                  tooltip = "Bitte beachte, dass das Kennzeichen max 12 - 15 Zeichen haben sollte, weiterhin  besitzen nicht alle Fahrzeuge ein sichtbares Kennzeichen!"; //--- ToDo: Localize;
                  action = "([ctrlText 5000]) call mis_fnc_changePlate;closeDialog 0;";
              };
      
              class TPlateNumber: Life_RscEdit
              {
                  idc = 5000;
                  text = "";
                  x = 0.365937 * safezoneW + safezoneX;
                  y = 0.467 * safezoneH + safezoneY;
                  w = 0.273281 * safezoneW;
                  h = 0.033 * safezoneH;
                  colorBackground[] = {1,1,1,0.8};
                  colorActive[] = {1,1,1,0.8};
              };
          };
      };
      Alles anzeigen

      Schritt 5:

      Erstelle eine Datei namens fn_getPlateNumber.sqf

      Code
      /*
      Author: McKenzie
      Edit by: Natic
      Description: gets the license Plate Number of Any Vehicle
      
      */
      
      private _checkVehicle = CursorTarget;
      if ((Vehicle player != player) && (_checkVehicle distance player > 25) ) exitWith {
          hint format ["Du bist zu weit weg um das Kennzeichen eindeutig zu lesen."];
      };
      
      if ((_checkVehicle distance player > 20) && (!(currentWeapon player in ["Binocular", "Rangefinder"])) && (Vehicle player isEqualTo player)) exitWith {
          hint format ["Du bist zu weit weg um das Kennzeichen eindeutig zu lesen. Nehme ein Binocular oder einen Rangefinder in die Hand"];
      };
      
      if ((_checkVehicle distance player > 50) && (currentWeapon player in ["Binocular", "Rangefinder"]) && (Vehicle player isEqualTo player)) exitWith {
          hint format ["Du bist zu weit weg um das Kennzeichen eindeutig zu lesen."];
      };
      
      _checkVehiclePlate = getPlateNumber _checkVehicle;
      
      hint format ["Du konntest folgendes Kennzeichen entziffern: %1",_checkVehiclePlate];
      Alles anzeigen


      Dinge wie Einträge in der Functions.hpp, Master_Handle.hpp und der rest sollte selbsterklärend sein ^^

      Weiterentwicklungen wie Items für Manipulation des Nummernschildes und oder das Abfragen via Knopfdruck sollte ebenfalls selbsterklärend sein, wenn man die SuFu von NN nutzt :D

      Fragen?? Erst Sufu dann Kommentar

      Mit freundlichen Grüßen Natic & XFireFighter

      Mit freundlichen Grüßen

      Natic

      --------------------------------------------------------------------------------------------------------------------------

      Kein direkten PN - Support

      --------------------------------------------------------------------------------------------------------------------------

      Programierung

      Wir lieben

      es

    • B4v4r!4n_Str!k3r
      Nerd
      Reaktionen
      246
      Trophäen
      11
      Beiträge
      725
      Bilder
      5
      • 24. Januar 2019 um 22:47
      • #2

      Hast du es auch getestet? :/ Ich bezweifel dass er das ganze wirklich in der DB speichert bzw. wieder empfängt. Die ganzen Scripts liegen doch auf dem Client und dieser kennt die Funktion DB_fnc_asyncCall doch gar nicht.

      23106-logo-schrift-dunkel-390-70-png class=

      Services rund um ArmA RPG Life

      ArmA Bibel: https://community.bistudio.com/wiki/

    • Natic
      Fortgeschrittener
      Reaktionen
      66
      Trophäen
      9
      Beiträge
      408
      • 24. Januar 2019 um 23:16
      • #3

      B4v4r!4n_Str!k3r da hast du recht,

      da habe ich wohl nicht aufgepasst. Muss ich dann mal ändern aber Mann kann die Speicherung auch als Datei im lifeserver machen mit async und diese dann einfach aufrufen ;)

      Mit freundlichen Grüßen

      Natic

      --------------------------------------------------------------------------------------------------------------------------

      Kein direkten PN - Support

      --------------------------------------------------------------------------------------------------------------------------

      Programierung

      Wir lieben

      es

    • Natic
      Fortgeschrittener
      Reaktionen
      66
      Trophäen
      9
      Beiträge
      408
      • 25. Januar 2019 um 08:21
      • #4

      Wäre schön wenn das einer testen könnte

      Mit freundlichen Grüßen

      Natic

      --------------------------------------------------------------------------------------------------------------------------

      Kein direkten PN - Support

      --------------------------------------------------------------------------------------------------------------------------

      Programierung

      Wir lieben

      es

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 25. Januar 2019 um 13:30
      • #5

      Moin,

      das Script wird so nicht funktionieren ;) . Wie B4v4r!4n_Str!k3r schon geschrieben hat, muss hier zwischen Mission und life_server unterschieden werden. Des Weiteren würde ich wahrscheinlich nicht das Feld "plate" in der Vehicle Tabelle nutzen sondern ein eigenes Feld dafür anlegen aber das ist Geschmackssache. Im übrigen habe ich auch keine Prüfung gesehen, dass die Plate unique ist, das ist relativ ungünstig, da z.b. Schaden und Inventory auf alle Fahrzeuge übertragen werden könnte.

      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 ?

    • Natic
      Fortgeschrittener
      Reaktionen
      66
      Trophäen
      9
      Beiträge
      408
      • 25. Januar 2019 um 14:15
      • #6

      moeck daran habe ich gar nicht Gedacht :D

      Wenn du Zeit und Laune hast, wäre es Supii wenn du die DB Abfrage hier einmal einfügen kannst, da ich aktuell Zeitlich bedingt bin.

      Sollte es nicht möglich sein, werde ich bis morgen dafür Zeit finden ^^

      Mit freundlichen Grüßen

      Natic

      --------------------------------------------------------------------------------------------------------------------------

      Kein direkten PN - Support

      --------------------------------------------------------------------------------------------------------------------------

      Programierung

      Wir lieben

      es

    Registrieren oder Einloggen

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

    Registrieren

    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™