1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Downloads
  4. Galerie
    1. Alben
  5. Toolbox
    1. Passwort Generator
    2. Portchecker
  6. Mitglieder
    1. Mitgliedersuche
    2. Benutzer online
    3. Trophäen
    4. Team
Mo: 19 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. Tutorials & Releases

    [Tutorial] Persistent Cop Gear Saving extDB - Cop-Gear speichern

      • Altis Life
    • Noldy
    • 9. August 2015 um 03:44
    • Noldy
      Amateur
      Reaktionen
      100
      Trophäen
      11
      Beiträge
      166
      • 9. August 2015 um 03:44
      • #1

      Das Urheberrecht dieses Beitrags liegt bei chris579, am 2. Dezember 2014!

      Zitat von chris579


      Hallo Leute,


      diese Lösung stammt vom Server, den ich
      gescripted habe, der jedoch wegen des Teams leider down geht. Diese
      Lösung ist eine Eigenkreation und auch so zu deklarieren. Mit Disclaimer
      und Verweis auf mich oder auf diesen Beitrag.


      Die Idee ist für
      den Cop einen extra Button einzufügen, mit dem man dann das Gear
      speichert. Wie das ganze aufgerufen wird, kann man auch variieren. Das
      ganze ist getestet und sollte einwandfrei funktionieren (sollte ich es
      nicht irgendwo verkackt haben).


      Als Erstes fügen wir den neuen Button ins Player Menü ein:


      dialog/player_inv.hpp


      Code
      class ButtonSaveGear : life_RscButtonMenu {
                  idc = 9900;
                  text = "Save Gear";
                  onButtonClick = "[] call SOCK_fnc_syncGear;";
                  x = 0.26 + (6.25 / 19.8) + (1 / 250 / (safezoneW / safezoneH));
                  y = 0.805;
                  w = (6.25 / 40);
                  h = (1 / 25);
              };

      Dann sorgen wir dafür, dass der Button nur Cops angezeigt wird:


      core/pmenu/fn_p_openMenu.sqf


      Code
      ctrlShow[9900,false];

      Dieses muss bei jedem Case, außer West, eingefügt werden.


      Um
      zu verhindern, dass die Variable life_gear dauerhaft überschrieben
      wird, wird beim Connect und der Rückgabe der Spielerdaten vom Server
      quasi ein "Backup" erstellt, dass nur überschrieben wird, wenn denn auch
      wirklich das Gear gespeichert wird.


      core/session/fn_requestReceived.sqf


      nach


      Code
      life_gear = _playerData select 8;

      und vor


      Code
      [] call life_fnc_loadGear;

      das einfügen:


      Code
      life_persistent_gear = _playerData select 8;

      also:


      Code
      life_gear = _playerData select 8;
      life_persistent_gear = _playerData select 8;
      
      
      
      
      
      
      
      [] call life_fnc_loadGear;


      Nun benötigen wir die neue Datei "fn_syncGear.sqf"


      core/session/fn_syncGear.sqf


      Code
      /*
          Author: H4SHK3KS
          File: fn_syncGear.sqf
      
          Description: calles the function to save the cop gear
      */
      
      
      
      
      
      
      
      if(isNil "life_copGearSaved") then {life_copGearSaved = false;};
      
      
      
      
      
      
      
      if(life_copGearSaved) exitWith {hint "You can sync your cop gear only every 30 seconds!"};
      
      
      
      
      
      
      
      hint "Cop gear succesfully saved. You'll now spawn every time with this gear as long you don't overwrite your data!";
      
      
      
      
      
      
      
      [7] spawn SOCK_fnc_updatePartial;
      
      
      
      
      
      
      
      [] spawn
      {
          life_copGearSaved = true;
          sleep 30;
          life_copGearSaved = false;
      };
      Alles anzeigen

      Diese tragen wir in die Functions.h ein


      bei SOCK (ganz oben)


      Code
      class syncGear {};


      core/session/fn_updatePartial.sqf


      das hier am Ende einfügen (Case Nummer eventuell anpassen)


      Code
      case 7: {
              [true] call life_fnc_saveGear;
              _packet set[2,life_persistent_gear];
          };


      Nun das wichtigste:


      core/functions/fn_saveGear.sqf


      Zur Verständnis poste ich die gesamte Datei.


      Spoiler anzeigen
      Code
      /*
      File: fn_saveGear.sqf
      Author: Bryan "Tonic" Boardwine
      Full Gear/Y-Menu Save by Vampire
      Edited: Itsyuka and H4SHK3KS (persistent cop gear)
      
      
      
      
      
      
      
      Description:
      Saves the players gear for syncing to the database for persistence..
      */
      
      
      
      
      
      
      
      private["_return","_uItems","_bItems","_vItems","_pItems","_hItems","_yItems","_uMags","_vMags","_bMags","_pMag","_hMag","_uni","_ves","_bag","_handled","_saveGear"];
      
      
      
      
      
      
      
      _saveGear = [_this,0,false,[false]] call BIS_fnc_param;
      
      
      
      
      
      
      
      If(playerSide == west AND !(_saveGear)) then {
          _return = life_persistent_gear;
          life_persistent_gear resize 17;
      } else {
          _return = [];
      
      
      
      
      
      
      
          _return pushBack uniform player;
          _return pushBack vest player;
          _return pushBack backpack player;
          _return pushBack goggles player;
          _return pushBack headgear player;
          _return pushBack assignedITems player;
          if(playerSide == west || playerSide == civilian) then {
              _return pushBack primaryWeapon player;
              _return pushBack handgunWeapon player;
          } else {
              _return pushBack [];
              _return pushBack [];
          };
      
      
      
      
      
      
      
          _uItems = [];
          _uMags  = [];
          _bItems = [];
          _bMags  = [];
          _vItems = [];
          _vMags  = [];
          _pItems = [];
          _hItems = [];
          _uni = [];
          _ves = [];
          _bag = [];
      
      
      
      
      
      
      
          if(uniform player != "") then
          {
              {
                  if (_x in (magazines player)) then {
                      _uMags = _uMags + [_x];
                  } else {
                      _uItems = _uItems + [_x];
                  };
              } forEach (uniformItems player);
          };
      
      
      
      
      
      
      
          if(backpack player != "") then
          {
              {
                  if (_x in (magazines player)) then {
                      _bMags = _bMags + [_x];
                  } else {
                      _bItems = _bItems + [_x];
                  };
              } forEach (backpackItems player);
          };
      
      
      
      
      
      
      
          if(vest player != "") then
          {
              {
                  if (_x in (magazines player)) then {
                      _vMags = _vMags + [_x];
                  } else {
                      _vItems = _vItems + [_x];
                  };
              } forEach (vestItems player);
          };
      
      
      
      
      
      
      
          if(count (primaryWeaponMagazine player) > 0 && alive player) then
          {
              _pMag = ((primaryWeaponMagazine player) select 0);
              if(_pMag != "") then
              {
                  _uni = player canAddItemToUniform _pMag;
                  _ves = player canAddItemToVest _pMag;
                  _bag = player canAddItemToBackpack _pMag;
                  _handled = false;
                  if(_ves) then
                  {
                      _vMags = _vMags + [_pMag];
                      _handled = true;
                  };
                  if(_uni && !_handled) then
                  {
                      _uMags = _uMags + [_pMag];
                      _handled = true;
                  };
                  if(_bag && !_handled) then
                  {
                      _bMags = _bMags + [_pMag];
                      _handled = true;
                  };
              };
          };
      
      
      
      
      
      
      
          if(count (handgunMagazine player) > 0 && alive player) then
          {
              _hMag = ((handgunMagazine player) select 0);
              if(_hMag != "") then
              {
                  _uni = player canAddItemToUniform _hMag;
                  _ves = player canAddItemToVest _hMag;
                  _bag = player canAddItemToBackpack _hMag;
                  _handled = false;
                  if(_ves) then
                  {
                      _vMags = _vMags + [_hMag];
                      _handled = true;
                  };
                  if(_uni && !_handled) then
                  {
                      _uMags = _uMags + [_hMag];
                      _handled = true;
                  };
                  if(_bag && !_handled) then
                  {
                      _bMags = _bMags + [_hMag];
                      _handled = true;
                  };
              };
          };
      
      
      
      
      
      
      
          if(count (primaryWeaponItems player) > 0) then
          {
              {
                  _pItems = _pItems + [_x];
              } forEach (primaryWeaponItems player);
          };
      
      
      
      
      
      
      
          if(count (handGunItems player) > 0) then
          {
              {
                  _hItems = _hItems + [_x];
              } forEach (handGunItems player);
          };
      
      
      
      
      
      
      
          _return pushBack _uItems;
          _return pushBack _uMags;
          _return pushBack _bItems;
          _return pushBack _bMags;
          _return pushBack _vItems;
          _return pushBack _vMags;
          _return pushBack _pItems;
          _return pushBack _hItems;
      
      
      
      
      
      
      
      };
      
      
      
      
      
      
      
      _yItems = [];
      
      
      
      
      
      
      
      {
          _name = (_x select 0);
          _val = (_x select 1);
          if (_val > 0) then {
              for "_i" from 1 to _val do {
                  _yItems = _yItems + [_name];
              };
          };
      } forEach [
          ["life_inv_apple", life_inv_apple],
          ["life_inv_rabbit", life_inv_rabbit],
          ["life_inv_salema", life_inv_salema],
          ["life_inv_ornate", life_inv_ornate],
          ["life_inv_mackerel", life_inv_mackerel],
          ["life_inv_tuna", life_inv_tuna],
          ["life_inv_mullet", life_inv_mullet],
          ["life_inv_catshark", life_inv_catshark],
          ["life_inv_fishingpoles", life_inv_fishingpoles],
          ["life_inv_water", life_inv_water],
          ["life_inv_donuts", life_inv_donuts],
          ["life_inv_turtlesoup", life_inv_turtlesoup],
          ["life_inv_coffee", life_inv_coffee],
          ["life_inv_fuelF", life_inv_fuelF],
          ["life_inv_fuelE", life_inv_fuelE],
          ["life_inv_pickaxe", life_inv_pickaxe],
          ["life_inv_tbacon", life_inv_tbacon],
          ["life_inv_cone", life_inv_cone],
          ["life_inv_barrier", life_inv_barrier],
          ["life_inv_lockpick", life_inv_lockpick],
          ["life_inv_redgull", life_inv_redgull],
          ["life_inv_peach", life_inv_peach],
          ["life_inv_spikeStrip", life_inv_spikeStrip],
          ["life_inv_defusekit", life_inv_defusekit],
          ["life_inv_storagesmall", life_inv_storagesmall],
          ["life_inv_storagebig", life_inv_storagebig]
      ];
      
      
      
      
      
      
      
      _return pushBack _yItems;
      
      
      
      
      
      
      
      life_gear = _return;
      
      
      
      
      
      
      
      if (_saveGear) then { life_persistent_gear = _return};
      Alles anzeigen


      Wer neue Items eingefügt hat oder sonst etwas geändert hat, muss gucken, wie er diese Datei anpasst.


      Nun die loadGear


      core/functions/fn_loadGear.sqf


      Ganz oben muss das:


      Code
      _itemArray = life_gear;

      durch das

      Code
      if (playerSide == west) then {
          _itemArray = life_persistent_gear;
      } else {
          _itemArray = life_gear;
      };

      ersetzt werden.


      Als letzes nun noch eine Datei:


      core/medical/fn_respawned.sqf


      Das:

      Code
      switch(playerSide) do
      {
          case west: {
              _handle = [] spawn life_fnc_copLoadout;
          };
          case civilian: {
              _handle = [] spawn life_fnc_civLoadout;
          };
          case independent: {
              _handle = [] spawn life_fnc_medicLoadout;
          };
      
      
      
      
      
      
      
          waitUntil {scriptDone _handle};
      };
      Alles anzeigen

      durch das:


      Code
      switch(playerSide) do
      {
          case west: {
              _handle = [] spawn life_fnc_loadGear;
          };
          case civilian: {
              _handle = [] spawn life_fnc_civLoadout;
          };
          case independent: {
              _handle = [] spawn life_fnc_medicLoadout;
          };
      
      
      
      
      
      
      
          waitUntil {scriptDone _handle};
      };
      Alles anzeigen

      ersetzen. Nun sollte alles funktionieren. Das ganze kann auf Medics und auch ADAC erweitert werden.


      Grüße


      Christian

      Alles anzeigen

    • Max1337
      Anfänger
      Reaktionen
      10
      Trophäen
      10
      Beiträge
      28
      • 21. Mai 2016 um 17:37
      • #2

      Hat sich erledigt dieser Kommentar kann erledigt werden!

      Einmal editiert, zuletzt von Max1337 (22. Mai 2016 um 00:03)

    • Brizi Jaeger
      Profi
      Reaktionen
      291
      Trophäen
      11
      Beiträge
      1.025
      • 14. November 2016 um 21:05
      • #3

      Klappt bei mir leider nicht, bekomme unzählige Fehlermeldungen meine Logs werden halt nicht mal mehr angezeigt.
      Wisst ihr selber den Fehler?
      Habe es bei 4.4r3 installiert

    • Fritzi
      Schüler
      Reaktionen
      44
      Trophäen
      11
      Beiträge
      93
      • 15. November 2016 um 09:12
      • #4

      Hi!

      Achte mal auf die Version vom TuT!

      Wenn wir dir helfen sollen brauen wir LOGS! Hoffe du kannst die unzähligen Fehlermeldungen trotzdem Hochladen.

      MFG Fritzi X/ :*

    • Brizi Jaeger
      Profi
      Reaktionen
      291
      Trophäen
      11
      Beiträge
      1.025
      • 15. November 2016 um 21:42
      • #5

      Da sind alle Dateien noch vorhanden also sollte die Version doch keine Rolle mehr Spielen oder nicht?

    • blackfisch
      Legende
      Reaktionen
      2.944
      Trophäen
      9
      Beiträge
      5.966
      Dateien
      6
      Bilder
      63
      • 15. November 2016 um 21:58
      • #6

      Ehm... doch... und zwar eine erstaunlich große weil sich verdammt viel geändert hat 8|

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

      ______________________

    • Brizi Jaeger
      Profi
      Reaktionen
      291
      Trophäen
      11
      Beiträge
      1.025
      • 15. November 2016 um 22:33
      • #7

      Ja egal ich lass das Script einfach

    Registrieren oder Einloggen

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

    Benutzerkonto erstellen

    Tags

    • gearsave
    • copgear
    • cop gear
    • cop save

    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™