actionunrestraintargetempty.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. class ActionUnrestrainTargetHandsCB : ActionContinuousBaseCB
  2. {
  3. const float DEFAULT_STRUGGLE_TIME = 2;
  4. const float UNRESTRAIN_STRUGGLE_MULTIPLIER = 0.75;//multiplier for the struggle time normally used for the player unrestraining themselves, this allows unrestraining to be bound to the 'StruggleLength' config param
  5. override void CreateActionComponent()
  6. {
  7. float time = DEFAULT_STRUGGLE_TIME;
  8. PlayerBase targetPlayer = PlayerBase.Cast(m_ActionData.m_Target.GetObject());
  9. EntityAI item_in_hands = targetPlayer.GetItemInHands();
  10. if ( item_in_hands.ConfigIsExisting("StruggleLength") )
  11. {
  12. time = item_in_hands.ConfigGetFloat("StruggleLength") * UNRESTRAIN_STRUGGLE_MULTIPLIER;
  13. }
  14. #ifdef DEVELOPER
  15. if ( m_ActionData.m_Player.IsQuickRestrain() )
  16. {
  17. time = DEBUG_QUICK_UNRESTRAIN_TIME;
  18. }
  19. #endif
  20. m_ActionData.m_ActionComponent = new CAContinuousTime(time);
  21. }
  22. };
  23. class ActionUnrestrainTargetHands: ActionContinuousBase
  24. {
  25. void ActionUnrestrainTargetHands()
  26. {
  27. m_CallbackClass = ActionUnrestrainTargetHandsCB;
  28. m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_RESTRAINTARGET;
  29. m_FullBody = true;
  30. m_StanceMask = DayZPlayerConstants.STANCEMASK_CROUCH;
  31. m_Text = "#unrestrain";
  32. }
  33. override typename GetInputType()
  34. {
  35. return ContinuousInteractActionInput;
  36. }
  37. override void OnStartServer(ActionData action_data)
  38. {
  39. super.OnStartServer(action_data);
  40. action_data.m_Player.TryHideItemInHands(true);
  41. }
  42. override void OnEndServer(ActionData action_data)
  43. {
  44. super.OnEndServer(action_data);
  45. action_data.m_Player.TryHideItemInHands(false);
  46. }
  47. override void CreateConditionComponents()
  48. {
  49. m_ConditionItem = new CCINone;
  50. m_ConditionTarget = new CCTObject(UAMaxDistances.DEFAULT);
  51. }
  52. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  53. {
  54. PlayerBase targetPlayer = PlayerBase.Cast(target.GetObject());
  55. return targetPlayer && targetPlayer.IsRestrained();
  56. }
  57. override void OnFinishProgressServer( ActionData action_data )
  58. {
  59. PlayerBase targetPlayer = PlayerBase.Cast(action_data.m_Target.GetObject());
  60. if (CanReceiveAction(action_data.m_Target) && targetPlayer.IsRestrained())
  61. {
  62. EntityAI item_in_hands = targetPlayer.GetItemInHands();
  63. targetPlayer.SetRestrained(false);
  64. if (item_in_hands)
  65. {
  66. MiscGameplayFunctions.TransformRestrainItem(item_in_hands, null, action_data.m_Player, targetPlayer);
  67. }
  68. else
  69. {
  70. ErrorEx("Failed to obtain item in target player's hands during empty handed unrestraining");
  71. }
  72. }
  73. }
  74. override void OnStartClient(ActionData action_data)
  75. {
  76. action_data.m_Player.TryHideItemInHands(true);
  77. }
  78. override void OnEndClient( ActionData action_data )
  79. {
  80. if ( action_data.m_Player ) action_data.m_Player.TryHideItemInHands(false);
  81. }
  82. };