actionrestrainself.c 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. class ActionRestrainSelfCB : ActionContinuousBaseCB
  2. {
  3. const float DEFAULT_RESTRAIN_TIME = 2;
  4. override void CreateActionComponent()
  5. {
  6. float time = DEFAULT_RESTRAIN_TIME;
  7. if( m_ActionData.m_MainItem.ConfigIsExisting("RestrainTime") )
  8. {
  9. time = m_ActionData.m_MainItem.ConfigGetFloat("RestrainTime");
  10. }
  11. if( m_ActionData.m_Player.IsQuickRestrain() )
  12. {
  13. time = DEBUG_QUICK_UNRESTRAIN_TIME;
  14. }
  15. m_ActionData.m_ActionComponent = new CAContinuousTime(time);
  16. }
  17. };
  18. class ActionRestrainSelf: ActionContinuousBase
  19. {
  20. void ActionRestrainSelf()
  21. {
  22. m_CallbackClass = ActionRestrainSelfCB;
  23. m_CommandUID = DayZPlayerConstants.CMD_ACTIONFB_RESTRAINSELF;
  24. m_FullBody = true;
  25. m_StanceMask = DayZPlayerConstants.STANCEMASK_ERECT | DayZPlayerConstants.STANCEMASK_CROUCH;
  26. //m_Animation = "INJECTEPIPENS";
  27. m_SpecialtyWeight = UASoftSkillsWeight.ROUGH_LOW;
  28. m_Text = "#restrain_self";
  29. }
  30. override int GetStanceMask(PlayerBase player)
  31. {
  32. if ( player.IsPlayerInStance(DayZPlayerConstants.STANCEMASK_CROUCH | DayZPlayerConstants.STANCEMASK_PRONE))
  33. return DayZPlayerConstants.STANCEMASK_CROUCH;
  34. else
  35. return DayZPlayerConstants.STANCEMASK_ERECT;
  36. }
  37. override void CreateConditionComponents()
  38. {
  39. m_ConditionItem = new CCINonRuined;
  40. m_ConditionTarget = new CCTSelf;
  41. }
  42. override bool HasTarget()
  43. {
  44. return false;
  45. }
  46. override bool HasAlternativeInterrupt()
  47. {
  48. return true;
  49. }
  50. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  51. {
  52. if(player.IsRestrained())
  53. {
  54. return false;
  55. }
  56. return true;
  57. }
  58. override void OnStartServer(ActionData action_data)
  59. {
  60. super.OnStartServer(action_data);
  61. action_data.m_Player.SetRestrainStarted(true);
  62. }
  63. override void OnFinishProgressServer( ActionData action_data )
  64. {
  65. PlayerBase player = PlayerBase.Cast( action_data.m_Player );
  66. EntityAI item_in_hands = action_data.m_MainItem;
  67. if (item_in_hands)
  68. {
  69. ClearInventoryReservationEx(action_data);
  70. //action_data.m_Player.RemoveQuickBarEntityShortcut(item_in_hands);
  71. string new_item_name = MiscGameplayFunctions.ObtainRestrainItemTargetClassname(item_in_hands);
  72. TurnItemIntoItemLambdaRestrainLambda lambda = new TurnItemIntoItemLambdaRestrainLambda(item_in_hands, new_item_name, action_data.m_Player);
  73. MiscGameplayFunctions.TurnItemIntoItemEx(player, lambda);
  74. }
  75. }
  76. override void OnFinishProgressClient( ActionData action_data )
  77. {
  78. //action_data.m_Player.RemoveQuickBarEntityShortcut(action_data.m_MainItem);
  79. }
  80. override void OnEndServer(ActionData action_data)
  81. {
  82. super.OnEndServer(action_data);
  83. action_data.m_Player.SetRestrainStarted(false);
  84. }
  85. };