firearmactionbase.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. class FirearmActionBase : ActionBase
  2. {
  3. void FirearmActionBase();
  4. override int GetStanceMask(PlayerBase player)
  5. {
  6. return DayZPlayerConstants.STANCEMASK_ALL;
  7. }
  8. override int GetActionCategory()
  9. {
  10. return AC_SINGLE_USE;
  11. }
  12. override typename GetInputType()
  13. {
  14. return DefaultActionInput;
  15. }
  16. override bool ActionConditionContinue(ActionData action_data)
  17. {
  18. Weapon_Base wpn = Weapon_Base.Cast(action_data.m_MainItem);
  19. return !wpn.IsIdle();
  20. }
  21. override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
  22. {
  23. Weapon_Base wpn = Weapon_Base.Cast(item);
  24. return wpn && wpn.CanProcessWeaponEvents() && !player.GetDayZPlayerInventory().IsProcessing();
  25. }
  26. override void Start(ActionData action_data)
  27. {
  28. super.Start(action_data);
  29. action_data.m_State = UA_PROCESSING;
  30. }
  31. override bool CanBePerformedFromInventory()
  32. {
  33. return true;
  34. }
  35. override bool CanBeUsedOnBack()
  36. {
  37. return true;
  38. }
  39. override bool CanBeUsedRaised()
  40. {
  41. return true;
  42. }
  43. override void OnUpdate(ActionData action_data)
  44. {
  45. super.OnUpdate(action_data);
  46. Weapon_Base wpn = Weapon_Base.Cast(action_data.m_MainItem);
  47. if (!wpn || action_data.m_Player.GetItemInHands() != wpn || !action_data.m_Player.GetWeaponManager().IsRunning())
  48. {
  49. End(action_data);
  50. }
  51. }
  52. override float GetProgress(ActionData action_data)
  53. {
  54. return -1;
  55. }
  56. override bool AddActionJuncture(ActionData action_data)
  57. {
  58. bool accepted;
  59. accepted = super.AddActionJuncture(action_data);
  60. Weapon_Base wpn = Weapon_Base.Cast(action_data.m_MainItem);
  61. if (wpn)
  62. {
  63. Magazine mag = wpn.GetMagazine(wpn.GetCurrentMuzzle());
  64. if (mag)
  65. {
  66. InventoryLocation magIl = new InventoryLocation();
  67. mag.GetInventory().GetCurrentInventoryLocation(magIl);
  68. if (!GetGame().AddInventoryJunctureEx(action_data.m_Player, mag, magIl, true, 10000))
  69. {
  70. accepted = false;
  71. ClearActionJuncture(action_data);
  72. }
  73. else
  74. {
  75. action_data.m_ReservedInventoryLocations.Insert(magIl);
  76. }
  77. }
  78. }
  79. return accepted;
  80. }
  81. }