cfggameplayhandler.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457
  1. class CfgGameplayHandler
  2. {
  3. private static string m_Path = "$mission:cfggameplay.json";
  4. private static ref array<ref ITEM_DataBase> m_Items = new array<ref ITEM_DataBase>();
  5. static ref CfgGameplayJson m_Data = new CfgGameplayJson();
  6. //---------------------------------------------------------------------------------------
  7. static void RegisterItem(ITEM_DataBase item)
  8. {
  9. m_Items.Insert(item);
  10. }
  11. //---------------------------------------------------------------------------------------
  12. private static void ValidateItems()
  13. {
  14. foreach (ITEM_DataBase item : m_Items)
  15. {
  16. if (!item.ValidateServer())
  17. {
  18. string itemName = item.Type().ToString();
  19. itemName.Replace("ITEM_", "");
  20. PrintToRPT("Validation failed during loading of 'cfggameplay.json' for " + itemName);
  21. item.InitServer();
  22. }
  23. }
  24. }
  25. //---------------------------------------------------------------------------------------
  26. private static void InitData()
  27. {
  28. foreach (ITEM_DataBase item:m_Items)
  29. {
  30. item.InitServer();
  31. }
  32. }
  33. #ifdef DEVELOPER
  34. //---------------------------------------------------------------------------------------
  35. static void Output()
  36. {
  37. Print(m_Items.Count());
  38. }
  39. #endif
  40. //---------------------------------------------------------------------------------------
  41. static bool LoadData()
  42. {
  43. if (!FileExist(m_Path))
  44. {
  45. m_Path = "";
  46. GetGame().GetWorldName(m_Path);
  47. m_Path = string.Format("dz/worlds/%1/ce/cfggameplay.json", m_Path);
  48. }
  49. bool cfgGameplayFileEnabled = GetGame().ServerConfigGetInt( "enableCfgGameplayFile" );
  50. #ifdef DIAG_DEVELOPER
  51. if (!GetGame().IsDedicatedServer())
  52. {
  53. cfgGameplayFileEnabled = true;
  54. }
  55. #endif
  56. if (!cfgGameplayFileEnabled || !FileExist(m_Path))
  57. {
  58. m_Data.InitServer();//legacy call
  59. InitData();
  60. OnLoaded();
  61. return false;
  62. }
  63. string errorMessage;
  64. if (!JsonFileLoader<CfgGameplayJson>.LoadFile(m_Path, m_Data, errorMessage)) //! we are allowed to read the file, so we replace the default data with data from json
  65. ErrorEx(errorMessage);
  66. ValidateItems();
  67. OnLoaded();
  68. return true;
  69. }
  70. //---------------------------------------------------------------------------------------
  71. static void OnLoaded()
  72. {
  73. GetGame().GetMission().OnGameplayDataHandlerLoad();
  74. DayZGame.Cast(GetGame()).OnGameplayDataHandlerLoad();
  75. }
  76. //---------------------------------------------------------------------------------------
  77. static void SyncDataSend(notnull Man player)
  78. {
  79. GetGame().RPCSingleParam(player, ERPCs.RPC_CFG_GAMEPLAY_SYNC, new Param1<CfgGameplayJson>(m_Data), true, player.GetIdentity());
  80. }
  81. //---------------------------------------------------------------------------------------
  82. static void SyncDataSendEx(notnull PlayerIdentity identity)
  83. {
  84. //Debug.Log("SyncDataSendEx");
  85. GetGame().RPCSingleParam(null, ERPCs.RPC_CFG_GAMEPLAY_SYNC, new Param1<CfgGameplayJson>(m_Data), true, identity);
  86. }
  87. //---------------------------------------------------------------------------------------
  88. static void OnRPC(Man player, ParamsReadContext ctx)
  89. {
  90. Param1<CfgGameplayJson> data = new Param1<CfgGameplayJson>(null);
  91. if ( ctx.Read(data) )
  92. {
  93. m_Data = data.param1;
  94. }
  95. else
  96. {
  97. ErrorEx("CfgGameplayHandler - client failed to read incoming data");
  98. }
  99. }
  100. // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  101. //!! =====================================================================================
  102. //!!! the naming convention for static functions in this file is Get+MemberVariableName !!
  103. //!! =====================================================================================
  104. // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  105. //========================
  106. // !!! ONLY GETTERS BELLOW
  107. //========================
  108. //----------------------------------------------------------------------------------
  109. static bool GetDisablePersonalLight()
  110. {
  111. return m_Data.PlayerData.disablePersonalLight;
  112. }
  113. //----------------------------------------------------------------------------------
  114. //------------------------------- WorldsData -----------------------------------
  115. static int GetLightingConfig()
  116. {
  117. return m_Data.WorldsData.lightingConfig;
  118. }
  119. static TStringArray GetObjectSpawnersArr()
  120. {
  121. return m_Data.WorldsData.objectSpawnersArr;
  122. }
  123. static array<float> GetEnvironmentMinTemps()
  124. {
  125. return m_Data.WorldsData.environmentMinTemps;
  126. }
  127. static array<float> GetEnvironmentMaxTemps()
  128. {
  129. return m_Data.WorldsData.environmentMaxTemps;
  130. }
  131. static array<float> GetWetnessWeightModifiers()
  132. {
  133. return m_Data.WorldsData.wetnessWeightModifiers;
  134. }
  135. //----------------------------------------------------------------------------------
  136. static bool GetDisableBaseDamage()
  137. {
  138. return m_Data.GeneralData.disableBaseDamage;
  139. }
  140. //----------------------------------------------------------------------------------
  141. static bool GetDisableContainerDamage()
  142. {
  143. return m_Data.GeneralData.disableContainerDamage;
  144. }
  145. //----------------------------------------------------------------------------------
  146. static bool GetDisableRespawnDialog()
  147. {
  148. return m_Data.GeneralData.disableRespawnDialog;
  149. }
  150. //----------------------------------------------------------------------------------
  151. static bool GetDisableRespawnInUnconsciousness()
  152. {
  153. return m_Data.GeneralData.disableRespawnInUnconsciousness;
  154. }
  155. //----------------------------------------------------------------------------------
  156. static float GetSprintStaminaModifierErc()
  157. {
  158. return m_Data.PlayerData.StaminaData.sprintStaminaModifierErc;
  159. }
  160. //----------------------------------------------------------------------------------
  161. static float GetSprintStaminaModifierCro()
  162. {
  163. return m_Data.PlayerData.StaminaData.sprintStaminaModifierCro;
  164. }
  165. //----------------------------------------------------------------------------------
  166. static float GetSprintSwimmingStaminaModifier()
  167. {
  168. return m_Data.PlayerData.StaminaData.sprintSwimmingStaminaModifier;
  169. }//----------------------------------------------------------------------------------
  170. static float GetSprintLadderStaminaModifier()
  171. {
  172. return m_Data.PlayerData.StaminaData.sprintLadderStaminaModifier;
  173. }
  174. //----------------------------------------------------------------------------------
  175. static float GetStaminaWeightLimitThreshold()
  176. {
  177. return m_Data.PlayerData.StaminaData.staminaWeightLimitThreshold;
  178. }
  179. //----------------------------------------------------------------------------------
  180. static float GetStaminaMax()
  181. {
  182. return m_Data.PlayerData.StaminaData.staminaMax;
  183. }
  184. //----------------------------------------------------------------------------------
  185. static float GetStaminaKgToStaminaPercentPenalty()
  186. {
  187. return m_Data.PlayerData.StaminaData.staminaKgToStaminaPercentPenalty;
  188. }
  189. //----------------------------------------------------------------------------------
  190. static float GetStaminaMinCap()
  191. {
  192. return m_Data.PlayerData.StaminaData.staminaMinCap;
  193. }
  194. //----------------------------------------------------------------------------------
  195. static float GetMeleeStaminaModifier()
  196. {
  197. return m_Data.PlayerData.StaminaData.meleeStaminaModifier;
  198. }
  199. //----------------------------------------------------------------------------------
  200. static float GetObstacleTraversalStaminaModifier()
  201. {
  202. return m_Data.PlayerData.StaminaData.obstacleTraversalStaminaModifier;
  203. }
  204. //----------------------------------------------------------------------------------
  205. static float GetHoldBreathStaminaModifier()
  206. {
  207. return m_Data.PlayerData.StaminaData.holdBreathStaminaModifier;
  208. }
  209. //----------------------------------------------------------------------------------
  210. static float GetMovementTimeToStrafeJog()
  211. {
  212. return Math.Max(0.01, m_Data.PlayerData.MovementData.timeToStrafeJog);
  213. }
  214. //----------------------------------------------------------------------------------
  215. static float GetMovementTimeToSprint()
  216. {
  217. return Math.Max(0.01, m_Data.PlayerData.MovementData.timeToSprint);
  218. }
  219. //----------------------------------------------------------------------------------
  220. static float GetMovementTimeToStrafeSprint()
  221. {
  222. return Math.Max(0.01, m_Data.PlayerData.MovementData.timeToStrafeSprint);
  223. }
  224. //----------------------------------------------------------------------------------
  225. static float GetMovementRotationSpeedJog()
  226. {
  227. return Math.Max(0.01, m_Data.PlayerData.MovementData.rotationSpeedJog);
  228. }
  229. //----------------------------------------------------------------------------------
  230. static float GetMovementRotationSpeedSprint()
  231. {
  232. return Math.Max(0.01, m_Data.PlayerData.MovementData.rotationSpeedSprint);
  233. }
  234. //----------------------------------------------------------------------------------
  235. static bool GetDisable2dMap()
  236. {
  237. return m_Data.PlayerData.disable2dMap;
  238. }
  239. //----------------------------------------------------------------------------------
  240. static bool GetDisableIsCollidingBBoxCheck()
  241. {
  242. return m_Data.BaseBuildingData.HologramData.disableIsCollidingBBoxCheck;
  243. }
  244. //----------------------------------------------------------------------------------
  245. static bool GetDisableIsCollidingPlayerCheck()
  246. {
  247. return m_Data.BaseBuildingData.HologramData.disableIsCollidingPlayerCheck;
  248. }
  249. //----------------------------------------------------------------------------------
  250. static bool GetDisableIsClippingRoofCheck()
  251. {
  252. return m_Data.BaseBuildingData.HologramData.disableIsClippingRoofCheck;
  253. }
  254. //----------------------------------------------------------------------------------
  255. static bool GetDisableIsBaseViableCheck()
  256. {
  257. return m_Data.BaseBuildingData.HologramData.disableIsBaseViableCheck;
  258. }
  259. //----------------------------------------------------------------------------------
  260. static bool GetDisableIsInTerrainCheck()
  261. {
  262. return m_Data.BaseBuildingData.HologramData.disableIsInTerrainCheck;
  263. }
  264. //----------------------------------------------------------------------------------
  265. static bool GetDisableIsUnderwaterCheck()
  266. {
  267. return m_Data.BaseBuildingData.HologramData.disableIsUnderwaterCheck;
  268. }
  269. //----------------------------------------------------------------------------------
  270. static bool GetDisableHeightPlacementCheck()
  271. {
  272. return m_Data.BaseBuildingData.HologramData.disableHeightPlacementCheck;
  273. }
  274. //----------------------------------------------------------------------------------
  275. static bool GetDisableIsPlacementPermittedCheck()
  276. {
  277. return m_Data.BaseBuildingData.HologramData.disableIsPlacementPermittedCheck;
  278. }
  279. //----------------------------------------------------------------------------------
  280. static bool GetDisableIsCollidingAngleCheck()
  281. {
  282. return m_Data.BaseBuildingData.HologramData.disableIsCollidingAngleCheck;
  283. }
  284. //----------------------------------------------------------------------------------
  285. static bool GetDisableIsCollidingGPlotCheck()
  286. {
  287. return m_Data.BaseBuildingData.HologramData.disableIsCollidingGPlotCheck;
  288. }
  289. //----------------------------------------------------------------------------------
  290. static bool GetDisableIsCollidingCheck()
  291. {
  292. return m_Data.BaseBuildingData.ConstructionData.disableIsCollidingCheck;
  293. }
  294. //----------------------------------------------------------------------------------
  295. static bool GetDisablePerformRoofCheck()
  296. {
  297. return m_Data.BaseBuildingData.ConstructionData.disablePerformRoofCheck;
  298. }
  299. //----------------------------------------------------------------------------------
  300. static bool GetDisableDistanceCheck()
  301. {
  302. return m_Data.BaseBuildingData.ConstructionData.disableDistanceCheck;
  303. }
  304. //----------------------------------------------------------------------------------
  305. static bool GetDisableColdAreaPlacementCheck()
  306. {
  307. return m_Data.BaseBuildingData.HologramData.disableColdAreaPlacementCheck;
  308. }
  309. //----------------------------------------------------------------------------------
  310. static TStringSet GetDisallowedTypesInUnderground()
  311. {
  312. return m_Data.BaseBuildingData.HologramData.disallowedTypesInUnderground;
  313. }
  314. //----------------------------------------------------------------------------------
  315. static bool GetHitIndicationOverrideEnabled() //TODO - ?
  316. {
  317. return m_Data.UIData.HitIndicationData.hitDirectionOverrideEnabled;
  318. }
  319. //----------------------------------------------------------------------------------
  320. static int GetHitIndicationMode()
  321. {
  322. return m_Data.UIData.HitIndicationData.hitDirectionBehaviour;
  323. }
  324. //----------------------------------------------------------------------------------
  325. static int GetHitIndicationTypeID()
  326. {
  327. return m_Data.UIData.HitIndicationData.hitDirectionStyle;
  328. }
  329. //----------------------------------------------------------------------------------
  330. static int GetHitIndicationIndicatorColor()
  331. {
  332. return m_Data.UIData.HitIndicationData.hitDirectionIndicatorColorStr.HexToInt();
  333. }
  334. //----------------------------------------------------------------------------------
  335. static float GetHitIndicationMaxDuration()
  336. {
  337. return m_Data.UIData.HitIndicationData.hitDirectionMaxDuration;
  338. }
  339. //----------------------------------------------------------------------------------
  340. static float GetHitIndicationBreakPoint()
  341. {
  342. return m_Data.UIData.HitIndicationData.hitDirectionBreakPointRelative;
  343. }
  344. //----------------------------------------------------------------------------------
  345. static float GetHitIndicationScatter()
  346. {
  347. return m_Data.UIData.HitIndicationData.hitDirectionScatter;
  348. }
  349. //----------------------------------------------------------------------------------
  350. static bool GetHitIndicationPPEEnabled()
  351. {
  352. return m_Data.UIData.HitIndicationData.hitIndicationPostProcessEnabled;
  353. }
  354. //----------------------------------------------------------------------------------
  355. static bool GetUse3DMap()
  356. {
  357. return m_Data.UIData.use3DMap;
  358. }
  359. //----------------------------------------------------------------------------------
  360. static float GetShockRefillSpeedConscious()
  361. {
  362. return m_Data.PlayerData.ShockHandlingData.shockRefillSpeedConscious;
  363. }
  364. //----------------------------------------------------------------------------------
  365. static float GetShockRefillSpeedUnconscious()
  366. {
  367. return m_Data.PlayerData.ShockHandlingData.shockRefillSpeedUnconscious;
  368. }
  369. //----------------------------------------------------------------------------------
  370. static bool GetAllowRefillSpeedModifier()
  371. {
  372. return m_Data.PlayerData.ShockHandlingData.allowRefillSpeedModifier;
  373. }
  374. //--- MapData ----------------------------------------------------------------------
  375. static bool GetMapIgnoreMapOwnership()
  376. {
  377. return m_Data.MapData.ignoreMapOwnership;
  378. }
  379. //----------------------------------------------------------------------------------
  380. static bool GetMapIgnoreNavItemsOwnership()
  381. {
  382. return m_Data.MapData.ignoreNavItemsOwnership;
  383. }
  384. //----------------------------------------------------------------------------------
  385. static bool GetMapDisplayPlayerPosition()
  386. {
  387. return m_Data.MapData.displayPlayerPosition;
  388. }
  389. //----------------------------------------------------------------------------------
  390. static bool GetMapDisplayNavigationInfo()
  391. {
  392. return m_Data.MapData.displayNavInfo;
  393. }
  394. //----------------------------------------------------------------------------------
  395. static float GetStaminaDepletionSpeed()
  396. {
  397. return m_Data.PlayerData.DrowningData.staminaDepletionSpeed;
  398. }
  399. //----------------------------------------------------------------------------------
  400. static float GetHealthDepletionSpeed()
  401. {
  402. return m_Data.PlayerData.DrowningData.healthDepletionSpeed;
  403. }
  404. //----------------------------------------------------------------------------------
  405. static float GetShockDepletionSpeed()
  406. {
  407. return m_Data.PlayerData.DrowningData.shockDepletionSpeed;
  408. }
  409. //----------------------------------------------------------------------------------
  410. static bool GetAllowStaminaAffectInertia()
  411. {
  412. return m_Data.PlayerData.MovementData.allowStaminaAffectInertia;
  413. }
  414. //----------------------------------------------------------------------------------
  415. static TStringArray GetPlayerSpawnGearPresetFiles()
  416. {
  417. return m_Data.PlayerData.spawnGearPresetFiles;
  418. }
  419. //----------------------------------------------------------------------------------
  420. static TStringArray GetPlayerRestrictedAreaFiles()
  421. {
  422. return m_Data.WorldsData.playerRestrictedAreaFiles;
  423. }
  424. //----------------------------------------------------------------------------------
  425. static float GetBoatDecayMultiplier()
  426. {
  427. return m_Data.VehicleData.boatDecayMultiplier;
  428. }
  429. }