mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-13 19:52:38 +03:00
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.
83 lines
3.6 KiB
Plaintext
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;
|
|
}; |