actionunrestrainself.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. class ActionUnrestrainSelfCB : ActionContinuousBaseCB
  2. {
  3. const float DEFAULT_STRUGGLE_TIME = 2;
  4. override void CreateActionComponent()
  5. {
  6. float time = DEFAULT_STRUGGLE_TIME;
  7. if ( m_ActionData.m_MainItem.ConfigIsExisting("StruggleLength") )
  8. {
  9. time = m_ActionData.m_MainItem.ConfigGetFloat("StruggleLength");
  10. }
  11. #ifdef DEVELOPER
  12. if ( m_ActionData.m_Player.IsQuickRestrain() )
  13. {
  14. time = DEBUG_QUICK_UNRESTRAIN_TIME;
  15. }
  16. #endif
  17. m_ActionData.m_ActionComponent = new CAContinuousTime(time);
  18. }
  19. override void EndActionComponent()
  20. {
  21. // TODO for second type animation SetCommand(DayZPlayerConstants.CMD_ACTIONINT_FINISH);
  22. if ( m_ActionData.m_State == UA_FINISHED )
  23. {
  24. SetCommand(DayZPlayerConstants.CMD_ACTIONINT_END);
  25. }
  26. else if (m_ActionData.m_State == UA_CANCEL )
  27. {
  28. m_Canceled = true;
  29. SetCommand(DayZPlayerConstants.CMD_ACTIONINT_INTERRUPT);
  30. return;
  31. //Cancel();
  32. }
  33. else
  34. {
  35. m_Canceled = true;
  36. SetCommand(DayZPlayerConstants.CMD_ACTIONINT_INTERRUPT);
  37. return;
  38. }
  39. m_ActionData.m_State = UA_FINISHED;
  40. }
  41. };
  42. class ActionUnrestrainSelf: ActionContinuousBase
  43. {
  44. void ActionUnrestrainSelf()
  45. {
  46. m_CallbackClass = ActionUnrestrainSelfCB;
  47. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_RESTRAINEDSTRUGGLE;
  48. m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_RESTRAINEDSTRUGGLE;
  49. m_Text = "#struggle";
  50. }
  51. override void CreateConditionComponents()
  52. {
  53. m_ConditionItem = new CCINonRuined;
  54. m_ConditionTarget = new CCTSelf;
  55. }
  56. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  57. {
  58. return player.IsRestrained();
  59. }
  60. override bool HasProneException()
  61. {
  62. return true;
  63. }
  64. override bool HasTarget()
  65. {
  66. return false;
  67. }
  68. override void OnEndAnimationLoopServer( ActionData action_data )
  69. {
  70. }
  71. override void OnFinishProgressServer( ActionData action_data )
  72. {
  73. PlayerBase player = PlayerBase.Cast(action_data.m_Player);
  74. EntityAI item_in_hands = action_data.m_MainItem;
  75. if (item_in_hands)
  76. {
  77. if (item_in_hands.IsInherited(BarbedWireLocked))
  78. {
  79. int randNum = Math.RandomInt(0, 3); // Values 0 to 3 represent fore arm and arm roll bleed sources
  80. player.m_BleedingManagerServer.AttemptAddBleedingSourceBySelection(PlayerBase.m_BleedingSourcesUp[randNum]);
  81. }
  82. player.SetRestrained(false);
  83. item_in_hands.AddHealth(-GameConstants.CLEAN_UNRESTRAIN_DAMAGE);
  84. MiscGameplayFunctions.TransformRestrainItem(item_in_hands, null, null, player);
  85. //string new_item_name = MiscGameplayFunctions.ObtainRestrainItemTargetClassname(item_in_hands);
  86. //MiscGameplayFunctions.TurnItemInHandsIntoItemEx(player, new UnrestrainSelfPlayer(item_in_hands, new_item_name));
  87. }
  88. }
  89. override bool CanBeUsedInRestrain()
  90. {
  91. return true;
  92. }
  93. };
  94. class UnrestrainSelfPlayer : ReplaceItemWithNewLambdaBase { };