mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-13 19:52:38 +03:00
Added new Login Processing check for Ghost mode.
Players who alt f4 while in ghost mode should no longer lose position
updates.
Vanilla development commit:
24194861aa
This commit is contained in:
@@ -5,13 +5,13 @@ _playerName = _this select 1;
|
||||
_playerObj = nil;
|
||||
_playerPos = [];
|
||||
|
||||
//Search all players for the object that matches our playerUID
|
||||
//Lets search all playerable units looking for the objects that matches our playerUID
|
||||
{
|
||||
_puid = [_x] call FNC_GetPlayerUID;
|
||||
if (_puid == _playerUID) exitWith {_playerObj = _x; _playerPos = getPosATL _playerObj;};
|
||||
} count playableUnits;
|
||||
if (_puid == _playerUID) exitWith { _playerObj = _x; _playerPos = getPosATL _playerObj;};
|
||||
} forEach playableUnits;
|
||||
|
||||
//If for some reason the playerObj does not exist, exit the disconnect system.
|
||||
//If for some reason the playerOBj does not exist lets exit the disconnect system.
|
||||
if (isNil "_playerObj") exitWith {
|
||||
diag_log format["%1: nil player object, _this:%2", __FILE__, _this];
|
||||
};
|
||||
@@ -19,29 +19,46 @@ if (isNil "_playerObj") exitWith {
|
||||
_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];
|
||||
//If the the playerObj exists lets 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 {""}
|
||||
(getPosATL _playerObj) call fa_coor2str,
|
||||
if ((_lastDamage > 5 AND (_lastDamage < 30)) AND ((alive _playerObj) AND (_playerObj distance (getMarkerpos "respawn_west") >= 2000))) then {" while in combat ("+str(_lastDamage)+" seconds left)"} else {""}
|
||||
];
|
||||
|
||||
//Login processing do not sync
|
||||
if (_playerUID in dayz_ghostPlayers) exitwith {
|
||||
diag_log format["ERROR: Cannot Sync Character [%1,%2] Still processing login",_name,_playerUID];
|
||||
|
||||
//Lets remove the object.
|
||||
if (!isNull _playerObj) then {
|
||||
_myGroup = group _playerObj;
|
||||
deleteGroup _myGroup;
|
||||
};
|
||||
};
|
||||
|
||||
//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];};
|
||||
if (_characterID != "?") exitwith {
|
||||
|
||||
//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;
|
||||
|
||||
//If the player object is inside a vehicle eject the player.
|
||||
if (vehicle _playerObj != _playerObj) then {_playerObj action ["eject",vehicle _playerObj];};
|
||||
//if the player object is inside a vehicle lets eject the player
|
||||
if (vehicle _playerObj != _playerObj) then {
|
||||
_playerObj action ["eject", vehicle _playerObj];
|
||||
};
|
||||
|
||||
//Punish combat log
|
||||
_timeout = _playerObj getVariable["combattimeout",0];
|
||||
@@ -55,29 +72,31 @@ if (_characterID != "?") exitWith {
|
||||
[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 player object is alive lets sync the player and remove the body and 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 {
|
||||
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]);
|
||||
//Lets scan the area near the player logout position and save all objects.
|
||||
{ [_x,"gear"] call server_updateObject } foreach (nearestObjects [_playerPos, DayZ_GearedObjects, 10]);
|
||||
};
|
||||
|
||||
if (isNull _playerObj) then {diag_log "server_onPlayerDisconnect called with Null player object";};
|
||||
if (isNull _playerObj) then { diag_log("Player Object does not esist"); };
|
||||
|
||||
//Remove the object.
|
||||
if (!isNull _playerObj) then {
|
||||
|
||||
//Lets remove the object.
|
||||
if (!isNull _playerObj) then {
|
||||
_myGroup = group _playerObj;
|
||||
deleteVehicle _playerObj;
|
||||
deleteGroup _myGroup;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user