actiontransferliquid.c 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. class TransferLiquidActionReciveData : ActionReciveData
  2. {
  3. bool m_TendencyRecived;
  4. }
  5. class TransferLiquidActionData : ActionData
  6. {
  7. bool m_Tendency;
  8. };
  9. class ActionTransferLiquidCB : ActionContinuousBaseCB
  10. {
  11. private const float TIME_TO_REPEAT = 0.25;
  12. override void CreateActionComponent()
  13. {
  14. if (TransferLiquidActionData.Cast(m_ActionData))
  15. m_ActionData.m_ActionComponent = new CAContinuousQuantityLiquidTransfer(UAQuantityConsumed.DRAIN_LIQUID, TIME_TO_REPEAT, TransferLiquidActionData.Cast(m_ActionData).m_Tendency);
  16. else
  17. m_ActionData.m_ActionComponent = new CAContinuousQuantityLiquidTransfer(UAQuantityConsumed.DRAIN_LIQUID, TIME_TO_REPEAT);
  18. }
  19. };
  20. //!DEPRECATED
  21. class ActionTransferLiquid: ActionContinuousBase
  22. {
  23. void ActionTransferLiquid()
  24. {
  25. m_CallbackClass = ActionTransferLiquidCB;
  26. m_CommandUID = DayZPlayerConstants.CMD_ACTIONMOD_EMPTY_VESSEL;
  27. m_CommandUIDProne = DayZPlayerConstants.CMD_ACTIONFB_EMPTY_VESSEL;
  28. m_SpecialtyWeight = UASoftSkillsWeight.PRECISE_LOW;
  29. }
  30. override void CreateConditionComponents()
  31. {
  32. m_ConditionItem = new CCINonRuined;
  33. m_ConditionTarget = new CCTNonRuined(UAMaxDistances.DEFAULT);
  34. }
  35. override bool HasProneException()
  36. {
  37. return true;
  38. }
  39. override string GetText()
  40. {
  41. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  42. if ( player.GetLiquidTendencyDrain() )
  43. return "#drain_liquid";
  44. else
  45. return "#pour_liquid";
  46. }
  47. override bool ActionCondition( PlayerBase player, ActionTarget target, ItemBase item )
  48. {
  49. ItemBase target_item = ItemBase.Cast(target.GetObject());
  50. if ( target_item && item )
  51. {
  52. bool can_drain = Liquid.CanTransfer(target_item,item);
  53. bool can_pour = Liquid.CanTransfer(item,target_item);
  54. if (can_drain && can_pour)
  55. {
  56. return true;
  57. }
  58. else if (!can_pour && can_drain)
  59. {
  60. if ( (!GetGame().IsDedicatedServer()) && !player.GetLiquidTendencyDrain() )
  61. {
  62. player.SetLiquidTendencyDrain(true);
  63. return false;
  64. }
  65. else
  66. {
  67. return true;
  68. }
  69. }
  70. else if (!can_drain && can_pour)
  71. {
  72. if ( (!GetGame().IsDedicatedServer()) && player.GetLiquidTendencyDrain() )
  73. {
  74. player.SetLiquidTendencyDrain(false);
  75. return false;
  76. }
  77. else
  78. {
  79. return true;
  80. }
  81. }
  82. }
  83. return false;
  84. }
  85. override void OnStartClient( ActionData action_data )
  86. {
  87. TransferLiquidActionData.Cast(action_data).m_Tendency = action_data.m_Player.GetLiquidTendencyDrain();
  88. }
  89. override void OnStartServer( ActionData action_data )
  90. {
  91. super.OnStartServer(action_data);
  92. if (!GetGame().IsMultiplayer())
  93. TransferLiquidActionData.Cast(action_data).m_Tendency = action_data.m_Player.GetLiquidTendencyDrain();
  94. }
  95. override ActionData CreateActionData()
  96. {
  97. TransferLiquidActionData action_data = new TransferLiquidActionData;
  98. return action_data;
  99. }
  100. override void WriteToContext(ParamsWriteContext ctx, ActionData action_data)
  101. {
  102. super.WriteToContext(ctx, action_data);
  103. ctx.Write(action_data.m_Player.GetLiquidTendencyDrain());
  104. }
  105. override bool ReadFromContext(ParamsReadContext ctx, out ActionReciveData action_recive_data )
  106. {
  107. if(!action_recive_data)
  108. {
  109. action_recive_data = new TransferLiquidActionReciveData;
  110. }
  111. TransferLiquidActionReciveData recive_data_transfer = TransferLiquidActionReciveData.Cast(action_recive_data);
  112. super.ReadFromContext(ctx, action_recive_data);
  113. bool tendency_drain;
  114. if ( !ctx.Read(tendency_drain) )
  115. return false;
  116. recive_data_transfer.m_TendencyRecived = tendency_drain;
  117. return true;
  118. }
  119. override void HandleReciveData(ActionReciveData action_recive_data, ActionData action_data)
  120. {
  121. super.HandleReciveData(action_recive_data, action_data);
  122. TransferLiquidActionReciveData recive_data_transfer = TransferLiquidActionReciveData.Cast(action_recive_data);
  123. TransferLiquidActionData.Cast(action_data).m_Tendency = recive_data_transfer.m_TendencyRecived;
  124. }
  125. override void OnStartAnimationLoop( ActionData action_data )
  126. {
  127. if ( !GetGame().IsMultiplayer() || GetGame().IsServer() )
  128. {
  129. Bottle_Base vessel_in_hands = Bottle_Base.Cast( action_data.m_Target.GetObject() );
  130. Param1<bool> play = new Param1<bool>( true );
  131. if (TransferLiquidActionData.Cast(action_data))
  132. {
  133. if (TransferLiquidActionData.Cast(action_data).m_Tendency == true)
  134. GetGame().RPCSingleParam( vessel_in_hands, SoundTypeBottle.EMPTYING, play, true );
  135. else if (!TransferLiquidActionData.Cast(action_data).m_Tendency == false)
  136. GetGame().RPCSingleParam( vessel_in_hands, SoundTypeBottle.POURING, play, true );
  137. }
  138. }
  139. }
  140. override void OnEndAnimationLoop( ActionData action_data )
  141. {
  142. if ( !GetGame().IsMultiplayer() || GetGame().IsServer() )
  143. {
  144. Bottle_Base target_vessel = Bottle_Base.Cast( action_data.m_Target.GetObject());
  145. Param1<bool> play = new Param1<bool>( false );
  146. if (TransferLiquidActionData.Cast(action_data).m_Tendency)
  147. GetGame().RPCSingleParam( target_vessel, SoundTypeBottle.EMPTYING, play, true );
  148. else
  149. GetGame().RPCSingleParam( target_vessel, SoundTypeBottle.POURING, play, true );
  150. }
  151. }
  152. };