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: 04 Oktober 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. Alice Kingsleigh

    Beiträge von Alice Kingsleigh

    • [Tutorial] [Altis Life 5.0] V- und I-Items nach dem Tod in einer Lootbox

      • Alice Kingsleigh
      • 23. Juni 2018 um 03:05

      Die Credits für dieses Script gehen an moeck. Ich habe lediglich meinen Testserver zur Verfügung gestellt, mit ihm rumprobiert und schreibe das alles für euch auf.


      Version: Altis Life 5.0

      Schwierigkeitsgrad: 2 (eventuell 1 aber ein bisschen Verständnis wäre nicht verkehrt)

      Was es tut:

      Bei Tod des Spielers werden alle V-, I-Items, ausgenommen Kleidung, und das Geld in eine graue Kiste gelegt. Jeder kann über I (aufs I-Inventar) und T (auf die V Items und Geld) zugreifen. Nach 3 Minuten (kann umgestellt werden) verscheindet die Kiste. Wird der Spieler wiederbelebt behält er seine Kleidung, alles andere findet er dann in der Kiste wieder.

      Legen wir los!


      Schritt 1:

      Im Pfad /core/functions/fn_dropItem.sqf ersetzt ihr den gesamten Inhalt hiermit:

      Code
      #include "..\..\script_macros.hpp"
      /*
       File: fn_dropItems.sqf
       Author: moeck
       Description:
       Called on death, Player drops any 'virtual' items and items. They are stored in a plastic case.
          
      */
      params [
       ["_unit",objNull,[objNull]]
      ];
      private _restricted_items = LIFE_SETTINGS(getArray,"drop_restricted_vitems");
      private _pos = _unit modelToWorld[0,3,0];
      _pos = [(_pos select 0),(_pos select 1),0];
      private _obj = "Land_PlasticCase_01_small_F" createVehicle _pos; //Solltet ihr ein anderes Objekt wollen, den Classname in allen für diese Funktion benötigten Scripts ändern.
      clearWeaponCargoGlobal _obj;
      clearItemCargoGlobal _obj;
      clearMagazineCargoGlobal _obj;
      clearBackpackCargoGlobal _obj;
      _name = format ["%1's Lootbox",name _unit];
      _obj setVariable ["Name",_name,true]; // %1 bewirkt die Anzeige des Namens des verstorbenen Spielers an, so dass ihr das "'s Lootbox" ändern könnt falls gewünscht.
      private _trunk =[];
      private _weight = 0;
      {
          private _value = 0;
          private _iweight = 0;
          private _itemName= "";
          private _item = "";
          if (_x isEqualType "") then {_item = _x;} else {_item = configName _x};
          if (_item isEqualTo "life_cash") then {
              _value = CASH;
              _itemName = "CASH";
              _item = "money";
          } else {
              _value = ITEM_VALUE(_item);
              _iweight = (([_item] call life_fnc_itemWeight) * _value);
              _itemName = ITEM_VARNAME(_item);
          };
          _weight = _weight + _iweight;
          if (_value > 0 && !(_item in _restricted_items)) then {
              _trunk pushBack [_item,_value];
          };
          missionNamespace setVariable [_itemName,0];
      } forEach (("true" configClasses (missionConfigFile >> "VirtualItems")) + ["life_cash"]);
      _obj setVariable["Trunk",[_trunk,_weight],true];
      if (LIFE_SETTINGS(getNumber,"drop_iitems_onDeath") isEqualTo 1) then {
          if (!(uniform _unit isEqualTo "")) then {
              {_obj addItemCargoGlobal [_x, 1];_unit removeItem _x} forEach (uniformItems _unit);
          };
          if (!(backpack _unit isEqualTo "")) then {
              {_obj addItemCargoGlobal [_x, 1];_unit removeItem _x} forEach (backpackItems _unit);
          };
          if (!(vest _unit isEqualTo "")) then {
              {_obj addItemCargoGlobal [_x, 1];_unit removeItem _x} forEach (vestItems _unit);
          };
          if (count (primaryWeaponItems _unit) > 0) then {
              {_obj addItemCargoGlobal [_x, 1];_unit removeItem _x} forEach (primaryWeaponItems _unit);
          };
          if (count (handgunItems _unit) > 0) then {
              {_obj addItemCargoGlobal [_x, 1];_unit removeItem _x} forEach (handGunItems _unit);
          };
          if !(primaryWeapon _unit isEqualTo "") then {_obj addItemCargoGlobal [(primaryWeapon _unit), 1]};
          if !(handgunWeapon _unit isEqualTo "") then {_obj addItemCargoGlobal [(handgunWeapon _unit), 1]};
          removeAllWeapons _unit;
          {player removeMagazine _x;} forEach (magazines _unit);
      };
      [_obj] spawn {
          params ["_obj"];
          _timer = LIFE_SETTINGS(getNumber,"lootbox_timer");
          uisleep (_timer*60);
          deleteVehicle _obj
      };
      Alles anzeigen

      Schritt 2:

      core/functions/fn_fetchDeadGear.sqf nach (Zeile 14)

      Code
      private _dropWeapons = LIFE_SETTINGS(getNumber,"drop_weapons_onDeath");

      das einfügen

      Code
      private _dropItems = LIFE_SETTINGS(getNumber,"drop_iitems_onDeath");

      und die Zeilen 38 - 64 (die hier)

      Code
      if !(primaryWeapon _unit isEqualTo "") then {_primitems = primaryWeaponItems _unit;};
      if !(handgunWeapon _unit isEqualTo "") then {_handgunItems = handgunItems _unit;};
      
      if !(_uniform isEqualTo "") then {{_uitems pushBack _x; true} count (uniformItems _unit);};
      if !(_vest isEqualTo "") then {{_vitems pushBack _x; true} count (vestItems _unit);};
      if !(_backpack isEqualTo "") then {{_bitems pushBack _x; true} count (backPackItems _unit);};
      
      if !(primaryWeapon _unit isEqualTo "") then {
          _unit selectWeapon (primaryWeapon _unit);
          if !(currentMagazine _unit isEqualTo "") then {
              _magazines pushBack currentMagazine _unit;
          };
      };
      
      if !(secondaryWeapon _unit isEqualTo "") then {
          _unit selectWeapon (secondaryWeapon _unit);
          if !(currentMagazine _unit isEqualTo "") then {
              _magazines pushBack currentMagazine _unit;
          };
      };
      
      if !(handgunWeapon _unit isEqualTo "") then {
          _unit selectWeapon (handgunWeapon _unit);
          if !(currentMagazine _unit isEqualTo "") then {
              _magazines pushBack currentMagazine _unit;
          };
      };
      Alles anzeigen

      hiermit ersetzen:

      Code
      if (_dropItems isEqualTo 0) then {
          if !(primaryWeapon _unit isEqualTo "") then {_primitems = primaryWeaponItems _unit;};
          if !(handgunWeapon _unit isEqualTo "") then {_handgunItems = handgunItems _unit;};
      
          if !(_uniform isEqualTo "") then {{_uitems pushBack _x; true} count (uniformItems _unit);};
          if !(_vest isEqualTo "") then {{_vitems pushBack _x; true} count (vestItems _unit);};
          if !(_backpack isEqualTo "") then {{_bitems pushBack _x; true} count (backPackItems _unit);};
      
          if !(primaryWeapon _unit isEqualTo "") then {
              _unit selectWeapon (primaryWeapon _unit);
              if !(currentMagazine _unit isEqualTo "") then {
                  _magazines pushBack currentMagazine _unit;
              };
          };
      
          if !(secondaryWeapon _unit isEqualTo "") then {
              _unit selectWeapon (secondaryWeapon _unit);
              if !(currentMagazine _unit isEqualTo "") then {
                  _magazines pushBack currentMagazine _unit;
              };
          };
      
          if !(handgunWeapon _unit isEqualTo "") then {
              _unit selectWeapon (handgunWeapon _unit);
              if !(currentMagazine _unit isEqualTo "") then {
                  _magazines pushBack currentMagazine _unit;
              };
          };
      };
      Alles anzeigen

      Schritt 3:

      In /core/functions/fn_keyHandler.sqf sucht ihr den case 20, also den T Key und erweitert

      Code
      _list = ((ASLtoATL (getPosASL player)) nearEntities [["Box_IND_Grenades_F","B_supplyCrate_F"], 2.5]) select 0;

      mit ,"Land_PlasticCase_01_small_F, damit es am Ende so aussieht:

      Code
       _list = ((ASLtoATL (getPosASL player)) nearEntities [["Box_IND_Grenades_F","B_supplyCrate_F","Land_PlasticCase_01_small_F"], 2.5]) select 0;


      Schritt 4:

      In der /core/vehicle/fn_openInventory.sqf erweitert ihr die Zeile (bei mir Zeile 12)

      Code
      if (isNull _vehicle || !(_vehicle isKindOf "Car" || _vehicle isKindOf "Air" || _vehicle isKindOf "Ship" || _vehicle isKindOf "Box_IND_Grenades_F" || _vehicle isKindOf "B_supplyCrate_F")) exitWith {}; //Either a null or invalid vehicle type.

      mit || _vehicle isKindOf "Land_PlasticCase_01_small_F",, so dass sie so aussieht:

      Code
      if (isNull _vehicle || !(_vehicle isKindOf "Car" || _vehicle isKindOf "Air" || _vehicle isKindOf "Ship" || _vehicle isKindOf "Box_IND_Grenades_F" || _vehicle isKindOf "B_supplyCrate_F" || _vehicle isKindOf "Land_PlasticCase_01_small_F")) exitWith {}; //Either a null or invalid vehicle type.


      Sucht (Zeile 22)

      Code
      ctrlSetText[3501,format [(localize "STR_MISC_VehStorage")+ " - %1",getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")]];

      und ersetzt sie mit:

      Code
      if (_vehicle isKindOf "Land_PlasticCase_01_small_F") then {
          ctrlSetText[3501,format [(localize "STR_MISC_VehStorage")+ " - %1",(_vehicle getVariable ["BoxName",""])]];
      } else {
          ctrlSetText[3501,format [(localize "STR_MISC_VehStorage")+ " - %1",getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName    ")]];
      };

      damit es dann so aussieht:

      Code
      if (_vehicle isKindOf "Box_IND_Grenades_F" || _vehicle isKindOf "B_supplyCrate_F") then {
          ctrlSetText[3501,format [(localize "STR_MISC_HouseStorage")+ " - %1",getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")]];
      } else {
      if (_vehicle isKindOf "Land_PlasticCase_01_small_F") then {
          ctrlSetText[3501,format [(localize "STR_MISC_VehStorage")+ " - %1",(_vehicle getVariable ["BoxName",""])]];
      } else {
          ctrlSetText[3501,format [(localize "STR_MISC_VehStorage")+ " - %1",getText(configFile >> "CfgVehicles" >> (typeOf _vehicle) >> "displayName")]];
          };
      };

      am Ende der Datei (bei mir Zeile 55) sucht ihr noch

      Code
      if ((_this isKindOf "Car") || (_this isKindOf "Air") || (_this isKindOf "Ship")) then {

      erweiter sie mit || (_this isKindOf "Land_PlasticCase_01_small_F", damit sie so aussieht:

      Code
      if ((_this isKindOf "Car") || (_this isKindOf "Air") || (_this isKindOf "Ship") || (_this isKindOf "Land_PlasticCase_01_small_F")) then {

      Schritt 5:

      In /core/vehicle/fn_vehInventory müsst ihr die Zeile 46

      Code
      _tInv lbAdd format ["[%1] - %2",_val,localize _name];

      hierzu ändern

      Code
      _tInv lbAdd format ["[%1] - %2",[_val] call life_fnc_numberText,localize _name];

      Schritt 6:

      Im Pfad /config/Config_Vehicles nach der class B_supplyCrate_F einfügen

      Code
      class Land_PlasticCase_01_small_F {
          vItemSpace = 300;
          conditions = "";
          price = -1;
          textures[] = {};
      };

      Schritt 7:

      Jetzt müssen wir für das Geld noch ein vItem anlegen, damit es auch in die Lootbox geht. Dazu in /config/Config_vItems.hpp nach der class storagebig ein Gelditem anlegen

      Code
      class money {
          variable = "money";
          displayName = "STR_Item_Money";
          weight = 0;
          buyPrice = -1;
          sellPrice = -1;
          illegal = false;
          edible = -1;
          icon = "icons\ico_money.paa";
      };


      Schritt 8:

      in config/Config_Master.hpp nach drop_weapons_onDeath tragt ihr folgende Sachen ein:

      Code
      drop_restricted_vitems[]={"apple","peach","tbacon","donuts"}; // V-Items die bei Tod NICHT in die Box gelegt werden sollen und somit gelöscht werden.
      lootbox_timer = 3; // //Zeit, bis die Kiste weg ist. Kann durch ändern der 3 (= 3 Minuten) geändert werden.
      drop_iitems_onDeath = true; // true = I-Items (Waffen etc.) werden in die Box gelegt, false = I-Items werden nicht in die Box gelegt.

      Schritt 9:

      In der /stringtable.xml nun noch den Namen hinterlegen, am besten im <Package name="Life_Items">

      Code
      <Key ID="STR_Item_Money">
          <Original>Geld</Original>
      </Key>

      Geld ist hier übrigens nicht die schönste Wahl, € oder $ oder was auch immer ihr habt ist da besser.


      Erweiterung:

      Wenn ihr das "TakeAll" Script nutzt ersetzt bitte eure fn_vehTakeAllItem.sqf hiermit. Aber eben nur wenn ihr es wirklich bei euch drin habt, sonst geht nachher noch alles schief :)

      Code
      #include "..\..\script_macros.hpp"
      #define ctrlSelData(ctrl) (lbData[##ctrl,(lbCurSel ##ctrl)])
      /*
          File: fn_vehTakeAllItem.sqf
          Author: Killerknight
          
          Description:
          Take all (max items) from selected and add it to the players inventory
      */
      private["_ctrl","_num","_index","_data","_old","_value","_weight","_diff"];
      
      if(!DarfEinzahlen) exitWith {[localize "STR_NOTF_Trunk_Store_Stop",true,"fast","orange","Error"]spawn Life_fnc_msg;};
      if(DarfEinzahlen) then {
          DarfEinzahlen = false;
          [] spawn {
              sleep 1;
              DarfEinzahlen = true;
          };
      };
      
      disableSerialization;
      _num = 0;
      if(isNull Life_trunk_vehicle OR !alive Life_trunk_vehicle) exitWith {[localize "STR_MISC_VehDoesntExist",true,"fast","orange","Error"]spawn Life_fnc_msg;};
      if(!alive player) exitwith {closeDialog 0;};
      
      if((lbCurSel 3502) == -1) exitWith {[localize "STR_Global_NoSelection",true,"fast","orange","Error"]spawn Life_fnc_msg;};
      _ctrl = ctrlSelData(3502);
      _config = configName (missionConfigFile >> "VirtualItems" >> _ctrl);
      
      if (_ctrl isEqualTo "money") then {
          _num = ((((Life_trunk_vehicle getVariable "Trunk") select 0) select (lbCurSel 3502)) select 1);
      } else {
          _num2 = getNumber(missionConfigFile >> "VirtualItems" >> _config  >> "weight");
          _num1 = (floor (((Life_maxWeight) - (Life_carryWeight)) / _num2));
          _num = if (_num1 <= ((((Life_trunk_vehicle getVariable "Trunk") select 0) select (lbCurSel 3502)) select 1)) then {_num1}else{((((Life_trunk_vehicle getVariable "Trunk") select 0) select (lbCurSel 3502)) select 1)};
      };
      if(_num < 1) exitWith {["Du hast kein Platz dafür.",true,"fast","orange","Error"]spawn Life_fnc_msg;};
      
      _index = [_ctrl,((Life_trunk_vehicle getVariable "Trunk") select 0)] call TON_fnc_index;
      _data = (Life_trunk_vehicle getVariable "Trunk") select 0;
      _old = Life_trunk_vehicle getVariable "Trunk";
      if(_index == -1) exitWith {};
      _value = _data select _index select 1;
      if(_num > _value) exitWith {[localize "STR_MISC_NotEnough",true,"fast","orange","Error"]spawn Life_fnc_msg;};
      _num = [_ctrl,_num,Life_carryWeight,Life_maxWeight] call Life_fnc_calWeightDiff;
      if(_num isEqualTo 0) exitWith {[localize "STR_NOTF_InvFull",true,"fast","orange","Error"]spawn Life_fnc_msg;};
      _weight = ([_ctrl] call Life_fnc_itemWeight) * _num;
      if(_ctrl isEqualTo "money") then {
          if !(_num isEqualType 0) then {_num = parseNumber (_num);diag_log format ["parsenumber: %1",_num]; };
          if(_num isEqualTo _value) then {
              _data set[_index,-1];
              _data = _data - [-1];
          } else {
              _data set[_index,[_ctrl,(_value - _num)]];
          };
          CASH = CASH + _num;
          [0] call SOCK_fnc_updatePartial;
          Life_trunk_vehicle setVariable["Trunk",[_data,(_old select 1) - _weight],true];
          [Life_trunk_vehicle] call Life_fnc_vehInventory;
          
      } else {
          if([true,_ctrl,_num] call Life_fnc_handleInv) then {
              if(_num isEqualTo _value) then {
                  _data set[_index,-1];
                  _data = _data - [-1];
              } else {
                  _data set[_index,[_ctrl,(_value - _num)]];
              };
              Life_trunk_vehicle setVariable["Trunk",[_data,(_old select 1) - _weight],true];
              [Life_trunk_vehicle] call Life_fnc_vehInventory;
          } else {
              [localize "STR_NOTF_InvFull",true,"fast","orange","Error"]spawn Life_fnc_msg;
          };
      };
      Alles anzeigen

      Wenn ihr nun alles richtig gemacht habt so funktioniert dann auch alles bei euch :) Sollte es doch nicht so sein gerne hier nach Hilfe fragen.

      Wer im übrigen eine Standart Altis Life 5.0 hat kann sogar alle Dateien aus dem Anhang einfach in seine Mission ersetzen. Für alle anderen sind sie aber zum Abgleich auch sehr gut zu nutzen.

      Dateien

      TUT - Lootboxen.rar 21,68 kB – 397 Downloads
    • Suitcase ändern zu anderem Objekt? Alle VItems in ein Objekt?

      • Alice Kingsleigh
      • 22. Juni 2018 um 16:12

      Hi, da ich gestern danach noch bisschen was gemacht hab hab ich grade keine aktuellen Logs mit dem benötigten Inhalt. Können uns aber gerne wenn du Lust hast mal gemeinsam ran setzen. Schau mir deinen Code dann noch mal an, vielleicht fällt mir ja noch was auf. Schreib mir gerne eine Nachricht mit einem TS wo ich hin kommen soll, bzw. können uns auch auf meinem treffen. Wie es dir lieber ist. Bis dahin teste ich die Überarbeitung dann auch noch mal.

    • Suitcase ändern zu anderem Objekt? Alle VItems in ein Objekt?

      • Alice Kingsleigh
      • 22. Juni 2018 um 02:40

      Was mir jetzt beim zweiten Test erst auffiel ist, dass die vItems nicht mehr grdropt werden. Bleiben komplett im Inventar. Auch nach deiner Änderung. Geld dropt, ist aber ebenso nirgends wieder zu finden. An der Kiste ist nur das I-Inventar aufrufbar. Hier werden aber nur Waffen und Magazine gespeichert. Habe mir extra Brille, Weste etc. alles mal testweise geholt gehabt.

    • Suitcase ändern zu anderem Objekt? Alle VItems in ein Objekt?

      • Alice Kingsleigh
      • 22. Juni 2018 um 01:25

      Wünsche dir eine gute Nacht. Wenn du es geändert hast teste ich gerne direkt wenn ich es morgen sehe und gebe Rückmeldung.

    • Suitcase ändern zu anderem Objekt? Alle VItems in ein Objekt?

      • Alice Kingsleigh
      • 22. Juni 2018 um 01:19

      Nope

    • Suitcase ändern zu anderem Objekt? Alle VItems in ein Objekt?

      • Alice Kingsleigh
      • 22. Juni 2018 um 01:06

      Ergebnis: Die Kiste steht, daneben werden auch keine Items mehr grdoped, allerdings kann mit mit T nicht drauf zugreifen. Logs sagen alles in Ordnung. Habe wie du sagtest die fn_dropItems.sqf durch deine ersetzt und in der fn_keyHandler.sqf im case 20, also im T Key, nach der ersten else eingesetzt. Sieht also so aus:

      Code
      case 20: {
              if (!_alt && {!_ctrlKey} && {!dialog} && {!life_action_inUse} && {!(player getVariable ["playerSurrender",false])} && {!(player getVariable ["restrained",false])} && {!life_isknocked} && {!life_istazed}) then {
                  if (!(isNull objectParent player) && alive vehicle player) then {
                      if ((vehicle player) in life_vehicles) then {
                          [vehicle player] spawn life_fnc_openInventory;
                      };
                  } else {
                      private "_list";
                      _list = ((ASLtoATL (getPosASL player)) nearEntities [["Box_IND_Grenades_F","B_supplyCrate_F","Land_PlasticCase_01_small_F"], 2.5]) select 0;
                      if (!(isNil "_list")) then {
                          _house = nearestObject [(ASLtoATL (getPosASL _list)), "House"];
                          if (_house getVariable ["locked", false]) then {
                              hint localize "STR_House_ContainerDeny";
                          } else {
                              [_list] spawn life_fnc_openInventory;
                          };
                      } else {
                          _list = ["landVehicle","Air","Ship"];
                          if (KINDOF_ARRAY(cursorObject,_list) && {player distance cursorObject < 7} && {isNull objectParent player} && {alive cursorObject} && {!life_action_inUse}) then {
                              if (cursorObject in life_vehicles || {locked cursorObject isEqualTo 0}) then {
                                  [cursorObject] spawn life_fnc_openInventory;
                              };
                          };
                      };
                  };
              };
      Alles anzeigen
    • Suitcase ändern zu anderem Objekt? Alle VItems in ein Objekt?

      • Alice Kingsleigh
      • 22. Juni 2018 um 00:42

      Da ich grade eh am Server sitz teste ich das doch direkt mal aus :)

    • ADAC einfügen geht nicht

      • Alice Kingsleigh
      • 21. Juni 2018 um 17:04

      Schau mal in deine Client Logs rein. Da steh

      Skipping mods and signatures due to overflow flag being set.

      Malformed data. Total count differs. expected: 8, got: 9. serverip: 1483894575, serverport: 2303

      Dank Google Übersetzer heißt es auf Deutsch

      Das Überspringen von Mods und Signaturen aufgrund des gesetzten Überlauf-Flags.

      Falsche Daten. Die Gesamtanzahl ist unterschiedlich. erwartet: 8, habe: 9. serverip: 1483894575, serverport: 2303

      Irgendwas stimmt also auf jeden Fall mit den Mods nicht. Außerdem sehe ich, dass du die Missionsdatei nicht als PBO gepaackt hast, was zu empfehlen wäre. Evtl. hast du das mit dem life_server auch nicht getan? Das wird aber dein Problem wohl nicht lösen.

      Eine kurze Google Suche zum Thema "overflow flag ArmA3" ergibt eine Reihe an möglichen Problemen. Diese sind in 99 % der Fälle Clientseitig. Hast du mal versucht einen Freund auf den Server connecten zu lassen?

    • Kleine frage zu Stringtable (Performance)

      • Alice Kingsleigh
      • 21. Juni 2018 um 00:33

      Schön zu lesen, dass nicht nur ich auf diese Idee und diesen Gedankengang kam. Ich persönlich bevorzuge allerdings die Stringtable zu nutzen. Wäre es der ultimative Performancefresser würde sie wohl eher selten bis gar keine Anwendung finden. Und wie Vincent anschaulich dargestelt hat scheint es sich ja nun wirklich um irrelevante Zeiten zu handeln. Ich bin ein riesen Fan von Stringtables, denn so hast du alle Texte schnell zur Hand. Denn wem sind noch keine Schreibfehler passiert oder wollte gar irgendwas komplett umbenennen? So muss man nicht alle seine Dateien danach durchsuchen, sondern findet es immer an Ort und Stelle. Insgesamt bin ich ein großer Fan von sinnvoll aufgeteilten Scripts ohne viel Schnick Schnack.

    • [Frage/Hilfe] Geändertes Lockpickscript - keinen Schlüssel dafür Türen direkt öffnen

      • Alice Kingsleigh
      • 19. Juni 2018 um 19:50

      Danke für den Hinweis, das meins dann doch die richtige Idee der Abfrage war. Und doch genau die Sache war eine meiner zwei Fragen aus dem Eingangspost :)

    • [Frage/Hilfe] Geändertes Lockpickscript - keinen Schlüssel dafür Türen direkt öffnen

      • Alice Kingsleigh
      • 19. Juni 2018 um 17:28

      Hey,

      erstmal lieben Dank. Es ging nicht darum, Teil A oder Teil B einen Schaden hinzuzufügen, sondern egal wo ein Schaden am Fahrzeug evtl. schon vorhanden ist, die Karosserie zusätzlich kaputt zu haben. Wenn ich nur _veh setHitPointDamage ["HitHull", 0.6]; nehme funktioniert das ausschließlich bei Fahrzeugen, die noch keinen Schaden haben. Wenn ein Schaden vorbesteht macht er nur kurz einen optischen Karosserieschaden, der wenn man einsteigt oder wegguckt direkt weg ist. Und genau das würde ich eben nicht wollen. Deshalb die Überlegung der Abfrage, ob das Fahrzeug überhaupt irgendeinen Damage hat. Aber klar getDmmage ist da schon mal die bessere Variante.

    • [Frage/Hilfe] Geändertes Lockpickscript - keinen Schlüssel dafür Türen direkt öffnen

      • Alice Kingsleigh
      • 18. Juni 2018 um 22:39

      Also lange durchgetestet und nun so lala hinbekommen. Mit _veh setHitPointDamage ["HitHull", 0.6]; wird nun endlich ein leichter Karosserieschaden gesetzt, der nicht nur als Änderung der Textur gesetzt wird. Dies war, wieso auch immer, bei _veh setHit ["karoserie",0.5]; der Fall. Nun wäre es noch mega, wenn das Fahrzeug schon einen Schaden hat, z. B. kaputte Reifen, dass der Karosserieschaden dazu kommt. Das tut er mit dieser Sache so nämlich nicht. Ich habe eine Idee wie die Abfrage dazu sein müsste, aber nicht, wie ich nun den Damage eben auf den vorhandenen "draufaddiere".

      Code
      if ((damage _veh )> 0) then {
          "Hier bitte Hilfe";
      } else {
          _veh setHitPointDamage ["HitHull", 0.6];
      };
    • [Frage/Hilfe] Geändertes Lockpickscript - keinen Schlüssel dafür Türen direkt öffnen

      • Alice Kingsleigh
      • 17. Juni 2018 um 19:06

      Danke dir erst mal für deine Antwort, auch wenn meine jetzt später kommt. Das mit dem _veh lock 0; hab ich mir noch mal angeschaut und da kams mir dann. Danke. Allerding funktioniert das mit dem Damage auf deine Art ja nur Clientseitig und das Fahrzeug bekommt lediglich einen optischen Damage. So zumindest bei mir.

    • [Frage/Hilfe] Geändertes Lockpickscript - keinen Schlüssel dafür Türen direkt öffnen

      • Alice Kingsleigh
      • 14. Juni 2018 um 16:09

      Specs:

      Altis Life Version 5.0

      vServer 2 Cores, 8 GB Ram (Testserver)

      Windows Server 2016

      non modded

      Hallo,

      ich habe mich an einem Nothammer probiert. Hierzu habe ich das Lockpick Script genommen. Ich möchte, dass das Script am Ende keinen Schlüssel übergibt, das Fahrzeug dennoch öffnet und einen leichten Karosserieschaden verursacht.

      Um den Schlüssel nicht mehr zu erhalten habe ich folgendes aus dem Script genommen:

      Spoiler anzeigen


      life_vehicles pushBack _curTarget;

      Dafür habe ich dann in der fn_keyHandler.sqf geschaut, wie sich ein Fahrzeug öffnen lässt und habe folgendes eingetrage, die _curTarget Variable hab ich im gesamten Script zu _veh gemacht:

      Spoiler anzeigen

      _locked = locked _veh;

      if (_veh in life_vehicles && {player distance _veh < 20}) then {

      if (_locked isEqualTo 2) then {

      if (local _veh) then {

      _veh lock 0;

      _veh animateDoor ["door_back_R",1];

      _veh animateDoor ["door_back_L",1];

      _veh animateDoor ['door_R',1];

      _veh animateDoor ['door_L',1];

      _veh animateDoor ['Door_L_source',1];

      _veh animateDoor ['Door_rear',1];

      _veh animateDoor ['Door_rear_source',1];

      _veh animateDoor ['Door_1_source',1];

      _veh animateDoor ['Door_2_source',1];

      _veh animateDoor ['Door_3_source',1];

      _veh animateDoor ['Door_LM',1];

      _veh animateDoor ['Door_RM',1];

      _veh animateDoor ['Door_LF',1];

      _veh animateDoor ['Door_RF',1];

      _veh animateDoor ['Door_LB',1];

      _veh animateDoor ['Door_RB',1];

      _veh animateDoor ['DoorL_Front_Open',1];

      _veh animateDoor ['DoorR_Front_Open',1];

      _veh animateDoor ['DoorL_Back_Open',1];

      _veh animateDoor ['DoorR_Back_Open ',1];

      } else {

      [_veh,0] remoteExecCall ["life_fnc_lockVehicle",_veh];

      _veh animateDoor ["door_back_R",1];

      _veh animateDoor ["door_back_L",1];

      _veh animateDoor ['door_R',1];

      _veh animateDoor ['door_L',1];

      _veh animateDoor ['Door_L_source',1];

      _veh animateDoor ['Door_rear',1];

      _veh animateDoor ['Door_rear_source',1];

      _veh animateDoor ['Door_1_source',1];

      _veh animateDoor ['Door_2_source',1];

      _veh animateDoor ['Door_3_source',1];

      _veh animateDoor ['Door_LM',1];

      _veh animateDoor ['Door_RM',1];

      _veh animateDoor ['Door_LF',1];

      _veh animateDoor ['Door_RF',1];

      _veh animateDoor ['Door_LB',1];

      _veh animateDoor ['Door_RB',1];

      _veh animateDoor ['DoorL_Front_Open',1];

      _veh animateDoor ['DoorR_Front_Open',1];

      _veh animateDoor ['DoorL_Back_Open',1];

      _veh animateDoor ['DoorR_Back_Open ',1];

      };

      };

      };

      Tja was soll ich sagen einen Schlüssel gibt es nicht mehr, das Fahrzeug bleibt aber weiterhin verschlossen. Das Script wird aber angesprochen (habe es ja mit den Schlüsselvariante erfolgreich probiert) und ich habe weder im Server noch im Clientlog Fehler.

      Das zweite Problem ist der Karosserieschaden. Dafür habe ich schon zwei Varianten probiert.

      Einmal

      Spoiler anzeigen


      [_veh "HitHull", 0.5] call BIS_fnc_getHitPointDamage;

      So bekomme ich die Aussage, dass eine ] fehlt.

      Und ein mal:

      Spoiler anzeigen

      //in fn_emergencyHammer.sqf
      [_veh] remoteExecCall ["BIS_fnc_getHitPointDamage", [HitHull, 0.5],0];

      //in CfgRemoteExec.hpp

      F(BIS_fnc_getHitPointDamage,SERVER)

      Da sagt er nicht definierte Variable.

      Ich weiß nicht ob ich zu kompliziert denke aber ich komme da nicht drauf, wie es funktioniert. Totales Brett vor dem Kopf grade. Ich würde mich freuen, wenn ihr mir sagen könntet wo evtl. die Fehler sind oder mir mein Brett einhaut und zumindest zielführend Richtung richtige Variable und Aufruf helft. Anbei hab ich euch noch mal meine komplette fn_emergencyHammer.sqf gepackt.

      Lieben Dank.

      Dateien

      fn_emergencyHammer.sqf 5,4 kB – 180 Downloads
    • Player-Marker entfernen & Reichweite der Händler verkürzen

      • Alice Kingsleigh
      • 19. Mai 2018 um 22:03

      Macht euch das Leben doch nicht immer so schwer. Der Syntax ist doch klar angelegt

      Code
      object addAction [title, script, arguments, priority, showWindow, hideOnUse, shortcut, condition, radius, unconscious, selection, memoryPoint] 

      Quelle: https://community.bistudio.com/wiki/addAction

      Für das genannte Beispielt also:

      Code
      this enableSimulation false; this allowDamage false; this addAction[localize "STR_MAR_General_Store",life_fnc_weaponShopMenu,"genstore",0,false,false,"","",4];

      Man muss den (das?) Syntax bis zu dem Punkt den man braucht, hier also radius, weiterführen.


      Ein Verarbeiter (hier Kokain) sieht dann so aus:

      Code
      this enableSimulation false; this allowDamage false; this addAction[localize"STR_Process_Cocaine",life_fnc_processAction,"cocaine",0,false,false,"",' life_inv_cocaineUnprocessed > 0 && !life_is_processing && !life_action_inUse',4]; this addAction[format ["%1 ($%2)",localize (getText(missionConfigFile >> "Licenses" >> "cocaine" >> "displayName")), [(getNumber(missionConfigFile >> "Licenses" >> "cocaine" >> "price"))] call life_fnc_numberText],life_fnc_buyLicense,"cocaine",0,false,false,"",' !license_civ_cocaine && playerSide isEqualTo civilian ',4];

    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™