Advertisement
Guest User

fn_temperatur.sqf

a guest
Nov 17th, 2017
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.66 KB | None | 0 0
  1. /*
  2. Author: TeeTime
  3.  
  4. Does: Manages the body temperature of a Player
  5.  
  6. Possible Problems:
  7. => Balancing
  8.  
  9. Missing:
  10. Save Functions
  11.  
  12. Should Effects Sum Up?
  13.  
  14. Math Functions for Water
  15.  
  16. Player Update GUI Colours need to be checked
  17.  
  18. Shivering Function need improvements
  19. */
  20. 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"];
  21. _looptime = _this;
  22.  
  23. //Factors are equal to win/loss of factor*basic value
  24. //All Values can be seen as x of 100: 100 / x = minutes from min temperature to max temperature (without other effects)
  25. /*
  26. Warm Weather Variables Start
  27. _vehicle_factor = 5;
  28. _moving_factor = 4;
  29. _fire_factor = 20; //Should be always: _rain_factor + _night_factor + _wind_factor OR higher !
  30. _building_factor = 7;
  31. _sun_factor = 4; //max sun factor linear over the day. highest value in the middle of the day
  32.  
  33. _water_factor = -40;
  34. _rain_factor = -30; //6
  35. _night_factor = -15; //4
  36. _wind_factor = -20;
  37. _stand_factor = -12; //4
  38.  
  39. _difference = 0;
  40. //_hasfireffect = false;
  41. _isinbuilding = false;
  42. _isinvehicle = false;
  43.  
  44. _raining = if(rain > 0) then {true} else {false};
  45. _sunrise = call world_sunRise;
  46. Warm Weather Variables End
  47. */
  48. /*
  49. Cold Weather Start */
  50. _vehicle_factor = 4;
  51. _moving_factor = 3;
  52. _fire_factor = 34; //Should be always: _snow_factor + _rain_factor + _night_factor + _wind_factor OR higher !
  53. _building_factor = 6;
  54. _sun_factor = 2; //max sun factor linear over the day. highest value in the middle of the day
  55.  
  56. _warm_clothes = 24;
  57. _luke_clothes = 12;
  58. _cold_clothes = 0;
  59.  
  60. _water_factor = -40;
  61. _rain_factor = -16; //6
  62. _snow_factor = -18;
  63. _night_factor = -7; //4
  64. _wind_factor = -7;
  65. _stand_factor = -7; //4
  66.  
  67. _difference = 0;
  68. //_hasfireffect = false;
  69. _isinbuilding = false;
  70. _isinvehicle = false;
  71.  
  72. if(isNil ("snow")) then {snow = 0};
  73. _snowfall = if(snow > 0) then {true} else {false};
  74. _raining = if(rain > 0) then {true} else {false};
  75. _sunrise = call world_sunRise;
  76. /*
  77. Cold Weather End */
  78.  
  79. //POSITIV EFFECTS
  80. //vehicle
  81. if((vehicle player) != player) then {
  82. _difference = _difference + _vehicle_factor;
  83. _isinvehicle = true;
  84. } else {
  85. //speed factor
  86. private["_vel","_speed"];
  87. _vel = velocity player;
  88. _speed = round((_vel distance [0,0,0]) * 3.6);
  89. _difference = (_moving_factor * (_speed / 20)) min 7;
  90. };
  91.  
  92. //fire
  93. _fireplaces = nearestObjects [player, ["flamable_DZ","Land_Fire","Land_Campfire"], 8];
  94. if(({inflamed _x} count _fireplaces) > 0 && !_isinvehicle ) then {
  95. //Math: factor * 1 / (0.5*(distance max 1)^2) 0.5 = 12.5% of the factor effect in a distance o 4 meters
  96. _difference = _difference + (_fire_factor /(0.5*((player distance (_fireplaces select 0)) max 1)^2));
  97. //_hasfireffect = true;
  98. };
  99.  
  100. //building
  101. _building = nearestObject [player, "HouseBase"];
  102. if(!isNull _building) then {
  103. if([player,_building] call fnc_isInsideBuilding) then {
  104. //Make sure thate Fire and Building Effect can only appear single Not used at the moment
  105. //if(!_hasfireffect && _fire_factor > _building_factor) then {
  106. _difference = _difference + _building_factor;
  107. //};
  108. _isinbuilding = true;
  109. dayz_inside = true;
  110. } else {
  111. dayz_inside = false;
  112. };
  113. } else {
  114. dayz_inside = false;
  115. };
  116.  
  117. //sun
  118. if(daytime > _sunrise && daytime < (24 - _sunrise) && !_raining && overcast <= 0.6 && !_isinbuilding) then {
  119. /*Mathematic Basic
  120.  
  121. t = temperature effect
  122.  
  123. a = calcfactor
  124. f = sunfactor
  125. s = sunrise
  126. d = daytime
  127.  
  128. I: a = f / (12 - s)
  129. II: t = -a * (d - 12) + f
  130.  
  131. I + II =>
  132.  
  133. t = -(f / (12 - s)) * (d - 12) + f
  134.  
  135. Parabel with highest Point( greatest Effect == _sun_factor) always at 12.00
  136. Zero Points are always at sunrise and sunset -> Only Positiv Values Possible
  137. */
  138.  
  139. _difference = _difference + (-((_sun_factor / (12 - _sunrise)^2)) * ((daytime - 12)^2) + _sun_factor);
  140. };
  141.  
  142. _playerIsWarm = (typeOf player) in ["Sniper1_DZ","BanditW1_DZ","Bandit1_DZ","Survivor3_DZ","CZ_Soldier_DES_EP1","Ins_Soldier_Sniper"];
  143. _playerIsLuke = (typeOf player) in ["Camo1_DZ","Soldier1_DZ","Rocket_DZ"];
  144. _playerIsCold = (typeOf player) in [];
  145.  
  146. if (_playerIsWarm) then {
  147. _difference = _difference + _warm_clothes;
  148. };
  149. if (_playerIsCold) then {
  150. _difference = _difference + _cold_clothes;
  151. };
  152. if (_playerIsLuke) then {
  153. _difference = _difference + _luke_clothes;
  154. };
  155.  
  156.  
  157. //NEGATIVE EFFECTS
  158.  
  159. //water
  160. if(surfaceIsWater getPosATL player || dayz_isSwimming) then {
  161. _difference = _difference + _water_factor;
  162. };
  163.  
  164. //rain
  165. if(_raining && !_isinvehicle && !_isinbuilding) then {
  166. _difference = _difference + (rain * _rain_factor);
  167. };
  168.  
  169. if(_snowfall && !_isinvehicle && !_isinbuilding) then {
  170. _difference = _difference + (snow * _snow_factor);
  171. };
  172.  
  173. //night
  174. if((daytime < _sunrise || daytime > (24 - _sunrise)) && !_isinvehicle) then {
  175. _daytime = if(daytime < 12) then {daytime + 24} else {daytime};
  176. if(_isinbuilding) then {
  177. _difference = _difference + ((((_night_factor * -1) / (_sunrise^2)) * ((_daytime - 24)^2) + _night_factor)) / 2;
  178. } else {
  179. _difference = _difference + (((_night_factor * -1) / (_sunrise^2)) * ((_daytime - 24)^2) + _night_factor);
  180. };
  181. };
  182.  
  183. //wind
  184. if(((wind select 0) > 4 || (wind select 1) > 4) && !_isinvehicle && !_isinbuilding ) then {
  185. _difference = _difference + _wind_factor;
  186. };
  187.  
  188. /*
  189. //height
  190. if (!_isinvehicle && overcast >= 0.6) then {
  191. _height_mod = ((getPosASL player select 2) / 100) / 2;
  192. _difference = _difference - _height_mod;
  193. };
  194. */
  195. //height
  196. if(!_isinvehicle && overcast >= 0.6) then {
  197. _height_mod = ((getPosASL player select 2) / 100) * 4;
  198. _difference = _difference - _height_mod;
  199. };
  200.  
  201. //Standing cooldown.
  202. if (!_isinvehicle && !_isinvehicle && !_isinbuilding) then {
  203. _difference = _difference - _stand_factor;
  204. };
  205.  
  206. //Calculate Change Value Basic Factor Looptime Correction Adjust Value to current used temperatur scala
  207. _difference = _difference * SleepTemperatur / (60 / _looptime) * ((dayz_temperaturmax - dayz_temperaturmin) / 100);
  208.  
  209. //Change Temperatur Should be moved in a own Function to allow adding of Items which increase the Temp like "hot tea"
  210. dayz_temperatur = (((dayz_temperatur + _difference) max dayz_temperaturmin) min dayz_temperaturmax);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement