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
Do: 22 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] Fix Bot Spawn nach Spieler Disconnect

      • Altis Life
    • moeck
    • 17. März 2017 um 07:47
    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 17. März 2017 um 07:47
      • #1

      Moin,

      da wir gestern nach dem Update ein paar Probleme hatten möchte ich zu mindestens die Lösung für das Bot Spawn Problem hier mal dokumentieren. Wir nutzen die 3.1.4.8 und dort ist es so, dass beim Spieler disconnect die "Leichen" der Spieler aufgeräumt werden. Allerdings hat sich das Verhalten mit dem Update geändert und es es werden keine Leichen mehr erzeugt sondern die KI übernimmt den Spieler. Ist grundsätzlich erstmal nicht schlimm, allerdings werden beim Killen der Bots die Waffen gedroppt und man kann diese aufnehmen.

      Wie immer gilt, dass das Tutorial ohne meine Zustimmung nicht weitergegeben bzw. in andere Foren übertragen werden darf.

      Gut fangen wir mal an. Es sind 2 Ändrerungen im life_server für den Fix notwendig.

      1. Änderung in der fn_clientDisconnect.sqf

      C: fn_clientDisconnect.sqf
      /*
          Author: Bryan "Tonic" Boardwine
          modified by moeck
          Description:
          When a player disconnect it goes through the all the dead bodies
          and removes bodies owned by the server. This is built for the new
          medical / EMS system.
      */
      private["_uid","_name","_unit","_side","_id"];
      _unit = _this select 0;
      if (isNull _unit) exitWith {};
      _id = _this select 1;
      _uid = _this select 2;
      _name = _this select 3;
      _side = side _unit;
      
      {
          _pid = _x getVariable["steam64ID",""];
          if(_uid == _pid OR _pid == "" OR owner _x < 3) then {
              _containers = nearestObjects[_x,["WeaponHolderSimulated"],5]; //Fetch list of containers (Simulated = weapons)
              {deleteVehicle _x;} foreach _containers; //Delete the containers.
              deleteVehicle _x; //Get rid of the corpse.
          };
      } foreach allDeadMen;
      
      {
          _pid = _x getVariable["steam64ID",""];
          if(_uid == _pid OR _pid == "" OR owner _x < 3) then {
              _containers = nearestObjects[_x,["WeaponHolderSimulated"],5]; //Fetch list of containers (Simulated = weapons)
              {deleteVehicle _x;} foreach _containers; //Delete the containers.
              deleteVehicle _x; //Get rid of the corpse.
          }
      } foreach playableUnits;
      
      _weapons = nearestObjects[_unit,["WeaponHolderSimulated"],5];
      {deleteVehicle _x;} forEach _weapons;
      deleteVehicle _unit;
      
      _uid spawn TON_fnc_houseCleanup;
      
      //Empty group cleanup - Spectator bug fix
      {
          if(count units _x == 0) then {
          deleteGroup _x;
          };
      } forEach allGroups;
      Alles anzeigen

      Geändert habe ich hier die Variablendefinition, durch hinzufügen von _unit, _side, id. Des Weiteren habe ich die Zeilen 35 - 37 hinzugefügt.

      2. Anpassung in der init.sqf

      Sucht nach der Zeile:

      Code: init.sqf
      _onDisconnect = addMissionEventHandler ["HandleDisconnect",{[_uid,_id,_name,_unit] call TON_fnc_clientDisconnect}]; //Colin's Merge

      und ersetzt diese durch

      Code: init.sqf
      addMissionEventHandler ["HandleDisconnect",{_this call TON_fnc_clientDisconnect; false;}];

      So und schon sind wir fertig 8). Wir haben das Ganze bereits erfolgreich heute Nacht getestet.

      In diesem Sinne noch einen schönen Tag und viel Erfolg falls ihr den Fix benötigt.

      Gruß,

      moeck

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • Roberto
      Anfänger
      Reaktionen
      1
      Trophäen
      9
      Beiträge
      72
      • 25. März 2017 um 09:39
      • #2

      Bei mir Funktioniert es leider nicht. Wenn ich mich umlogge oder Leute Disconecten bleiben sie auf der Map stehen und werden mir im Admin Menü 2 Mal angezeigt. Nach ein paar Minuten Laufen die Bots Weg und Schmeißen sich dann auf den Boden. ( Bild ). Wenn ich die Bots Töte sind sie von der Map weg und aus dem Admin Menü. ( Bild , Bild )

      Code: init.sqf
      #define __CONST__(var1,var2) var1 = compileFinal (if(typeName var2 == "STRING") then {var2} else {str(var2)})
      DB_Async_Active = false;
      DB_Async_ExtraLock = false;
      life_server_isReady = false;
      publicVariable "life_server_isReady";
      
      [] execVM "\life_server\functions.sqf";
      [] execVM "\life_server\eventhandlers.sqf";
      
      //I am aiming to confuse people including myself, ignore the ui checks it's because I test locally.
      
      _extDB = false;
      
      //Only need to setup extDB once.
      if(isNil {uiNamespace getVariable "life_sql_id"}) then {
          life_sql_id = round(random(9999));
          __CONST__(life_sql_id,life_sql_id);
          uiNamespace setVariable ["life_sql_id",life_sql_id];
      
          //extDB Version
          _result = "extDB" callExtension "9:VERSION";
          diag_log format ["extDB: Version: %1", _result];
          if(_result == "") exitWith {};
          if ((parseNumber _result) < 14) exitWith {diag_log "Error: extDB version 14 or Higher Required";};
      
          //Initialize the database
          _result = "extDB" callExtension "9:DATABASE:Database2";
          if(_result != "[1]") exitWith {diag_log "extDB: Error with Database Connection";};
          _result = "extDB" callExtension format["9:ADD:DB_RAW_V2:%1",(call life_sql_id)];
          if(_result != "[1]") exitWith {diag_log "extDB: Error with Database Connection";};
          "extDB" callExtension "9:LOCK";
          _extDB = true;
          diag_log "extDB: Connected to Database";
      } else {
          life_sql_id = uiNamespace getVariable "life_sql_id";
          __CONST__(life_sql_id,life_sql_id);
          _extDB = true;
          diag_log "extDB: Still Connected to Database";
      };
      
      //Broadbase PV to Clients, to warn about extDB Error.
      //    exitWith to stop trying to run rest of Server Code
      if (!_extDB) exitWith {
          life_server_extDB_notLoaded = true;
          publicVariable "life_server_extDB_notLoaded";
          diag_log "extDB: Error checked extDB/logs for more info";
      };
      
      //Run procedures for SQL cleanup on mission start.
      ["CALL resetLifeVehicles",1] spawn DB_fnc_asyncCall;
      ["CALL deleteDeadVehicles",1] spawn DB_fnc_asyncCall;
      ["CALL deleteOldHouses",1] spawn DB_fnc_asyncCall;
      ["CALL deleteOldGangs",1] spawn DB_fnc_asyncCall; //Maybe delete old gangs
      
      life_adminlevel = 0;
      life_medicLevel = 0;
      life_coplevel = 0;
      
      //Null out harmful things for the server.
      __CONST__(JxMxE_PublishVehicle,"No");
      
      //[] execVM "\life_server\fn_initHC.sqf";
      
      life_radio_west = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []];
      life_radio_civ = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []];
      life_radio_indep = radioChannelCreate [[0, 0.95, 1, 0.8], "Side Channel", "%UNIT_NAME", []];
      
      serv_sv_use = [];
      
      fed_bank setVariable["safe",(count playableUnits),true];
      
      //General cleanup for clients disconnecting.
      _onDisconnect = ["SERV_onClientDisconnect","onPlayerDisconnected",{[_uid,_id,_name] call TON_fnc_clientDisconnect}] call BIS_fnc_addStackedEventHandler;
      //_onDisconnect = addMissionEventHandler ["HandleDisconnect",{[_uid,_id,_name,_unit] call TON_fnc_clientDisconnect}]; //Colin's Merge
      addMissionEventHandler ["HandleDisconnect",{_this call TON_fnc_clientDisconnect; false;}];
      
      [] spawn TON_fnc_cleanup;
      life_gang_list = [];
      publicVariable "life_gang_list";
      life_wanted_list = [];
      client_session_list = [];
      
      [] execFSM "\life_server\cleanup.fsm";
      
      [] spawn
      {
          private["_logic","_queue"];
          while {true} do
          {
              sleep (30 * 60);
              _logic = missionnamespace getvariable ["bis_functions_mainscope",objnull];
              _queue = _logic getvariable "BIS_fnc_MP_queue";
              _logic setVariable["BIS_fnc_MP_queue",[],TRUE];
          };
      };
      
      [] spawn TON_fnc_federalUpdate;
      
      [] spawn
      {
          while {true} do
          {
              sleep (30 * 60);
              {
                  _x setVariable["sellers",[],true];
              } foreach [Dealer_1,Dealer_2,Dealer_3];
          };
      };
      
      //Strip NPC's of weapons
      {
          if(!isPlayer _x) then {
              _npc = _x;
              {
                  if(_x != "") then {
                      _npc removeWeapon _x;
                  };
              } foreach [primaryWeapon _npc,secondaryWeapon _npc,handgunWeapon _npc];
          };
      } foreach allUnits;
      
      [] spawn TON_fnc_initHouses;
      
      //Lockup the dome
      private["_dome","_rsb"];
      _dome = nearestObject [[16019.5,16952.9,0],"Land_Dome_Big_F"];
      _rsb = nearestObject [[16019.5,16952.9,0],"Land_Research_house_V1_F"];
      
      for "_i" from 1 to 3 do {_dome setVariable[format["bis_disabled_Door_%1",_i],1,true]; _dome animate [format["Door_%1_rot",_i],0];};
      _rsb setVariable["bis_disabled_Door_1",1,true];
      _rsb allowDamage false;
      _dome allowDamage false;
      life_server_isReady = true;
      publicVariable "life_server_isReady"
      Alles anzeigen
      Code: fn_clientDisconnect.sqf
      /*
          Author: Bryan "Tonic" Boardwine
          
          Description:
          When a player disconnect it goes through the all the dead bodies
          and removes bodies owned by the server. This is built for the new
          medical / EMS system.
      */
      private["_uid","_name","_unit","_side","_id"];
      _uid = _this select 0;
      _name = _this select 2;
      _name = _this select 3;
      _side = side _unit;
      {
          _pid = _x getVariable["steam64ID",""];
          if(_uid == _pid OR _pid == "" OR owner _x < 3) then {
              _containers = nearestObjects[_x,["WeaponHolderSimulated"],5]; //Fetch list of containers (Simulated = weapons)
              {deleteVehicle _x;} foreach _containers; //Delete the containers.
              deleteVehicle _x; //Get rid of the corpse.
          };
      } foreach allDeadMen;
      
      {
       _pid = _x getVariable["steam64ID",""];
       if(_uid == _pid OR _pid == "" OR owner _x < 3) then {
       _containers = nearestObjects[_x,["WeaponHolderSimulated"],5]; //Fetch list of containers (Simulated = weapons)
       {deleteVehicle _x;} foreach _containers; //Delete the containers.
       deleteVehicle _x; //Get rid of the corpse.
       }
      } foreach playableUnits;
      
      _weapons = nearestObjects[_unit,["WeaponHolderSimulated"],5];
      {deleteVehicle _x;} forEach _weapons;
      deleteVehicle _unit;
      _uid spawn TON_fnc_houseCleanup;
      //Empty group cleanup - Spectator bug fix
      {
       if(count units _x == 0) then {
       deleteGroup _x;
       };
      } forEach allGroups;
      
      _uid spawn TON_fnc_houseCleanup;
      Alles anzeigen

    • Roberto
      Anfänger
      Reaktionen
      1
      Trophäen
      9
      Beiträge
      72
      • 25. März 2017 um 10:11
      • #3

      Ok geht jetzt habe Vergessen die life_server.pbo zu bearbeiten und dann hochzuladen.

    • AvirexDE
      Meister
      Reaktionen
      784
      Beiträge
      1.917
      Dateien
      1
      Bilder
      39
      • 19. Oktober 2017 um 21:58
      • #4

      Wie sieht das in der 5.0 aus funktioniert das dort auch so oder was müsste man umändern?

      ●●●▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄●●●

      ▀ Freundliche Grüße ▀

      giphy.gif

      ●●●▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄●●●

    • moeck
      Erleuchteter
      Reaktionen
      632
      Trophäen
      9
      Beiträge
      3.160
      Bilder
      9
      • 19. Oktober 2017 um 22:41
      • #5

      das ist aus der 5er gewesen

      Signatur? Was ist eine Signatur? Kann man das essen?

      Bitte beachten: Ich gebe keinen Support über private Nachrichten!


      Ganz wichtig: [Leitfaden] Wie frage Ich richtig um Hilfe?

      Nicht zu vergessen [Tutorial/Selbst-Test] Sollte ich einen Life Server eröffnen ?

    • AvirexDE
      Meister
      Reaktionen
      784
      Beiträge
      1.917
      Dateien
      1
      Bilder
      39
      • 20. Oktober 2017 um 10:33
      • #6
      Zitat von moeck

      das ist aus der 5er gewesen

      Achso das ist schon drinne meinste ah OK:thumbup:

      ●●●▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄●●●

      ▀ Freundliche Grüße ▀

      giphy.gif

      ●●●▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄●●●

    Registrieren oder Einloggen

    Du bist noch kein Mitglied von NodeZone.net? Registriere dich kostenlos und werde Teil einer großartigen Community!

    Registrieren

    Ähnliche Themen

    • Arma 3 Altis Life 5.0.0 Installationsprobleme

      • ViRazY
      • 4. Mai 2017 um 11:44
      • Hilfeforum

    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™