Merge pull request #874 from EpochModTeam/exp-digest-test

Exp digest test
This commit is contained in:
vbawol 2017-09-25 15:44:35 -05:00 committed by GitHub
commit c2f5f02bac
16 changed files with 276 additions and 118 deletions

View File

@ -22,7 +22,7 @@
NOTHING
*/
//[[[cog import generate_private_arrays ]]]
private ["_animConfigArray","_animationEffect","_animationEffectGlobal","_bleedAmount","_bleedChance","_bloodpAmount","_bloodpChance","_canSee","_cfgObjectInteraction","_distance","_doAttack","_fatigueChance","_ppEffect","_say3dsoundsConfig","_selectedMove","_selectedSound","_soundConfigArray","_soundEffect","_soundEffectGlobal","_switchMovehandlerConfig","_target","_toxicChance"];
private ["_animConfigArray","_animationEffect","_animationEffectGlobal","_bleedAmount","_bleedChance","_bloodpAmount","_bloodpChance","_canSee","_cfgObjectInteraction","_distance","_doAttack","_fatigueChance","_ppEffect","_say3dsoundsConfig","_selectedMove","_selectedSound","_soundConfigArray","_soundEffect","_soundEffectGlobal","_switchMovehandlerConfig","_target","_toxicAmount","_toxicChance"];
//[[[end]]]
params [["_unit",objNull],["_target",player]];
if (isNull _unit && isNull _target) exitWith {};
@ -69,6 +69,7 @@ if (_doAttack) then {
_fatigueChance = getNumber (_cfgObjectInteraction >> "fatigueChance");
_bleedAmount = getNumber (_cfgObjectInteraction >> "bleedAmount");
_bloodpAmount = getNumber (_cfgObjectInteraction >> "bloodpAmount");
_toxicAmount = getNumber (_cfgObjectInteraction >> "toxicAmount");
_soundConfigArray = getArray (_cfgObjectInteraction >> "soundEffect");
_soundEffect = "";
@ -112,13 +113,13 @@ if (_doAttack) then {
};
if (random 1 < _toxicChance) then {
EPOCH_playerToxicity = (EPOCH_playerToxicity + (random(100 - EPOCH_playerImmunity))) min 100;
EPOCH_digestToxicity = (EPOCH_digestToxicity + random(_toxicAmount)) min 100;
};
if (random 1 < _bleedChance) then {
player setBleedingRemaining((getBleedingRemaining player) + _bleedAmount);
};
if (random 1 < _bloodpChance) then {
EPOCH_playerBloodP = (EPOCH_playerBloodP + (_bloodpAmount + (EPOCH_playerBloodP - 100))) min 190;
EPOCH_digestBloodP = (EPOCH_digestBloodP + _bloodpAmount) min 100;
if !(_ppEffect isEqualTo []) then {
[_ppEffect] spawn EPOCH_fnc_spawnEffects;
};

View File

@ -119,6 +119,6 @@ switch true do {
};
// Nuisance System 0.1
(EPOCH_customVarLimits select (EPOCH_customVars find "Nuisance")) params [["_playerLimitMax",100],["_playerLimitMin",0]];
EPOCH_playerNuisance = ((EPOCH_playerNuisance + _nuisanceLevel) min _playerLimitMax) max _playerLimitMin;
EPOCH_digestNuisance = ((EPOCH_digestNuisance + _nuisanceLevel) min _playerLimitMax) max _playerLimitMin;
};
};

View File

