actionrestrainself.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. //action_data.m_Player.RemoveQuickBarEntityShortcut(item_in_hands);
  70. string new_item_name = MiscGameplayFunctions.ObtainRestrainItemTargetClassname(item_in_hands);
  71. MiscGameplayFunctions.TurnItemIntoItemEx(player, new TurnItemIntoItemLambdaRestrainLambda(item_in_hands, new_item_name, action_data.m_Player));
  72. }
  73. }
  74. override void OnFinishProgressClient( ActionData action_data )
  75. {
  76. //action_data.m_Player.RemoveQuickBarEntityShortcut(action_data.m_MainItem);
  77. }
  78. override void OnEndServer(ActionData action_data)
  79. {
  80. super.OnEndServer(action_data);
  81. action_data.m_Player.SetRestrainStarted(false);
  82. }
  83. };