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
Di: 20 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] Serverregeln beim ersten Betreten bestätigen (Multi language)

      • Altis Life
    • Joe Barbaro
    • 28. März 2020 um 16:50
    • Joe Barbaro
      Nerd
      Reaktionen
      199
      Trophäen
      8
      Beiträge
      688
      • 28. März 2020 um 16:50
      • #1

      Moin NN,

      ich habe die Tage in zusammenarbeit mit Kapsl mal ein kleines System entwickelt.

      Auch ein kleines Danke an Henne der im Discord auf ein Problem beim Dialog geholfen hat.

      Dieses Script führt der Spieler beim First Join und beim Profilwechsel aus und ist zum akzeptieren der Server Regeln.

      Dieses System kann natürlich auf jedem Server eingesetzt werde. Es muss dafür ggf. umgeschrieben werden.

      !!!ACHTUNG!!! DAS SYSTEM WURDE AUF KEINEM SERVER GETESTET! ES WURDE LEDIGLICH IM EDITOR ENTWICKELT UND GETESTET !!!ACHTUNG!!!

      Scripts und Dialog dürfen frei verändert werden. Der Author Tag MUSS aber in jedem Fall stehen bleiben.

      Fangen wir an :P

      Schritt 1:

      Wir legen den Dialog an. Hierfür erstellen wir im Ordner dialog eine Datei namens Rules.hpp mit folgendem Inhalt

      Code: Rules.hpp
      /////////////////////////////////////////////////////////////////
      ////This File was Edited by Joe Barbaro & Eli0w with GUI D3V ////
      /////////////////////////////////////////////////////////////////
      class Rules {
         idd = 8000;
         name = "Rules";
         movingenable = false;
         enablesimulation = true;
         class controlsBackground
         {
         };
         class controls
         {
             class Rules_Background : Life_RscText
             {
                 idc = 8001;
                 x = 0.286979166666667 * safezoneW + safezoneX;
                 y = 0.265322138126774 * safezoneH + safezoneY;
                 h = 0.460316461684011 * safezoneH;
                 w = 0.4 * safezoneW;
                 colorbackground[] = {0,0,0,0.5};
             };
             class Rules_List_LanguageList : Life_RscListBox
             {
                 idc = 8002;
                 x = 0.286979166666667 * safezoneW + safezoneX;
                 y = 0.265322138126774 * safezoneH + safezoneY;
                 w = 0.113020833333333 * safezoneW;
                 h = 0.460316461684011 * safezoneH;
                 SizeEx = 0.05;
                 style = 0;
                 text = "Please select a language";
                 valign = "middle";
                 onLBSelChanged = "_this call life_fnc_RuleLanguageChange";
                 class Attributes {
                 align = "center";
                };
             };
             class Rules_Title : Life_RscStructuredText
             {
                 idc = 8003;
                 x = 0.405208333333333 * safezoneW + safezoneX;
                 y = 0.274834437086093 * safezoneH + safezoneY;
                 w = 0.269791666666667 * safezoneW;
                 h = 0.022232734153264 * safezoneH;
                 text = "Please select a language";
             };
                class Rules_Scroll : Life_RscControlsGroup {
                  idc = -1;
                  x = 0.405208333333333 * safezoneW + safezoneX;
                  y = 0.315042573320719 * safezoneH + safezoneY;
                  w = 0.269791666666667 * safezoneW;
                  h = 0.3519394512772 * safezoneH;
      
                class Controls {
                  class Rules_StructuredText: Life_RscStructuredText {
                  idc = 8004;
                  sizeEx = 0.020;
                  text = "Please select a language";
                  x = 0;
                  y = 0;
                  w = 0.27;
                  h = 5;
                  };
                };
              };
             class Rules_BTN_Accept : Life_RscButtonMenu
             {
                 idc = 8005;
                 x = 0.415747166666667 * safezoneW + safezoneX;
                 y = 0.682378754966887 * safezoneH + safezoneY;
                 w = 0.095589 * safezoneW;
                 h = 0.0271765903500474 * safezoneH;
                 onbuttonclick = "profilenamespace setVariable [""NNP"",true]; closeDialog 0";
                 text = "-";
                 style = 16;
                 Size = 0.05;
                 valign = "middle";
                     class Attributes {
                       align = "center";
                      };
             };
             class Rules_BTN_Decline : Life_RscButtonMenu
             {
                 idc = 8006;
                 x = 0.568351333333333 * safezoneW + safezoneX;
                 y = 0.682378754966887 * safezoneH + safezoneY;
                 w = 0.095589 * safezoneW;
                 h = 0.0271765903500474 * safezoneH;
                 onbuttonclick = "endMission ""LOSER""";
                 text = "-";
                 style = 16;
                 Size = 0.05;
                 valign = "middle";
                     class Attributes {
                       align = "center";
                      };
             };
         };
      };
      /////////////////////////////////////////////////////////////////
      ////////////////////////// FILE END /////////////////////////////
      /////////////////////////////////////////////////////////////////
      Alles anzeigen

      Schritt 2:

      Wir definieren den Dialog. Hierzu fügen wir in der dialog\MasterHandler.hpp folgendes hinzu:

      Code: MasterHandler.hpp
      #include "Rules.hpp"

      Schritt 3:

      Wir erstellen eine Funktion im Ordner core/functions mit dem Namen fn_Rules.sqf mit folgendem Inhalt:

      Code: fn_Rules.sqf
      /*
        Author: Joe Barbaro & Eli0w
        Description: Ruft den Dialog auf und füllt ihn mit ersten Werten
      */
      
      if (profilenamespace getvariable "TEST") exitwith {};
      createDialog "Rules";
      private _display = findDisplay 8000;
      private _back = _display displayCtrl 8001;
      private _list = _display displayCtrl 8002;
      private _title = _display displayCtrl 8003;
      private _text = _display displayCtrl 8004;
      private _BTN1 = _display displayctrl 8005;
      private _BTN2 = _display displayctrl 8006;
      
      
      lbClear _list;
      _list lbadd "Deutsch";
      _list lbSetData [(lbSize _list) - 1, "DE"];
      _list lbadd "English";
      _list lbSetData [(lbSize _list) - 1, "EN"];
      _list lbadd "Espanol";
      _list lbSetData [(lbSize _list) - 1, "ES"];
      
      _BTN1 ctrlSetTextColor [1, 1, 1, 1];
      _BTN1 ctrlSetBackgroundColor [0, 1, 0, 0.5];
      _BTN2 ctrlSetTextColor [1, 1, 1, 1];
      _BTN2 ctrlSetBackgroundColor [1, 0, 0, 0.5];
      
      private _positionText = ctrlPosition _text;
      private _TextH = ctrlTextHeight _text;
      _text ctrlSetPosition [_positionText select 0, _positionText select 1, _positionText select 2, _TextH];
      _text ctrlCommit 0;
      
      _BTN1 ctrlEnable false;
      _BTN2 ctrlEnable false;
      
      _text ctrlSetStructuredText parseText "<t size='1' color='#FFFFFF' valign = 'middle' align='center'><a color='#00DFFF'>•</a> Wähle eine Sprache aus<br/><br/> <a color='#00DFFF'>•</a> Please select a language<br/><br/> <a color='#00DFFF'>•</a>
      Por favor, seleccione un idioma </t><br/>";
      private _positionText = ctrlPosition _text;
      private _TextH = ctrlTextHeight _text;
      _text ctrlSetPosition [_positionText select 0, _positionText select 1, _positionText select 2, _TextH];
      _text ctrlCommit 0;
      Alles anzeigen

      Schritt 3:

      Wir erstellen eine Funktion im Ordner core/functions mit dem Namen fn_RuleLanguageChange.sqf mit folgendem Inhalt:

      Code: fn_RuleLanguageChange.sqf
      /*
        Author: Joe Barbaro & Eli0w
        Description: Passt je nach Sprachauswahl den Dialog an
      */
      
      private _display = findDisplay 8000;
      private _back = _display displayCtrl 8001;
      private _list = _display displayCtrl 8002;
      private _title = _display displayCtrl 8003;
      private _text = _display displayCtrl 8004;
      private _BTN1 = _display displayctrl 8005;
      private _BTN2 = _display displayctrl 8006;
      
      
      private _loadoutText = lbData [8002,lbCurSel (8002)];
      
      
      switch (_loadoutText) do {
          case "DE": {
            //title
            _title ctrlSetText "Deutsch";
            //text
            _text ctrlSetStructuredText parseText    "<t size='1' align='left'>§1 RDM ist verboten!</t> <br/>";
            private _positionText = ctrlPosition _text;
            private _TextH = ctrlTextHeight _text;
            _text ctrlSetPosition [_positionText select 0, _positionText select 1, _positionText select 2, _TextH];
            _text ctrlCommit 0;
            //Buttons
            _BTN1 ctrlEnable true;
            _BTN2 ctrlEnable true;
            _BTN1 ctrlSetText "Akzeptieren";
            _BTN2 ctrlSetText "Ablehnen";
          };
          case "EN": {
            //title
            _title ctrlSetText "English";
            //text
            _text ctrlSetStructuredText parseText    "<t size='1' align='left'>§1 RDM is not allowed</t> <br/>";
            private _positionText = ctrlPosition _text;
            private _TextH = ctrlTextHeight _text;
            _text ctrlSetPosition [_positionText select 0, _positionText select 1, _positionText select 2, _TextH];
            _text ctrlCommit 0;
            //Buttons
            _BTN1 ctrlEnable true;
            _BTN2 ctrlEnable true;
            _BTN1 ctrlSetText "Accept";
            _BTN2 ctrlSetText "Decline";
          };
          case "ES": {
            //title
            _title ctrlSetText "Espanol";
            //text
            _text ctrlSetStructuredText parseText    "<t size='1' align='left'>§1 RDM está prohibido</t> <br/>";
            private _positionText = ctrlPosition _text;
            private _TextH = ctrlTextHeight _text;
            _text ctrlSetPosition [_positionText select 0, _positionText select 1, _positionText select 2, _TextH];
            _text ctrlCommit 0;
            //Buttons
            _BTN1 ctrlEnable true;
            _BTN2 ctrlEnable true;
            _BTN1 ctrlSetText "Aceptar";
            _BTN2 ctrlSetText "Disminución";
          };
          default {
          _title ctrlSetText "ERROR DEFAULT CASE";
          _text ctrlSetText "ERROR DEFAULT CASE";
          _BTN1 ctrlSetText "ERROR DEFAULT CASE";
          _BTN2 ctrlSetText "ERROR DEFAULT CASE";
          };
      };
      Alles anzeigen

      Schritt 4:

      Wir definieren beide Funktionen in der Functions.hpp

      Hierzu fügen wir in der Class Functions folgendes hinzu

      Code
      class Rules {};
      class RuleLanguageChange{};

      Schritt 5:

      Benennen und definieren der Profilenamespace Variabel

      Damit nicht jeder Server der dieses Sytem nutzt die gleiche Variabel nimmt wird empfohlen beim Einbau dieses Scripts die Variabel umzubenennen.

      !!!ACHTUNG!!! BEIM UMBENENNEN DER VARIABEL DARAUF ACHTEN DIES AUCH IN DER FN_RULES.SQF SOWIE IM DIALOG SELBER BEIM ACCEPT BUTTON NACHZUTRAGEN !!!ACHTUNG!!!

      Hierzu gehen wir in die core/Init.sqf und fügen dort unter diag_log "::Life Client:: Initialization Variables" folgendes hinzu:

      Code
      diag_log "::Life Client:: Initialization Variables";
      [] call compile preprocessFileLineNumbers "core\configuration.sqf";
      if (isnil {profileNamespace getVariable "TEST"}) then {profileNamespace setVariable ["TEST",false]};

      Das wars auch schon.

      Das Editieren der Textelemente erfolgt mit ParseText.

      Solltet ihr Fehler finden oder Fragen zum System haben könnt ihr gerne unter dem Post fragen.

      Hier noch 2 Bilder wie das ganze Ingame aussieht:

      Bilder


      Mit freundlichen Grüßen

      Joe Barbaro

      Entwickler vom Arma 3 Batch Generator


    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™