@ -1,14 +1,44 @@
// EPOCH_giveAttributes
/*
Author: Aaron Clark - EpochMod.com
Contributors:
Description:
Controls attributes given digest system, and returns text based on these changes.
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/epoch_code/compile/functions/EPOCH_giveAttributes.sqf
Example:
_color = _x call EPOCH_giveAttributes
Parameter(s):
_this select 0: STRING - Player Stat Name
_this select 1: NUMBER - Input
_this select 2: NUMBER - 1 = randomize input, 0 = normal
Returns:
STRING
*/
//[[[cog import generate_private_arrays ]]]
private ["_addPlus","_celcuis","_celcuisNew","_currentVal","_customVarIndex","_data","_limits","_max","_min","_newValue","_return","_varName"];
private ["_addPlus","_celcuis","_currentVal","_customVarIndex","_customVarLimits","_customVarNames","_customVarsInit","_data","_defaultVarValues","_limits","_max","_min","_newValue","_return","_varName"];
//[[[end]]]
params ["_selectedVarName",["_data",0],["_randomizeData",0]];
_addPlus = if (_data > 0) then {"+"} else {""};
_return = "";
_customVarIndex = EPOCH_customVars find _selectedVarName;
_customVarsInit = ["CfgEpochClient", "customVarsDefaults", EPOCH_customVarsDefaults] call EPOCH_fnc_returnConfigEntryV2;
_customVarNames = _customVarsInit apply {_x param [0,""]};
_defaultVarValues = _customVarsInit apply {_x param [1,0]};
_customVarLimits = _customVarsInit apply {_x param [2,[]]};
_customVarIndex = _customVarNames find _selectedVarName;
if (_customVarIndex != -1) then {
_varName = format["EPOCH_player%1",_selectedVarName];
_limits = EPOCH_customVarLimits select _customVarIndex;
_varName = format["EPOCH_digest%1",_selectedVarName];
_limits = _customVarLimits select _customVarIndex;
_limits params [["_max",100],["_min",0]];
if (_max isEqualType "") then {
_max = missionNamespace getVariable [_max, 0];
@ -16,21 +46,20 @@ if (_customVarIndex != -1) then {
if (_min isEqualType "") then {
_min = missionNamespace getVariable [_min, 0];
};
_currentVal = missionNamespace getVariable [_varName, EPOCH_defaultVars select _customVarIndex];
_currentVal = missionNamespace getVariable [_varName, 0];
if (_randomizeData isEqualTo 1) then {
_data = round(random _data);
};
if (_data != 0) then {
_newValue = ((_currentVal + _data) min _max) max _min;
missionNamespace setVariable [_varName, _newValue];
if (_selectedVarName == "Temp") then {
_celcuis = _data call EPOCH_convertTemp;
_celcuisNew = _newValue call EPOCH_convertTemp;
_return = format["%1: %2%3 (%4 °F) %2%5 (%6 °C)",(localize format["str_epoch_pvar_%1",_selectedVarName]),_addPlus,_data,_newValue,_celcuis,_celcuisNew];
} else {
_return = format["%1: %2%3 (%4/%5)", (localize format["str_epoch_pvar_%1",_selectedVarName]), _addPlus, _data, _newValue, _max];
};
};
if (_data != 0) then {
_newValue = ((_currentVal + _data) min _max) max _min;
missionNamespace setVariable [_varName, _newValue];
if (_selectedVarName == "Temp") then {
_celcuis = _data call EPOCH_convertTemp;
_return = format["%1: %2%3°F %2%4°C",(localize format["str_epoch_pvar_%1",_selectedVarName]),_addPlus,_data,_celcuis];
} else {
_return = format["%1: %2%3", (localize format["str_epoch_pvar_%1",_selectedVarName]), _addPlus, _data];
};
};
};
_return

View File

@ -30,7 +30,6 @@ EPOCH_debugMode = false;
EPOCH_snapDirection = 0;
EPOCH_stabilityTarget = objNull;
EPOCH_equippedItem_PVS = [];
EPOCH_nearPower = false;
EPOCH_pendingP2ptradeTarget = objNull;
EPOCH_lastNPCtradeTarget = objNull;
EPOCH_lastJumptime = diag_tickTime;
@ -44,7 +43,6 @@ EPOCH_arr_snapPoints = [];
EPOCH_prevTarget = objNull;
EPOCH_interactOption = 0;
EPOCH_playerStaminaMax = 100;
EPOCH_playerEnergyMax = 2500;
{
missionNamespace setVariable [format ["EPOCH_player%1",_x],EPOCH_defaultVars select _forEachIndex];

View File

@ -57,6 +57,9 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
Epoch_canBeRevived = false;
Epoch_personalToken = _personalToken;
// reset blood Pressure to warning level
EPOCH_playerBloodP = 120;
// restart masterloop
[] spawn EPOCH_masterLoop;
[5, 100] call EPOCH_niteLight;
@ -69,8 +72,6 @@ if !(alive player && alive _playerObject && !isPlayer _playerObject) then {
player addEventHandler [_x,(["CfgEpochClient", _x, ""] call EPOCH_fnc_returnConfigEntryV2)];
} forEach (["CfgEpochClient", "addEventHandler", []] call EPOCH_fnc_returnConfigEntryV2);
// reset blood Pressure to warning level
EPOCH_playerBloodP = 120;
// testing for civilan males
waituntil {local _playerObject};

View File

@ -3,7 +3,7 @@ _forceBloodRise = false;
_forceFatigue = false;
_allowBloodDrop = false;
_forceStaminaDrop = false;
_warnbloodPressure = EPOCH_playerBloodP > 120;
_warnbloodPressure = _playerBloodP > 120;
_increaseStamina = true;
_val = 0;
@ -104,7 +104,7 @@ EPOCH_currentTargetMode = _currentTargetMode;
if (_forceBloodRise || _forceFatigue) then {
_increaseStamina = false;
} else {
if (EPOCH_playerStamina > 0 && !_panic) then {
if (_playerStamina > 0 && !_panic) then {
_allowBloodDrop = true;
};
};
@ -118,17 +118,23 @@ if (_forceFatigue) then {
};
};
// force Blood Pressure Rise
if (_forceBloodRise) then {
EPOCH_playerBloodP = (EPOCH_playerBloodP + 0.05) min 190;
// Blood pressure handler
if (EPOCH_digestBloodP > 0) then {
_playerBloodP = ((_playerBloodP + EPOCH_digestBloodP) min _playerBloodPMax) max _playerBloodPMin;
} else {
if (_allowBloodDrop) then {
// allow player to bleed out
_lowerBPlimit = [100,0] select (isBleeding player);
EPOCH_playerBloodP = EPOCH_playerBloodP - 1 max _lowerBPlimit;
if (_forceBloodRise) then {
// force Blood Pressure Rise
_playerBloodP = (_playerBloodP + 0.05) min 190;
} else {
if (_allowBloodDrop) then {
// allow player to bleed out
_lowerBPlimit = [100,0] select (isBleeding player);
_playerBloodP = _playerBloodP - 1 max _lowerBPlimit;
};
};
};
// check if player On Foot
_isOnFoot = isNull objectParent player;
if (_isOnFoot) then {
@ -141,11 +147,11 @@ if (_isOnFoot) then {
// Decrease Stamina
if (_forceStaminaDrop) then {
EPOCH_playerStamina = (EPOCH_playerStamina - (_val/4)) max 0;
_playerStamina = (_playerStamina - (_val/4)) max 0;
} else {
// Increase Stamina if player is not Fatigued
if (_increaseStamina && (getFatigue player) == 0) then {
EPOCH_playerStamina = (EPOCH_playerStamina + 0.5) min EPOCH_playerStaminaMax;
_playerStamina = (_playerStamina + 0.5) min EPOCH_playerStaminaMax;
};
};
@ -273,6 +279,18 @@ if !(EPOCH_ActiveTraderMission isequalto []) then {
// Update read only vars
EPOCH_playerRadiation = _playerRadiation;
EPOCH_playerAliveTime = _playerAliveTime;
EPOCH_playerBloodP = _playerBloodP;
EPOCH_playerNuisance = _playerNuisance;
EPOCH_playerHunger = _playerHunger;
EPOCH_playerThirst = _playerThirst;
EPOCH_playerSoiled = _playerSoiled;
EPOCH_playerToxicity = _playerToxicity;
EPOCH_playerImmunity = _playerImmunity;
EPOCH_playerTemp = _playerTemp;
EPOCH_playerWet = _playerWet;
EPOCH_playerEnergy = _playerEnergy;
EPOCH_playerAlcohol = _playerAlcohol;
EPOCH_playerStamina = _playerStamina;
// force update
if (EPOCH_forceUpdateNow) then {

View File

@ -17,7 +17,7 @@ if (damage player != _damagePlayer) then {
// 1. number of players
// 2. Other sources of drain (Lights)
_energyValue = EPOCH_chargeRate min _energyRegenMax;
_energyValue = _chargeRate min _energyRegenMax;
_vehicle = vehicle player;
if (_vehicle != player && isEngineOn _vehicle) then {
_energyValue = _energyValue + 5;
@ -25,15 +25,15 @@ if (_vehicle != player && isEngineOn _vehicle) then {
if (currentVisionMode player == 1) then { //NV enabled
_energyValue = _energyValue - _energyCostNV;
if (EPOCH_playerEnergy == 0) then {
if (_playerEnergy == 0) then {
player action["nvGogglesOff", player];
["Night Vision Goggles: Need Energy", 5] call Epoch_message;
};
};
// Sets visual effect
if (EPOCH_playerAlcohol > 20) then {
_drunkVal = linearConversion [0,100,EPOCH_playerAlcohol,0.1,1,true];
if (_playerAlcohol > 20) then {
_drunkVal = linearConversion [0,100,_playerAlcohol,0.1,1,true];
[_drunkVal, 2] call epoch_setDrunk;
} else {
[0, 2] call epoch_setDrunk;
@ -54,18 +54,23 @@ if (_playerRadiation > 1) then {
[0, 2] call epoch_setRadiation;
};
EPOCH_playerEnergy = ((EPOCH_playerEnergy + _energyValue) min EPOCH_playerEnergyMax) max 0;
// Energy Handler
if (EPOCH_digestEnergy > 0) then {
_energyValue = _energyValue + EPOCH_digestEnergy;
EPOCH_digestEnergy = 0;
};
_playerEnergy = ((_playerEnergy + _energyValue) min _playerEnergyMax) max _playerEnergyMin;
if !(EPOCH_playerEnergy isEqualTo _prevEnergy) then {
if !(_playerEnergy isEqualTo _prevEnergy) then {
9993 cutRsc["EpochGameUI3", "PLAIN", 0, false];
_display3 = uiNamespace getVariable "EPOCH_EpochGameUI3";
_energyDiff = round(EPOCH_playerEnergy - _prevEnergy);
_energyDiff = round(_playerEnergy - _prevEnergy);
_diffText = if (_energyDiff > 0) then {format["+%1",_energyDiff]} else {format["%1",_energyDiff]};
(_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(EPOCH_playerEnergy), EPOCH_playerEnergyMax, _diffText];
_prevEnergy = EPOCH_playerEnergy;
(_display3 displayCtrl 21210) ctrlSetText format["%1/%2 %3", round(_playerEnergy), _playerEnergyMax, _diffText];
_prevEnergy = _playerEnergy;
};
if (EPOCH_playerEnergy == 0) then {
if (_playerEnergy == 0) then {
if (EPOCH_buildMode > 0) then {
EPOCH_buildMode = 0;
EPOCH_snapDirection = 0;
@ -111,7 +116,7 @@ if (_isOnFoot) then {
_increaseWet = 10;
};
} else {
if (EPOCH_playerWet > 50 && _airTemp <= 32) then {
if (_playerWet > 50 && _airTemp <= 32) then {
_isNearFire = {inflamed _x} count (nearestObjects [player, ["ALL"], 3]);
if (!(call EPOCH_fnc_isInsideBuilding) && _isNearFire == 0) then {
_warming = false;
@ -134,28 +139,34 @@ if ((getFatigue player) >= 0.7 && _airTemp > 100) then {
_maxTemp = _airTemp;
};
// Immunity Handler
if (EPOCH_digestImmunity > 0) then {
_playerImmunity = ((_playerImmunity + EPOCH_digestImmunity) min _playerImmunityMax) max _playerImmunityMin;
EPOCH_digestImmunity = 0;
};
// toxic fever and immunity increase
if (EPOCH_playerToxicity > 0) then {
EPOCH_playerImmunity = (EPOCH_playerImmunity + 0.1) min 100;
EPOCH_playerToxicity = (EPOCH_playerToxicity - 0.1) max 0;
if (_playerToxicity > 0) then {
_playerImmunity = ((_playerImmunity + 0.1) min _playerImmunityMax) max _playerImmunityMin;
_playerToxicity = ((_playerToxicity - 0.1) min _playerToxicityMax) max _playerToxicityMin;
_maxTemp = 106.7 + 10;
};
if (_warming) then {
EPOCH_playerTemp = (EPOCH_playerTemp + 0.01) min _maxTemp;
_playerTemp = (_playerTemp + 0.01) min _maxTemp;
} else {
EPOCH_playerTemp = (EPOCH_playerTemp - 0.01) max (95.0 - 10);
_playerTemp = (_playerTemp - 0.01) max (95.0 - 10);
};
// wet/dry
if (_wet) then {
EPOCH_playerWet = (EPOCH_playerWet + _increaseWet) min 100;
if (EPOCH_playerWet > 50) then {
EPOCH_playerSoiled = (EPOCH_playerSoiled - 1) max 0;
_playerWet = ((_playerWet + _increaseWet) min _playerWetMax) max _playerWetMin;
if (_playerWet > 50) then {
_playerSoiled = ((_playerSoiled - 1) min _playerSoiledMax) max _playerSoiledMin;
};
} else {
if (_warming) then {
EPOCH_playerWet = (EPOCH_playerWet - 1) max 0;
_playerWet = ((_playerWet - 1) min _playerWetMax) max _playerWetMin;
};
};
@ -164,7 +175,7 @@ _hungerlossRate = _baseHungerLoss * timeMultiplier;
_thirstlossRate = _baseThirstLoss * timeMultiplier;
// Increase hunger if player is Fatigued
if (EPOCH_playerStamina < 100) then {
if (_playerStamina < 100) then {
if ((getFatigue player) > 0) then {
_hungerlossRate = _hungerlossRate + (_hungerlossRate*(getFatigue player));
};
@ -173,13 +184,58 @@ if (EPOCH_playerStamina < 100) then {
_hungerlossRate = (_hungerlossRate / 2);
};
EPOCH_playerHunger = (EPOCH_playerHunger - _hungerlossRate) max 0;
EPOCH_playerThirst = (EPOCH_playerThirst - _thirstlossRate) max 0;
// Alcohol Handler
if (EPOCH_digestAlcohol > 0) then {
_playerAlcohol = ((_playerAlcohol + EPOCH_digestAlcohol) min _playerAlcoholMax) max _playerAlcoholMin;
EPOCH_digestAlcohol = 0;
} else {
// downtick Alcohol
_alcoholLossRate = 0.17;
_playerAlcohol = ((_playerAlcohol - _alcoholLossRate) min _playerAlcoholMax) max _playerAlcoholMin;
};
call _lootBubble;
// Hunger Handler
if (EPOCH_digestHunger > 0) then {
_playerHunger = ((_playerHunger + EPOCH_digestHunger) min _playerHungerMax) max _playerHungerMin;
EPOCH_digestHunger = 0;
} else {
// downtick Hunger
_playerHunger = ((_playerHunger - _hungerlossRate) min _playerHungerMax) max _playerHungerMin;
};
// Thirst Handler
if (EPOCH_digestThirst > 0) then {
_playerThirst = ((_playerThirst + EPOCH_digestThirst) min _playerThirstMax) max _playerThirstMin;
EPOCH_digestThirst = 0;
} else {
// downtick Thirst
_playerThirst = ((_playerThirst - _thirstlossRate) min _playerThirstMax) max _playerThirstMin;
};
// Nuisance Handler, this only allows var to increse not decrease
if (EPOCH_digestNuisance > 0) then {
_playerNuisance = ((_playerNuisance + EPOCH_digestNuisance) min _playerNuisanceMax) max _playerNuisanceMin;
EPOCH_digestNuisance = 0;
} else {
// downtick Nuisance
_playerNuisance = ((_playerNuisance - 1) min _playerNuisanceMax) max _playerNuisanceMin;
};
// Radiation Handler
if (EPOCH_digestRadiation < 0 && _radsLevel == 0) then {
// only lower rads if player has taken medicine and it no longer in a radiation zone.
_playerRadiation = ((_playerRadiation - 0.01) min _playerRadiationMax) max _playerRadiationMin;
EPOCH_digestRadiation = (EPOCH_digestRadiation + 1) min 0;
} else {
// allow increase rads based on radiation levels and consumed rads
if (EPOCH_digestRadiation > 0) then {
_radsLevel = _radsLevel + EPOCH_digestRadiation;
EPOCH_digestRadiation = 0;
};
_playerRadiation = ((_playerRadiation + _radsLevel) min _playerRadiationMax) max _playerRadiationMin;
};
EPOCH_playerStaminaMax = (100 * (round(_playerAliveTime/360)/10)) min 2500;
// downtick Nuisance
(_customVarLimits select (_customVarNames find "Nuisance")) params [["_playerLimitMax",100],["_playerLimitMin",0]];
EPOCH_playerNuisance = ((EPOCH_playerNuisance - 1) min _playerLimitMax) max _playerLimitMin;
// process loot
call _lootBubble;

View File

@ -7,32 +7,22 @@ _powerSources = nearestObjects[player, ["Land_spp_Tower_F","Land_wpp_Turbine_V2_
_nearbyRadioactiveObjects = (_powerSources + EPOCH_nearestLocations) select {_x getVariable ["EPOCH_Rads", 0] > 0};
// check if player is out of map bounds.
_radsLevel = 0;
_worldSize = worldSize/2;
_outOfBounds = !(player inArea [[_worldSize,_worldSize,0], _worldSize, _worldSize, 0, true ]);
if (_outOfBounds) then {
// player is out of map bounds, give ten times background rads
["You are out of the play area!", 5] call Epoch_message;
_radsLevel = _backgroundRadiation;
_playerRadiation = ((_playerRadiation + _radsLevel) min 100) max 0;
_radsLevel = _outOfBoundsRadiation;
} else {
// radiated objects or locations nearby
if !(_nearbyRadioactiveObjects isEqualTo []) then {
// add extra rads based on intensity and distance from site.
_radioActiveSite = _nearbyRadioactiveObjects select 0;
_radsLevel = (_radioActiveSite getVariable ["EPOCH_Rads", 0]) / (player distance _radioActiveSite);
_playerRadiation = ((_playerRadiation + _radsLevel) min 100) max 0;
} else {
// TODO handle reduction of rads in master loop
_anitRadiation = player getVariable ["EPOCH_antiRadiation", 0];
if (_anitRadiation > 0) then {
// lower radiation by 0.1 per tick
_playerRadiation = ((_playerRadiation - 0.1) min 100) max 0;
// lower anti rad level
player setVariable ["EPOCH_antiRadiation", _anitRadiation - 1];
};
_radsLevel = ((_nearbyRadioactiveObjects select 0) getVariable ["EPOCH_Rads", 0]) / (player distance _radioActiveSite);
};
};
EPOCH_playerIsSwimming = false;
if !(surfaceIsWater _position) then {
@ -53,8 +43,7 @@ if !(surfaceIsWater _position) then {
};
// default power state
EPOCH_nearPower = false;
EPOCH_chargeRate = 0;
_chargeRate = 0;
// energy Charge from nearby power plants
if !(_powerSources isEqualTo[]) then {
@ -76,15 +65,13 @@ if !(_powerSources isEqualTo[]) then {
if (_totalCapacity > 0) then {
_players = player nearEntities[["Epoch_Male_F", "Epoch_Female_F"], _energyRange];
if (_players isEqualTo []) then {
EPOCH_chargeRate = ceil _totalCapacity;
_chargeRate = ceil _totalCapacity;
} else {
EPOCH_chargeRate = ceil (_totalCapacity / (count _players));
_chargeRate = ceil (_totalCapacity / (count _players));
};
EPOCH_nearPower = true;
};
};
// downtick Alcohol
EPOCH_playerAlcohol = ((EPOCH_playerAlcohol - 1) min 100) max 0;
_playerAliveTime = round(_playerAliveTime + (_tickTime - _clientAliveTimer));
_clientAliveTimer = _tickTime;

View File

@ -1,4 +1,4 @@
_spawnChance = ((EPOCH_playerNuisance + EPOCH_playerSoiled)/2) max 1;
_spawnChance = ((_playerNuisance + _playerSoiled)/2) max 1;
// add more antagonist spawn chances
if (random _antagonistRndChance < _spawnChance) then {
// selectRandomWeighted arma 1.76 or higher

View File

@ -1,5 +1,11 @@
// make sure we wait for Display #46
waitUntil {!(isNull (findDisplay 46))};
waitUntil {!isNull (findDisplay 46) && (!isNil "EPOCH_loadingScreenDone")};
// load favBar
'load' call epoch_favBar_draw;
// set player rating
player addRating -2000;
// force update within 15 seconds
EPOCH_forceUpdate = false;
@ -10,6 +16,18 @@ EPOCH_forceUpdateNow = false;
// init local player stat vars
_playerRadiation = EPOCH_playerRadiation;
_playerAliveTime = EPOCH_playerAliveTime;
_playerNuisance = EPOCH_playerNuisance;
_playerBloodP = EPOCH_playerBloodP;
_playerHunger = EPOCH_playerHunger;
_playerThirst = EPOCH_playerThirst;
_playerSoiled = EPOCH_playerSoiled;
_playerToxicity = EPOCH_playerToxicity;
_playerImmunity = EPOCH_playerImmunity;
_playerTemp = EPOCH_playerTemp;
_playerWet = EPOCH_playerWet;
_playerEnergy = EPOCH_playerEnergy;
_playerAlcohol = EPOCH_playerAlcohol;
_playerStamina = EPOCH_playerStamina;
// start alive timer
_clientAliveTimer = diag_tickTime;
@ -20,18 +38,64 @@ _customVarNames = _customVarsInit apply {_x param [0,""]};
_defaultVarValues = _customVarsInit apply {_x param [1,0]};
_customVarLimits = _customVarsInit apply {_x param [2,[]]};
// init limits
/*
{
_varLimits = _customVarLimits select _forEachIndex;
call compile format['_varLimits params [["_player%1Max",100],["_player%1Min",0]];',_x];
} forEach _customVarNames;
*/
(_customVarLimits select (_customVarNames find "Temp")) params [["_playerTempMax",100],["_playerTempMin",0]];
(_customVarLimits select (_customVarNames find "Hunger")) params [["_playerHungerMax",100],["_playerHungerMin",0]];
(_customVarLimits select (_customVarNames find "Thirst")) params [["_playerThirstMax",100],["_playerThirstMin",0]];
(_customVarLimits select (_customVarNames find "Energy")) params [["_playerEnergyMax",100],["_playerEnergyMin",0]];
(_customVarLimits select (_customVarNames find "Wet")) params [["_playerWetMax",100],["_playerWetMin",0]];
(_customVarLimits select (_customVarNames find "Soiled")) params [["_playerSoiledMax",100],["_playerSoiledMin",0]];
(_customVarLimits select (_customVarNames find "Immunity")) params [["_playerImmunityMax",100],["_playerImmunityMin",0]];
(_customVarLimits select (_customVarNames find "Toxicity")) params [["_playerToxicityMax",100],["_playerToxicityMin",0]];
(_customVarLimits select (_customVarNames find "Stamina")) params [["_playerStaminaMax",100],["_playerStaminaMin",0]];
(_customVarLimits select (_customVarNames find "BloodP")) params [["_playerBloodPMax",100],["_playerBloodPMin",0]];
(_customVarLimits select (_customVarNames find "Alcohol")) params [["_playerAlcoholMax",100],["_playerAlcoholMin",0]];
(_customVarLimits select (_customVarNames find "Radiation")) params [["_playerRadiationMax",100],["_playerRadiationMin",0]];
(_customVarLimits select (_customVarNames find "Nuisance")) params [["_playerNuisanceMax",100],["_playerNuisanceMin",0]];
EPOCH_playerEnergyMax = _playerEnergyMax;
// inline function to sync player stats to server
_fnc_forceUpdate = {
private _customVars = [];
{
// use local var from inside master loop
/*
call compile format['_customVars pushBack _player%1;',_x];
*/
switch (_x) do {
case ("Radiation"): {
_customVars pushBack _playerRadiation;
};
case ("Nuisance"): {
_customVars pushBack _playerNuisance;
};
case ("BloodP"): {
_customVars pushBack _playerBloodP;
};
case ("AliveTime"):{
_customVars pushBack _playerAliveTime;
};
case ("Hunger"):{
_customVars pushBack _playerHunger;
};
case ("Thirst"):{
_customVars pushBack _playerThirst;
};
case ("Alcohol"):{
_customVars pushBack _playerAlcohol;
};
case ("Energy"):{
_customVars pushBack _playerEnergy;
};
default {
private _customVarIndex = _customVarNames find _x;
if (_customVarIndex != -1) then {
@ -61,14 +125,14 @@ if (isNil "EPOCH_display_setup_complete") then {
// Background radiation
_backgroundRadiation = ["CfgEpochClient", "backgroundRadiation", 10] call EPOCH_fnc_returnConfigEntryV2;
_outOfBoundsRadiation = ["CfgEpochClient", "outOfBoundsRadiation", 10] call EPOCH_fnc_returnConfigEntryV2;
_radsLevel = 0;
_prevEquippedItem = [];
_damagePlayer = damage player;
_isOnFoot = isNull objectParent player;
_panic = false;
_prevEnergy = EPOCH_playerEnergy;
_prevEnergy = _playerEnergy;
// init config data
@ -81,7 +145,7 @@ _energyRegenMax = ["CfgEpochClient", "energyRegenMax", 5] call EPOCH_fnc_returnC
_energyRange = ["CfgEpochClient", "energyRange", 75] call EPOCH_fnc_returnConfigEntryV2;
_hudConfigs = ["CfgEpochClient", "hudConfigs", []] call EPOCH_fnc_returnConfigEntryV2;
EPOCH_chargeRate = 0;
_chargeRate = 0;
EPOCH_playerIsSwimming = false;
_antagonistChanceDefaults = [

View File

@ -86,14 +86,4 @@ addMissionEventHandler ["PlayerViewChanged", {if (cameraView isEqualTo "GROUP")
[] execFSM "epoch_code\system\player_login.fsm";
//Start processing right after Loading screen is done and game has started
[] spawn {
waitUntil {!isNull (findDisplay 46) && (!isNil "EPOCH_loadingScreenDone")};
'load' call epoch_favBar_draw;
// testing for civilan males
player addRating -2000;
};
true

View File

@ -127,7 +127,6 @@ class CfgClientFunctions
class fnc_findSapperStalkLocation {};
class fnc_dirToFuzzy {};
class fnc_cursorTarget {};
class fnc_arrayToLogic {};
class fnc_returnHudVar {};
class fnc_triggerAntagonist {};
class fnc_playerDeathDetonate {};

View File

@ -97,7 +97,7 @@ class CfgEpochClient
{"Toxicity",0,{100,0,35,55,-1,-1}},
{"Stamina",100,{"EPOCH_playerStaminaMax",0}},
{"Crypto",0,{250000,0}},
{"HitPoints",{0,0,0,0},{1,0,0.5,1,-1,-1}}, // only limits here used for HUD.
{"HitPoints",{0,0,0,0},{1,0,0.5,1,-1,-1}}, // limits here only used for HUD.
{"BloodP",100,{190,0,120,140,70,50}},
{"SpawnArray",{},{}},
{"NotUsed",0,{50000,-50000}}, // TODO remove or replace
@ -106,6 +106,20 @@ class CfgEpochClient
{"Nuisance",0,{100,0}},
{"MissionArray",{},{}}
};
// Digest System
hunger[] = {
0, // default value
10, // loss rate
20, // increase rate
1000 // max
};
thirst[] = {
0, // default value
10, // loss rate
20, // increase rate
1000 // max
};
hudConfigs[] = {
{{"BloodP","","",{"getPlayerDamage",">=",0.7}},"topRight","x\addons\a3_epoch_code\Data\UI\bleeding_ca.paa",{"forceUpdate"}},
{{"Oxygen","getPlayerOxygenRemaining","",{},{1,0,2,2,1,0.55}},"topRight","x\addons\a3_epoch_code\Data\UI\oxygen_ca.paa"},

View File

@ -11,7 +11,7 @@ interactAttributes[] = {
{"Toxicity",0},
{"Stamina",0},
{"Wet",0},
{"BloodP",0},
{"BloodP",0}, // only increase is allowed
{"Karma",0},
{"Alcohol",0},
{"Radiation",0}
@ -76,7 +76,7 @@ class CfgItemInteractions
class honey_epoch : Food_Jar_base
{
interactText = "EAT";
interactAttributes[] = {{"Immunity",1},{"Stamina",30},{"BloodP",10}};
interactAttributes[] = {{"Immunity",1},{"Stamina",30}};
interactActions[] = {{"EMPTY","[1,[],'emptyjar_epoch'] call EPOCH_consumeItem;"}};
};
class sardines_epoch : Food_TinCan_base
@ -342,7 +342,7 @@ class CfgItemInteractions
class ItemVitamins : Food_base
{
interactText = "Take Pills";
interactAttributes[] = {{"Immunity",20},{"Stamina",50},{"BloodP",-10},{"Toxicity",-5},{"Thirst",-150}};
interactAttributes[] = {{"Immunity",20},{"Stamina",50},{"Toxicity",-5},{"Thirst",-150}};
};
class KitSpikeTrap : Item_Build_base
{
@ -508,7 +508,7 @@ class CfgItemInteractions
{
interactAction = 6;
interactText = "USE";
interactAttributes[] = {{"Immunity",10},{"Stamina",-100},{"BloodP",-10}};
interactAttributes[] = {{"Immunity",10},{"Stamina",-100}};
};
class Goldenseal : Default
{

View File

@ -18,6 +18,7 @@ class CfgObjectInteractions
fatigueChance = 0;
bleedAmount = 0;
bloodpAmount = 0;
toxicAmount = 0;
soundEffect[] = {};
soundEffectGlobal = 0;
animationEffect[] = {};
@ -166,6 +167,7 @@ class CfgObjectInteractions
interactMode = 3;
distance = 3;
toxicChance = 0.2;
toxicAmount = 10;
bloodpChance = 1;
fatigueChance = 0.5;
bleedAmount = 30;
@ -181,6 +183,7 @@ class CfgObjectInteractions
interactMode = 3;
distance = 3;
toxicChance = 0.1;
toxicAmount = 10;
bloodpChance = 1;
fatigueChance = 0.5;
bleedAmount = 30;
@ -210,6 +213,7 @@ class CfgObjectInteractions
{
distance = 6;
toxicChance = 1;
toxicAmount = 100;
bleedChance = 0;
bloodpChance = 1;
fatigueChance = 1;
@ -238,6 +242,7 @@ class CfgObjectInteractions
{
distance = 3;
toxicChance = 0.1;
toxicAmount = 10;
bloodpChance = 0.9;
fatigueChance = 0.4;
bleedAmount = 30;

View File

@ -6,27 +6,23 @@
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server_settings/EpochEvents/Satellite.sqf
*/
//[[[cog import generate_private_arrays ]]]
private ["_item","_marker","_playersNearEpicenter","_position","_satellites"];
private ["_satellite","_marker","_playersNearEpicenter","_position","_satellites"];
//[[[end]]]
_position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 1000, 0] call BIS_fnc_findSafePos;
if ((count _position) == 2) then{
_playersNearEpicenter = _position nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 1000];
// todo send shockwave + effects to each player in zone
/*
if !(_playersNearEpicenter isEqualTo[]) then{
// todo add shockwave effects script
[_position] remoteExec ['EPOCH_client_earthQuake',_playersNearEpicenter];
};
*/
// Satellite classes
// spawn Satellite
_satellites = ["Land_Wreck_Satellite_EPOCH"];
_satellite = createVehicle[(selectRandom _satellites), _position, [], 0.0, "CAN_COLLIDE"];
_item = createVehicle[(selectRandom _satellites), _position, [], 0.0, "CAN_COLLIDE"];
// send shockwave + effects to each player in zone at time of crash
_playersNearEpicenter = _position nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 1000];
if !(_playersNearEpicenter isEqualTo[]) then{
[_satellite, -1, 0.8, false] remoteExec ['BIS_fnc_sandstorm',_playersNearEpicenter];
};
// set rads
_item setVariable ["EPOCH_Rads", 100, true];
_satellite setVariable ["EPOCH_Rads", 10, true];
if (EPOCH_showSatellites) then{
_marker = createMarker[str(_position), _position];