Suppress Base Spawn, when Player got Killed by opponent in Territory

This commit is contained in:
He-Man 2020-03-09 20:51:39 +01:00
parent 13e5f6cdc7
commit ab0f7c6cca
4 changed files with 55 additions and 2 deletions

View File

@ -55,7 +55,32 @@ if(_deathMarkerON && ('ItemGPS' in (assignedItems _unit)))then{
profileNameSpace setVariable["EPOCHLastKnownDeath",getPos _unit];
};
[player,_killer,toArray profileName,Epoch_personalToken] remoteExec ["EPOCH_server_deadPlayer",2];
// Check, if Player got killed by another Player (opponent) in his Base
_homekill = false;
if (_unit !=_killer) then {
if (isplayer _killer) then {
if !(_killer in (units (group Player))) then {
_SupressBaseSpawnOnHomekillTime = ["CfgEpochClient", "SupressBaseSpawnOnHomekillTime", 0] call EPOCH_fnc_returnConfigEntryV2;
if (_SupressBaseSpawnOnHomekillTime > 0) then {
_jammer = nearestObjects[player, call EPOCH_JammerClasses, ["CfgEpochClient", "minJammerDistance", 650] call EPOCH_fnc_returnConfigEntryV2];
if !(_jammer isEqualTo []) then {
_nearestJammer = _jammer select 0;
if ((_nearestJammer getVariable["BUILD_OWNER", "-1"]) in[getPlayerUID player, Epoch_my_GroupUID]) then {
_CfgEpochClient = 'CfgEpochClient' call EPOCH_returnConfig;
_JammerConfig = (_CfgEpochClient >> "CfgJammers" >> (typeof _nearestJammer));
_buildingJammerRange = getnumber (_JammerConfig >> "buildingJammerRange");
if (_unit distance _nearestJammer < _buildingJammerRange) then {
_homekill = true;
[format ["Base Spawn disabled for %1 minutes (killed in your Territory)",(_SupressBaseSpawnOnHomekillTime/60) tofixed 1],5] call Epoch_Message;
};
};
};
};
};
};
};
[player,_killer,toArray profileName,Epoch_personalToken,_homekill] remoteExec ["EPOCH_server_deadPlayer",2];
// disable build mode
EPOCH_buildMode = 0;

View File

@ -41,6 +41,7 @@ class CfgEpochClient
baseThirstLoss = 2; // increase number to speed up rate of Thirst loss
accelerateHTALoss = "false"; // use server's time acceleration to increase the rate of Hunger, Thirst and Alcohol loss
SupressBaseSpawnOnHomekillTime = 1200; // Suppress Base Spawn for xxx seconds, when Player got Killed by an opponent in his own Territory
buildingNearbyMilitary = 0; //1 to allow building nearby
buildingNearbyMilitaryRange = 300; //Define radius of blocked area
buildingNearbyMilitaryClasses[] = {"Cargo_Tower_base_F","Cargo_HQ_base_F","Cargo_Patrol_base_F","Cargo_House_base_F"};

View File

@ -15,7 +15,7 @@
//[[[cog import generate_private_arrays ]]]
private ["_bankBalance","_bankData","_cIndex","_current_crypto","_defaultVars","_playerName","_playerUID","_pos","_response","_triggerType","_vars","_killerUID","_deathType","_killerCommunityStats","_mIndex","_current_murders","_communityStats","_sIndex","_current_suicides","_dIndex","_current_deaths","_playerKarmaAdj","_killerKarmaAdj","_kIndex","_playerCStats","_playerKarma","_playerIsNeutral","_playerIsBandit","_playerIsHero","_killerCStats","_killerKarma","_karmaLimitsArray","_lowKarmaLevel1","_highKarmaLevel1"];
//[[[end]]]
params ["_playerObj","_killer","_playerName",["_token","",[""]] ];
params ["_playerObj","_killer","_playerName",["_token","",[""]], ["_homekill",false]];
// handle token check and isnull for _player
if !([_playerObj, _token] call EPOCH_server_getPToken) exitWith{};
@ -141,3 +141,20 @@ if (EPOCH_cloneCost > 0) then {
["Bank", _playerUID, EPOCH_expiresBank, [_bankBalance]] call EPOCH_fnc_server_hiveSETEX;
};
};
// Check for BaseKill and skip Base Spawn for the next xxx seconds
if (_homekill) then {
_SupressBaseSpawnOnHomekillTime = ["CfgEpochClient", "SupressBaseSpawnOnHomekillTime", 0] call EPOCH_fnc_returnConfigEntryV2;
if (isnil "Epoch_BaseSpawnSkips") then {
Epoch_BaseSpawnSkips = [[],[]];
};
Epoch_BaseSpawnSkips params ["_SpawnSkipUIDs","_SpawnSkipTimers"];
_idx = _SpawnSkipUIDs find _playerUID;
if (_idx > -1) then {
_SpawnSkipTimers set [_idx,diag_ticktime + _SupressBaseSpawnOnHomekillTime];
}
else {
_SpawnSkipUIDs pushback _playerUID;
_SpawnSkipTimers pushback (diag_ticktime + _SupressBaseSpawnOnHomekillTime);
};
};

View File

@ -145,6 +145,16 @@ if (!isNull _player) then {
};
};
if (_newLocation isEqualType [] && {(count _newLocation) == 3}) then {
// Check for BaseKill and skip Base Spawn
Epoch_BaseSpawnSkips params ["_SpawnSkipUIDs","_SpawnSkipTimers"];
_SpawnSkipTime = 0;
_idx = _SpawnSkipUIDs find _playerUID;
if (_idx > -1) then {
_SpawnSkipTime = _SpawnSkipTimers select _idx;
};
if (_SpawnSkipTime > diag_ticktime) exitwith {};
_CheckLocation = _newLocation;
if (surfaceiswater _newLocation) then {
_CheckLocation = ATLToASL _newLocation;