playerstatspco.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. class PCOHandlerStats
  2. {
  3. ref map<int, ref PlayerStatsPCO_Base> m_PCOs = new map<int, ref PlayerStatsPCO_Base>;
  4. int m_HighestVersion;;
  5. protected Man m_Player;
  6. void PCOHandlerStats(Man player)
  7. {
  8. m_Player = player;
  9. RegisterPCO(new PlayerStatsPCO_v100);
  10. RegisterPCO(new PlayerStatsPCO_v101);
  11. RegisterPCO(new PlayerStatsPCO_current);
  12. }
  13. void RegisterPCO(PlayerStatsPCO_Base pco)
  14. {
  15. int version = pco.GetVersion();
  16. if (version > m_HighestVersion)
  17. m_HighestVersion = version;
  18. pco.SetPlayer(m_Player);
  19. pco.Init();
  20. m_PCOs.Insert(version, pco);
  21. }
  22. PlayerStatsPCO_Base GetPCO(int version = -1)
  23. {
  24. if (version == -1)//no version set - fetch the highest version
  25. {
  26. return m_PCOs.Get(m_HighestVersion);
  27. }
  28. else if (!m_PCOs.Contains(version))//version set - version not present, fetch the closest lower version
  29. {
  30. for (int i = version; i > 100; --i)
  31. {
  32. if (m_PCOs.Contains(i))
  33. {
  34. //Print("fetching PCO version:"+ i);
  35. return m_PCOs.Get(i);
  36. }
  37. }
  38. return null;
  39. }
  40. else//version set - version present, fetch it
  41. {
  42. //Print("fetching PCO version:"+ version);
  43. return m_PCOs.Get(version);
  44. }
  45. }
  46. }
  47. class PlayerStatsPCO_Base
  48. {
  49. protected Man m_Player;
  50. void PlayerStatsPCO_Base()
  51. {
  52. }
  53. void Init();
  54. void SetPlayer(Man player)
  55. {
  56. m_Player = player;
  57. }
  58. int GetVersion()
  59. {
  60. return -1;
  61. }
  62. ref array<ref PlayerStatBase> m_PlayerStats = new array<ref PlayerStatBase>;
  63. PlayerStatBase GetStatObject(int id)
  64. {
  65. return m_PlayerStats.Get(id);
  66. }
  67. void RegisterStat(int id, PlayerStatBase stat)
  68. {
  69. m_PlayerStats.InsertAt(stat, id);
  70. stat.SetPlayer(m_Player);
  71. stat.Init(id);
  72. }
  73. void OnStoreSave(ParamsWriteContext ctx)
  74. {
  75. foreach (PlayerStatBase playerStat : m_PlayerStats)
  76. playerStat.OnStoreSave(ctx);
  77. }
  78. bool OnStoreLoad(ParamsReadContext ctx)
  79. {
  80. foreach (PlayerStatBase playerStat : m_PlayerStats)
  81. {
  82. if (!playerStat.OnStoreLoad(ctx))
  83. return false;
  84. }
  85. return true;
  86. }
  87. array<ref PlayerStatBase> Get()
  88. {
  89. return m_PlayerStats;
  90. }
  91. void ResetAllStats()
  92. {
  93. m_PlayerStats.Clear();
  94. Init();
  95. }
  96. void OnRPC(ParamsReadContext ctx)
  97. {
  98. ParamsReadContext localContext = ctx;
  99. localContext.Read(CachedObjectsParams.PARAM2_INT_FLOAT);
  100. PlayerStatBase playerStat = m_PlayerStats[CachedObjectsParams.PARAM2_INT_FLOAT.param1];
  101. playerStat.OnRPC(ctx);
  102. }
  103. void OnAfterStoreLoad()
  104. {
  105. foreach (PlayerStatBase playerStat : m_PlayerStats)
  106. playerStat.OnAfterStoreLoad();
  107. }
  108. }
  109. //---------------------------------------------------------------
  110. //------------------------- version 100 -------------------------
  111. //---------------------------------------------------------------
  112. enum EPlayerStats_v100
  113. {
  114. HEATCOMFORT,
  115. TREMOR,
  116. WET,
  117. ENERGY,
  118. WATER,
  119. STOMACH_SOLID,
  120. STOMACH_ENERGY,
  121. STOMACH_WATER,
  122. DIET,
  123. STAMINA,
  124. SPECIALTY,
  125. BLOODTYPE,
  126. };
  127. class PlayerStatsPCO_v100 extends PlayerStatsPCO_Base
  128. {
  129. override int GetVersion()
  130. {
  131. return 100;
  132. }
  133. override void Init()
  134. {
  135. RegisterStat(EPlayerStats_v100.HEATCOMFORT, new PlayerStat<float> (-1, 1, 0, "HeatComfort", EPSstatsFlags.EMPTY) );
  136. RegisterStat(EPlayerStats_v100.TREMOR, new PlayerStat<float> (0, 1, 0, "Tremor", EPSstatsFlags.EMPTY) );
  137. RegisterStat(EPlayerStats_v100.WET, new PlayerStat<int> (0, 1, 0, "Wet", EPSstatsFlags.EMPTY) );
  138. RegisterStat(EPlayerStats_v100.ENERGY, new PlayerStat<float> (0, 20000, 600, "Energy", EPSstatsFlags.EMPTY) );
  139. RegisterStat(EPlayerStats_v100.WATER, new PlayerStat<float> (0, 5000, 500, "Water", EPSstatsFlags.EMPTY) );
  140. RegisterStat(EPlayerStats_v100.STOMACH_SOLID, new PlayerStat<float> (0, 5000, 0, "StomachSolid", EPSstatsFlags.EMPTY) );
  141. RegisterStat(EPlayerStats_v100.STOMACH_ENERGY, new PlayerStat<float> (0, 40000, 0, "StomachEnergy", EPSstatsFlags.EMPTY) );
  142. RegisterStat(EPlayerStats_v100.STOMACH_WATER, new PlayerStat<float> (0, 5000, 0, "StomachWater", EPSstatsFlags.EMPTY) );
  143. RegisterStat(EPlayerStats_v100.DIET, new PlayerStat<float> (0, 5000, 2500, "Diet", EPSstatsFlags.EMPTY) );
  144. RegisterStat(EPlayerStats_v100.STAMINA, new PlayerStat<float> (0, GameConstants.STAMINA_MAX, 100, "Stamina", EPSstatsFlags.EMPTY) );
  145. RegisterStat(EPlayerStats_v100.SPECIALTY, new PlayerStat<float> (-1, 1, 0, "Specialty", EPSstatsFlags.EMPTY) );
  146. RegisterStat(EPlayerStats_v100.BLOODTYPE, new PlayerStat<int> (0, 128, BloodTypes.GenerateBloodType(), "BloodType", EPSstatsFlags.EMPTY) );
  147. }
  148. void PlayerStatsPCO_v100()
  149. {
  150. }
  151. };
  152. //---------------------------------------------------------------
  153. //------------------------- version 101 -------------------------
  154. //---------------------------------------------------------------
  155. enum EPlayerStats_v101
  156. {
  157. HEATCOMFORT,
  158. TREMOR,
  159. WET,
  160. ENERGY,
  161. WATER,
  162. STOMACH_SOLID,
  163. STOMACH_ENERGY,
  164. STOMACH_WATER,
  165. DIET,
  166. STAMINA,
  167. SPECIALTY,
  168. BLOODTYPE,
  169. TOXICITY,
  170. };
  171. class PlayerStatsPCO_v101 extends PlayerStatsPCO_Base
  172. {
  173. override int GetVersion()
  174. {
  175. return 101;
  176. }
  177. override void Init()
  178. {
  179. RegisterStat(EPlayerStats_v101.HEATCOMFORT, new PlayerStat<float> (-1, 1, 0, "HeatComfort", EPSstatsFlags.EMPTY) );
  180. RegisterStat(EPlayerStats_v101.TREMOR, new PlayerStat<float> (0, 1, 0, "Tremor", EPSstatsFlags.EMPTY) );
  181. RegisterStat(EPlayerStats_v101.WET, new PlayerStat<int> (0, 1, 0, "Wet", EPSstatsFlags.EMPTY) );
  182. RegisterStat(EPlayerStats_v101.ENERGY, new PlayerStat<float> (0, 20000, 600, "Energy", EPSstatsFlags.EMPTY) );
  183. RegisterStat(EPlayerStats_v101.WATER, new PlayerStat<float> (0, 5000, 500, "Water", EPSstatsFlags.EMPTY) );
  184. RegisterStat(EPlayerStats_v101.STOMACH_SOLID, new PlayerStat<float> (0, 5000, 0, "StomachSolid", EPSstatsFlags.EMPTY) );
  185. RegisterStat(EPlayerStats_v101.STOMACH_ENERGY, new PlayerStat<float> (0, 40000, 0, "StomachEnergy", EPSstatsFlags.EMPTY) );
  186. RegisterStat(EPlayerStats_v101.STOMACH_WATER, new PlayerStat<float> (0, 5000, 0, "StomachWater", EPSstatsFlags.EMPTY) );
  187. RegisterStat(EPlayerStats_v101.DIET, new PlayerStat<float> (0, 5000, 2500, "Diet", EPSstatsFlags.EMPTY) );
  188. RegisterStat(EPlayerStats_v101.STAMINA, new PlayerStat<float> (0, GameConstants.STAMINA_MAX, 100, "Stamina", EPSstatsFlags.EMPTY) );
  189. RegisterStat(EPlayerStats_v101.SPECIALTY, new PlayerStat<float> (-1, 1, 0, "Specialty", EPSstatsFlags.EMPTY) );
  190. RegisterStat(EPlayerStats_v101.BLOODTYPE, new PlayerStat<int> (0, 128, BloodTypes.GenerateBloodType(), "BloodType", EPSstatsFlags.EMPTY) );
  191. RegisterStat(EPlayerStats_v101.TOXICITY, new PlayerStat<float> (0, 100, 0, "Toxicity", EPSstatsFlags.EMPTY) );
  192. }
  193. };
  194. enum EPlayerStats_v106
  195. {
  196. HEATCOMFORT,
  197. TREMOR,
  198. WET,
  199. ENERGY,
  200. WATER,
  201. DIET,
  202. STAMINA,
  203. SPECIALTY,
  204. BLOODTYPE,
  205. TOXICITY,
  206. };
  207. class PlayerStatsPCO_v106 extends PlayerStatsPCO_Base
  208. {
  209. override int GetVersion()
  210. {
  211. return 106;
  212. }
  213. override void Init()
  214. {
  215. RegisterStat(EPlayerStats_v106.HEATCOMFORT, new PlayerStat<float> (-1, 1, 0, "HeatComfort", EPSstatsFlags.EMPTY) );
  216. RegisterStat(EPlayerStats_v106.TREMOR, new PlayerStat<float> (0, 1, 0, "Tremor", EPSstatsFlags.EMPTY) );
  217. RegisterStat(EPlayerStats_v106.WET, new PlayerStat<int> (0, 1, 0, "Wet", EPSstatsFlags.EMPTY) );
  218. RegisterStat(EPlayerStats_v106.ENERGY, new PlayerStat<float> (0, 20000, 600, "Energy", EPSstatsFlags.EMPTY) );
  219. RegisterStat(EPlayerStats_v106.WATER, new PlayerStat<float> (0, 5000, 650, "Water", EPSstatsFlags.EMPTY) );
  220. RegisterStat(EPlayerStats_v106.DIET, new PlayerStat<float> (0, 5000, 2500, "Diet", EPSstatsFlags.EMPTY) );
  221. RegisterStat(EPlayerStats_v106.STAMINA, new PlayerStat<float> (0, GameConstants.STAMINA_MAX, 100, "Stamina", EPSstatsFlags.EMPTY) );
  222. RegisterStat(EPlayerStats_v106.SPECIALTY, new PlayerStat<float> (-1, 1, 0, "Specialty", EPSstatsFlags.EMPTY) );
  223. RegisterStat(EPlayerStats_v106.BLOODTYPE, new PlayerStat<int> (0, 128, BloodTypes.GenerateBloodType(), "BloodType", EPSstatsFlags.EMPTY) );
  224. RegisterStat(EPlayerStats_v106.TOXICITY, new PlayerStat<float> (0, 100, 0, "Toxicity", EPSstatsFlags.EMPTY) );
  225. }
  226. };
  227. enum EPlayerStats_v115
  228. {
  229. HEATCOMFORT = 0,
  230. TREMOR = 1,
  231. WET = 2,
  232. ENERGY = 3,
  233. WATER,
  234. DIET,
  235. STAMINA,
  236. SPECIALTY,
  237. BLOODTYPE,
  238. TOXICITY,
  239. HEATBUFFER,
  240. };
  241. class PlayerStatsPCO_v115 extends PlayerStatsPCO_Base
  242. {
  243. override int GetVersion()
  244. {
  245. return 115;
  246. }
  247. override void Init()
  248. {
  249. RegisterStat(EPlayerStats_v115.HEATCOMFORT, new PlayerStat<float> (-1, 1, 0, "HeatComfort", EPSstatsFlags.EMPTY) );
  250. RegisterStat(EPlayerStats_v115.TREMOR, new PlayerStat<float> (0, 1, 0, "Tremor", EPSstatsFlags.EMPTY) );
  251. RegisterStat(EPlayerStats_v115.WET, new PlayerStat<int> (0, 1, 0, "Wet", EPSstatsFlags.EMPTY) );
  252. RegisterStat(EPlayerStats_v115.ENERGY, new PlayerStat<float> (0, PlayerConstants.SL_ENERGY_MAX, 600, "Energy", EPSstatsFlags.EMPTY) );
  253. RegisterStat(EPlayerStats_v115.WATER, new PlayerStat<float> (0, PlayerConstants.SL_WATER_MAX, 600, "Water", EPSstatsFlags.EMPTY) );
  254. RegisterStat(EPlayerStats_v115.DIET, new PlayerStat<float> (0, 5000, 2500, "Diet", EPSstatsFlags.EMPTY) );
  255. RegisterStat(EPlayerStats_v115.STAMINA, new PlayerStat<float> (0, CfgGameplayHandler.GetStaminaMax(), 100, "Stamina", EPSstatsFlags.EMPTY) );
  256. RegisterStat(EPlayerStats_v115.SPECIALTY, new PlayerStat<float> (-1, 1, 0, "Specialty", EPSstatsFlags.EMPTY) );
  257. RegisterStat(EPlayerStats_v115.BLOODTYPE, new PlayerStat<int> (0, 128, BloodTypes.GenerateBloodType(), "BloodType", EPSstatsFlags.EMPTY) );
  258. RegisterStat(EPlayerStats_v115.TOXICITY, new PlayerStat<float> (0, 100, 0, "Toxicity", EPSstatsFlags.EMPTY) );
  259. RegisterStat(EPlayerStats_v115.HEATBUFFER, new PlayerStat<float> (-30, 30, 0, "HeatBuffer", EPSstatsFlags.SYNCED) );
  260. }
  261. };
  262. //---------------------------------------------------------------
  263. //------------------------- version current ---------------------
  264. //---------------------------------------------------------------
  265. enum EPlayerStats_current: EPlayerStats_v115
  266. {
  267. };
  268. //mod this class, it will always point to the latest version
  269. class PlayerStatsPCO_current extends PlayerStatsPCO_v115
  270. {
  271. };