actioncraftbolts.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. class ActionCraftBoltsCB : ActionContinuousBaseCB
  2. {
  3. private const float TIME_TO_CRAFT = 3.0;
  4. override void CreateActionComponent()
  5. {
  6. m_ActionData.m_ActionComponent = new CAContinuousRepeat(TIME_TO_CRAFT);
  7. }
  8. };
  9. class ActionCraftBolts: ActionContinuousBase
  10. {
  11. const ref set<string> CUTTING_TYPES = new set<string>();
  12. protected bool m_IsKnifeInHands;
  13. protected Ammunition_Base m_ResultEntity;
  14. void InitCuttingTypes()
  15. {
  16. CUTTING_TYPES.Clear();
  17. CUTTING_TYPES.Insert("Sickle");
  18. CUTTING_TYPES.Insert("KukriKnife");
  19. CUTTING_TYPES.Insert("FangeKnife");
  20. CUTTING_TYPES.Insert("KitchenKnife");
  21. CUTTING_TYPES.Insert("SteakKnife");
  22. CUTTING_TYPES.Insert("StoneKnife");
  23. CUTTING_TYPES.Insert("Cleaver");
  24. CUTTING_TYPES.Insert("CombatKnife");
  25. CUTTING_TYPES.Insert("HuntingKnife");
  26. CUTTING_TYPES.Insert("Machete");
  27. CUTTING_TYPES.Insert("CrudeMachete");
  28. CUTTING_TYPES.Insert("OrientalMachete");
  29. CUTTING_TYPES.Insert("WoodAxe");
  30. CUTTING_TYPES.Insert("Hatchet");
  31. CUTTING_TYPES.Insert("FirefighterAxe");
  32. CUTTING_TYPES.Insert("AK_Bayonet");
  33. CUTTING_TYPES.Insert("M9A1_Bayonet");
  34. CUTTING_TYPES.Insert("SKS_Bayonet");
  35. CUTTING_TYPES.Insert("BoneKnife");
  36. }
  37. void ActionCraftBolts()
  38. {
  39. m_CallbackClass = ActionCraftBoltsCB;
  40. m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_CRAFTING;
  41. m_FullBody = true;
  42. m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH;
  43. m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_HIGH;
  44. m_Text = "#STR_CraftBolt0";
  45. InitCuttingTypes();
  46. }
  47. override void CreateConditionComponents()
  48. {
  49. m_ConditionItem = new CCINonRuined();
  50. m_ConditionTarget = new CCTNonRuined();
  51. }
  52. protected bool IsCuttingType(Object item)
  53. {
  54. return CUTTING_TYPES.Find(item.ClassName()) >= 0;
  55. }
  56. override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
  57. {
  58. if (IsCuttingType(item))
  59. {
  60. //knife in hands
  61. if (target.GetObject())
  62. return (target.GetObject().ClassName() == "WoodenStick");
  63. }
  64. else if (target.GetObject())
  65. {
  66. // material in hands
  67. return IsCuttingType(target.GetObject());
  68. }
  69. return false;
  70. }
  71. override void OnStartServer(ActionData action_data)
  72. {
  73. super.OnStartServer(action_data);
  74. m_IsKnifeInHands = IsCuttingType(action_data.m_MainItem);
  75. m_ResultEntity = null;
  76. }
  77. override void OnFinishProgressServer(ActionData action_data)
  78. {
  79. ItemBase knife;
  80. ItemBase material;
  81. bool added = false;
  82. if (m_IsKnifeInHands)
  83. {
  84. //knife in hands
  85. knife = action_data.m_MainItem;
  86. material = ItemBase.Cast(action_data.m_Target.GetObject());
  87. }
  88. else
  89. {
  90. // material in hands
  91. material = action_data.m_MainItem;
  92. knife = ItemBase.Cast(action_data.m_Target.GetObject());
  93. }
  94. if (!material || !knife)
  95. return;
  96. if (m_ResultEntity)
  97. {
  98. if (m_ResultEntity.GetAmmoCount() < m_ResultEntity.GetAmmoMax())
  99. {
  100. m_ResultEntity.ServerAddAmmoCount(1);
  101. added = true;
  102. }
  103. }
  104. if (!added)
  105. {
  106. m_ResultEntity = Ammunition_Base.Cast(action_data.m_Player.SpawnEntityOnGroundRaycastDispersed("Ammo_ImprovisedBolt_1"));
  107. m_ResultEntity.SetHealth("", "", material.GetHealth("", ""));
  108. m_ResultEntity.ServerSetAmmoCount(1);
  109. }
  110. material.AddQuantity(-1);
  111. knife.AddHealth("","",-3);
  112. }
  113. };