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: 16 Mai 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. DerL30N

    Beiträge von DerL30N

    • Überarbeitung meines VIS, Performance Optimierung und Verbesserungsvorschläge

      • DerL30N
      • 13. September 2019 um 22:27

      Hey Leute,

      ich habe vor 3 Jahren dieses Script geschrieben und irgendwie überkam mir diese Woche das Bedürfnis das mal richtig/ordentlich/gut zu machen und einfach mal wieder was zu scripten.

      Um ehrlich zu sein hatte ich vor etwas längerer Zeit die Idee das mit einer dll zu lösen... hatte ich aber keine lust drauf xD

      Ich wollt mir mal eure Meinung zum Code einholen... bzgl. Performance und Optimierung, etc..

      Kurz erklärt was es macht:

      Anhand von Messwerten eine geschätzte Reichweite für den verleibenden Tank berechnen und anzeigen.

      Meine Umsetzung in kurz:

      Alle 5 sec. Spielerposition und tankstand speichern, Distanz zwischen den Messpunkten und Differenz vom Tank stand nehmen, und dies in eine temporäre liste speichern, welche alle 50 Durchläufe zusammengefasst und mit der vorigen Zusammenfassung verrechnet wird. Danach wird ein wenig Mathematik und Physik angewendet um die korrekten Ergebnisse und Einheiten zu bekommen.

      Das ganze wird dann auf dem HUD angezeigt.

      Ablauf:

      Beim einsteigen wird das Script gestartet über einen EVH, zusammengefasste Daten, falls vorhanden, werden geladen.

      Beim Aussteigen o.Ä. wird es beendet und die zusammengefassten Daten auf dem Object gespeichert.

      Das HUD:

      Von Links nach Rechts, von oben nach Unten:

      • Reichweite bei aktuellem Tankfüllstand und Verbrauch (siehe zweiter Punkt),
      • Arithmetisches Mittel des Verbrauchs, kann ich km pro l oder l pro 100 km angezeigt werden,
      • Aktueller Tankfüllstand in Prozent,
      • Gefahrene Distanz seit Aufzeichnung.

      Da mein Git nur lokal läuft habe ich den sqf Part mal als Code eingefügt.

      Code: fn_postInit.sqf
      waitUntil {(!isNull player) && (player == player)};
      
      player addEventHandler["GetInMan", {_this call data_fnc_init}];
      player addEventHandler["GetOutMan", {"data_show" cutFadeOut 0}];
      
      data_var_preventStart = false;
      data_var_literPerKm = false; // option to translate into x l/100km
      Code: fn_init.sqf
      if (isNull objectParent player) exitWith { diag_log "Error1.0"; };
      
      private _veh = param [2, objNull, [objNull]];
      
      if (isNull _veh) exitWith { diag_log "Error1.1"; };
      
      private _role = param [1, "", [""]];
      
      if !(_role isEqualTo "driver") exitWith { diag_log "Error1.2"; };
      
      if (data_var_preventStart) exitWith { diag_log "Error1.3"; };
      
      data_var_preventStart = true;
      
      (_veh getVariable ["data_trip",[]]) params [["_dist", 0, [0]],["_avg", 0, [0]]];
      
      [_veh, _dist, _avg] spawn data_fnc_main;
      Alles anzeigen
      Code: fn_main.sqf
      params [["_veh", objNull, [vehicle player]],["_var_data_dist", 0, [0]],["_var_data_avg", 0, [0]]];
      
      if (isNull _veh) exitWith { diag_log "Error2.0"; };
      
      private _var_tmp_list = [];
      private _lastTank = 0;
      private _lastGpsPos = [];
      private _n = 0;
      private _cap = getNumber(configFile >> "CfgVehicles" >> typeOf(vehicle player) >> "fuelCapacity");
      
      disableSerialization;
      "data_show" cutRsc["vehInfo","PLAIN"];
      
      ((uiNamespace getVariable "vehInfo") displayCtrl 1100)ctrlSetText format["%1",getText ( configFile >> "CfgVehicles" >> typeOf(_veh) >> "displayName")];
      
      // Load known data into ui
      [_veh, _cap , _var_tmp_list, _var_data_dist, _var_data_avg] spawn data_fnc_calculate;
      
      while { !isNull objectParent player } do {
      
          private _t = diag_tickTime;
      
          private _curTank = fuel (vehicle player);
          private _curGpsPos = getPosATL player;
      
          if (_lastTank isEqualTo 0) then {
      
              _lastTank = _curTank;
      
          };
      
          // refuelling does not count as fuel consumption
          if (_lastTank < _curTank) then {
      
              _lastTank = _curTank;
      
          };
      
          if (_lastGpsPos isEqualTo []) then {
      
              _lastGpsPos = _curGpsPos;
      
          };
      
          // if no change in fuel and driven distance -> new data will be ignored
          if !(_lastGpsPos isEqualTo _curGpsPos && _lastTank isEqualTo _curTank) then {
      
              private _dist = _lastGpsPos distance _curGpsPos;
      
              _var_data_dist = _var_data_dist + _dist;
      
              _var_tmp_list set[_n, [(_lastTank - _curTank), _dist]];
      
              if (_n isEqualTo 49) then { // => Dataset size is 50, indexes 0 to 49
      
                  private _fuel = 0;
                  private _dist = 0;
      
                  {
      
                      _fuel = _fuel + (_x select 0);
                      _dist = _dist + (_x select 1);
      
                  } count _var_tmp_list; // Add up collected data
                  // Count and select : 0.0467, without calling a function: 0.0416 ms => Build in faster then?
      
                  try {
      
                      // Create average based on new collected data and older summerized data
                      // Because _dist can be 0, we use a try in case it is acutally 0
                      if (_var_data_avg isEqualTo 0) then {
      
                          _var_data_avg = _dist / (_fuel * _cap);
      
                      } else {
      
                          _var_data_avg = (_var_data_avg + (_dist / (_fuel * _cap))) / 2;
      
                      };
      
                  } catch {
      
                      // Idea: _n-1 to stay in the current loop and try to save the new dataset
                      // This will overwrite the dataset on n=49
      
                  };
      
                  _n = -1;
      
              };
      
              _lastTank = _curTank;
              _lastGpsPos = _curGpsPos;
      
              _n = _n + 1;
      
              diag_log (diag_tickTime - _t);
      
              [_veh, _cap, _var_tmp_list, _var_data_dist, _var_data_avg] spawn data_fnc_calculate;
      
          };
      
          uiSleep 5;
      
      };
      
      if !(isNull _veh) then {
      
          _veh setVariable ["data_trip",[_var_data_dist, _var_data_avg],true];
      
      };
      
      data_var_preventStart = false;
      Alles anzeigen
      Code: fn_calculate.sqf
      #define roundc(VAR) round (((VAR) / 1000) * (10 ^ 1)) / (10 ^ 1)
      #define roundx(VAR) round ((VAR) * (10 ^ 1)) / (10 ^ 1)
      
      params [["_veh", objNull, [objNull]],["_fuelCapacity", 1, [0]],["_data_list", []],["_dist", 0, [0]],["_avg", 0, [0]]];
      
      if (isNull _veh) exitWith { diag_log "Error2"; };
      
      private _sumFuel = 0;
      private _sumDist = 0;
      
      {
      
          _sumFuel = _sumFuel + (_x select 0);
          _sumDist = _sumDist + (_x select 1);
      
      } count _data_list; // Add up collected data
      
      if !(_sumDist isEqualTo 0 || _sumFuel isEqualTo 0) then {
      
          // meter pro % -> m/% e.g. m/s -> transladted into km/l
          // Calculate average fuel consumption based on new collected data and older summerized data
          if (_avg isEqualTo 0) then {
      
              _avg = _sumDist / (_sumFuel * _fuelCapacity);
      
          } else {
      
              _avg = (_avg + _sumDist / (_sumFuel * _fuelCapacity)) / 2;
      
          };
      
      };
      
      private _fuelPct = fuel _veh;
      
      private _ui = uiNamespace getVariable "vehInfo";
      
      (_ui displayCtrl 1101)ctrlSetText format["%1 %2",roundx((_fuelPct * 100)),"%"];
      (_ui displayCtrl 1003)ctrlSetText format["%1 km",roundc(_dist)];
      
      if (_avg isEqualTo 0) exitWith {};
      
      (_ui displayCtrl 1000)ctrlSetText format["%1 km",roundc(_avg * (_fuelPct * _fuelCapacity))];
      
      if (data_var_literPerKm) then {
      
          (_ui displayCtrl 1001)ctrlSetText format["%1 l/100km",roundx((100 / (_avg / 1000)))];
      
      } else {
      
          (_ui displayCtrl 1001)ctrlSetText format["%1 km/l",roundc(_avg)];
      
      };
      Alles anzeigen

      Ich bin mir bewusst, dass der Name 'calculate' nicht mehr ganz passt xD

      Über feedback und wie gesagt Verbesserungsvorschläge würde ich mich sehr freuen, dafür war der Beitrag hier ja auch gedacht ^^

      VG Leon

      (Falls das der Falsche Bereich ist, bitte moven - hat sich hier bisschen was verändert seit meiner Aktivität haha)

    • Diagramme und Graphen im Arma 3 entw. v. erweitertem Marktsystem aka. Börse

      • DerL30N
      • 3. Mai 2019 um 17:40
      Zitat von skyracer2012

      Das Thema ist jetzt zwar echt alt, aber mit dem Update sind anscheinend neue Funktionen hinzugekommen:


      Code
      Added: New scripting commands for simple graphs: getGraphValues, decayGraphValues, ctrlSetPositionX, ctrlSetPositionY, ctrlSetPositionW, ctrlSetPositionH, bezierInterpolation

      Dieses sind jedoch bis jetzt noch nicht im Wiki so ja, hoffe man kann damit etwas gutes machen.

      Nice! Bin seit einiger Zeit nicht mehr in Arma Scripting aktiv und werde es auch nicht mehr werden.

      Den Ansatz den ich damals gewählt habe hätte ich heute anders geschrieben... will nicht sagen dass es nicht gut war, aber es geht definitiv besser. Auch im Bereich der Serveranfragen (Performance), Fehleranfälligkeit etc.

      Trotzdem schön zu sehen, dass das Thema tatsächlich noch lebt ^^

      Die Idee damals war eine Art Börse zu erstellen, Problem war nur, was soll es an dieser Börse geben? Deshalb habe ich mich auf Put-Optionen konzentriert und dass dann auf ein Marktsystem angewendet.

      Also wenn die Community diese Idee vlt aufgreift und weiter dran arbeitet, dann würde ich das mega finden.

      Neuer Beruf in Altis Life, Broker xD

      LG Leon

    • [TUTORIAL][V1.1] "Professional" Loading und Spawn Screen mit Costum Background

      • DerL30N
      • 15. Juli 2018 um 22:29
      Zitat von Webix

      Ich habe versucht den Ladebildschirm um eine Weitere "Ladefunktion" zu erweitern. Dafür habe ich folgende änderungen vorgenommen

      Code: fn_initCiv.sqf
      if (!life_is_alive && !life_is_arrested) then {
              if (LIFE_SETTINGS(getNumber,"save_civilian_positionStrict") isEqualTo 1) then {
                  _handle = [] spawn life_fnc_civLoadout;
                  waitUntil {scriptDone _handle};
                  CASH = 0;
                  [0] call SOCK_fnc_updatePartial;
              };
              waitUntil {player getVariable ["gang_init_done", false]};     <---- Darauf soll der Ladescreen warten
              LDGVAR((0.95),(localize "STR_Init_Gang"));                    <---- Mein Versuch das ganze hinzuzufügen
              
              [] call life_fnc_spawnMenu;
              waitUntil{!isNull (findDisplay 38500)}; //Wait for the spawn selection to be open.
              waitUntil{isNull (findDisplay 38500)}; //Wait for the spawn selection to be done.
          } else {
              if (life_is_arrested) then {
                  life_is_arrested = false;
                  [player,true] spawn life_fnc_jail;
                  closeDialog 1;// Add these line
              };
          };
      Alles anzeigen

      Kannst du mir sagen, was ich Falsch mache ?

      Funktioniert die WaitUntil ?

      Was ist denn genau das Problem ?

    • [TUTORIAL][V1.1] "Professional" Loading und Spawn Screen mit Costum Background

      • DerL30N
      • 14. Juli 2018 um 17:28
      Zitat von Deathman

      Wie kann ich die dauer der Progressbar länger machen von der zeit her

      Naja, Grundsätzlich würde ich sagen, bei einen Delay ein. Aber anhand von diesem Script muss ich sagen, dass es nicht ganz so einfach ist, kannst aber versuchen jeweils vor z.B. LDGVAR einen Delay zu setzten.

      Zitat von Ruediger

      Moin, ich bin noch ziemlich am Anfang von SQF. Wie kann ich ändern, dass ich nach dem Laden mein eigenes Spawn Menü anzeigen kann?

      Schau mal hier rein: "dialog\function" und dort in die Funktion SpawnMenu, bin mir aber nicht ganz sicher.

    • [TUTORIAL][V1.1] "Professional" Loading und Spawn Screen mit Costum Background

      • DerL30N
      • 28. Mai 2018 um 13:23

      ZIEGENMILCH Naja, schätze mal du hast inner init was nicht korrekt gemacht, aber hat sich ja.

    • [TUTORIAL][V1.1] "Professional" Loading und Spawn Screen mit Costum Background

      • DerL30N
      • 24. Mai 2018 um 23:44
      Zitat von ZIEGENMILCH

      Leider zerballert der Spawnscreen meinen Customhud (Statsbar), Die Bar wird einfach nicht mehr angezeigt.

      Bevor ich mich selbst auf Fehlersuche begebe, hast du adhoc eine Idee woran es liegen könnte?

      Genutzt wird als lose Vorlage, dieses Script:

      https://www.altisliferpg.com/topic/3412-pro…al-looking-hud/

      Naja, wenn du bei HudSetup was verbockst, dann könnte es sein, dass es nicht mehr läuft, so läuft wie es soll.

    • [Tutorial][Message System][V1.1] Alternative für Hints & Co.

      • DerL30N
      • 18. April 2018 um 17:27
      Zitat von Zeilord

      Alles gut^^ ich glaub ich denke mal wieder zu Kompliziert

      mich hat der Text unterm TuT ein wenig durch einander gebraucht

      und ein paar Kommentare halt^^

      wie man es ein fleckt und so

      Na dann ist ja alles gut

    • [Tutorial][Message System][V1.1] Alternative für Hints & Co.

      • DerL30N
      • 18. April 2018 um 13:32
      Zitat von Zeilord

      also bin ein wenig verwirt und verstehe grad ein wenig Bahnhof =/

      habe mir die Beispiele vom TuT gelesen

      wie auch die Kommentare

      und steig da jetzt gar nicht mehr durch 8|
      wollte das gern so ein bauen das man beim farmen wenn man was gesammelt hat

      das kommt
      dann wenn man die Sachen verkauft

      und das dritte habe ich jetzt vergessen weil ich ein wenig verwirt bin

      weil ich jetzt überhaupt nicht verstehe wie ich das mit ein baue o:O

      Alles anzeigen

      Sag mir was dich verwirrt und ich versuche dir zu helfen. Grundsätzlich ist es Kinderleicht, wenn man sich etwas mit SQF auskennt ;) Ich muss aber auch gestehen, dass das Script ausbaufähig ist ( also als Kritik an mich selbst ), will nicht sagen, dass es schlecht ist, aber es geht besser. Ich muss mich mal bei gegebenen Zeitpunkt erkundigen, ob ich meine weiterentwickelte Variante ggf. in abgespeckter Version mit euch teilen kann. An deiner Stelle würde ich aber nicht drauf warten, weil ich aktuell echt viel um die Ohren habe...

    • [TUTORIAL][V1.1] "Professional" Loading und Spawn Screen mit Costum Background

      • DerL30N
      • 16. April 2018 um 11:18
      Zitat von arma4lyf

      Bitte helfen Sie. funktioniert nicht


      RPT:

      3:51:25 Error in expression < true;

      life_session_completed = false;

      (var1, var2) (var) ((uiNamespace getVaria>

      3:51:25 Error position: <var1, var2) (var) ((uiNamespace getVaria>

      3:51:25 Error Undefined variable in expression: var1

      3:51:25 File mpmissions\Altis_Life.Altis\core\init.sqf, line 22

      3:51:25 String STR_lloading_exit not found

      3:51:25 Error in expression <amespace getVariable "pro_loading")};

      (var) ((uiNamespace getVariable "pro_loading")>

      3:51:25 Error position: <((uiNamespace getVariable "pro_loading")>

      3:51:25 Error Missing ;

      3:51:25 File mpmissions\Altis_Life.Altis\dialog\function\pro_loading.sqf, line 21

      3:51:25 Error in expression <ace getVariable "pro_loading")};

      Alles anzeigen

      You can also write in englisch. Can you please attach me your complete log files, so I can check them for errors. Well at least your client rpt. Thx

    • Wie viel Stunden habt ihr?

      • DerL30N
      • 11. April 2018 um 13:18

      2202 Stunden Auf 4 Jahre, 1 Monat und 8 Tage verteilt ^^ Also vergleichsweise wenig...

    • [Tutorial][Message System][V1.1] Alternative für Hints & Co.

      • DerL30N
      • 4. April 2018 um 14:35
      Zitat von MiamiRize

      Hey 2 fragen zu dem script.

      1: Kann man irgendwie bewirken das sich die meldungen untereinander anreihen? spirch eine neue kommt und geht auf den 1.platz während die alte meldung auf den darunterliegenden 2.platz geschoben wird?

      (Hat das evtl was mit PLAIN bzw PLAIN DOWN zu tun?)

      2: Kann man die zeit wie lange eine nachricht eingeblendet wird bearbeiten?

      Zu 1. Nein Damit hat es nichts zutun. Dazu muss man das Script erweitern.

      Zu 2. Ja kann man, du musst im Dialog selber die duration auf infinit stellen und dann entsprechend im Script den Dialog mit CutRsc öffnen und nach der entsprechenden Zeit wieder schließen mit cutFadeOut und dann der Dauer in Sekunden.

      Ich hoffe du verstehst was ich meine und wie ich es meine.

      Beispiel:

      Code: Diese bieden waitUntil
      waitUntil { sleep 0.1; (!isNull _display) };
      waitUntil { sleep 0.1; (isNull _display) };
      Code: Ersetzen mit einem sleep z.B. wie folgt:
      uiSleep (count _text);
      Code: Und dann unter dem sleep den Dialog wieder schließen
      (CONFIG(getNumber,"rscLayer")) cutFadeOut (CONFIG(getNumber,"fadein"));

      Das wäre eine simple Möglichkeit. Aber nicht vergessen die Duration in der .hpp zu ändern! Vorzugsweise auf infinite.

      VG Leon

    • Diagramme und Graphen im Arma 3 entw. v. erweitertem Marktsystem aka. Börse

      • DerL30N
      • 2. März 2018 um 20:58

      Zu Beginn des Wochenendes mal ein weiteres Update:

      Es gab schon lange keine Bilder mehr, das möchte ich jetzt ändern. Die beiden Dialoge haben sich nochmals etwas verändert, den zweiten habt ihr noch nicht kennen gelernt...

      Im Hauptbereich des Scripts, also in diesem Fenster/Dialog könnt ihr auf alle aktuellen Informationen zugreifen, welche ihr benötigt.

      Beim öffnen und schließen des Dialogs werdet ihr automatisch beim Markt angemeldet, sodass ihr Updates erhaltet. Habt ihr das Menü mal nicht offen, so verpasst ihr trotzdem nichts, ihr erhaltet eine Nachricht in Form von einem hint.

      Je nach Ausgang eurer Option sieht dieser anders aus.

      Wie man schon sieht ist aktuell alles auf Englisch gehalten, da die Hauptbegriffe aus dem Englischen kommen, werde ich höchstwahrscheinlich keine Übersetzung anbieten. Was dennoch kommen wird, ist eine Einbindung der Dialogtexte in die Stringtable.

      Im Hauptmenü könnt ihr den Markt überwachen (linke Seite) und eine beliebige Source wählen. Dann erhaltet ihr in der Mitte eine Handvoll Informationen, welche euch erahnen lassen, ob der aktuelle Wert im normalen Rahmen liegt. Diese Daten werden aus den Informationen aus der rechten Liste entnommen. Alle dort enthaltenen Daten werden demnach zum Berechnen für einige Informationen in der Mitte genutzt.

      Im unteren Bereich gibt es links zwei Button, mit denen man eine Option eröffnet. Im Textfeld daneben wird ein entsprechender Betrag eingegeben, den man für die Option setzen möchte. Hierbei gilt ein Bonus von 8% des Einsatz.

      In der Ecke unten rechts ist ein kleine Liste, in dieser stehen alle laufenden Optionen, mit der verbleibenden Laufzeit, der Ressource, dem Trend (CALL oder PUT, Steigen oder Fallen) und dem gesetzten Geld, dem sogenannten Exercise Price.

      Läuft eure Option aus, erhaltet ihr eine der obigen Nachrichten und könnt dann alle Informationen über den Button "Recent Options" einsehen.

      Dort gelangt ihr dann zur folgenden Tabelle.

      Hier werden alle eure Optionen gelistet. Jede Option hat eine einzigartige ID, diese könnt ihr ganz links sehen. In diesem Fall gibt es keine anderen Optionen, sodass die Zahlenfolge durchgängig ist.

      Dann folgt die Ressource auf welchen Kurs man gesetzt hat. Der Start und dann der End-Wert dieser. Dann das gesetzte Geld, die Art der Option, ob PUT oder CALL, das Ergebnis, ob erfolgreich oder nicht, die Laufzeit der Option (aktuell fix bei 5 Minuten) und zu guter letzt noch der Bonus, die Prämie.

      Über den Button "BACK" kommt man wieder zurück ins Hauptmenü des Markts und mit dem Knopf "Refresh" kann man die Tabelle aktualisieren.

      Zusätzlich habe ich ein kleines Zufallsprinzip erstellt, welches den Markt jede Minute etwas verändert. Im Regelfall liegen diese Änderungen unter 1%, so bei 0.01% bis 0.5 %.

      Das ist der aktuelle Stand der Entwicklung. Es kommt noch eine Bestätigungsfrage, ob man eine Option wirklich abgeben möchte, oder nicht, sodass es nicht aus versehen zu irgendwelchen Optionen kommt.

      Und ich überlege aktuell, ob ich die Laufzeit für das manuelle Festlegen freigeben möchte oder nicht.

      Für dieses Script ist wie gesagt eine funktionierende Version des Dynmarket Scripts vorausgesetzt.

      Falls ihr noch Ideen oder Vorschläge, Einwände habt, lasst es mich wissen.

      VG und schönes Wochenende, Leon

    • Diagramme und Graphen im Arma 3 entw. v. erweitertem Marktsystem aka. Börse

      • DerL30N
      • 2. März 2018 um 00:22
      Zitat von blackfisch

      Nimm mal keine ListBox sondern eine ListNBox - damit kannst du quasi "Spalten" erstellen, die eine gewisse Breite von der Gesamtbreite einnehmen. So kannst du quasi eine Tabelle nachstellen. Syntax ist halt bisschen anders als bei Listboxes, grundsätzlich aber sehr ähnlich. https://community.bistudio.com/wiki/lnbAddRow <- wäre z.B. das Equivalent zu lbAdd - schaus dir mal an. Wenn du Hilfe brauchst meld dich mal per PN :D

      Danke für die schnelle Antwort, habe damit noch glaube ich nie gearbeitet, bin generell nicht so der Mensch für Dialoge. Ich schaue mir das Morgen mal genauer und in Ruhe an. Wenn ich dran versage hörst du von mir :thumbup:

      Ah, doch jetzt erinnre ich mich, ich habs mal damit probiert, bei etwas anderem und bin kläglich gescheitert...

    • Diagramme und Graphen im Arma 3 entw. v. erweitertem Marktsystem aka. Börse

      • DerL30N
      • 1. März 2018 um 23:59

      Ich habe mal ein Bild eingefügt, wie meine ListBox aktuell aussieht. Wie man sieht sehr unschön. Ich könnte natürlich bei jedem Eintrag die Buchstaben zählen und dann entsprechend ergänzen, aber jeder Buchstabe hat eine unterschiedliche Breite und das wäre glaube ich unnötig viel Arbeitsaufwand.D

      Guten Abend allerseits, ich suche aktuell nach einer Idee oder Möglichkeit eine ListBox gewissermaßen zu verschönern, ordentlicher zu gestalten, sodass jede Spalte wie bei einer Tabelle untereinander steht. Und da wäre ich auch bei meiner nächsten Frage, kann man eine art Tabelle erstellen ?

      Ich sehe aktuell davon ab, die "dynamische" ListBox" mit ein paar Textfeldern so zu kombinieren, dass ich jeweils die Details sehe, wenn ich die Auswahl verändere... Da ich ehrlich gesagt den Vorteil einer Tabelle bzgl. der Übersicht auf einen Blick nicht aufgeben möchte.

      Ich meine so habe ich es ja schon für andere Dinge gemacht, bzw. das habe ich in erster Linie übernommen, aber das ist halt nicht das, was ich als Ergebnis möchte.

      Danke schon mal, VG Leon

    • Diagramme und Graphen im Arma 3 entw. v. erweitertem Marktsystem aka. Börse

      • DerL30N
      • 1. März 2018 um 16:36
      Zitat von Speedo

      Versuch es mal mit _queryResult = [_query,2,true] call DB_fnc_asyncCall; . Damit solltest du nen mehrdimensionales Array bekommen.

      Danke wunderbar das hat mich weiter gebracht :thumbup: Frage mich nur warum ich da nicht selber drauf gekommen bin, glaube es war die Beschreibung in der asyncCall die mich verwirrt hat...

      Danke nochmals...

    • Diagramme und Graphen im Arma 3 entw. v. erweitertem Marktsystem aka. Börse

      • DerL30N
      • 1. März 2018 um 16:10

      Ich möchte mal ein kleines Entwicklungsupdate geben, wie der Stand der Dinge aktuell aussieht.

      Kurz gesagt, das Script ist vom Kern soweit fertig. Die generellen Funktionen, wie :

      - Preisabfrage und Überwachung/Verlauf

      - Mathematische Kalkulationen, etwa: Durchschnitt, Erstes Intervall der Standardabweichung.

      - Öffnen von Trades (aktuell auf eine fixe Laufzeit v. 5 Minuten)

      - Überwachen aller laufenden Trades am Markt

      - Verarbeitung der Trades -> nach Ablauf entsprechend in DB eingepflegt, Steuern berechnet, usw.

      - Primärer Dialog für alles oben genannte, Sekundärer Dialog zum abrufen der eigenen vergangenen Trades

      - Benachrichtigung über Abschluss eines Trades via hint Funktion ( siehe Anhang - wobei sich der Text noch mal leicht geändert hat )

      Das waren die Features die bis jetzt implementiert wurden... jedoch stehe ich vor einem Problem, ich kann scheinbar über die extDB3 nur "einfache Abfragen" machen...

      Meine DB-Table sieht folgendermaßen aus: id ist der PrimaryKey und traderid ist ein Indexschlüssel

      Ich führe alles genannte über die fn_asyncCall.sqf aus, mit dem Parametern 2, also : _queryResult = [_query,2] call DB_fnc_asyncCall;

      Diese vier Einträge sind Beispiele... wenn ich nun alle Einträger der Table mit der traderid im Bild Abfragen möchte, so geht das nicht, zu mindest habe ich es nicht geschafft... habe immer nur den ersten Eintrag bekommen...

      Ich habe es hiermit versucht format["SELECT id FROM `market` WHERE traderid='%1'",_uid]_uid ist dabei die Spieler UID...

      Also bei dieser Methode bekomme ich ja lediglich alle id, so die Theorie, tatsächlich erhalte ich nur die id 1.

      Hier sieht man oben den ausgeführten Befehl. Führe ich diesen mit der extDB3 aus, so erhalte alle angeforderten Spalten aus der Reihe mit der id 1. Wobei er mit eigentlich alle Reihen mit dieser traderid geben müsste.

      Ich habe mir schon eine alternative überlegt, um dieses Problem zu umgehen, nur fände ich es lächerlich, wenn es nicht auch so geht.

      Ich hoffe ihr könnt mir da irgendwie weiterhelfen, Danke!

      VG Leon

    • Eigene zufällige Killnachrichten

      • DerL30N
      • 26. Februar 2018 um 23:27

      blackfisch ups... ehm ja gut dachte, da eine switch schneller ist als eine If else if else dachte ich es würde auch für mehrere gelten ^^ hab mich wohl geirrt hehe

      ja stimmt beim isKindOf müsste das dann anders aussehen : switch true do { case (_vehicel isKindOf "Car"): { code };

      Aber ordentlicher sieht´s zumindest aus :):whistling:

    • Eigene zufällige Killnachrichten

      • DerL30N
      • 26. Februar 2018 um 22:57

      moeck  blackfisch sry, aber ich konnte nicht anders, ich habe das Wirrwarr gesehen und mein drang zur Ordnung hat sich durchgesetzt...

      Ich habe das von blackfisch stumpf kopiert, also auch hier nicht sicher, ob es auf Anhieb läuft, aber sollte so schon richtig sein...

      Code
      #include "..\..\script_macros.hpp"
      /*
       File: fn_deathmessage.sqf
       Author: moeck (lostonparadise.de)
       Revised by blackfisch for Native-Network.net
       Revised by DerL30N for lower script execution time :)
       
       Description:
       Random death messages
      */
      params [
       ["_mode","",[""]],
       ["_unitName","",[""]],
       ["_killerName","",[""]],
       ["_vehicle",ObjNull,[ObjNull]]
      ];
      private _deathmsg = "";
      private _vehicleName = FETCH_CONFIG2(getText,"CfgVehicles",(typeOf _vehicle),"displayName");
      
      switch _mode do {
          case "killed": { switch true do {
              case (!isNull _vehicle) : { switch (_vehicle isKindOf) do {
                  case "Car": {_deathmsg = format ["STR_NOTF_Murdered_Car_%1",(round(random (1)))];};
                  case "Air": {_deathmsg = format ["STR_NOTF_Murdered_Air_%1",(round(random (2)))];};
                  case "Ship": {_deathmsg = format ["STR_NOTF_Murdered_Ship_%1",(round(random (1)))];};
                  };
              default {_deathmsg = format ["STR_NOTF_Murdered_%1",(round(random (3)))];};
              };
          };};
          case "copkill": { switch true do {
              case (!isNull _vehicle) : { switch (_vehicle isKindOf) do {
                  case "Car": {_deathmsg = format ["STR_NOTF_Copkill_Car_%1",(round(random (1)))];};
                  case "Air": {_deathmsg = format ["STR_NOTF_Copkill_Air_%1",(round(random (2)))];};
                  case "Ship": {_deathmsg = format ["STR_NOTF_Copkill_Ship_%1",(round(random (1)))];};
                  };
              default {_deathmsg = format ["STR_NOTF_Copkill_%1",(round(random (2)))];};
              };
          };};
          case "suicide": { switch true do {
              case (!isNull _vehicle) : { switch (_vehicle isKindOf) do {
                  case "Car": {_deathmsg = format ["STR_NOTF_Suicide_Car_%1",(round(random (2)))];};
                  case "Air": {_deathmsg = format ["STR_NOTF_Suicide_Air_%1",(round(random (3)))];};
                  case "Ship": {_deathmsg = format ["STR_NOTF_Suicide_Ship_%1",(round(random (1)))];};
                  };
              default {_deathmsg = format ["STR_NOTF_Suicide_%1",(round(random (4)))];};
              };
          };};
          default {_deathmsg = format ["STR_NOTF_Murdered_%1",(round(random (3)))];};
      };
      
      _deathmsg = format [localize _deathmsg,_unitName,_killerName,_vehicleName];
      [0,_deathmsg] remoteExecCall ["life_fnc_broadcast",RCLIENT];
      Alles anzeigen

      ps: ich habe das mal als "revised" in den header gestellt...

    • Diagramme und Graphen im Arma 3 entw. v. erweitertem Marktsystem aka. Börse

      • DerL30N
      • 26. Februar 2018 um 20:35

      blackfisch Naja, können sie ja, wenn man nun den Diamantpreis kennt, und man dann sage ich mal für 1Mio€ setzt, dass der Diamantpreis fällt, und man dann beim Händler Diamanten kauft, und diese dann auch dort verkauft, dann sinkt der Wert vom Diamant.... rate mal wer dann ne Menge Geld verdienen kann... machen dass nur zwei läute umgekehrt Gleichzeitig, dann kann es sein, dass einer von ihnen leer ausgeht... Wirtschaft ist nicht planbar, aber man kann anhand von Fakten eine gewisse Zeit in die Zukunft schauen ^^

    • Diagramme und Graphen im Arma 3 entw. v. erweitertem Marktsystem aka. Börse

      • DerL30N
      • 26. Februar 2018 um 19:17
      Zitat von blackfisch

      Arma is ne B1tch - versuch es mal so:

      Code
      _time = diag_tickTime;
      ACTIVE_TRADES pushBack [_time,[_trader,(owner _trader),_resource,_startValue,_moneySet,_tradeID,_trend]];

      kann mir gut vorstellen, dass er das da irgendwie als Code rein schreibt xD

      Ach so ja das kann sein... so nach dem Motto, ich packe den Befehl in den Array und wenn ich ihn Auswähle wird er ausgeführt... typisch Arma ^^

      Ich teste es mal...

      Und tadaaa das Ergebnis lautet: 0

      Aber ich teste mal etwas anderes.. und zwar roll ich das noch mal von vorne auf... ich melde die Uhr läuft! Haaa ich hätte den Kram nicht durch 1000 teilen müssen/dürft... warum auch immer... jetzt läfut´s ja.

      Nun mal eine Frage, ich ermögliche das Spekulieren am Markt über den Preisverlauf von Resources. Aktuell kann jeder sehen, wer im Moment auf was spekuliert und wie spekuliert, also ob er einen Up oder Down Trend im Verlauf einer bestimmten Resource sieht.

      Das ganze lässt sich einschränken, nur stelle ich mir die Frage, möchte ich das überhaupt einschränken.. sollte ich ? Gerade das macht es doch gerade so interessant, wenn ich sehe, dass jemand 1000€ auf einen Trend setzt, dann könnte ich ihm theoretisch nachahmen und auf den Zug aufspringen.

    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. Verhaltensregeln
    3. Datenschutzerklärung
    4. Impressum
    5. Urheberrechts- oder Lizenzverstoß melden
  • Trimax Design coded & layout by Gino Zantarelli 2023-2025©
    Community-Software: WoltLab Suite™