Files
DayZ-Epoch/SQF/dayz_server/compile/server_onPlayerDisconnect.sqf
ebaydayz 577892c40e Roll back to old dayz_objectUID2
1.8.7 dayz_objectUID2 seems to generate keys that are too long for the
Epoch hive. So, we will keep the old method for now.
2016-04-13 18:41:36 -04:00

83 lines
3.6 KiB
Plaintext

private ["_playerObj","_myGroup","_playerUID","_playerPos","_playerName","_puid","_timeout","_message"];
_playerUID = _this select 0;
_playerName = _this select 1;
_playerObj = nil;
_playerPos = [];
//Search all players for the object that matches our playerUID
{
_puid = [_x] call FNC_GetPlayerUID;
if (_puid == _playerUID) exitWith {_playerObj = _x; _playerPos = getPosATL _playerObj;};
} count playableUnits;
//If for some reason the playerObj does not exist, exit the disconnect system.
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];
//If the playerObj exists run all sync systems
_characterID = _playerObj getVariable ["characterID", "?"];
_lastDamage = _playerObj getVariable ["noatlf4",0];
_sepsis = _playerObj getVariable ["USEC_Sepsis",false];
_lastDamage = round(diag_ticktime - _lastDamage);
//Readded Logout debug info.
diag_log format["Player UID#%1 CID#%2 %3 as %4, logged off at %5%6",
getPlayerUID _playerObj, _characterID, _playerObj call fa_plr2str, typeOf _playerObj,
_playerPos call fa_coor2str,
if ((_lastDamage > 5 && (_lastDamage < 30)) && {(alive _playerObj) && (_playerObj distance (getMarkerpos "respawn_west") >= 2000)}) then {" while in combat ("+str(_lastDamage)+" seconds left)"} else {""}
];
//Make sure we know the ID of the object before we try and sync any info to the DB
if (_characterID != "?") exitWith {
//If the player has sepsis before logging off give them infected status.
if (_sepsis) then {_playerObj setVariable ["USEC_infected",true,true];};
//Record Player Login/LogOut
[_playerUID,_characterID,2] call dayz_recordLogin;
//If the player object is inside a vehicle eject the player.
if (vehicle _playerObj != _playerObj) then {_playerObj action ["eject",vehicle _playerObj];};
//Punish combat log
_timeout = _playerObj getVariable["combattimeout",0];
if (_timeout >= diag_tickTime) then {
_playerObj setVariable ["NORRN_unconscious",true,true]; // Set status to unconscious
_playerObj setVariable ["unconsciousTime",150,true]; // Set knock out timer to 150 seconds
//_playerObj setVariable ["USEC_injured",true]; // Set status to bleeding
//_playerObj setVariable ["USEC_BloodQty",3000]; // Set blood to 3000
diag_log format["PLAYER COMBAT LOGGED: %1(%4) (with %2s combat time remaining) at location %3",_playerName,(_timeout - diag_tickTime),_playerPos,_playerUID];
_message = format["PLAYER COMBAT LOGGED: %1",_playerName];
[nil, nil, rTitleText, _message, "PLAIN"] call RE; // Message whole server
};
//If player object is alive sync and remove the body. If ghosting is active add the player id to the array.
if (alive _playerObj) then {
[_playerObj,nil,true] 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];
};
};
};
//Scan the area near the player logout position and save all objects.
{[_x,"gear"] call server_updateObject} count (nearestObjects [_playerPos,DayZ_GearedObjects,10]);
};
if (isNull _playerObj) then {diag_log "server_onPlayerDisconnect called with Null player object";};
//Remove the object.
if (!isNull _playerObj) then {
_myGroup = group _playerObj;
deleteVehicle _playerObj;
deleteGroup _myGroup;
};