mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
ee7f7497c0
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).
73 lines
2.7 KiB
Plaintext
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;
|
|
};
|
|
};
|