From 8627b4b627285f9edadcd7ea578afff017a4d19b Mon Sep 17 00:00:00 2001 From: "[VB]AWOL" Date: Sun, 17 Nov 2013 19:39:17 -0600 Subject: [PATCH] disconnect method from DayZ CE 1.8 --- .../compile/server_onPlayerDisconnect.sqf | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/SQF/dayz_server/compile/server_onPlayerDisconnect.sqf b/SQF/dayz_server/compile/server_onPlayerDisconnect.sqf index 03bcb6b2c..18a5a3fdb 100644 --- a/SQF/dayz_server/compile/server_onPlayerDisconnect.sqf +++ b/SQF/dayz_server/compile/server_onPlayerDisconnect.sqf @@ -1,66 +1,66 @@ -private ["_invehicle","_isplayernearby","_object","_myGroup","_id","_playerID","_playerName","_characterID","_playerIDtoarray","_timeout","_message","_magazines"]; -_playerID = _this select 0; +private ["_invehicle","_isplayernearby","_playerObj","_myGroup","_id","_playerUID","_playerName","_characterID","_timeout","_message","_magazines","_playerPos"]; +_playerUID = _this select 0; _playerName = _this select 1; -_object = call compile format["player%1",_playerID]; -_characterID = _object getVariable ["CharacterID","0"]; -_timeout = _object getVariable["combattimeout",0]; +_playerObj = nil; +_playerPos = []; +{ + if ((getPlayerUID _x) == _playerUID) exitWith { _playerObj = _x; _playerPos = getPosATL _playerObj;}; +} forEach playableUnits; -_playerIDtoarray = []; -_playerIDtoarray = toArray _playerID; - -_invehicle = false; - -if (vehicle _object != _object) then { - _object action ["eject", vehicle _object]; - _invehicle = true; +if (isNil "_playerObj") exitWith { + diag_log format["%1: nil player object, _this:%2", __FILE__, _this]; }; -if (59 in _playerIDtoarray) exitWith { }; +diag_log format["get: %1 (%2), sent: %3 (%4)",typeName (getPlayerUID _playerObj), getPlayerUID _playerObj, typeName _playerUID, _playerUID]; -if ((_timeout - time) > 0) then { +if (!isNull _playerObj) then { - _object setVariable["NORRN_unconscious",true, true]; - _object setVariable["unconsciousTime",300,true]; + _characterID = _playerObj getVariable ["CharacterID","0"]; + _timeout = _playerObj getVariable["combattimeout",0]; + + _invehicle = false; + + if (vehicle _playerObj != _playerObj) then { + _playerObj action ["eject", vehicle _playerObj]; + _invehicle = true; + }; + + if ((_timeout - time) > 0) then { + + _playerObj setVariable["NORRN_unconscious",true, true]; + _playerObj setVariable["unconsciousTime",300,true]; - diag_log format["COMBAT LOGGED: %1 (%2)", _playerName,_timeout]; - //diag_log format["SET UNCONCIOUSNESS: %1", _playerName]; + diag_log format["COMBAT LOGGED: %1 (%2)", _playerName,_timeout]; + //diag_log format["SET UNCONCIOUSNESS: %1", _playerName]; - // Message whole server when player combat logs - _message = format["PLAYER COMBAT LOGGED: %1",_playerName]; - [nil,nil,"per",rTITLETEXT,_message,"PLAIN DOWN"] call RE; -}; + // Message whole server when player combat logs + _message = format["PLAYER COMBAT LOGGED: %1",_playerName]; + [nil,nil,"per",rTITLETEXT,_message,"PLAIN DOWN"] call RE; + }; -//dayz_disco = dayz_disco - [_playerID]; -if (!isNull _object) then { + diag_log format["DISCONNECT: %1 (%2) Object: %3, _characterID: %4", _playerName,_playerUID,_playerObj,_characterID]; - diag_log format["DISCONNECT: %1 (%2) Object: %3, _characterID: %4", _playerName,_playerID,_object,_characterID]; + _id = [_playerUID,_characterID,2] spawn dayz_recordLogin; - _id = [_playerID,_characterID,2] spawn dayz_recordLogin; + if (alive _playerObj) then { - if (alive _object) then { - - _isplayernearby = (DZE_BackpackGuard and!_invehicle and ({isPlayer _x} count (_object nearEntities ["AllVehicles", 5]) > 1)); + _isplayernearby = (DZE_BackpackGuard and!_invehicle and ({(isPlayer _x) and (alive _x)} count (_playerPos nearEntities ["AllVehicles", 5]) > 1)); // prevent saving more than 20 magazine items - _magazines = [(magazines _object),20] call array_reduceSize; + _magazines = [(magazines _playerObj),20] call array_reduceSize; - [_object,_magazines,true,true,_isplayernearby] call server_playerSync; + [_playerObj,_magazines,true,true,_isplayernearby] call server_playerSync; // maybe not needed just testing - _object removeAllEventHandlers "MPHit"; - _object enableSimulation false; - _object removeAllEventHandlers "HandleDamage"; - _object removeAllEventHandlers "Killed"; - _object removeAllEventHandlers "Fired"; - _object removeAllEventHandlers "FiredNear"; + _playerObj removeAllMPEventHandlers "mphit"; - _myGroup = group _object; - deleteVehicle _object; + _myGroup = group _playerObj; + deleteVehicle _playerObj; deleteGroup _myGroup; } else { //Update Vehicle { [_x,"gear"] call server_updateObject; - } foreach (nearestObjects [getPosATL _object, dayz_updateObjects, 10]); + } foreach (nearestObjects [_playerPos, dayz_updateObjects, 10]); }; }; \ No newline at end of file