actiondisarmmine.c 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. class ActionDisarmMineCB: ActionContinuousBaseCB
  2. {
  3. override void CreateActionComponent()
  4. {
  5. m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.DISARM_MINE);
  6. }
  7. }
  8. class ActionDisarmMine: ActionContinuousBase
  9. {
  10. void ActionDisarmMine()
  11. {
  12. m_CallbackClass = ActionDisarmMineCB;
  13. m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_INTERACT;
  14. m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH;
  15. m_FullBody = true;
  16. m_Text = "#disarm";
  17. }
  18. override void CreateConditionComponents()
  19. {
  20. m_ConditionItem = new CCINonRuined;
  21. m_ConditionTarget = new CCTCursor;
  22. }
  23. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  24. {
  25. if (!target)
  26. {
  27. return false;
  28. }
  29. LandMineTrap targetMine;
  30. if (Class.CastTo(targetMine, target.GetObject()) && item && IsInReach(player, target, UAMaxDistances.DEFAULT))
  31. {
  32. return targetMine.IsActive() && targetMine.CanBeDisarmed();
  33. }
  34. return false;
  35. }
  36. override void OnStartAnimationLoop(ActionData action_data)
  37. {
  38. if (!GetGame().IsMultiplayer() || GetGame().IsServer())
  39. {
  40. LandMineTrap targetMine = LandMineTrap.Cast(action_data.m_Target.GetObject());
  41. Param1<bool> play = new Param1<bool>(true);
  42. GetGame().RPCSingleParam(targetMine, SoundTypeMine.DISARMING, play, true);
  43. }
  44. }
  45. override void OnExecute(ActionData action_data)
  46. {
  47. if (!GetGame().IsMultiplayer() || GetGame().IsServer())
  48. {
  49. LandMineTrap targetMine = LandMineTrap.Cast(action_data.m_Target.GetObject());
  50. Param1<bool> play = new Param1<bool>(true);
  51. GetGame().RPCSingleParam(targetMine, SoundTypeMine.DISARMING, play, true);
  52. }
  53. }
  54. override void OnEndAnimationLoop( ActionData action_data )
  55. {
  56. if (!GetGame().IsMultiplayer() || GetGame().IsServer())
  57. {
  58. LandMineTrap targetMine = LandMineTrap.Cast(action_data.m_Target.GetObject());
  59. Param1<bool> play = new Param1<bool>(false);
  60. GetGame().RPCSingleParam(targetMine, SoundTypeMine.DISARMING, play, true);
  61. }
  62. }
  63. override void OnFinishProgressServer(ActionData action_data)
  64. {
  65. LandMineTrap targetMine;
  66. Class.CastTo(targetMine, action_data.m_Target.GetObject());
  67. ToolBase tool;
  68. Class.CastTo(tool, action_data.m_MainItem);
  69. if (Math.RandomIntInclusive(0, 100) < tool.GetDisarmRate())
  70. {
  71. targetMine.Disarm();
  72. }
  73. else
  74. {
  75. targetMine.OnSteppedOn(action_data.m_Player);
  76. }
  77. MiscGameplayFunctions.DealAbsoluteDmg(action_data.m_MainItem, 2);
  78. }
  79. };