presethandlers.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. #ifdef DEVELOPER
  2. //----------------------------------------------------------
  3. //Class names need to match the preset name + _Preset suffix
  4. //----------------------------------------------------------
  5. //TEMPLATE:
  6. /*
  7. class Farmer_Preset extends PresetSpawnBase
  8. {
  9. override void OnPresetSpawn(PlayerBase player)
  10. {
  11. //m_ItemsInventory -> contains all items in player inventory
  12. }
  13. }
  14. */
  15. //---------------------------------------------
  16. class FreshSpawn_Preset extends PresetSpawnBase
  17. {
  18. override void OnPresetSpawn(PlayerBase player)
  19. {
  20. FindAndTakeToHandsFromInventory("Plum");
  21. }
  22. }
  23. //---------------------------------------------
  24. class Farmer_Preset extends PresetSpawnBase
  25. {
  26. override void OnPresetSpawn(PlayerBase player)
  27. {
  28. EntityAI mask = FindItem("AirborneMask");
  29. }
  30. }
  31. //---------------------------------------------
  32. class Fisherman_Preset extends PresetSpawnBase
  33. {
  34. override void OnPresetSpawn(PlayerBase player)
  35. {
  36. EntityAI entAI;
  37. entAI = FindItem("FishingRod");
  38. player.SetQuickBarEntityShortcut(entAI,0);
  39. entAI = FindItem("ImprovisedFishingRod");
  40. player.SetQuickBarEntityShortcut(entAI,1);
  41. entAI = FindItem("Rag");
  42. player.SetQuickBarEntityShortcut(entAI,2);
  43. entAI = FindItem("FieldShovel");
  44. player.SetQuickBarEntityShortcut(entAI,3);
  45. entAI = FindItem("HuntingKnife");
  46. player.SetQuickBarEntityShortcut(entAI,4);
  47. }
  48. }
  49. //---------------------------------------------
  50. class AntiHazard_Preset extends PresetSpawnBase
  51. {
  52. override void OnPresetSpawn(PlayerBase player)
  53. {
  54. EntityAI mask = FindItem("AirborneMask");
  55. if (mask)
  56. {
  57. auto debugParams = DebugSpawnParams.WithPlayer(player);
  58. mask.OnDebugSpawnEx(debugParams);
  59. }
  60. }
  61. }
  62. //---------------------------------------------
  63. class Update117_Preset extends PresetSpawnBase
  64. {
  65. vector randompos;
  66. override void OnPresetSpawn(PlayerBase player)
  67. {
  68. randompos = player.GetPosition();
  69. foreach (EntityAI itm : m_ItemsPreset)
  70. {
  71. if (itm)
  72. {
  73. vector itempos;
  74. itempos[0] = Math.RandomFloat(-1,1);
  75. itempos[2] = Math.RandomFloat(-1,1);
  76. ItemBase itmBase = ItemBase.Cast(itm);
  77. itmBase.SetPosition(randompos + itempos);
  78. itmBase.SetQuantity(100);
  79. }
  80. }
  81. }
  82. }
  83. //---------------------------------------------
  84. class Update118_Preset extends PresetSpawnBase
  85. {
  86. vector randompos;
  87. override void OnPresetSpawn(PlayerBase player)
  88. {
  89. randompos = player.GetPosition();
  90. foreach (EntityAI itm : m_ItemsPreset)
  91. {
  92. if (itm)
  93. {
  94. vector itempos;
  95. itempos[0] = Math.RandomFloat(-1,1);
  96. itempos[2] = Math.RandomFloat(-1,1);
  97. ItemBase itmBase = ItemBase.Cast(itm);
  98. itmBase.SetPosition(randompos + itempos);
  99. itmBase.SetQuantity(100);
  100. }
  101. }
  102. }
  103. }
  104. //---------------------------------------------
  105. class BBMaterials_Preset extends PresetSpawnBase
  106. {
  107. vector randompos;
  108. override void OnPresetSpawn(PlayerBase player)
  109. {
  110. randompos = player.GetPosition();
  111. foreach (EntityAI itm : m_ItemsPreset)
  112. {
  113. if (itm)
  114. {
  115. vector itempos;
  116. itempos[0] = Math.RandomFloat(-1,1);
  117. itempos[2] = Math.RandomFloat(-1,1);
  118. itm.SetPosition(randompos + itempos);
  119. }
  120. }
  121. }
  122. }
  123. //---------------------------------------------
  124. class Military_Light_Preset extends PresetSpawnBase
  125. {
  126. override void OnPresetSpawn(PlayerBase player)
  127. {
  128. EntityAI weapon = FindItem("AK101");
  129. auto debugParams = DebugSpawnParams.WithPlayer(player);
  130. weapon.OnDebugSpawnEx(debugParams);
  131. FindAndTakeToHandsFromInventory("AK101");
  132. }
  133. }
  134. //---------------------------------------------
  135. //------------------ BASE ---------------------
  136. //---------------------------------------------
  137. class PresetSpawnBase
  138. {
  139. ref array<EntityAI> m_ItemsInventory = new array<EntityAI>;//inventory items
  140. HumanInventory m_Inventory;
  141. PlayerBase m_Player;
  142. array<EntityAI> m_ItemsPreset;//all items spawned from this preset
  143. //---------------------------------------------
  144. void Init(PlayerBase player)
  145. {
  146. m_Player = player;
  147. m_Inventory = player.GetHumanInventory();
  148. m_ItemsPreset = player.m_PresetItems;
  149. m_Inventory.EnumerateInventory(InventoryTraversalType.INORDER, m_ItemsInventory);
  150. OnPresetSpawn(player);
  151. foreach (auto item:m_ItemsPreset)
  152. {
  153. Print(item);
  154. }
  155. }
  156. //---------------------------------------------
  157. void OnPresetSpawn(PlayerBase player)
  158. {
  159. }
  160. //---------------------------------------------
  161. void TakeToHands(EntityAI item)
  162. {
  163. if (GetGame().IsMultiplayer() && m_Player.GetInstanceType() != DayZPlayerInstanceType.INSTANCETYPE_SERVER)//throws assert otherwise
  164. return;
  165. if (GetGame().IsDedicatedServer())
  166. {
  167. m_Player.TakeEntityToHandsImpl(InventoryMode.SERVER, item);
  168. }
  169. else
  170. {
  171. m_Player.TakeEntityToHandsImpl(InventoryMode.PREDICTIVE, item);
  172. }
  173. }
  174. void FindAndTakeToHandsFromInventory(string classname)
  175. {
  176. m_Inventory.EnumerateInventory(InventoryTraversalType.INORDER, m_ItemsInventory);
  177. foreach(EntityAI item:m_ItemsInventory)
  178. {
  179. if (item.ClassName() == classname)
  180. {
  181. TakeToHands(item);
  182. return;
  183. }
  184. }
  185. }
  186. EntityAI FindItem(string classname)
  187. {
  188. m_Inventory.EnumerateInventory(InventoryTraversalType.INORDER, m_ItemsInventory);
  189. foreach(EntityAI item:m_ItemsInventory)
  190. {
  191. if (item.ClassName() == classname)
  192. {
  193. return item;
  194. }
  195. }
  196. return null;
  197. }
  198. }
  199. #endif