player stats changes

logic to select low or high criticalAttributes
forced blood drop if player is hypothermic.
force blood pressure rise if toxicity or radiation is over 55
removed Radiation reduction in master loop so you can only reduce
radiation with treatments
players blood pressure must stay within 11-179 range or be killed.
This commit is contained in:
vbawol 2017-10-19 19:44:05 -05:00
parent f39a79a7d2
commit 17f396b51b
4 changed files with 20 additions and 18 deletions

View File

@ -1,5 +1,6 @@
// init
_forceBloodRise = false;
_forceBloodDrop = false;
_forceFatigue = false;
_allowBloodDrop = false;
_forceStaminaDrop = false;
@ -88,9 +89,13 @@ EPOCH_currentTargetMode = _currentTargetMode;
_curCtrl ctrlSetText _ctrlText;
_critical = (_criticalHigh || _criticalLow);
if (_critical) then {
if ((_criticalAttributes param [0,""]) isEqualType []) then {
_criticalAttributes = _criticalAttributes select _criticalLow;
};
_forceUpdate = "forceUpdate" in _criticalAttributes;
_forceFatigue = "forceFatigue" in _criticalAttributes;
_forceBloodRise = "forceBloodRise" in _criticalAttributes;
_forceBloodDrop = "forceBloodDrop" in _criticalAttributes;
[_curCtrl,0.55] call epoch_2DCtrlHeartbeat;
};
// todo make this reversable or even limited to a color range.
@ -124,9 +129,9 @@ if (_forceFatigue) then {
if (_forceBloodRise) then {
_playerBloodP = [_playerBloodPKey, 0.05, _playerBloodPMax , _playerBloodPMin] call EPOCH_fnc_setVariableLimited;
} else {
if (_allowBloodDrop) then {
// allow player to bleed out
_lowerBPlimit = [100,0] select (isBleeding player);
if (_allowBloodDrop || _forceBloodDrop) then {
// allow player to bleed out or die from hypothermia
_lowerBPlimit = [100,0] select (isBleeding player || _forceBloodDrop);
_playerBloodP = [_playerBloodPKey, -1, _playerBloodPMax , _lowerBPlimit] call EPOCH_fnc_setVariableLimited;
};
};
@ -387,7 +392,7 @@ if(getNumber(('CfgEpochClient' call EPOCH_returnConfig) >> 'mapOnZoomSetMarkerSi
private "_markerString";
_markerString = toArray _zoomMarker;
_markerString resize 6;
if (toString _markerString == "EPOCH_") then {
if (toString _markerString == "EPOCH_") then {
switch(true)do{
case ( (_mapScale >= 0.95) && (_mapScale <= 1) ): {
_zoomMarker setMarkerSizeLocal [0.666,0.666];

View File

@ -140,8 +140,6 @@ if ((getFatigue player) >= 0.7 && _airTemp > 100) then {
_maxTemp = _airTemp;
};
// toxic fever and immunity increase
_playerToxicity = missionNamespace getVariable [_playerToxicityKey, _playerToxicityDefault];
// _playerImmunity = missionNamespace getVariable [_playerImmunityKey, _playerImmunityDefault];
@ -202,11 +200,8 @@ _playerThirst = [_playerThirstKey,-_thirstlossRate,_playerThirstMax,_playerThirs
_playerNuisance = [_playerNuisanceKey,-1,_playerNuisanceMax,_playerNuisanceMin] call EPOCH_fnc_setVariableLimited;
// Radiation Handler
if (_radsLevel == 0) then {
// only lower rads if player has taken medicine and it no longer in a radiation zone.
_playerRadiation = [_playerRadiationKey,-0.01,_playerRadiationMax,_playerRadiationMin] call EPOCH_fnc_setVariableLimited;
} else {
// allow increase rads based on radiation levels and consumed rads
if (_radsLevel > 0) then {
// increase rads based on radiation levels
_playerRadiation = [_playerRadiationKey,_radsLevel,_playerRadiationMax,_playerRadiationMin] call EPOCH_fnc_setVariableLimited;
};

View File

@ -125,11 +125,11 @@ class CfgEpochClient
{{"Oxygen","getPlayerOxygenRemaining","",{},{1,0,2,2,1,0.55}},"topRight","x\addons\a3_epoch_code\Data\UI\oxygen_ca.paa"},
{"Hunger","topRight","x\addons\a3_epoch_code\Data\UI\hunger_ca.paa",{"forceBloodRise"}},
{"Thirst","topRight","x\addons\a3_epoch_code\Data\UI\thirst_ca.paa",{"forceBloodRise"}},
{"Temp","topRight",{"x\addons\a3_epoch_code\Data\UI\hot_ca.paa","x\addons\a3_epoch_code\Data\UI\cold_ca.paa"},{"forceFatigue"}},
{"Toxicity","topRight","x\addons\a3_epoch_code\Data\UI\hazzard_ca.paa"},
{"Temp","topRight",{"x\addons\a3_epoch_code\Data\UI\hot_ca.paa","x\addons\a3_epoch_code\Data\UI\cold_ca.paa"},{{"forceFatigue","forceBloodRise"},{"forceFatigue","forceBloodDrop"}}},
{"Toxicity","topRight","x\addons\a3_epoch_code\Data\UI\hazzard_ca.paa",{"forceBloodRise"}},
{"Alcohol","topRight","x\addons\a3_epoch_code\Data\UI\drunk_ca.paa"},
{"Soiled","topRight","x\addons\a3_epoch_code\Data\UI\soiled_ca.paa"},
{"Radiation","topRight","x\addons\a3_epoch_code\Data\UI\rads_ca.paa"},
{"Radiation","topRight","x\addons\a3_epoch_code\Data\UI\rads_ca.paa",{"forceBloodRise"}},
{{"HitPoints","getPlayerHitPointDamage","HitLegs"},"topRight","x\addons\a3_epoch_code\Data\UI\broken_ca.paa"}
};
defineCommunityStats[] = {

View File

@ -13,7 +13,7 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_Svars","_allowSave","_appearance","_cIndex","_dmg","_extraLoadoutInfo","_group","_hitpoints","_loadout","_medical","_playerUID","_pos","_return","_return2","_revive","_schemaVersion","_server_vars","_stats","_vehiclePlyr"];
private ["_Svars","_allowSave","_appearance","_bloodPIndex","_bloodPressure","_group","_hitpoints","_loadout","_medical","_playerUID","_pos","_return","_return2","_revive","_schemaVersion","_server_vars","_stats","_vehiclePlyr"];
//[[[end]]]
params [["_player",objNull], ["_vars",[]] ];
@ -48,7 +48,7 @@ if (_allowSave) then{
private _serverOnly = ["Crypto"];
_Svars = _player getVariable["VARS", call EPOCH_defaultVars_SEPXVar];
{
_cIndex = EPOCH_customVars find _x;
private _cIndex = EPOCH_customVars find _x;
if (_cIndex != -1) then{
_vars set[_cIndex, (_Svars select _cIndex)];
};
@ -102,8 +102,10 @@ if (_allowSave) then{
_stats = _player getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars];
_return2 = ["CommunityStats", _playerUID, EPOCH_expiresCommunityStats, [_stats]] call EPOCH_fnc_server_hiveSETEX;
// kill player if blood pressure >= 180
if (_vars select 12 >= 180) then {
// blood pressure must stay within 11-179 range
_bloodPIndex = EPOCH_customVars find "BloodP";
_bloodPressure = _vars param [_bloodPIndex,100];
if (_bloodPressure >= 180 || _bloodPressure <= 10) then {
_player setDamage 1;
} else {
// set player alive bit