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: 13 Juni 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

    RPT log

    • tklein
    • 14. Januar 2017 um 23:19
    • Geschlossen
    • Erledigt
    • tklein
      Fortgeschrittener
      Reaktionen
      9
      Trophäen
      10
      Beiträge
      261
      • 14. Januar 2017 um 23:19
      • #1

      Bitte um Hilfe bei meinen fehlerbn im log.

      Spoiler anzeigen


      23:04:24 "extDB2: Connected to Database"23:05:30 Error in expression <[0],"life_fnc_update",true,false] spawn life_fnc_MP;
      sleep 5;
      [] spawn TON_fnc_c>
      23:05:30 Error position: <life_fnc_MP;
      sleep 5;
      [] spawn TON_fnc_c>
      23:05:30 Error Undefined variable in expression: life_fnc_mp
      23:05:30 File life_server\Functions\DynMarket\fn_sleeper.sqf, line 15
      23:05:35 Error in expression <py],"life_fnc_update",true,false] spawn life_fnc_MP;>
      23:05:35 Error position: <life_fnc_MP;>
      23:05:35 Error Undefined variable in expression: life_fnc_mp
      23:05:35 File life_server\Functions\DynMarket\fn_calculatePrices.sqf, line 129
      23:06:35 Error in expression <[0],"life_fnc_update",true,false] spawn life_fnc_MP;
      sleep 5;
      [] spawn TON_fnc_c>
      23:06:35 Error position: <life_fnc_MP;
      sleep 5;
      [] spawn TON_fnc_c>
      23:06:35 Error Undefined variable in expression: life_fnc_mp
      23:06:35 File life_server\Functions\DynMarket\fn_sleeper.sqf, line 15
      23:06:39 Class destroyed with lock count 1
      23:06:43 Deinitialized shape [Class: "C_Soldier_VR_F"; Shape: "a3\characters_f_bootcamp\common\vr_soldier_f.p3d";]
      23:06:43 Deinitialized shape [Class: "Underwear_F"; Shape: "a3\characters_f\common\basicbody.p3d";]
      23:06:43 Deinitialized shape [Class: "I_Story_Colonel_F"; Shape: "a3\characters_f_beta\indep\ia_officer.p3d";]
      23:06:43 Deinitialized shape [Class: "I_officer_F"; Shape: "a3\characters_f_beta\indep\ia_officer.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_1_2_F"; Shape: "a3\characters_f\civil\c_citizen1.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_1_1_F"; Shape: "a3\characters_f\civil\c_citizen1.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_1_3_F"; Shape: "a3\characters_f\civil\c_citizen1.p3d";]
      23:06:43 Deinitialized shape [Class: "B_medic_F"; Shape: "a3\characters_f\blufor\b_soldier_02.p3d";]
      23:06:43 Deinitialized shape [Class: "B_soldier_AR_F"; Shape: "a3\characters_f\blufor\b_soldier_02.p3d";]
      23:06:43 Deinitialized shape [Class: "B_diver_F"; Shape: "a3\characters_f\common\diver_slotable.p3d";]
      23:06:43 Deinitialized shape [Class: "O_Soldier_F"; Shape: "a3\characters_f\opfor\o_soldier_01.p3d";]
      23:06:43 Deinitialized shape [Class: "B_RangeMaster_F"; Shape: "a3\characters_f\civil\c_poloshirtpants.p3d";]
      23:06:43 Deinitialized shape [Class: "C_Nikos_aged"; Shape: "a3\characters_f_epc\civil\c_nikos_aged.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_p_beggar_F_afro"; Shape: "a3\characters_f\civil\c_poor.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_p_beggar_F"; Shape: "a3\characters_f\civil\c_poor.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_p_fugitive_F_asia"; Shape: "a3\characters_f\civil\c_poor.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_p_fugitive_F"; Shape: "a3\characters_f\civil\c_poor.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_w_worker_F"; Shape: "a3\characters_f\common\coveralls.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_1"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_polo_3_F"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_polo_6_F"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_polo_4_F"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_polo_1_F"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_p_shorts_1_F_afro"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_p_shorts_1_F"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_shorts_3_F_euro"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_shorts_3_F"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_polo_2_F"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_polo_5_F"; Shape: "a3\characters_f\civil\c_poloshirt.p3d";]
      23:06:43 Deinitialized shape [Class: "C_man_hunter_1_F"; Shape: "a3\characters_f\civil\c_hunter_f.p3d";]
      23:06:43 c:\w\stable\futura\lib\network\networkserver.cpp ClearNetServer:NOT IMPLEMENTED - briefing!
      23:06:45 Extensions:
      23:06:45 extDB2 (D:\Server\A3Master\@extDB2\extDB2.dll) [71.0.0.0] [71.0.0.0]

      tklein104

      TS3: 94.250.223.15:15065

    • AmaZiinG
      Profi
      Reaktionen
      496
      Beiträge
      798
      Dateien
      4
      Bilder
      46
      • 15. Januar 2017 um 00:06
      • #2

      Einmal bitte die fn_calculatePrices.sqf und die fn_sleeper.sqf

      Mein Discord:
      https://discord.gg/4UMWmpfDet

    • tklein
      Fortgeschrittener
      Reaktionen
      9
      Trophäen
      10
      Beiträge
      261
      • 15. Januar 2017 um 08:59
      • #3

      hier die gewünschte dateien

      Dateien

      fn_calulateprices.txt 4,28 kB – 124 Downloads fn_sleeper.txt 952 Byte – 123 Downloads

      tklein104

      TS3: 94.250.223.15:15065

    • AmaZiinG
      Profi
      Reaktionen
      496
      Beiträge
      798
      Dateien
      4
      Bilder
      46
      • 15. Januar 2017 um 10:09
      • #4

      Ersetzt die Codes:

      Code
      /*
      ##################### DYNAMIC MARKET SCRIPT #####################
      ### AUTHOR: RYAN TT.                                          ###
      ### STEAM: www.steamcommunity.com/id/ryanthett                ###
      ###                                                           ###
      ### DISCLAIMER: THIS SCRIPT CAN BE USED ON EVERY SERVER ONLY  ###
      ###             WITH THIS HEADER / NOTIFICATION               ###
      #################################################################
      */
      
      
      
      
      _tempArrayHolder = DYNMARKET_Items_CurrentPriceArr;
      {
      	_itemName = _x select 0;
      	_itemLastPrice = _x select 1;
      	_itemAmountSold = _x select 2;
      	_itemPricePerUnit = 0;
      	_itemPriceMin = 0;
      	_itemPriceMax = 0;
      	_itemGroupName = "";
      	_itemFactorOfGroup = 0;
      	_exit = false;
      	if (_itemAmountSold>0) then
      	{
      		{
      			if (!_exit) then {
      				_GROUParray = _x;
      				_itemGroupName = _GROUParray select 0;
      				_GROUPITEMSarray = _GROUParray select 1;
      				_itemFactorOfGroup = _GROUParray select 2;
      				{
      					_ITEMSarray = _x;
      					_curITEMname = _ITEMSarray select 0;
      					_curITEMpriceperunit = _ITEMSarray select 1;
      					_curITEMmin = _ITEMSarray select 2;
      					_curITEMmax = _ITEMSarray select 3;
      					if (_curITEMname==_itemName) then {
      						_exit = true;
      						_itemPricePerUnit = _curITEMpriceperunit;
      						_itemPriceMin = _curITEMmin;
      						_itemPriceMax = _curITEMmax;
      					};
      				} forEach _GROUPITEMSarray;
      			};
      		} forEach DYNMARKET_Items_Groups;
      		//ADJUST THE PRICES
      		{
      			_GROUParray = _x;
      			_GROUPNAME = _GROUParray select 0;
      			_GROUPITEMSarray = _GROUParray select 1;
      			if (_itemGroupName==_GROUPNAME) then
      			{
      				{
      					_ITEMSarray = _x;
      					_curITEMname = _ITEMSarray select 0;
      					_curITEMpriceperunit = _ITEMSarray select 1;
      					_curITEMmin = _ITEMSarray select 2;
      					_curITEMmax = _ITEMSarray select 3;
      					if (_curITEMname==_itemName) then 
      					{
      						// Chercher l'ancien prix.
      						_curItemOldPrice = 0;
      						{
      							_curItemName2 = _x select 0;
      							_curItemPrice2 = _x select 1;
      							_curItemAmountSold2 = _x select 2;
      							if (_curItemName2==_curITEMname) then {
      								_curItemOldPrice = _curItemPrice2;
      							};
      						} forEach DYNMARKET_Items_CurrentPriceArr;
      						// Calculer le nouveau prix.
      						_NEWPRICE = _curItemOldPrice-(_itemAmountSold*(_curItemOldPrice/2000)*_itemFactorOfGroup);
      						if (_NEWPRICE<_curITEMmin) then {_NEWPRICE=_curITEMmin};
      						if (_NEWPRICE>_curITEMmax) then {_NEWPRICE=_curITEMmax};
      						_index = -1;
      						{
      							_index = _index + 1;
      							_curItemName3 = _x select 0;
      							_curItemPrice3 = _x select 1;
      							_curItemAmountSold3 = _x select 2;
      							if (_curItemName3==_curITEMname) then {
      								DYNMARKET_Items_CurrentPriceArr set [_index,[_curITEMname,_NEWPRICE,0]];
      							};
      						} forEach DYNMARKET_Items_CurrentPriceArr;
      					} else {
      						// Calcule du nouveau prix.
      						_index = -1;
      						{
      							_index = _index + 1;
      							_curItemName3 = _x select 0;
      							_curItemPrice3 = _x select 1;
      							_curItemAmountSold3 = _x select 2;
      							if (_curItemName3==_curITEMname) then {
      								_NEWPRICE = _curItemPrice3+(_itemAmountSold*(_curItemPrice3/1000)*_itemFactorOfGroup);
      								if (_NEWPRICE<_curITEMmin) then {_NEWPRICE=_curITEMmin};
      								if (_NEWPRICE>_curITEMmax) then {_NEWPRICE=_curITEMmax};
      								DYNMARKET_Items_CurrentPriceArr set [_index,[_curITEMname,_NEWPRICE,_curItemAmountSold3]];
      							};
      						} forEach DYNMARKET_Items_CurrentPriceArr;
      					};
      				} forEach _GROUPITEMSarray;
      			};
      		} forEach DYNMARKET_Items_Groups;
      	};
      } forEach DYNMARKET_Items_CurrentPriceArr;
      DYNMARKET_Items_CurrentPriceArr = _tempArrayHolder;
      [1,DYNMARKET_Items_CurrentPriceArr] remoteExec ["life_fnc_update",0];
      
      
      
      
      // Translate to sell_array
      
      
      
      
      {
      	_itemName = _x select 0;
      	_itemNewPrice = _x select 1;
      	_index = -1;
      	{
      		_index = _index + 1;
      		_curItemName = _x select 0;
      		if (_curItemName==_itemName) then {
      			DYNMARKET_sellarraycopy set [_index,[_itemName,_itemNewPrice]];
      		};
      	} forEach DYNMARKET_sellarraycopy;
      } forEach DYNMARKET_Items_CurrentPriceArr;
      
      
      
      
      [1,DYNMARKET_sellarraycopy] remoteExec ["life_fnc_update",0];
      Alles anzeigen
      Code
      /*
      ##################### DYNAMIC MARKET SCRIPT #####################
      ### AUTHOR: RYAN TT.                                          ###
      ### STEAM: www.steamcommunity.com/id/ryanthett                ###
      ###                                                           ###
      ### DISCLAIMER: THIS SCRIPT CAN BE USED ON EVERY SERVER ONLY  ###
      ###             WITH THIS HEADER / NOTIFICATION               ###
      #################################################################
      */
      
      
      
      
      // Appel de la base de données et mettre à jour les prix dedans.
      
      
      
      
      while {true} do {
      	sleep (DYNMARKET_PriceUpdateInterval*60);
      [0] remoteExec ["life_fnc_update",0];
      	sleep 5;
      	[] spawn TON_fnc_calculatePrices;
      	DYNMARKET_UpdateCount = DYNMARKET_UpdateCount + 1;
      	if ((DYNMARKET_UpdateCount==DYNMARKET_CreateBackupInterval)&&DYNMARKET_CreateBackups) then {
      		[] spawn {
      			DYNMARKET_UpdateCount = 0;
      			[0] call TON_fnc_HandleDB;
      		};
      	};
      };
      Alles anzeigen

      Schau bitte nach ob du diese codes in deine romteExec eingeschrieben hast

      Code
      F(TON_fnc_playerLogged,SERVER) //DynMarket
      F(TON_fnc_getUpdate,SERVER) //DynMarket
      F(TON_fnc_changePrice, SERVER) //DynMarket
      F(life_fnc_update,ANYONE) //DynMarket

      Mein Discord:
      https://discord.gg/4UMWmpfDet

    • tklein
      Fortgeschrittener
      Reaktionen
      9
      Trophäen
      10
      Beiträge
      261
      • 15. Januar 2017 um 11:06
      • #5

      alles drinn
      aber kannst du mir sagen wo ich in der config.cpp genau das eintragen soll
      class DynMarket
      {
      file = "\life_server\Functions\DynMarket";
      class calculatePrices {};
      class config {};
      class getUpdate {};
      class HandleDB {};
      class playerLogged {};
      class sleeper {};
      };

      ich glaube ich habe da ein fehler drinn

      Dateien

      new 1.txt 1,92 kB – 125 Downloads

      tklein104

      TS3: 94.250.223.15:15065

    • tklein
      Fortgeschrittener
      Reaktionen
      9
      Trophäen
      10
      Beiträge
      261
      • 15. Januar 2017 um 11:23
      • #6

      ok den fehler hab ich gefunden aber jetzt kickt mich spyglass sofort raus hab haber spyglass deaktiviert

      /* Spyglass settings */
      spyglass_init = false; //Enable or disable spyglass

      Spoiler anzeigen


      11:22:32 Error in expression <[[''license_civ_driver'',0],[''license_civ_b>
      11:22:32 Error position: <license_civ_driver'',0],[''license_civ_b>
      11:22:32 Error Missing ]
      11:22:32 Error in expression <[[''license_civ_driver'',0],[''license_civ_b>
      11:22:32 Error position: <license_civ_driver'',0],[''license_civ_b>
      11:22:32 Error Missing ]
      11:22:32 Error in expression <ay = call compile format["%1", _array];
      _array;>
      11:22:32 Error position: <_array;>
      11:22:32 Error Undefined variable in expression: _array
      11:22:32 File life_server\Functions\MySQL\fn_mresToArray.sqf, line 26
      11:22:32 Client: Remote object 3:0 not found
      11:22:32 Error in expression <['''','''',''B_Carryall_cbr'','''','''',[''ItemMap'']>
      11:22:32 Error position: <B_Carryall_cbr'','''','''',[''ItemMap'']>
      11:22:32 Error Missing ]
      11:22:32 Error in expression <['''','''',''B_Carryall_cbr'','''','''',[''ItemMap'']>
      11:22:32 Error position: <B_Carryall_cbr'','''','''',[''ItemMap'']>
      11:22:32 Error Missing ]
      11:22:32 Error in expression <ay = call compile format["%1", _array];
      _array;>
      11:22:32 Error position: <_array;>
      11:22:32 Error Undefined variable in expression: _array
      11:22:32 File life_server\Functions\MySQL\fn_mresToArray.sqf, line 26
      11:22:32 Error in expression <)] call DB_fnc_mresToArray;
      if(typeName _new == "STRING") then {_new = call comp>
      11:22:32 Error position: <_new == "STRING") then {_new = call comp>
      11:22:32 Error Undefined variable in expression: _new
      11:22:32 File life_server\Functions\MySQL\fn_queryRequest.sqf, line 61
      11:22:33 Warning: Cleanup player - person 2:1174 not found

      tklein104

      TS3: 94.250.223.15:15065

    • AmaZiinG
      Profi
      Reaktionen
      496
      Beiträge
      798
      Dateien
      4
      Bilder
      46
      • 15. Januar 2017 um 11:35
      • #7

      Einmal alle Player aus der Datenbank löschen mit diesen code:

      SQL
      UPDATE `players` 
       SET `cop_licenses` = replace(cop_licenses, '``', '`'),
       `civ_licenses` = replace(civ_licenses, '``', '`'),
       `med_licenses` = replace(med_licenses, '``', '`'),
       `aliases` = replace(aliases, '``', '`'),
       `cop_gear` = replace(cop_gear, '``', '`'),
       `civ_gear` = replace(civ_gear, '``', '`'),
       `med_gear` = replace(med_gear, '``', '`')
          WHERE `aliases` LIKE '"[``%'

      Einfach wieder code ersetzten

      Code
      /*
          File: fn_mresToArray.sqf
          Author: Bryan "Tonic" Boardwine";
      
      
      
      
          Description:
          Acts as a mres (MySQL Real Escape) for arrays so they
          can be properly inserted into the database without causing
          any problems. The return method is 'hacky' but it's effective.
      */
      private["_array"];
      _array = [_this,0,"",[""]] call BIS_fnc_param;
      if (_array isEqualTo "") exitWith {[]};
      _array = toArray(_array);
      
      
      
      
      for "_i" from 0 to (count _array)-1 do
      {
          _sel = _array select _i;
          if (_sel == 96) then
          {
              _array set[_i,39];
          };
      };
      
      
      
      
      _array = toString(_array);
      _array = call compile format["%1", _array];
      _array;
      Alles anzeigen
      Code
      /*
          File: fn_mresString.sqf
          Author: Bryan "Tonic" Boardwine
          Description:
          Makes the string safe to be passed to MySQL (strips various stuff).
      */
      private["_string","_filter"];
      _string = [_this,0,"",[""]] call BIS_fnc_param;
      _filter = "'/\`:|;,{}-""<>";
      _string = toArray _string; //Blow it up to an array
      _filter = toArray _filter; //Blow it up to an array
      {
          if (_x in _filter) then {
              _string deleteAt _forEachIndex;
          };
      } forEach _string;
      toString _string;
      Alles anzeigen

      Mein Discord:
      https://discord.gg/4UMWmpfDet

    • tklein
      Fortgeschrittener
      Reaktionen
      9
      Trophäen
      10
      Beiträge
      261
      • 15. Januar 2017 um 11:42
      • #8

      das mit dem sql code funktioiniert nicht
      können wir uns evtl mal im teamspeak unterhalten ??

      tklein104

      TS3: 94.250.223.15:15065

    • tklein
      Fortgeschrittener
      Reaktionen
      9
      Trophäen
      10
      Beiträge
      261
      • 15. Januar 2017 um 14:13
      • #9

      ok jetzt gehts
      aber wieso kann ich im altis markt nichts mehr kaufen ?

      tklein104

      TS3: 94.250.223.15:15065

    • AmaZiinG
      Profi
      Reaktionen
      496
      Beiträge
      798
      Dateien
      4
      Bilder
      46
      • 15. Januar 2017 um 15:35
      • #10

      RPT-Logs

      Mein Discord:
      https://discord.gg/4UMWmpfDet

    Registrieren oder Einloggen

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

    Registrieren

    Ähnliche Themen

    • Ein zweites Leben ....

      • R3DEX
      • 29. August 2017 um 10:21
      • Hilfeforum
    • Ausweis fälschen

      • shriver
      • 28. August 2017 um 16:24
      • Hilfeforum
    • Repairkits Benutzen wenn kein ADAC online ist

      • riesensika
      • 25. August 2017 um 19:28
      • Hilfeforum
    • Verkauf von Fahrzeugen von Zivilist zu Zivilist loggen.

      • SnillocTV
      • 26. August 2017 um 21:33
      • Hilfeforum
    • Rucksack verurschat any Z invntar

      • Roy Mustang
      • 23. August 2017 um 23:00
      • Hilfeforum
    • [Leitfaden] Wie frage Ich richtig um Hilfe?

      • nox
      • 23. August 2017 um 21:13
      • Hilfeforum

    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™