actiondisarmexplosive.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. class ActionDisarmExplosiveCB : ActionContinuousBaseCB
  2. {
  3. override void CreateActionComponent()
  4. {
  5. m_ActionData.m_ActionComponent = new CAContinuousTime(UATimeSpent.DISARM_MINE);
  6. }
  7. }
  8. class ActionDisarmExplosive : ActionContinuousBase
  9. {
  10. void ActionDisarmExplosive()
  11. {
  12. m_CallbackClass = ActionDisarmExplosiveCB;
  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. ExplosivesBase explosive;
  30. if (Class.CastTo(explosive, target.GetObject()) && item)
  31. {
  32. return explosive.GetArmed() && explosive.CanBeDisarmed();
  33. }
  34. return false;
  35. }
  36. override void OnStartServer(ActionData action_data)
  37. {
  38. super.OnStartServer(action_data);
  39. ExplosivesBase item = ExplosivesBase.Cast(action_data.m_Target.GetObject());
  40. if (item.GetDisarmSoundset() != string.Empty)
  41. item.StartItemSoundServer(SoundConstants.ITEM_EXPLOSIVE_DISARM);
  42. }
  43. override void OnEndServer(ActionData action_data)
  44. {
  45. super.OnEndServer(action_data);
  46. ExplosivesBase item = ExplosivesBase.Cast(action_data.m_Target.GetObject());
  47. if (item.GetDisarmSoundset() != string.Empty)
  48. item.StopItemSoundServer(SoundConstants.ITEM_EXPLOSIVE_DISARM);
  49. }
  50. override void OnFinishProgressServer(ActionData action_data)
  51. {
  52. ExplosivesBase explosive = ExplosivesBase.Cast(action_data.m_Target.GetObject());
  53. ToolBase tool = ToolBase.Cast(action_data.m_MainItem);
  54. if (Math.RandomIntInclusive(0, 100) < tool.GetDisarmRate())
  55. {
  56. explosive.OnBeforeDisarm();
  57. explosive.Disarm(true);
  58. }
  59. else
  60. {
  61. explosive.SetHealth("", "", 0.0);
  62. }
  63. MiscGameplayFunctions.DealAbsoluteDmg(action_data.m_MainItem, UADamageApplied.DEFUSE_TOOLS);
  64. }
  65. }