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

    Vehicle despawn script

      • Altis Life
    • Jon1
    • 25. August 2019 um 01:59
    • Erledigt
    • Jon1
      Anfänger
      Reaktionen
      2
      Trophäen
      6
      Beiträge
      68
      • 25. August 2019 um 01:59
      • #1

      Hi,

      habe ein Server auf dem man sich Fahrzeuge ausparken kann,... auf jeden fall sollen die fahrzeuge auch wieder automatisch despawnen, aktuell benutze ich dazu folgendes script : [infobox]_veh = "B_T_LSV_01_unarmed_olive_F" createVehicle position player; [/infobox]

      [infobox]_veh setVariable ["BIS_enableRandomization", false]; [/infobox]

      [infobox]_veh setDir _direction; [/infobox]

      [infobox]_veh setPos _position; [/infobox]

      [infobox]clearWeaponCargoGlobal _veh; [/infobox]

      [infobox]clearMagazineCargoGlobal _veh; [/infobox]

      [infobox]clearItemCargoGlobal _veh; [/infobox]

      [infobox]player moveInDriver _veh; [/infobox]

      [infobox]execVM "close.sqf"; [/infobox]

      [infobox]while {true} do { [/infobox]

      [infobox][_veh] spawn { [/infobox]

      [infobox] private _vehicle = param [0, objNull, [objNull]]; [/infobox]

      [infobox]waitUntil { [/infobox]

      [infobox]if (count ((crew vehicle _vehicle) select {alive _x}) isEqualTo 0) then { [/infobox]

      [infobox]_time = diag_tickTime + 40; [/infobox]

      [infobox]waitUntil { [/infobox]

      [infobox]diag_tickTime > _time count (crew vehicle _vehicle select {alive _x}) > 0 [/infobox]

      [infobox]}; [/infobox]

      [infobox]if (diag_tickTime > _time && {count (crew vehicle _vehicle select {alive _x}) isEqualTo 0}) exitWith { [/infobox]

      [infobox]deleteVehicle _vehicle; [/infobox]

      [infobox]}; [/infobox]

      [infobox]}; [/infobox]

      [infobox]!isNull _vehicle [/infobox]

      [infobox]}; [/infobox]

      [infobox]}; [/infobox]

      [infobox]sleep 30; [/infobox]

      [infobox]};[/infobox] Es spawnt einen Fahrzeug, teleportiert die Person rein, löscht alles aus dem i inventar vom fahrzeug. wenn das Fahrzeug dann 40sekunden leer steht (keine person drinne sitzt) wird es despawnt, das script verursacht aber lags wenn man z.B. 7 Fahrzeuge draußen hat dar 7 While schleifen laufen, vom sleep kann ich net weiter hoch gehen weil die Fahrzeuge sonst zu lange stehen bleiben. Deshalb suche ich ein neues, unzwar soll einfach das fahrzeug dann gelöscht werden wenn man ein neues ausparkt, so das jeder spieler nur 1 Fahrzeug gleichzeitig draußen haben kann...

      Vielen dank für eure Hilfe!

    • Alice Kingsleigh
      Profi
      Reaktionen
      329
      Trophäen
      8
      Beiträge
      1.141
      • 25. August 2019 um 14:59
      • #2

      Hallo,

      ich hab jetzt so nichts zur Hand aber ich würde das angehen, indem ich in dem Script, in dem man ausparkt, eine if-Schleife rein setzt, in der abgefragt wird, ob der Spieler schon ein Auto ausgeparkt hat und wenn ja, dass das alte dann gelöscht wird. Fertig.

    • DragonGER
      Gast
      • 25. August 2019 um 15:11
      • #3

      Also verschiedene Dinge.

      1. Waituntil ist sehr performance intensiv, wenn du es wie hier ohne sleep nutzt.

      2. Du könntest viele Ausdrücke in eine Abfrage kürzen.

      Hier wie ich es machen würde.

      Beim spawnen wird die Zeit als variable gesetzt und das Fahrzeug in ein Array hinzugefügt.

      Dann attach einen getIn eventhandler der bei jedem Einsteigen, die Zeit aktualisert.

      Dann mach eine Schleife die alle Fahrzeuge in dem Array durchgeht und wenn keiner im Fahrzeug sitzt und die Zeit dein gewolltest Limit übersteigt, entferne das Fahrzeug.

      Ggf. musst du bei dem Eventhandler wegen der Lokalität ein wenig aufpassen.

    • DragonGER
      Gast
      • 25. August 2019 um 15:37
      • #4

      hier mal ein Beispiel wie ich mir das vorstelle, zwar nicht getestet, aber so sollte es gehen.

      Code
      //call script from the player who owns the vehicle
      
      params ["_vehicle", objNull, [objNull],
          "_dir", 360, [0],
          "_pos", [0,0,0], [[]]
      ];
      
      _vehicle setVariable ["BIS_enableRandomization", false];
      _vehicle setPos _pos;
      _vehicle setDir _dir;
      
      clearWeaponCargoGlobal _vehicle;
      clearMagazineCargoGlobal _vehicle;
      clearItemCargoGlobal _vehicle;
      
      _vehicle setVariable ["last_time_used", time, true];
      player moveInDriver _vehicle;
      
      [_vehicle, {
          params ["_vehicle", objNull, [objNull]];
          _vehicle addEventHandler ["GetIn", {
              params ["_vehicle", "_role", "_unit", "_turret"];
              _vehicle setVariable ["last_time_used", time];
          }];
      }] remoteExec ["BIS_fnc_call", 2];
      
      [_vehicle, {
          params ["_vehicle", objNull, [objNull]];
          _vehicle addEventHandler ["GetOut", {
              params ["_vehicle", "_role", "_unit", "_turret"];
              _vehicle setVariable ["last_time_used", time];
          }];
      }] remoteExec ["BIS_fnc_call", 2];
      
      [_vehicle, {
          params ["_vehicle", objNull, [objNull]];
          Spawned_Vehicles pushBack _vehicle;
      }] remoteExec ["BIS_fnc_call", 2];
      
      //this one needs to be started on mission begin on the server side
      #define TIMEOUT 60
      #define MAX_TIME_UNUSED 60 * 120  //the vehicle must be 2h empty before removal
      Spawned_Vehicles = [];
      while {true} do {
          private _vehicles = Spawned_Vehicles; //copying a global array to local is much faster than using the global array
          {
              if(!isNull _x) then {
                  if(({alive _x } count (crew _x)) < 1 && {(_vehicle getVariable["last_time_used", time] + MAX_TIME_UNUSED) < time}) then {
                      deleteVehicle _x;
                      Spawned_Vehicles deleteAt _forEachIndex;
                  };
              } else {
                  Spawned_Vehicles deleteAt _forEachIndex; //cleanup array from wrecks
              };
          } forEach Spawned_Vehicles;
          Spawned_Vehicles = _vehicles; //copy back possible changes to the global array
          sleep TIMEOUT;
      };
      Alles anzeigen

      Edit: Es ist Schwachsinn 3 remoteExec calls zu machen. Pack alles in eines, das reduziert den Networktraffic noch mal.

      Wenn du den Networktraffic noch mehr reduzieren willst, BEFilter und RemoteExec Filter verwendest, solltest was im remoteExec Teil steht in eine eigene Funktion packen.

      Edit Edit: Mir ist grade eingefallen, dass das hier ja ein Life-Server ist. Dann solltest du noch im selben Schritt, wo das Fahrzeug vernichtet wird, es beim Eigentümer in der Datenbank zurücksetzen. Sonst kann er es nicht wieder ausparken und es geht verloren.

      3 Mal editiert, zuletzt von DragonGER (25. August 2019 um 15:46)

    • Henne
      Nerd
      Reaktionen
      155
      Trophäen
      7
      Beiträge
      840
      Bilder
      7
      • 25. August 2019 um 17:07
      • #5

      Erstelle eine Liste mit einem Eintrag für jedes Fahrzeuges.

      Nun prüfst du in einer Schleife alle X Sekunden alle Einträge.

      Wenn das Fahrzeug leer ist, setzt du einen Counter um X nach oben.

      Ist das Fahrzeug besetzt, wird der Counter auf 0 gesetzt.

      Hat der Counter die gewünschten Sekunden erreicht, entfernst du das Fahrzeug.

      Das ist eine Schleife. Um so genauer (kürzeres sleep), um so mehr Leistung benötigt das Script.

      Mit wievielen Fahrzeugen rechnest du eigentlich so ungefähr?


      Achja, Alice Kingsleigh -> http://if-schleife.de/

    • Jon1
      Anfänger
      Reaktionen
      2
      Trophäen
      6
      Beiträge
      68
      • 26. August 2019 um 01:30
      • #6
      Zitat von DragonGER

      hier mal ein Beispiel wie ich mir das vorstelle, zwar nicht getestet, aber so sollte es gehen.

      Code
      //call script from the player who owns the vehicle
      
      params ["_vehicle", objNull, [objNull],
          "_dir", 360, [0],
          "_pos", [0,0,0], [[]]
      ];
      
      _vehicle setVariable ["BIS_enableRandomization", false];
      _vehicle setPos _pos;
      _vehicle setDir _dir;
      
      clearWeaponCargoGlobal _vehicle;
      clearMagazineCargoGlobal _vehicle;
      clearItemCargoGlobal _vehicle;
      
      _vehicle setVariable ["last_time_used", time, true];
      player moveInDriver _vehicle;
      
      [_vehicle, {
          params ["_vehicle", objNull, [objNull]];
          _vehicle addEventHandler ["GetIn", {
              params ["_vehicle", "_role", "_unit", "_turret"];
              _vehicle setVariable ["last_time_used", time];
          }];
      }] remoteExec ["BIS_fnc_call", 2];
      
      [_vehicle, {
          params ["_vehicle", objNull, [objNull]];
          _vehicle addEventHandler ["GetOut", {
              params ["_vehicle", "_role", "_unit", "_turret"];
              _vehicle setVariable ["last_time_used", time];
          }];
      }] remoteExec ["BIS_fnc_call", 2];
      
      [_vehicle, {
          params ["_vehicle", objNull, [objNull]];
          Spawned_Vehicles pushBack _vehicle;
      }] remoteExec ["BIS_fnc_call", 2];
      
      //this one needs to be started on mission begin on the server side
      #define TIMEOUT 60
      #define MAX_TIME_UNUSED 60 * 120  //the vehicle must be 2h empty before removal
      Spawned_Vehicles = [];
      while {true} do {
          private _vehicles = Spawned_Vehicles; //copying a global array to local is much faster than using the global array
          {
              if(!isNull _x) then {
                  if(({alive _x } count (crew _x)) < 1 && {(_vehicle getVariable["last_time_used", time] + MAX_TIME_UNUSED) < time}) then {
                      deleteVehicle _x;
                      Spawned_Vehicles deleteAt _forEachIndex;
                  };
              } else {
                  Spawned_Vehicles deleteAt _forEachIndex; //cleanup array from wrecks
              };
          } forEach Spawned_Vehicles;
          Spawned_Vehicles = _vehicles; //copy back possible changes to the global array
          sleep TIMEOUT;
      };
      Alles anzeigen

      Edit: Es ist Schwachsinn 3 remoteExec calls zu machen. Pack alles in eines, das reduziert den Networktraffic noch mal.

      Wenn du den Networktraffic noch mehr reduzieren willst, BEFilter und RemoteExec Filter verwendest, solltest was im remoteExec Teil steht in eine eigene Funktion packen.

      Edit Edit: Mir ist grade eingefallen, dass das hier ja ein Life-Server ist. Dann solltest du noch im selben Schritt, wo das Fahrzeug vernichtet wird, es beim Eigentümer in der Datenbank zurücksetzen. Sonst kann er es nicht wieder ausparken und es geht verloren.

      Jo hat funktioniert! vielen Dank!

    • Jon1
      Anfänger
      Reaktionen
      2
      Trophäen
      6
      Beiträge
      68
      • 26. August 2019 um 01:31
      • #7
      Zitat von Henne079

      Erstelle eine Liste mit einem Eintrag für jedes Fahrzeuges.

      Nun prüfst du in einer Schleife alle X Sekunden alle Einträge.

      Wenn das Fahrzeug leer ist, setzt du einen Counter um X nach oben.

      Ist das Fahrzeug besetzt, wird der Counter auf 0 gesetzt.

      Hat der Counter die gewünschten Sekunden erreicht, entfernst du das Fahrzeug.

      Das ist eine Schleife. Um so genauer (kürzeres sleep), um so mehr Leistung benötigt das Script.

      Mit wievielen Fahrzeugen rechnest du eigentlich so ungefähr?


      Achja, Alice Kingsleigh -> http://if-schleife.de/

      Alles anzeigen

      also so max. 20 spieler, jeder so 2fahrzeuge pro minute, da jetzt aber jedes direkt gelöscht wird passt das!

    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

    • script
    • vehicles
    • unit

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