actiondialcombinationlockontarget.c 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. class ActionDialCombinationLockOnTargetCB : ActionContinuousBaseCB
  2. {
  3. private const float REPEAT_AFTER_SEC = 0.5;
  4. override void CreateActionComponent()
  5. {
  6. m_ActionData.m_ActionComponent = new CAContinuousRepeat(REPEAT_AFTER_SEC);
  7. }
  8. }
  9. class ActionDialCombinationLockOnTarget: ActionContinuousBase
  10. {
  11. void ActionDialCombinationLockOnTarget()
  12. {
  13. m_CallbackClass = ActionDialCombinationLockOnTargetCB;
  14. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_OPENITEM;
  15. m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_OPENITEM;
  16. m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_LOW;
  17. m_Text = "#dial_combination_lock";
  18. }
  19. override void CreateConditionComponents()
  20. {
  21. m_ConditionItem = new CCINone();
  22. m_ConditionTarget = new CCTNonRuined(UAMaxDistances.DEFAULT);
  23. }
  24. override bool HasProneException()
  25. {
  26. return true;
  27. }
  28. override typename GetInputType()
  29. {
  30. return ContinuousInteractActionInput;
  31. }
  32. override void OnActionInfoUpdate(PlayerBase player, ActionTarget target, ItemBase item)
  33. {
  34. ConstructionActionData constructionActionData = player.GetConstructionActionData();
  35. m_Text = "#dial_combination_lock " + constructionActionData.GetDialNumberText();
  36. }
  37. override bool ActionCondition(PlayerBase player, ActionTarget target, ItemBase item)
  38. {
  39. if (!target.GetObject())
  40. return false;
  41. CombinationLock lock = CombinationLock.Cast(target.GetObject());
  42. if (lock && lock.GetHierarchyParent() && Fence.Cast(lock.GetHierarchyParent()))
  43. {
  44. ConstructionActionData constructionActionData = player.GetConstructionActionData();
  45. constructionActionData.SetCombinationLock(lock);
  46. return true;
  47. }
  48. return false;
  49. }
  50. override void OnFinishProgressServer(ActionData action_data)
  51. {
  52. //set dialed number
  53. ConstructionActionData constructionActionData = action_data.m_Player.GetConstructionActionData();
  54. CombinationLock combination_lock = constructionActionData.GetCombinationLock();
  55. if (combination_lock)
  56. {
  57. combination_lock.DialNextNumber();
  58. //check for unlock state
  59. if (!combination_lock.IsLockedOnGate())
  60. {
  61. if (GetGame().IsMultiplayer())
  62. ClearActionJuncture(action_data);
  63. else
  64. ClearInventoryReservationEx(action_data);
  65. EntityAI target_entity = EntityAI.Cast(action_data.m_Target.GetObject());
  66. combination_lock.UnlockServer(action_data.m_Player, target_entity.GetHierarchyParent());
  67. }
  68. }
  69. }
  70. }