Files
DayZ-Epoch/SQF/dayz_server/compile/server_onPlayerDisconnect.sqf
2016-02-29 00:29:23 -05:00

107 lines
3.6 KiB
Plaintext

private ["_invehicle","_isplayernearby","_playerObj","_myGroup","_PUID","_id","_playerUID","_playerName","_characterID","_timeout","_message","_magazines","_playerPos"];
_playerUID = _this select 0;
_playerName = _this select 1;
_playerObj = nil;
_playerPos = [];
{
_PUID = [_x] call FNC_GetPlayerUID;
if (_PUID == _playerUID) exitWith { _playerObj = _x; _playerPos = getPosATL _playerObj;};
} count playableUnits;
if (isNil "_playerObj") then {
diag_log format["nil player object attempting PV, :%1", _this];
// fall back to using PV for now so we have a better chance at finding the player
_playerObj = call compile format["PVDZE_player%1",_playerUID];
};
if (isNil "_playerObj") exitWith {
diag_log format["%1: nil player object, _this:%2", __FILE__, _this];
};
_PUID = [_playerObj] call FNC_GetPlayerUID;
diag_log format["get: %1 (%2), sent: %3 (%4)",typeName _PUID, _PUID, typeName _playerUID, _playerUID];
_characterID = _playerObj getVariable["characterID", "?"];
_lastDamage = _playerObj getVariable["noatlf4",0];
_Sepsis = _playerObj getVariable["USEC_Sepsis",false];
if (_characterID != "?") exitwith {
_playerPos = getPosATL _playerObj;
//_characterID = _playerObj getVariable ["CharacterID","0"];
_timeout = _playerObj getVariable["combattimeout",0];
//If the player has sepsis before logging off lets give them infected status.
if (_Sepsis) then {
_playerObj setVariable["USEC_infected",true,true];
};
//Record Player Login/LogOut
[_playerUID,_characterID,2] call dayz_recordLogin;
_invehicle = false;
if (vehicle _playerObj != _playerObj) then {
_playerObj action ["eject", vehicle _playerObj];
_invehicle = true;
diag_log format["LOGOUT IN VEHICLE: %1 at location %2", _playerName,(getPosATL _playerObj)];
};
if ((_timeout - time) > 0) then {
_playerObj setVariable["NORRN_unconscious",true, true];
_playerObj setVariable["unconsciousTime",300,true];
diag_log format["COMBAT LOGGED: %1 (%2) at location %3", _playerName,_timeout,(getPosATL _playerObj)];
//diag_log format["SET UNCONCIOUSNESS: %1", _playerName];
// Message whole server when player combat logs
_message = format["PLAYER COMBAT LOGGED: %1",_playerName];
[nil, nil, rTitleText, _message, "PLAIN"] call RE;
};
diag_log format["DISCONNECT: %1 (%2) Object: %3, _characterID: %4 at loc %5", _playerName,_playerUID,_playerObj,_characterID, (getPosATL _playerObj)];
_id = [_playerUID,_characterID,2] spawn dayz_recordLogin;
if (alive _playerObj) then {
//[_playerObj,nil,true] call server_playerSync;
_isplayernearby = (DZE_BackpackGuard && !_invehicle && ({(isPlayer _x) && (alive _x)} count (_playerPos nearEntities ["AllVehicles", 5]) > 1));
// prevent saving more than 20 magazine items
_magazines = [(magazines _playerObj),20] call array_reduceSize;
[_playerObj,_magazines,true,true,_isplayernearby] call server_playerSync;
if (dayz_enableGhosting) then {
//diag_log format["GhostPlayers: %1, ActivePlayers: %2",dayz_ghostPlayers,dayz_activePlayers];
if (!(_playerUID in dayz_ghostPlayers)) then {
dayz_ghostPlayers set [count dayz_ghostPlayers, _playerUID];
dayz_activePlayers set [count dayz_activePlayers, [_playerUID,diag_ticktime]];
//diag_log format["playerID %1 added to ghost list",_playerUID];
};
};
// remove player
_playerObj call dayz_removePlayerOnDisconnect;
};
//Update Vehicle
{
[_x,"gear"] call server_updateObject;
} count (nearestObjects [_playerPos, DayZ_GearedObjects, 10]);
};
if (isNull _playerObj) then { diag_log("Player Object does not esist"); };
//Lets remove the object.
if (!isNull _playerObj) then {
_myGroup = group _playerObj;
deleteVehicle _playerObj;
deleteGroup _myGroup;
};