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
Mo: 29 September 2025
  • Anmelden oder registrieren
  • Suche
Alles
  • Alles
  • 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. Mitglieder
    3. GermanBolle

    Beiträge von GermanBolle

    • Extdb stresst rum

      • GermanBolle
      • 27. Juni 2017 um 02:23

      naja ich Nene das bei mir immer über alle DB Name dann muss ich mir nicht soviel merken :):)

    • Allgemeine frage zum hint

      • GermanBolle
      • 27. Juni 2017 um 02:20

      Ah okay vielen Dank für dein Tip.

      ich werde es gleich mal machen.

    • Allgemeine frage zum hint

      • GermanBolle
      • 27. Juni 2017 um 02:09

      Hallo liebe Community,

      Ich weiß das das klingt jetzt vielleicht echt dumm aber ich habe grade vor lauter Langeweile einfach mal ein Cowntdown gebastelt für was er sein soll weiß ich noch nicht.

      Aber ich habe es bisher so gemacht:

      Code: Cowntdown.sqf
      hint "Die ist klar was passiert wenn ich abgelaufen bin!";
      hint "00:00:00";
      sleep 1;
      hint "00:00:01";
      sleep 1;
      .............
      Und so weiter bis die 2 bis 15 Minuten erreicht sind 

      So jetzt zu meiner dummen frage. Wie kann ich es machen ohne das ich 1800 Zeilen schreiben muss das es ja so sehr unübersichtlich werden würde?

      Vielen Dank im vorraus.

    • [TUT] Mein Eigenes HUD

      • GermanBolle
      • 25. Juni 2017 um 03:22

      Bei mir Flackert es so auch nicht mehr.

      Code: fn_hudSetup.sqf
      disableSerialization;
      [] spawn {
          ("risk_hudDialog" call BIS_fnc_rscLayer) cutRsc ["risk_hudDialog","PLAIN"];     
              sleep 5;
          [] execVM "scripts\risk_initHud.sqf";
      };

      Und das in ans Ende der risk_initHud.sqf

      [] execVM "scripts\risk_initHud.sqf";

      Sieht dan so aus:

      Code
      /*********************************************************
      *                                                        *
      *       risk_initHud.sqf                                 *
      *       Initialize the Hud.                              *
      *       Donate to this PayPal E-Mail:                    *
      *       [email protected]                             *
      *       You want that hud? Sure Ask me on the Forum!     *
      *       https://native-network.net/user/23-risk/         *
      *                                                        *
      *       Modified by blackfisch                           *
      *       https://native-network.net/user/1758-blackfisch/ *
      **********************************************************/
      for "_i" from 0 to 1 step 1 do {
          //what system do u want to show?
          risk_varHealth  = false;  //Health default true  | true = activate | false = not activated
          risk_varStamina = true;  //Stamina default true | true = activate | false = not activated
          risk_varHunger  = true;  //Hunger default true  | true = activate | false = not activated
          risk_varThirst  = true;  //Thirst default true  | true = activate | false = not activated
          risk_varWeight  = true;  //Weight default true  | true = activate | false = not activated
          risk_varName    = true;  //Name default true    | true = activate | false = not activated
          risk_varSystem  = true;  //System default true  | true = activate | false = not activated
      
          if (!risk_varSystem) exitWith {}; //System is deactivated
      
          //The Position of the texts
          _NamePos      = "center"; //Can be left , center or right
          _StatusPos    = "center"; //Can be left , center or right
      
          //Set the font...
          _NameFont     = "PuristaBold"; //Font can be TahomaB, PuristaLight, PuristaMedium, PuristaSemiBold, PuristaBold, LucidaConsoleB, EtelkaMonospacePro, EtelkaMonospaceProBold, EtelkaNarrowMediumPro
          _StatusFont   = "PuristaBold"; //Font can be TahomaB, PuristaLight, PuristaMedium, PuristaSemiBold, PuristaBold, LucidaConsoleB, EtelkaMonospacePro, EtelkaMonospaceProBold, EtelkaNarrowMediumPro
      
          //get some infos about our player..
          //IGNORE THIS
          _Health   = damage player;
          _Stamina  = getFatigue player;
          _Hunger   = life_hunger;
          _Thirst   = life_thirst;
          _Weight   = 100-(((life_maxWeight - life_carryWeight)/life_maxWeight)*100); //proportion of carried weight/max. carryWeight
          _Name     = name player;
      
          //adds the Pipes..
          //IGNORE THIS
          _Pipe   = "| ";
      
          //set the color for our Text's
          //IGNORE THIS
          _HealthColor  = "#FFFFFF";
          _StaminaColor = "#FFFFFF";
          _HungerColor  = "#FFFFFF";
          _ThirstColor  = "#FFFFFF";
          _WeightColor  = "#FFFFFF";
      
          //set the text to nothing..
          //IGNORE THIS
          _HealthText   = "";
          _StaminaText  = "";
          _HungerText   = "";
          _ThirstText   = "";
          _WeightText   = "";
      
      
          //color for each sentence
          _ColorOne     = "#0040FF";
          _ColorTwo     = "#16E016";
          _ColorThree   = "#16E016";
          _ColorFour    = "#F0F046";
          _ColorFive    = "#F0F046";
          _ColorSix     = "#FF8000";
          _ColorSeven   = "#FF8000";
          _ColorEight   = "#FF0000";
          _ColorNine    = "#FF0000";
          _ColorTen     = "#FF0000";
      
      
          //Text's for Health
          _HealthTextOne        = "Ich fühle mich gesund";
          _HealthTextTwo        = "Ich glaube ich hab 'n Kratzer";
          _HealthTextThree      = "Ich bin doch leicht verletzt";
          _HealthTextFour       = "Ich habe leichte Schmerzen";
          _HealthTextFive       = "Ich fühle mich nicht gut";
          _HealthTextSix        = "Ich habe starke Schmerzen";
          _HealthTextSeven      = "Ich glaube es ist etwas gebrochen";
          _HealthTextEight      = "Ich bin schwer verletzt";
          _HealthTextNine       = "Ich bin tödlich verletzt";
          _HealthTextTen        = "Tot";
      
          //Text's for Stamina
          _StaminaTextOne        = "Ich habe voll Energie";
          _StaminaTextTwo        = "Ich kann noch weit laufen";
          _StaminaTextThree      = "Langsam habe ich keine Energie mehr";
          _StaminaTextFour       = "Ich kann nicht mehr lange";
          _StaminaTextFive       = "Ich sollte langsam Pause machen";
          _StaminaTextSix        = "Ich brauch ne Pause";
          _StaminaTextSeven       = "Ich bin vollkommen außer Puste";
      
          //Text's for Hunger
          _HungerTextOne        = "Ich habe keinen Hunger";
          _HungerTextTwo        = "Ein Schockoriegel wäre nicht schlecht";
          _HungerTextThree      = "'n Pott suppe wär nicht schlecht";
          _HungerTextFour       = "Ich brauche langsam was zu essen";
          _HungerTextFive       = "Mein Magen knurrt schon";
          _HungerTextSix        = "Mein Magen ist jetzt echt leer";
          _HungerTextSeven      = "Ich muss jetzt endlich was essen";
          _HungerTextEight      = "Ich könnt 'n ganzes Schwein essen";
          _HungerTextNine       = "Ich kapituliere bald";
          _HungerTextTen        = "Ich bin am verhungern";
      
          //Text's for Thirst
          _ThirstTextOne        = "Ich habe kein Durst";
          _ThirstTextTwo        = "Ich könnte was trinken";
          _ThirstTextThree      = "Ein Schluck Wasser wäre schön";
          _ThirstTextFour       = "Mein Hals ist etwas trocken";
          _ThirstTextFive       = "Ein Glas Wasser wäre schön";
          _ThirstTextSix        = "Ich sollte bald was trinken";
          _ThirstTextSeven      = "Mein Hals ist ganz trocken";
          _ThirstTextEight      = "Ich sollte jetzt was trinken";
          _ThirstTextNine       = "Ich verdurste gleich";
          _ThirstTextTen        = "Ich verdurste";
      
          //Text's for Weight
          _WeightTextOne        = "Da geht noch mehr";
          _WeightTextTwo        = "Der Rucksack ist noch nicht voll";
          _WeightTextThree      = "Damit kann ich kilometerweit laufen";
          _WeightTextFour       = "Langsam wird es anstrengend";
          _WeightTextFive       = "Es geht nicht mehr viel rein";
          _WeightTextSix        = "Ich bekomme Rückenschmerzen";
          _WeightTextSeven      = "Ich sollte den Rucksack ablegen";
          _WeightTextEight      = "Ich sollte langsam was ablegen";
          _WeightTextNine       = "Ich breche gleich zusammen";
          _WeightTextTen        = "Ich kann nicht mehr tragen";
      
      
      
          //███████████████████████████████████████████████████████████████████████
      
          //██████████████████ DO NOT MODIFY THE FOLLOWING CODE!█████████████████████████████████
      
          //██████████████████ IF YOU DON'T KNOW WHAT UR DOING! █████████████████████████████████
      
          //███████████████████████████████████████████████████████████████████████
      
      //    sleep 2.5;
      
          //set the text and some more color..
          if(risk_varHealth) then {
              switch (true) do {
                  case (_Health < 0.10): {
                      _HealthColor = _ColorOne;
                      _HealthText = _HealthTextOne;
                  };
                  case (_Health < 0.20): {
                      _HealthColor = _ColorTwo;
                      _HealthText = _HealthTextTwo
                  };
                  case (_Health < 0.30): {
                      _HealthColor = _ColorThree;
                      _HealthText = _HealthTextThree;
                  };
                  case (_Health < 0.40): {
                     _HealthColor = _ColorFour;
                     _HealthText = _HealthTextFour;
                  };
                  case (_Health < 0.50): {
                      _HealthColor = _ColorFive;
                      _HealthText = _HealthTextFive;
                  };
                  case (_Health < 0.60): {
                      _HealthColor = _ColorSix;
                      _HealthText = _HealthTextSix;
                  };
                  case (_Health < 0.70): {
                      _HealthColor = _ColorSeven;
                      _HealthText = _HealthTextSeven;
                  };
                  case (_Health < 0.80): {
                      _HealthColor = _ColorEight;
                      _HealthText = _HealthTextEight;
                  };
                  case (_Health < 0.90): {
                      _HealthColor = _ColorNine;
                      _HealthText = _HealthTextNine;
                  };
                  case (_Health < 1): {
                      _HealthColor = _ColorTen;
                      _HealthText = _HealthTextTen;
                  };
              };
          };
      
          if(risk_varStamina) then {
              switch (true) do {
                  case (_Stamina < 0.10): {
                      _StaminaColor = _ColorOne;
                      _StaminaText = _StaminaTextOne;
                  };
                  case (_Stamina < 0.20): {
                      _StaminaColor = _ColorTwo;
                      _StaminaText = _StaminaTextTwo
                  };
                  case (_Stamina < 0.30): {
                      _StaminaColor = _ColorThree;
                      _StaminaText = _StaminaTextThree;
                  };
                  case (_Stamina < 0.40): {
                     _StaminaColor = _ColorFour;
                     _StaminaText = _StaminaTextFour;
                  };
                  case (_Stamina < 0.50): {
                      _StaminaColor = _ColorSix;
                      _StaminaText = _StaminaTextFive;
                  };
                  case (_Stamina < 0.60): {
                      _StaminaColor = _ColorEight;
                      _StaminaText = _StaminaTextSix;
                  };
                  case (_Stamina >= 0.60): {
                      _StaminaColor = _ColorTen;
                      _StaminaText = _StaminaTextSeven;
                  };
              };
          };
      
          if(risk_varHunger) then {
              switch (true) do {
                  case (_Hunger > 90): {
                      _HungerColor = _ColorOne;
                      _HungerText = _HungerTextOne;
                  };
                  case (_Hunger > 80): {
                      _HungerColor = _ColorTwo;
                      _HungerText = _HungerTextTwo
                  };
                  case (_Hunger > 70): {
                      _HungerColor = _ColorThree;
                      _HungerText = _HungerTextThree;
                  };
                  case (_Hunger > 60): {
                     _HungerColor = _ColorFour;
                     _HungerText = _HungerTextFour;
                  };
                  case (_Hunger > 50): {
                      _HungerColor = _ColorFive;
                      _HungerText = _HungerTextFive;
                  };
                  case (_Hunger > 40): {
                      _HungerColor = _ColorSix;
                      _HungerText = _HungerTextSix;
                  };
                  case (_Hunger > 30): {
                      _HungerColor = _ColorSeven;
                      _HungerText = _HungerTextSeven;
                  };
                  case (_Hunger > 20): {
                      _HungerColor = _ColorEight;
                      _HungerText = _HungerTextEight;
                  };
                  case (_Hunger > 10): {
                      _HungerColor = _ColorNine;
                      _HungerText = _HungerTextNine;
                  };
                  case (_Hunger <= 10): {
                      _HungerColor = _ColorTen;
                      _HungerText = _HungerTextTen;
                  };
              };
          };
      
          if(risk_varThirst) then {
              switch (true) do {
                  case (_Thirst > 90): {
                      _ThirstColor = _ColorOne;
                      _ThirstText = _ThirstTextOne;
                  };
                  case (_Thirst > 80): {
                      _ThirstColor = _ColorTwo;
                      _ThirstText = _ThirstTextTwo
                  };
                  case (_Thirst > 70): {
                      _ThirstColor = _ColorThree;
                      _ThirstText = _ThirstTextThree;
                  };
                  case (_Thirst > 60): {
                     _ThirstColor = _ColorFour;
                     _ThirstText = _ThirstTextFour;
                  };
                  case (_Thirst > 50): {
                      _ThirstColor = _ColorFive;
                      _ThirstText = _ThirstTextFive;
                  };
                  case (_Thirst > 40): {
                      _ThirstColor = _ColorSix;
                      _ThirstText = _ThirstTextSix;
                  };
                  case (_Thirst > 30): {
                      _ThirstColor = _ColorSeven;
                      _ThirstText = _ThirstTextSeven;
                  };
                  case (_Thirst > 20): {
                      _ThirstColor = _ColorEight;
                      _ThirstText = _ThirstTextEight;
                  };
                  case (_Thirst > 10): {
                      _ThirstColor = _ColorNine;
                      _ThirstText = _ThirstTextNine;
                  };
                  case (_Thirst <= 10): {
                      _ThirstColor = _ColorTen;
                      _ThirstText = _ThirstTextTen;
                  };
              };
          };
      
          if(risk_varWeight) then {
              switch (true) do {
                  case (_Weight < 10): {
                      _WeightColor = _ColorOne;
                      _WeightText = _WeightTextOne;
                  };
                  case (_Weight < 20): {
                      _WeightColor = _ColorTwo;
                      _WeightText = _WeightTextTwo
                  };
                  case (_Weight < 30): {
                      _WeightColor = _ColorThree;
                      _WeightText = _WeightTextThree;
                  };
                  case (_Weight < 40): {
                     _WeightColor = _ColorFour;
                     _WeightText = _WeightTextFour;
                  };
                  case (_Weight < 50): {
                      _WeightColor = _ColorFive;
                      _WeightText = _WeightTextFive;
                  };
                  case (_Weight < 60): {
                      _WeightColor = _ColorSix;
                      _WeightText = _WeightTextSix;
                  };
                  case (_Weight < 70): {
                      _WeightColor = _ColorSeven;
                      _WeightText = _WeightTextSeven;
                  };
                  case (_Weight < 80): {
                      _WeightColor = _ColorEight;
                      _WeightText = _WeightTextEight;
                  };
                  case (_Weight < 90): {
                      _WeightColor = _ColorNine;
                      _WeightText = _WeightTextNine;
                  };
                  case (_Weight <= 100): {
                      _WeightColor = _ColorTen;
                      _WeightText = _WeightTextTen;
                  };
              };
          };
      
          //prepare the text last time.
          _NameDialog = parseText format["<t color='#FFFFFF' font='%3' size='1.5' align='%2'>%1</t>",_Name, _NamePos, _NameFont];
          _StatusTextDialog = parseText format ["<t font='%16' size='1' align='%15'><t color='%1'>%2</t> %3<t color='%4'>%5</t> %6<t color='%7'>%8</t> %9<t color='%10'>%11</t> %12<t color='%13'>%14</t>",
      
              _HealthColor,
              _HealthText,
              if(risk_varHealth)then{_Pipe}else{""},
              _StaminaColor,
              _StaminaText,
              if(risk_varStamina)then{_Pipe}else{""},
              _HungerColor,
              _HungerText,
              if(risk_varHunger)then{_Pipe}else{""},
              _ThirstColor,
              _ThirstText,
              if(risk_varThirst)then{_Pipe}else{""},
              _WeightColor,
              _WeightText,
              _StatusPos,
              _StatusFont
          ];
      
              //Add our Text's to the Dialog.
              ((uiNamespace getVariable "risk_hudDialog") displayCtrl 2002) ctrlSetStructuredText _StatusTextDialog;
          if(risk_varName) then {
              ((uiNamespace getVariable "risk_hudDialog") displayCtrl 2001) ctrlSetStructuredText _NameDialog;
          };
      };
      [] execVM "scripts\risk_initHud.sqf";
      Alles anzeigen

      Warum es so geht kann ich mir nicht ganz erklären, macht man das ohne diese Zeile [] execVM "scripts\risk_initHud.sqf"; dann aktuallisiert das Hud sich nicht mehr.

    • [TUT] Mein Eigenes HUD

      • GermanBolle
      • 24. Juni 2017 um 09:14

      Landry so kannste es machen nur du hast dann so ein flackern wie ich es habe ob es dich stören tut musst du selber entscheiden und deine User natürlich auch.

    • Malden Häuser Classnames + Bilder

      • GermanBolle
      • 23. Juni 2017 um 23:04

      Ja das stimmt ExoTic das habe ich mir gestern auch gedacht als ich sie mir angeschaut habe.

    • Malden Häuser Classnames + Bilder

      • GermanBolle
      • 23. Juni 2017 um 23:02

      Endlich bring BI mal farbe in die trostlosen Grauen Städte von Arma 3.

    • Mehrere Skins auf eine Klamotte packen [Altis life 4.4r4]

      • GermanBolle
      • 23. Juni 2017 um 14:57

      core/function = playerskins

      config = config_master

    • Mehrere Skins auf eine Klamotte packen [Altis life 4.4r4]

      • GermanBolle
      • 23. Juni 2017 um 14:56

      schaue die mal die fn_playerskins.sqf an da musst du nur schauen und in der config_Master musst du cop_extendedSkins = True machen dann sollte es funktionieren

    • Karte Wechseln

      • GermanBolle
      • 23. Juni 2017 um 14:26

      du kannst auch einfach eine neue Class und die arryMalden erstellen bevor du einfach Tanoa zu Malden per Suchen&Ersetzen änderst und sich dann ein Fehler ein schleicht und du ihn nicht so schnell wieder du findest

    • Karte Wechseln

      • GermanBolle
      • 23. Juni 2017 um 11:57
      Zitat von KreuterMensch

      @Bolle (Bist du der Bolle von Ragecore ?)

      Nein das bin ich nicht ich der GermanBolle von der Hehe Community

      blackfisch sag ich doch :D es geht eigendlich es sieht nur soviel aus lässt sich aber in gut einer stunde hin bekommen. :D

    • Karte Wechseln

      • GermanBolle
      • 23. Juni 2017 um 11:15

      naja blackfisch so viel ist das auch nicht was geändert werden muss. Das kann man in gut einer Stunde machen, ich habe bornholm aufm Server da habe ich nur an paar Datein die Map eingetragen und Bums ging es.

      LootAuf2Beinen ich kann dir grade nicht sagen welche Datein es genau sind da ich im Zug bin. wenn ich am oh bin schreibe ich dir hier mal die Datein wo ich was gemacht habe.

    • Blaulichter funzen nicht mehr nach dem man diese Ausparkt

      • GermanBolle
      • 23. Juni 2017 um 06:29

      A3Master/user

      logs oder Logfiles da liegen die rpts drin insofern du die nicht geändert hast ich persönlich habe dafür ein neigenden Ordner wo alle Server logs sind

    • Error allowdamage: Type Group, expected Object ||||||||| Error position: <allowDamage false; removeallWeapons thi>

      • GermanBolle
      • 22. Juni 2017 um 15:53

      TW_Sebastian das schreibe ich nicht mit hin zu da ich davon aus gehe das man dass selber machen tut logischerweise aber man weis ja nie. ;)

    • Fahrzeugbezeichnung im Infofeld ändern

      • GermanBolle
      • 22. Juni 2017 um 08:41

      Ja nur dann ist es ja nur für ihn und vielleicht möchte er das es für alle Spieler auf dem Server so ist.

    • Error allowdamage: Type Group, expected Object ||||||||| Error position: <allowDamage false; removeallWeapons thi>

      • GermanBolle
      • 22. Juni 2017 um 08:40

      Hast die Spawn Units verändert weil du kannst da einstellen ob die Unit(Spieler) schaden bekommen sollen oder nicht.

      Versuche mal die wenn die immer noch nicht geht dann musst du in irgend einer datei einen fehler haben der das verursacht.

      Dateien

      mission.sqm.sqf 601,47 kB – 143 Downloads
    • [ExtDB3] Frage Spieler Informationen zu UID ab

      • GermanBolle
      • 22. Juni 2017 um 07:57

      Die ExcDB log ist so Normal.

      Hand von deinem RPT würde ich jetzt erst mal fragen hast du irgendwas in der DB oder so geändert.

    • Arma 3 Altis Life - Vom Auto anfahren sterben

      • GermanBolle
      • 21. Juni 2017 um 03:23

      Ich gucke mal wenn ich wieder zuhause bin

    • Arma 3 Altis Life - Vom Auto anfahren sterben

      • GermanBolle
      • 20. Juni 2017 um 06:22

      core/function

      da ist sie drin

    • Spieler sind Teilweise unsichtbar

      • GermanBolle
      • 20. Juni 2017 um 06:19

      RPT BITTE anhängen sonst hilft dir keiner. Da wir nicht er raten können wo der Fehler ist.

    Registrieren oder Einloggen

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

    Registrieren

    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™