traptrigger.c 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //! Trigger used by traps
  2. class TrapTrigger : Trigger
  3. {
  4. bool m_Enabled = false;
  5. TrapBase m_ParentObj;
  6. #ifdef DEVELOPER
  7. bool m_CanSendDbg = true;
  8. #endif
  9. void TrapTrigger()
  10. {
  11. int mask = GetEventMask();
  12. mask &= ~EntityEvent.INIT;
  13. SetEventMask(mask);
  14. }
  15. void SetParentObject( TrapBase obj )
  16. {
  17. if (GetGame().IsServer())
  18. {
  19. m_ParentObj = obj;
  20. }
  21. }
  22. override protected bool CanAddObjectAsInsider(Object object)
  23. {
  24. return m_Enabled && object.IsInherited(EntityAI) && m_ParentObj && m_ParentObj.IsActive() && m_ParentObj.GetTrapTrigger() == this;
  25. }
  26. override protected void OnEnterServerEvent(TriggerInsider insider)
  27. {
  28. #ifdef DEVELOPER
  29. m_CanSendDbg = false;
  30. #endif
  31. if (m_ParentObj && m_ParentObj.IsActive())
  32. {
  33. m_ParentObj.SnapOnObject(EntityAI.Cast(insider.GetObject()));
  34. }
  35. }
  36. override protected void OnLeaveServerEvent(TriggerInsider insider)
  37. {
  38. if (m_ParentObj && m_ParentObj.IsActive())
  39. {
  40. m_ParentObj.RemoveFromObject(EntityAI.Cast(insider.GetObject()));
  41. }
  42. }
  43. //! prevents insider adding in the wrong position, HOTFIX
  44. void SetEnabled()
  45. {
  46. m_Enabled = true;
  47. }
  48. #ifdef DEVELOPER
  49. override void DebugSendDmgTrigger()
  50. {
  51. if ( m_CanSendDbg )
  52. super.DebugSendDmgTrigger();
  53. }
  54. #endif
  55. }
  56. // Used for tripwire type traps, where we want to allow players to go through
  57. class TripWireTrigger : TrapTrigger
  58. {
  59. override protected void OnEnterServerEvent( TriggerInsider insider )
  60. {
  61. PlayerBase playerInsider = PlayerBase.Cast(insider.GetObject());
  62. if (playerInsider)
  63. {
  64. // If the player is jogging / sprinting while standing with or without hands raised, tripwire will trigger
  65. bool isErect = ( playerInsider.m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_ERECT || playerInsider.m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDERECT || playerInsider.m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_RAISEDCROUCH );
  66. bool isJogging = ( playerInsider.m_MovementState.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_RUN || playerInsider.m_MovementState.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_SPRINT );
  67. if (isJogging && isErect)
  68. {
  69. super.OnEnterServerEvent(insider);
  70. return;
  71. }
  72. // Special handling of crouch sprint
  73. if ( playerInsider.m_MovementState.m_iStanceIdx == DayZPlayerConstants.STANCEIDX_CROUCH && playerInsider.m_MovementState.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_SPRINT )
  74. {
  75. super.OnEnterServerEvent(insider);
  76. return;
  77. }
  78. }
  79. else
  80. {
  81. super.OnEnterServerEvent(insider);
  82. }
  83. }
  84. }