Epoch/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeath.sqf
vbawol ee7f7497c0 0.3.9 b568
change gamemode from Survival to Survive
enabled Ryan Zombies support by default.
added random delay in revenge detonation.
added min alive time setting for player revenge options. Default 15
minutes (900 seconds).
2016-07-12 14:19:56 -05:00

73 lines
2.7 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
*/
private ["_playerDeathScreen","_playerKilledScreen","_tapDiag","_config","_doRevenge"];
params [["_unit",objNull,[objNull]], ["_killer",objNull,[objNull]]];
_config = 'CfgEpochClient' call EPOCH_returnConfig;
_playerDeathScreen = getText(_config >> "playerDeathScreen");
_playerRevengeAliveTime = getNumber(_config >> "playerRevengeAliveTime");
if (_playerDeathScreen isEqualTo "") then {_playerDeathScreen = "TapOut"};
_tapDiag = _playerDeathScreen;
_doRevenge = ((getNumber(_config >> "playerDisableRevenge") isEqualTo 0) && EPOCH_playerAliveTime >= _playerRevengeAliveTime);
// test ejecting unit from vehicle if dead client side
if (vehicle _unit != _unit) then {
_unit action["Eject", vehicle _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{
_killer2 = _this select 0;
_tapDiag2 = _this select 1;
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];[player] 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;
};
};