trap_rabbitsnare.c 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. class Trap_RabbitSnare extends TrapSpawnBase
  2. {
  3. override void InitTrapValues()
  4. {
  5. super.InitTrapValues();
  6. m_DefectRate = 2.5; //Added damage after trap activation
  7. m_InitWaitTimeMin = 120;
  8. m_InitWaitTimeMax = 180;
  9. m_UpdateWaitTime = 30;
  10. m_SpawnUpdateWaitTime = 30;
  11. m_MaxActiveTime = 1200;
  12. m_IsFoldable = true;
  13. m_MinimalDistanceFromPlayersToCatch = 15;
  14. m_AnimationPhaseSet = "inventory";
  15. m_AnimationPhaseTriggered = "placing";
  16. m_AnimationPhaseUsed = "triggered";
  17. }
  18. override bool CanBePlaced(Man player, vector position)
  19. {
  20. if (m_IsBeingPlaced)
  21. return true;
  22. int liquidType;
  23. string surfaceType;
  24. g_Game.SurfaceUnderObject(PlayerBase.Cast(player).GetHologramLocal().GetProjectionEntity(), surfaceType, liquidType);
  25. return g_Game.IsSurfaceDigable(surfaceType);
  26. }
  27. override void OnVariablesSynchronized()
  28. {
  29. super.OnVariablesSynchronized();
  30. if (IsPlaceSound())
  31. {
  32. PlayPlaceSound();
  33. }
  34. }
  35. override void SetupTrap()
  36. {
  37. if ( GetGame().IsServer() )
  38. {
  39. if ( GetHierarchyRootPlayer().CanDropEntity( this ) )
  40. {
  41. if ( IsRuined() )
  42. {
  43. PlayerBase player = PlayerBase.Cast( GetHierarchyRootPlayer() );
  44. }
  45. else
  46. {
  47. PlayerBase owner_player = PlayerBase.Cast( GetHierarchyRootPlayer() );
  48. //GetDirection
  49. vector trapPos = owner_player.GetDirection();
  50. trapPos[1] = 0;
  51. SetPosition( owner_player.GetPosition() + trapPos );
  52. SetActive();
  53. SetOrientation( owner_player.GetOrientation() );
  54. }
  55. }
  56. }
  57. }
  58. override void InitCatchingComponent()
  59. {
  60. if (!m_CatchingContext)
  61. {
  62. int updateCount = m_MaxActiveTime/m_UpdateWaitTime;
  63. Param2<EntityAI,int> par = new Param2<EntityAI,int>(this,updateCount);
  64. m_CatchingContext = new CatchingContextTrapLandSnare(par);
  65. }
  66. }
  67. //================================================================
  68. // ADVANCED PLACEMENT
  69. //================================================================
  70. override void OnPlacementComplete( Man player, vector position = "0 0 0", vector orientation = "0 0 0" )
  71. {
  72. super.OnPlacementComplete( player, position, orientation );
  73. SetOrientation(orientation);
  74. SetIsPlaceSound( true );
  75. }
  76. override bool IsDeployable()
  77. {
  78. return true;
  79. }
  80. override string GetDeploySoundset()
  81. {
  82. return "placeRabbitSnareTrap_SoundSet";
  83. }
  84. override string GetLoopDeploySoundset()
  85. {
  86. return "rabbitsnare_deploy_SoundSet";
  87. }
  88. override void SetActions()
  89. {
  90. super.SetActions();
  91. // We remove the hunting trap deploy action in order to all advanced placement
  92. RemoveAction(ActionDeployHuntingTrap);
  93. AddAction(ActionTogglePlaceObject);
  94. AddAction(ActionDeployObject);
  95. }
  96. // ===============================================================
  97. // ===================== DEPRECATED ============================
  98. // ===============================================================
  99. override void AlignCatch( ItemBase obj, string catch_name )
  100. {
  101. if ( catch_name == "Animal_LepusEuropaeus" )
  102. {
  103. obj.SetOrientation( GetOrientation() );
  104. vector forward_vec = GetDirection();
  105. vector side_vec = forward_vec.Perpend( ) * -0.22;
  106. forward_vec = forward_vec * -0.3;
  107. vector chatch_pos = obj.GetPosition() + forward_vec + side_vec;
  108. obj.SetPosition( chatch_pos );
  109. }
  110. }
  111. }
  112. class RabbitSnareTrap extends Trap_RabbitSnare
  113. {
  114. }