actionanimateseats.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. class ActionAnimateSeats: ActionAnimateCarSelection
  2. {
  3. void ActionAnimateSeats()
  4. {
  5. m_Text = "#move_seat";
  6. }
  7. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  8. {
  9. if( !target ) return false;
  10. if( !IsInReach(player, target, UAMaxDistances.DEFAULT) ) return false;
  11. Object targetObject = target.GetObject();
  12. Entity targetEnt = Entity.Cast(targetObject);
  13. Transport transport;
  14. CarScript car;
  15. int crewIdx;
  16. //string selection = targetObject.GetActionComponentName(target.GetComponentIndex());
  17. array<string> selections = new array<string>();
  18. targetObject.GetActionComponentNameList(target.GetComponentIndex(), selections);
  19. if ( !Class.CastTo(transport, targetObject) )
  20. return false;
  21. if ( Class.CastTo(car, targetEnt) )
  22. {
  23. for (int i = 0; i < selections.Count(); i++)
  24. {
  25. m_AnimSource = car.GetAnimSourceFromSelection( selections[i]) ;
  26. if ( m_AnimSource != "" )
  27. {
  28. //return true; //TODO:: NEED A LINK BETWEEN SeatBack and seat with crew after that we can REMOVE the return
  29. HumanCommandVehicle vehCmd = player.GetCommand_Vehicle();
  30. if ( m_AnimSource == "SeatDriver" )
  31. {
  32. if ( transport.CrewMember( DayZPlayerConstants.VEHICLESEAT_DRIVER ) )
  33. return false;
  34. if ( !vehCmd && car.GetCarDoorsState( "NivaDriverDoors" ) == CarDoorState.DOORS_CLOSED )
  35. return false;
  36. }
  37. if ( m_AnimSource == "SeatCoDriver" )
  38. {
  39. if ( transport.CrewMember( DayZPlayerConstants.VEHICLESEAT_CODRIVER ) )
  40. return false;
  41. if ( !vehCmd && car.GetCarDoorsState( "NivaCoDriverDoors" ) == CarDoorState.DOORS_CLOSED )
  42. return false;
  43. }
  44. if ( !vehCmd && !transport.CanReachSeatFromDoors(selections[i], player.GetPosition(), 1.0) )
  45. return false;
  46. return true;
  47. }
  48. }
  49. }
  50. return false;
  51. }
  52. override bool CanBeUsedInVehicle()
  53. {
  54. return true;
  55. }
  56. override bool AddActionJuncture(ActionData action_data)
  57. {
  58. Transport trans = Transport.Cast(action_data.m_Target.GetObject());
  59. bool accepted = false;
  60. int nextSeat = trans.CrewPositionIndex( action_data.m_Target.GetComponentIndex() );
  61. Transport transport = Transport.Cast(action_data.m_Target.GetObject());
  62. InventoryLocation il = new InventoryLocation;
  63. if (transport)
  64. {
  65. il.SetVehicle(transport, action_data.m_Player, nextSeat);
  66. //Lock target
  67. if (GetGame().AddInventoryJunctureEx(action_data.m_Player, action_data.m_Player, il, true, 10000))
  68. {
  69. accepted = true;
  70. action_data.m_ReservedInventoryLocations.Insert(il);
  71. }
  72. }
  73. return accepted;
  74. }
  75. };