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
Sa: 17 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. Hilfeforum

    Dynamische Verarbeitungsgeschwindigkeit

      • Altis Life
    • CHX31
    • 12. Dezember 2021 um 21:17
    • Erledigt
    • CHX31
      Schüler
      Reaktionen
      10
      Trophäen
      6
      Beiträge
      139
      • 12. Dezember 2021 um 21:17
      • #1

      Hey,
      ich möchte für meine Items eine dynamische Verarbeitungsgeschwindigkeit.

      Hierzu habe ich folgendes versucht

      C: fn_processAction.sqf
      _items = format["life_inv_%1", _oldItem select 0];
      _percentPerSecond = 100 / _items;
      life_is_processing = true;
      
      if (_hasLicense) then {
          for "_i" from 0 to 1 step 0 do {
              sleep 1;
              _cP = _cP + _percentPerSecond;

      leider führt dies dazu, dass die Process bar nach 1 Prozent nicht mehr weiter lädt, also vermutlich die for unterbrochen wird.

      Die Process bar verschwindet nicht mal mehr dann, wenn man sich auf sehr große distanz vom verarbeiter entfernt.


      Ich habe das mal anhand von Apfel getestet (apfelsaft verarbeiten).
      _oldItem enthält einen Array: ["apple", 5] - also das benötigte Item, und in welcher Menge es benötigt ist
      also müsste _items = format["life_inv_%1", _oldItem select 0]; zu folgendem string werden => life_inv_apple
      Wenn ich das in der Debug Konsole mir so ausgeben lasse, bekomme ich eine integer mit der Anzahl der Äpfel in meinem Inventar

      Somit müsste auch der part: _percentPerSecond = 100 / _items funktionieren und bei z.B. 25 Äpfeln den Wert 4 ergeben (4% Fortschritt pro for-durchgang)


      Leider funktioniert das alles nicht, und ich kann auch keinen Fehler finden.
      in den RPT Logs tauchen ebenfalls keine Fehler auf.

      hat jemand von euch eine Idee woran das liegen könnte?

    • Fl0rixn
      Nerd
      Reaktionen
      190
      Trophäen
      9
      Beiträge
      619
      Bilder
      27
      • 13. Dezember 2021 um 12:11
      • #2
      Zitat von CHX31

      Hey,
      ich möchte für meine Items eine dynamische Verarbeitungsgeschwindigkeit.

      Hierzu habe ich folgendes versucht

      C: fn_processAction.sqf
      _items = format["life_inv_%1", _oldItem select 0];
      _percentPerSecond = 100 / _items;
      life_is_processing = true;
      
      if (_hasLicense) then {
          for "_i" from 0 to 1 step 0 do {
              sleep 1;
              _cP = _cP + _percentPerSecond;

      leider führt dies dazu, dass die Process bar nach 1 Prozent nicht mehr weiter lädt, also vermutlich die for unterbrochen wird.

      Die Process bar verschwindet nicht mal mehr dann, wenn man sich auf sehr große distanz vom verarbeiter entfernt.


      Ich habe das mal anhand von Apfel getestet (apfelsaft verarbeiten).
      _oldItem enthält einen Array: ["apple", 5] - also das benötigte Item, und in welcher Menge es benötigt ist
      also müsste _items = format["life_inv_%1", _oldItem select 0]; zu folgendem string werden => life_inv_apple
      Wenn ich das in der Debug Konsole mir so ausgeben lasse, bekomme ich eine integer mit der Anzahl der Äpfel in meinem Inventar

      Somit müsste auch der part: _percentPerSecond = 100 / _items funktionieren und bei z.B. 25 Äpfeln den Wert 4 ergeben (4% Fortschritt pro for-durchgang)


      Leider funktioniert das alles nicht, und ich kann auch keinen Fehler finden.
      in den RPT Logs tauchen ebenfalls keine Fehler auf.

      hat jemand von euch eine Idee woran das liegen könnte?

      Alles anzeigen

      Du musst es als https://community.bistudio.com/wiki/missionNamespace abfragen, da es eine lokale definierte Variable ist.

      z.B. _apfelCounter = missionNamespace getVariable ["life_inv_apple", 0];

    • CHX31
      Schüler
      Reaktionen
      10
      Trophäen
      6
      Beiträge
      139
      • 13. Dezember 2021 um 12:13
      • #3

      oh, okay. Danke

      ich versuch es mal

    • CHX31
      Schüler
      Reaktionen
      10
      Trophäen
      6
      Beiträge
      139
      • 13. Dezember 2021 um 13:03
      • #4

      UPDATE:

      Ich hab jetzt das ganze mal wie folgt umgeschrieben:

      C: fn_processAction.sqf
      _itemvar = _oldItem select 0;
      _items = missionNamespace getVariable [format["life_inv_%1", _itemvar select 0],0];
      _percentPerSecond = floor(100 / _items);
      
      diag_log format["Item: %1 | Array: %4 | Menge: %2 | Prozent Pro Sekunde: %3", _itemvar select 0, _items, _percentPerSecond, _oldItem];
      life_is_processing = true;
      
      if (_hasLicense) then {
          for "_i" from 0 to 1 step 0 do {
              sleep 1;
              _cP = _cP + _percentPerSecond;
      Alles anzeigen


      Das hier ist mein Diag Log Ergebnis
      "Item: apple | Array: [[""apple"",5]] | Menge: 18 | Prozent Pro Sekunde: 5"

      leider läuft die Processbar innerhalb von 1 Sekunde komplett durch (Sie wird mit 1% angezeigt und verschwindet nach 0.5-1 sekunde wieder)

      Hab leider keine Idee woran das liegen könnte

      Einmal editiert, zuletzt von CHX31 (13. Dezember 2021 um 13:24)

    • blackfisch
      Legende
      Reaktionen
      2.944
      Trophäen
      9
      Beiträge
      5.966
      Dateien
      6
      Bilder
      63
      • 13. Dezember 2021 um 14:00
      • #5

      es wäre erstmal gut mehr als diese 5 Zeilen zu sehen. Da kann dir keiner vorhersagen was danach kaputt ist

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

      ______________________

    • CHX31
      Schüler
      Reaktionen
      10
      Trophäen
      6
      Beiträge
      139
      • 16. Dezember 2021 um 20:18
      • #6
      Zitat von blackfisch

      es wäre erstmal gut mehr als diese 5 Zeilen zu sehen. Da kann dir keiner vorhersagen was danach kaputt ist

      Hey,

      war leider ein paar Tage nicht zuhause und am PC.

      hier die komplette Datei:

      C: fn_processAction.sqf
      #include "..\..\script_macros.hpp"
      /*
          File: fn_processAction.sqf
          Author: Bryan "Tonic" Boardwine
          Modified : NiiRoZz
          Description:
          Master handling for processing an item.
          NiiRoZz : Added multiprocess
      */
      private ["_vendor","_type","_itemInfo","_oldItem","_newItemWeight","_newItem","_oldItemWeight","_cost","_upp","_hasLicense","_itemName","_oldVal","_ui","_progress","_pgText","_cP","_materialsRequired","_materialsGiven","_noLicenseCost","_text","_filter","_totalConversions","_minimumConversions"];
      _vendor = [_this,0,objNull,[objNull]] call BIS_fnc_param;
      _type = [_this,3,"",[""]] call BIS_fnc_param;
      //Error check
      if (isNull _vendor || _type isEqualTo "" || (player distance _vendor > 10)) exitWith {};
      life_action_inUse = true;//Lock out other actions during processing.
      
      if (isClass (missionConfigFile >> "ProcessAction" >> _type)) then {
          _filter = false;
          _materialsRequired = M_CONFIG(getArray,"ProcessAction",_type,"MaterialsReq");
          _materialsGiven = M_CONFIG(getArray,"ProcessAction",_type,"MaterialsGive");
          _noLicenseCost = M_CONFIG(getNumber,"ProcessAction",_type,"NoLicenseCost");
          _text = M_CONFIG(getText,"ProcessAction",_type,"Text");
      } else {_filter = true;};
      
      if (_filter) exitWith {life_action_inUse = false;};
      
      _itemInfo = [_materialsRequired,_materialsGiven,_noLicenseCost,(localize format ["%1",_text])];
      if (count _itemInfo isEqualTo 0) exitWith {life_action_inUse = false;};
      
      //Setup vars.
      _oldItem = _itemInfo select 0;
      _newItem = _itemInfo select 1;
      _cost = _itemInfo select 2;
      _upp = _itemInfo select 3;
      _exit = false;
      if (count _oldItem isEqualTo 0) exitWith {life_action_inUse = false;};
      
      _totalConversions = [];
      {
          _var = ITEM_VALUE(_x select 0);
          if (_var isEqualTo 0) exitWith {_exit = true;};
          if (_var < (_x select 1)) exitWith {_exit = true;};
          _totalConversions pushBack (floor (_var/(_x select 1)));
      } forEach _oldItem;
      
      if (_exit) exitWith {life_is_processing = false; hint localize "STR_NOTF_NotEnoughItemProcess"; life_action_inUse = false;};
      
      _hasLicense = LICENSE_VALUE(_type,"civ");
      
      if(_hasLicense == false) then {
        _cost = _cost * (count _oldItem);
      };
      
      _minimumConversions = _totalConversions call BIS_fnc_lowestNum;
      _oldItemWeight = 0;
      {
          _weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1);
          _oldItemWeight = _oldItemWeight + _weight;
      } count _oldItem;
      
      _newItemWeight = 0;
      {
          _weight = ([_x select 0] call life_fnc_itemWeight) * (_x select 1);
          _newItemWeight = _newItemWeight + _weight;
      } count _newItem;
      
      _exit = false;
      
      if (_newItemWeight > _oldItemWeight) then {
          _netChange = _newItemWeight - _oldItemWeight;
          _freeSpace = life_maxWeight - life_carryWeight;
          if (_freeSpace < _netChange) exitWith {_exit = true;};
          private _estConversions = floor(_freeSpace / _netChange);
          if (_estConversions < _minimumConversions) then {
              _minimumConversions = _estConversions;
          };
      };
      
      if (_exit) exitWith {hint localize "STR_Process_Weight"; life_is_processing = false; life_action_inUse = false;};
      
      //Setup our progress bar.
      disableSerialization;
      "progressBar" cutRsc ["life_progress","PLAIN"];
      _ui = uiNamespace getVariable "life_progress";
      _progress = _ui displayCtrl 38201;
      _pgText = _ui displayCtrl 38202;
      _pgText ctrlSetText format ["%2 (1%1)...","%",_upp];
      _progress progressSetPosition 0.01;
      _cP = 0.01;
      _itemvar = _oldItem select 0;
      _items = missionNamespace getVariable [format["life_inv_%1", _itemvar select 0],0];
      _percentPerSecond = floor(100 / _items);
      
      diag_log format["Item: %1 | Array: %4 | Menge: %2 | Prozent Pro Sekunde: %3", _itemvar select 0, _items, _percentPerSecond, _oldItem];
      life_is_processing = true;
      
      if (_hasLicense) then {
          for "_i" from 0 to 1 step 0 do {
              sleep 1;
              _cP = _cP + _percentPerSecond;
              _progress progressSetPosition _cP;
              _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp];
              if (_cP >= 1) exitWith {};
              if (player distance _vendor > 10) exitWith {};
          };
          if (player distance _vendor > 10) exitWith {hint localize "STR_Process_Stay"; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;};
      
          {
              [false,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv;
          } count _oldItem;
      
          {
              [true,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv;
          } count _newItem;
      
          "progressBar" cutText ["","PLAIN"];
          if (_minimumConversions isEqualTo (_totalConversions call BIS_fnc_lowestNum)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";};
          life_is_processing = false; life_action_inUse = false;
      } else {
          if (CASH < _cost) exitWith {hint format [localize "STR_Process_License",[_cost] call life_fnc_numberText]; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;};
      
          for "_i" from 0 to 1 step 0 do {
              sleep 1;
              _cP = _cP + _percentPerSecond;
              _progress progressSetPosition _cP;
              _pgText ctrlSetText format ["%3 (%1%2)...",round(_cP * 100),"%",_upp];
              if (_cP >= 1) exitWith {};
              if (player distance _vendor > 10) exitWith {};
          };
      
          if (player distance _vendor > 10) exitWith {hint localize "STR_Process_Stay"; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;};
          if (CASH < _cost) exitWith {hint format [localize "STR_Process_License",[_cost] call life_fnc_numberText]; "progressBar" cutText ["","PLAIN"]; life_is_processing = false; life_action_inUse = false;};
      
          {
              [false,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv;
          } count _oldItem;
      
          {
              [true,(_x select 0),((_x select 1)*(_minimumConversions))] call life_fnc_handleInv;
          } count _newItem;
      
          "progressBar" cutText ["","PLAIN"];
          if (_minimumConversions isEqualTo (_totalConversions call BIS_fnc_lowestNum)) then {hint localize "STR_NOTF_ItemProcess";} else {hint localize "STR_Process_Partial";};
          CASH = CASH - _cost;
          [0] call SOCK_fnc_updatePartial;
          life_is_processing = false;
          life_action_inUse = false;
      };
      Alles anzeigen
    • blackfisch
      Legende
      Reaktionen
      2.944
      Trophäen
      9
      Beiträge
      5.966
      Dateien
      6
      Bilder
      63
      • 16. Dezember 2021 um 20:31
      • #7
      Code
      _percentPerSecond = floor(100 / _items);
      Code
      if (_cP >= 1) exitWith {};

      ich lass dich selbst mal nachrechnen, wo der Fehler liegt ;)

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

      ______________________

    • CHX31
      Schüler
      Reaktionen
      10
      Trophäen
      6
      Beiträge
      139
      • 16. Dezember 2021 um 20:44
      • #8

      Aaah,
      wow.

      ich habe gerade 50 Zeilen lang für dich meine Rechnung aufgeschlüsselt um dir zu erklären warum ich da keinen Rechenfehler finde.

      Bis ich dann mal diese Zeile hatte: _cP = _cP + _percentPerSecond; -> 0.01 = 0.01 + 5 (die 5 kommen von 4 Items die verarbeitet werden).

      Erst da ist mir aufgefallen, ich muss _percentPerSecond noch durch 100 teilen :D

      upsi :)

    • blackfisch
      Legende
      Reaktionen
      2.944
      Trophäen
      9
      Beiträge
      5.966
      Dateien
      6
      Bilder
      63
      • 16. Dezember 2021 um 23:33
      • #9
      Zitat von CHX31

      Aaah,
      wow.

      ich habe gerade 50 Zeilen lang für dich meine Rechnung aufgeschlüsselt um dir zu erklären warum ich da keinen Rechenfehler finde.

      Bis ich dann mal diese Zeile hatte: _cP = _cP + _percentPerSecond; -> 0.01 = 0.01 + 5 (die 5 kommen von 4 Items die verarbeitet werden).

      Erst da ist mir aufgefallen, ich muss _percentPerSecond noch durch 100 teilen :D

      upsi :)

      Alles anzeigen

      oder einfach 1 / _items teilen :P

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

      ______________________

    Registrieren oder Einloggen

    Du bist noch kein Mitglied von Native-Servers.com? Registriere dich kostenlos und werde Teil einer großartigen Community!

    Benutzerkonto erstellen

    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™