Epoch/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf
DESKTOP-UH65DCE\MusTanG df12dc1b61 marker sets (local)
Player Location Marker with Assigned GPS
Death Marker location saved only when assigned GPS on death

CfgEpochClient on/off toggle for hosts
DynaMenu on map toggle for players

New Marker Sets come to life!
First set of functions for Local Marker Sets as needed for the above
feature additions
2017-10-08 13:37:48 -05:00

84 lines
3.3 KiB
Plaintext

/*
Author: Aaron Clark - EpochMod.com
Contributors: Andrew Gregory
Description:
Player death handler
Licence:
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
Github:
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf
Example:
player addEventHandler ["Killed", {_this call EPOCH_fnc_playerDeath}];
Parameter(s):
_this select 0: OBJECT - player
_this select 1: OBJECT - killer
Returns:
BOOL
*/
//[[[cog import generate_private_arrays ]]]
private ["_config","_doRevenge","_playerAliveTime","_playerAliveTimeKeyFinal","_playerDeathScreen","_playerKilledScreen","_playerRevengeMinAliveTime","_tapDiag"];
//[[[end]]]
params [["_unit",objNull,[objNull]],["_killer",objNull,[objNull]] ];
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_playerDeathScreen = getText(_config >> "playerDeathScreen");
_playerRevengeMinAliveTime = getNumber(_config >> "playerRevengeMinAliveTime");
if (_playerDeathScreen isEqualTo "") then {_playerDeathScreen = "TapOut"};
_tapDiag = _playerDeathScreen;
_playerAliveTimeKeyFinal = "EPOCH_playerAliveTime";
if !(isNil "_playerAliveTimeKey") then {_playerAliveTimeKeyFinal = _playerAliveTimeKey};
_playerAliveTime = missionNamespace getVariable [_playerAliveTimeKeyFinal,[]];
_doRevenge = ((getNumber(_config >> "playerDisableRevenge") isEqualTo 0) && _playerAliveTime >= _playerRevengeMinAliveTime);
// test ejecting unit from vehicle if dead client side
if (vehicle _unit != _unit) then {
_unit action["Eject", vehicle _unit];
};
// save death position
profileNameSpace setVariable["EPOCHLastKnownDeath",[]];
_deathMarkerON = (getNumber(_config >> "playerDeathMarkerGPSOnly") isEqualTo 1);
if(_deathMarkerON && ('ItemGPS' in (assignedItems _unit)))then{
profileNameSpace setVariable["EPOCHLastKnownDeath",getPos _unit];
};
[player,_killer,toArray profileName,Epoch_personalToken] remoteExec ["EPOCH_server_deadPlayer",2];
// disable build mode
EPOCH_buildMode = 0;
EPOCH_snapDirection = 0;
EPOCH_Target = objNull;
// playerKilledScreen
_playerKilledScreen = getText(_config >> "playerKilledScreen");
if (_playerKilledScreen isEqualTo "") then {_playerKilledScreen = "TapOut2"};
if(_doRevenge && player != _killer && (isPlayer _killer || isPlayer (effectiveCommander _killer)))then{_tapDiag = _playerKilledScreen};//TODO: vehicle check may not always be reliable
if (Epoch_canBeRevived) then {
setPlayerRespawnTime 600;
createDialog _tapDiag;
} else {
setPlayerRespawnTime 15;
["You can be just revived once per life!", 5] call Epoch_message;
};
[_killer, _tapDiag] spawn{
params ["_killer2","_tapDiag2"];
while {!alive player} do {
if (playerRespawnTime <= 1) exitWith{ (findDisplay 46) closeDisplay 0; };
if (playerRespawnTime > 15 && !dialog) then {createDialog _tapDiag2;};
if (isObjectHidden player) then {closeDialog 2;};
if(player getVariable["EPOCH_doBoom",false])exitWith{player setVariable ["EPOCH_doBoom",nil]; call EPOCH_fnc_playerDeathDetonate;};
if(player getVariable["EPOCH_doMorph",false])exitWith{player setVariable ["EPOCH_doMorph",nil];[selectRandom (getArray (getMissionConfig "CfgEpochClient" >> "deathMorphClass")),player,_killer2] call EPOCH_fnc_playerDeathMorph;};
uiSleep 0.1;
};
};