trap_rabbitsnare.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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 SetupTrap()
  28. {
  29. if ( GetGame().IsServer() )
  30. {
  31. if ( GetHierarchyRootPlayer().CanDropEntity( this ) )
  32. {
  33. if ( IsRuined() )
  34. {
  35. PlayerBase player = PlayerBase.Cast( GetHierarchyRootPlayer() );
  36. }
  37. else
  38. {
  39. PlayerBase owner_player = PlayerBase.Cast( GetHierarchyRootPlayer() );
  40. //GetDirection
  41. vector trapPos = owner_player.GetDirection();
  42. trapPos[1] = 0;
  43. SetPosition( owner_player.GetPosition() + trapPos );
  44. SetActive();
  45. SetOrientation( owner_player.GetOrientation() );
  46. }
  47. }
  48. }
  49. }
  50. override void InitCatchingComponent()
  51. {
  52. if (!m_CatchingContext)
  53. {
  54. int updateCount = m_MaxActiveTime/m_UpdateWaitTime;
  55. Param2<EntityAI,int> par = new Param2<EntityAI,int>(this,updateCount);
  56. m_CatchingContext = new CatchingContextTrapLandSnare(par);
  57. }
  58. super.InitCatchingComponent();
  59. }
  60. //================================================================
  61. // ADVANCED PLACEMENT
  62. //================================================================
  63. override void OnPlacementComplete( Man player, vector position = "0 0 0", vector orientation = "0 0 0" )
  64. {
  65. super.OnPlacementComplete( player, position, orientation );
  66. SetOrientation(orientation);
  67. }
  68. override bool IsDeployable()
  69. {
  70. return true;
  71. }
  72. override string GetDeploySoundset()
  73. {
  74. return "placeRabbitSnareTrap_SoundSet";
  75. }
  76. override string GetLoopDeploySoundset()
  77. {
  78. return "rabbitsnare_deploy_SoundSet";
  79. }
  80. override void SetActions()
  81. {
  82. super.SetActions();
  83. // We remove the hunting trap deploy action in order to allow advanced placement
  84. RemoveAction(ActionDeployHuntingTrap);
  85. AddAction(ActionTogglePlaceObject);
  86. AddAction(ActionDeployObject);
  87. }
  88. // ===============================================================
  89. // ===================== DEPRECATED ============================
  90. // ===============================================================
  91. override void AlignCatch( ItemBase obj, string catch_name )
  92. {
  93. if ( catch_name == "Animal_LepusEuropaeus" )
  94. {
  95. obj.SetOrientation( GetOrientation() );
  96. vector forward_vec = GetDirection();
  97. vector side_vec = forward_vec.Perpend( ) * -0.22;
  98. forward_vec = forward_vec * -0.3;
  99. vector chatch_pos = obj.GetPosition() + forward_vec + side_vec;
  100. obj.SetPosition( chatch_pos );
  101. }
  102. }
  103. }
  104. class RabbitSnareTrap extends Trap_RabbitSnare
  105. {
  106. }