Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Author: TeeTime
- Does: Manages the body temperature of a Player
- Possible Problems:
- => Balancing
- Missing:
- Save Functions
- Should Effects Sum Up?
- Math Functions for Water
- Player Update GUI Colours need to be checked
- Shivering Function need improvements
- */
- private ["_warm_clothes","_cold_clothes","_snow_factor","_snowfall","_playerIsWarm","_playerIsCold","_difference","_isinvehicle","_isinbuilding","_daytime","_height_mod","_temp","_looptime","_vehicle_factor","_moving_factor","_fire_factor","_building_factor","_sun_factor","_water_factor","_rain_factor","_night_factor","_wind_factor","_raining","_sunrise","_fireplaces","_building"];
- _looptime = _this;
- //Factors are equal to win/loss of factor*basic value
- //All Values can be seen as x of 100: 100 / x = minutes from min temperature to max temperature (without other effects)
- /*
- Warm Weather Variables Start
- _vehicle_factor = 5;
- _moving_factor = 4;
- _fire_factor = 20; //Should be always: _rain_factor + _night_factor + _wind_factor OR higher !
- _building_factor = 7;
- _sun_factor = 4; //max sun factor linear over the day. highest value in the middle of the day
- _water_factor = -40;
- _rain_factor = -30; //6
- _night_factor = -15; //4
- _wind_factor = -20;
- _stand_factor = -12; //4
- _difference = 0;
- //_hasfireffect = false;
- _isinbuilding = false;
- _isinvehicle = false;
- _raining = if(rain > 0) then {true} else {false};
- _sunrise = call world_sunRise;
- Warm Weather Variables End
- */
- /*
- Cold Weather Start */
- _vehicle_factor = 4;
- _moving_factor = 3;
- _fire_factor = 34; //Should be always: _snow_factor + _rain_factor + _night_factor + _wind_factor OR higher !
- _building_factor = 6;
- _sun_factor = 2; //max sun factor linear over the day. highest value in the middle of the day
- _warm_clothes = 24;
- _luke_clothes = 12;
- _cold_clothes = 0;
- _water_factor = -40;
- _rain_factor = -16; //6
- _snow_factor = -18;
- _night_factor = -7; //4
- _wind_factor = -7;
- _stand_factor = -7; //4
- _difference = 0;
- //_hasfireffect = false;
- _isinbuilding = false;
- _isinvehicle = false;
- if(isNil ("snow")) then {snow = 0};
- _snowfall = if(snow > 0) then {true} else {false};
- _raining = if(rain > 0) then {true} else {false};
- _sunrise = call world_sunRise;
- /*
- Cold Weather End */
- //POSITIV EFFECTS
- //vehicle
- if((vehicle player) != player) then {
- _difference = _difference + _vehicle_factor;
- _isinvehicle = true;
- } else {
- //speed factor
- private["_vel","_speed"];
- _vel = velocity player;
- _speed = round((_vel distance [0,0,0]) * 3.6);
- _difference = (_moving_factor * (_speed / 20)) min 7;
- };
- //fire
- _fireplaces = nearestObjects [player, ["flamable_DZ","Land_Fire","Land_Campfire"], 8];
- if(({inflamed _x} count _fireplaces) > 0 && !_isinvehicle ) then {
- //Math: factor * 1 / (0.5*(distance max 1)^2) 0.5 = 12.5% of the factor effect in a distance o 4 meters
- _difference = _difference + (_fire_factor /(0.5*((player distance (_fireplaces select 0)) max 1)^2));
- //_hasfireffect = true;
- };
- //building
- _building = nearestObject [player, "HouseBase"];
- if(!isNull _building) then {
- if([player,_building] call fnc_isInsideBuilding) then {
- //Make sure thate Fire and Building Effect can only appear single Not used at the moment
- //if(!_hasfireffect && _fire_factor > _building_factor) then {
- _difference = _difference + _building_factor;
- //};
- _isinbuilding = true;
- dayz_inside = true;
- } else {
- dayz_inside = false;
- };
- } else {
- dayz_inside = false;
- };
- //sun
- if(daytime > _sunrise && daytime < (24 - _sunrise) && !_raining && overcast <= 0.6 && !_isinbuilding) then {
- /*Mathematic Basic
- t = temperature effect
- a = calcfactor
- f = sunfactor
- s = sunrise
- d = daytime
- I: a = f / (12 - s)
- II: t = -a * (d - 12) + f
- I + II =>
- t = -(f / (12 - s)) * (d - 12) + f
- Parabel with highest Point( greatest Effect == _sun_factor) always at 12.00
- Zero Points are always at sunrise and sunset -> Only Positiv Values Possible
- */
- _difference = _difference + (-((_sun_factor / (12 - _sunrise)^2)) * ((daytime - 12)^2) + _sun_factor);
- };
- _playerIsWarm = (typeOf player) in ["Sniper1_DZ","BanditW1_DZ","Bandit1_DZ","Survivor3_DZ","CZ_Soldier_DES_EP1","Ins_Soldier_Sniper"];
- _playerIsLuke = (typeOf player) in ["Camo1_DZ","Soldier1_DZ","Rocket_DZ"];
- _playerIsCold = (typeOf player) in [];
- if (_playerIsWarm) then {
- _difference = _difference + _warm_clothes;
- };
- if (_playerIsCold) then {
- _difference = _difference + _cold_clothes;
- };
- if (_playerIsLuke) then {
- _difference = _difference + _luke_clothes;
- };
- //NEGATIVE EFFECTS
- //water
- if(surfaceIsWater getPosATL player || dayz_isSwimming) then {
- _difference = _difference + _water_factor;
- };
- //rain
- if(_raining && !_isinvehicle && !_isinbuilding) then {
- _difference = _difference + (rain * _rain_factor);
- };
- if(_snowfall && !_isinvehicle && !_isinbuilding) then {
- _difference = _difference + (snow * _snow_factor);
- };
- //night
- if((daytime < _sunrise || daytime > (24 - _sunrise)) && !_isinvehicle) then {
- _daytime = if(daytime < 12) then {daytime + 24} else {daytime};
- if(_isinbuilding) then {
- _difference = _difference + ((((_night_factor * -1) / (_sunrise^2)) * ((_daytime - 24)^2) + _night_factor)) / 2;
- } else {
- _difference = _difference + (((_night_factor * -1) / (_sunrise^2)) * ((_daytime - 24)^2) + _night_factor);
- };
- };
- //wind
- if(((wind select 0) > 4 || (wind select 1) > 4) && !_isinvehicle && !_isinbuilding ) then {
- _difference = _difference + _wind_factor;
- };
- /*
- //height
- if (!_isinvehicle && overcast >= 0.6) then {
- _height_mod = ((getPosASL player select 2) / 100) / 2;
- _difference = _difference - _height_mod;
- };
- */
- //height
- if(!_isinvehicle && overcast >= 0.6) then {
- _height_mod = ((getPosASL player select 2) / 100) * 4;
- _difference = _difference - _height_mod;
- };
- //Standing cooldown.
- if (!_isinvehicle && !_isinvehicle && !_isinbuilding) then {
- _difference = _difference - _stand_factor;
- };
- //Calculate Change Value Basic Factor Looptime Correction Adjust Value to current used temperatur scala
- _difference = _difference * SleepTemperatur / (60 / _looptime) * ((dayz_temperaturmax - dayz_temperaturmin) / 100);
- //Change Temperatur Should be moved in a own Function to allow adding of Items which increase the Temp like "hot tea"
- dayz_temperatur = (((dayz_temperatur + _difference) max dayz_temperaturmin) min dayz_temperaturmax);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement