mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
fc3ba3b3fb
moved debug monitor to master loop dropped digest idea for now removed file check on masterloop and keydown
209 lines
6.6 KiB
Plaintext
209 lines
6.6 KiB
Plaintext
if !(EPOCH_arr_interactedObjs isEqualTo[]) then {
|
|
[EPOCH_arr_interactedObjs] remoteExec["EPOCH_server_save_vehicles", 2];
|
|
EPOCH_arr_interactedObjs = [];
|
|
};
|
|
|
|
if (damage player != _damagePlayer) then {
|
|
if (alive player) then {
|
|
_forceUpdate = true;
|
|
_damagePlayer = damage player;
|
|
};
|
|
};
|
|
|
|
// calculate total available power
|
|
// 1. number of power production devices within range 75m
|
|
|
|
// find share of power based on factors
|
|
// 1. number of players
|
|
// 2. Other sources of drain (Lights)
|
|
|
|
_energyValue = _chargeRate min _energyRegenMax;
|
|
_vehicle = vehicle player;
|
|
if (_vehicle != player && isEngineOn _vehicle) then {
|
|
_energyValue = _energyValue + 5;
|
|
};
|
|
|
|
if (currentVisionMode player == 1) then { //NV enabled
|
|
_energyValue = _energyValue - _energyCostNV;
|
|
if (_playerEnergy == 0) then {
|
|
player action["nvGogglesOff", player];
|
|
["Night Vision Goggles: Need Energy", 5] call Epoch_message;
|
|
};
|
|
};
|
|
|
|
// Sets visual effect
|
|
if (_playerAlcohol > 20) then {
|
|
_drunkVal = linearConversion [0,100,_playerAlcohol,0.1,1,true];
|
|
[_drunkVal, 2] call epoch_setDrunk;
|
|
} else {
|
|
[0, 2] call epoch_setDrunk;
|
|
};
|
|
|
|
// Sets visual effect
|
|
if (_playerRadiation > 1) then {
|
|
_radiationVal = linearConversion [0,100,_playerRadiation,0.1,1,true];
|
|
[_radiationVal, 2] call epoch_setRadiation;
|
|
|
|
// if player has geiger counter make sound based on rads level
|
|
if ('ItemGeigerCounter_EPOCH' in assignedItems player) then {
|
|
_level = round(linearConversion [0,100,_radsLevel,0,3,true]);
|
|
_sound = format ["geiger_%1",_level];
|
|
playSound _sound;
|
|
};
|
|
} else {
|
|
[0, 2] call epoch_setRadiation;
|
|
};
|
|
|
|
// Energy Handler
|
|
_playerEnergy = [_playerEnergyKey,_energyValue,_playerEnergyMax,_playerEnergyMin] call EPOCH_fnc_setVariableLimited;
|
|
|
|
if !(_playerEnergy isEqualTo _prevEnergy) then {
|
|
9993 cutRsc["EpochGameUI3", "PLAIN", 0, false];
|
|
_display3 = uiNamespace getVariable "EPOCH_EpochGameUI3";
|
|
_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(_playerEnergy), _playerEnergyMax, _diffText];
|
|
_prevEnergy = _playerEnergy;
|
|
};
|
|
|
|
if (_playerEnergy == 0) then {
|
|
if (EPOCH_buildMode > 0) then {
|
|
EPOCH_buildMode = 0;
|
|
EPOCH_snapDirection = 0;
|
|
["Build Mode Disabled: Need Energy", 5] call Epoch_message;
|
|
EPOCH_Target = objNull;
|
|
EPOCH_Z_OFFSET = 0;
|
|
EPOCH_X_OFFSET = 0;
|
|
EPOCH_Y_OFFSET = 5;
|
|
};
|
|
};
|
|
|
|
_attackers = player nearEntities[["Snake_random_EPOCH", "GreatWhite_F", "Epoch_Cloak_F"], 30];
|
|
if !(_attackers isEqualTo[]) then {
|
|
(_attackers select 0) call EPOCH_client_bitePlayer;
|
|
_panic = true;
|
|
} else {
|
|
_toxicObjs = player nearobjects["SmokeShellCustom", 6];
|
|
if!(_toxicObjs IsEqualTo[]) then {
|
|
(_toxicObjs select 0) call EPOCH_client_bitePlayer;
|
|
_panic = true;
|
|
} else {
|
|
_panic = false;
|
|
};
|
|
};
|
|
|
|
// weather stats
|
|
_airTemp = EPOCH_CURRENT_WEATHER;
|
|
_waterTemp = EPOCH_CURRENT_WEATHER/2;
|
|
_warming = true;
|
|
_wet = false;
|
|
_maxTemp = 98.6; // normal body temp
|
|
_increaseWet = 0;
|
|
_wetsuit = (getText(configfile >> "cfgweapons" >> uniform player >> "itemInfo" >> "uniformType") == "Neopren");
|
|
|
|
if (_isOnFoot) then {
|
|
if (EPOCH_playerIsSwimming) then {
|
|
// do nothing if player is wearing a wetsuit
|
|
if (!_wetsuit) then {
|
|
if (_waterTemp <= 50) then {
|
|
_warming = false;
|
|
};
|
|
_wet = true;
|
|
_increaseWet = 10;
|
|
};
|
|
} else {
|
|
if (_playerWet > 50 && _airTemp <= 32) then {
|
|
_isNearFire = {inflamed _x} count (nearestObjects [player, ["ALL"], 3]);
|
|
if (!(call EPOCH_fnc_isInsideBuilding) && _isNearFire == 0) then {
|
|
_warming = false;
|
|
};
|
|
};
|
|
if (rain >= 0.25) then {
|
|
if (!_wetsuit) then {
|
|
_isNearFire = { inflamed _x } count(nearestObjects[player, ["ALL"], 3]);
|
|
if (!(call EPOCH_fnc_isInsideBuilding) && _isNearFire == 0) then {
|
|
_wet = true;
|
|
_increaseWet = rain * 10;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
// allow player to over heat if air temp is high and player is Fatigued
|
|
if ((getFatigue player) >= 0.7 && _airTemp > 100) then {
|
|
_maxTemp = _airTemp;
|
|
};
|
|
|
|
|
|
|
|
// toxic fever and immunity increase
|
|
if (_playerToxicity > 0) then {
|
|
_playerImmunity = [_playerImmunityKey,0.1,_playerImmunityMax,_playerImmunityMin] call EPOCH_fnc_setVariableLimited;
|
|
_playerToxicity = [_playerToxicityKey,-0.1,_playerToxicityMax,_playerToxicityMin] call EPOCH_fnc_setVariableLimited;
|
|
// allow player to overheat
|
|
_maxTemp = _playerTempMax + 10;
|
|
};
|
|
|
|
// Body Temp handler
|
|
if (_warming) then {
|
|
_playerTemp = [_playerTempKey,0.01,_maxTemp,_playerTempMin] call EPOCH_fnc_setVariableLimited;
|
|
} else {
|
|
_playerTemp = [_playerTempKey,-0.01,_maxTemp,(_playerTempMin - 10)] call EPOCH_fnc_setVariableLimited;
|
|
};
|
|
|
|
// wet/dry
|
|
if (_wet) then {
|
|
_playerWet = ((_playerWet + _increaseWet) min _playerWetMax) max _playerWetMin;
|
|
if (_playerWet > 50) then {
|
|
_soiledLossRate = 1;
|
|
_playerSoiled = [_playerSoiledKey,-_soiledLossRate,_playerSoiledMax,_playerSoiledMin] call EPOCH_fnc_setVariableLimited;
|
|
};
|
|
} else {
|
|
if (_warming) then {
|
|
_wetLossRate = 1;
|
|
_playerWet = [_playerWetKey,-_wetLossRate,_playerWetMax,_playerWetMin] call EPOCH_fnc_setVariableLimited;
|
|
};
|
|
};
|
|
|
|
// Hunger / Thirst
|
|
_hungerlossRate = _baseHungerLoss * timeMultiplier;
|
|
_thirstlossRate = _baseThirstLoss * timeMultiplier;
|
|
|
|
// Increase hunger if player is Fatigued
|
|
if (_playerStamina < 100) then {
|
|
if ((getFatigue player) > 0) then {
|
|
_hungerlossRate = _hungerlossRate + (_hungerlossRate*(getFatigue player));
|
|
};
|
|
} else {
|
|
// reduce hunger loss if player stamina is greater than 100
|
|
_hungerlossRate = (_hungerlossRate / 2);
|
|
};
|
|
|
|
// Alcohol Handler
|
|
_playerAlcohol = [_playerAlcoholKey,-_alcoholLossRate,_playerAlcoholMax,_playerAlcoholMin] call EPOCH_fnc_setVariableLimited;
|
|
|
|
// Hunger Handler
|
|
_playerHunger = [_playerHungerKey,-_hungerlossRate,_playerHungerMax,_playerHungerMin] call EPOCH_fnc_setVariableLimited;
|
|
|
|
// Thirst Handler
|
|
_playerThirst = [_playerThirstKey,-_thirstlossRate,_playerThirstMax,_playerThirstMin] call EPOCH_fnc_setVariableLimited;
|
|
|
|
// Nuisance Handler
|
|
_playerEnergy = [_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
|
|
_playerRadiation = [_playerRadiationKey,_radsLevel,_playerRadiationMax,_playerRadiationMin] call EPOCH_fnc_setVariableLimited;
|
|
};
|
|
|
|
// calculate max stamina
|
|
EPOCH_playerStaminaMax = (100 * (round(_playerAliveTime/360)/10)) min 2500;
|
|
|
|
// process loot
|
|
call _lootBubble;
|