DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
CAContinuousQuantityLiquidTransfer.c
Go to the documentation of this file.
2{
3 protected int m_TendencyDrain; //1 == drain, 0 == pour, -1 == cancel!
4 protected float m_ItemQuantity;
5 protected float m_SpentQuantity;
6 protected float m_SpentQuantity_total;
7 protected float m_ItemMaxQuantity; //basically free capacity
8 protected float m_TimeElpased;
9 protected float m_QuantityUsedPerSecond;
11 protected float m_DefaultTimeStep;
12 protected ref Param1<float> m_SpentUnits;
13
14 void CAContinuousQuantityLiquidTransfer( float quantity_used_per_second, float time_to_progress, int drain = -1) //-1 used as a safeguard; if no valid value arrives, callback is canceled
15 {
16 m_QuantityUsedPerSecond = quantity_used_per_second;
17 m_DefaultTimeStep = time_to_progress;
18 m_TendencyDrain = drain;
19 }
20
21 override void Setup( ActionData action_data )
22 {
23 ItemBase target_item = ItemBase.Cast(action_data.m_Target.GetObject());
24
25 m_TimeElpased = 0;
27
28 if ( !m_SpentUnits )
29 {
30 m_SpentUnits = new Param1<float>( 0 );
31 }
32 else
33 {
34 m_SpentUnits.param1 = 0;
35 }
36
38
39 if ( m_TendencyDrain == 1 )
40 {
41 if ( target_item.GetQuantity() > (action_data.m_MainItem.GetQuantityMax() - action_data.m_MainItem.GetQuantity()) )
42 {
43 m_ItemMaxQuantity = action_data.m_MainItem.GetQuantityMax() - action_data.m_MainItem.GetQuantity();
44 m_ItemQuantity = m_ItemMaxQuantity; //target_item.GetQuantity();
45 }
46 else //
47 {
48 m_ItemMaxQuantity = target_item.GetQuantity();
49 m_ItemQuantity = m_ItemMaxQuantity; //target_item.GetQuantity();
50 }
51 }
52 else if ( m_TendencyDrain == 0)
53 {
54 if ( action_data.m_MainItem.GetQuantity() > (target_item.GetQuantityMax() - target_item.GetQuantity()) )
55 {
56 m_ItemMaxQuantity = target_item.GetQuantityMax() - target_item.GetQuantity();
57 m_ItemQuantity = m_ItemMaxQuantity; //action_data.m_MainItem.GetQuantity();
58 }
59 else //
60 {
61 m_ItemMaxQuantity = action_data.m_MainItem.GetQuantity();
62 m_ItemQuantity = m_ItemMaxQuantity; //target_item.GetQuantity();
63 }
64 }
65 }
66
67
68 override int Execute( ActionData action_data )
69 {
70 ItemBase target_item = ItemBase.Cast(action_data.m_Target.GetObject());
71
72 if ( !action_data.m_Player || m_TendencyDrain == -1 || !action_data.m_Target )
73 {
74 return UA_ERROR;
75 }
76
77 if ( m_ItemQuantity <= 0 )
78 {
79 return UA_FINISHED;
80 }
81 else
82 {
84 {
85 m_AdjustedQuantityUsedPerSecond = action_data.m_Player.GetSoftSkillsManager().AddSpecialtyBonus( m_QuantityUsedPerSecond, m_Action.GetSpecialtyWeight(), true);
86 m_SpentQuantity += m_AdjustedQuantityUsedPerSecond * action_data.m_Player.GetDeltaT();
87 m_TimeElpased += action_data.m_Player.GetDeltaT();
88
90 {
91 CalcAndSetQuantity( action_data );
92 m_TimeElpased = 0;
93 }
94
95 return UA_PROCESSING;
96 }
97 else
98 {
99 CalcAndSetQuantity( action_data );
100 OnCompletePogress(action_data);
101 return UA_FINISHED;
102 }
103 }
104 }
105
106 override int Cancel( ActionData action_data )
107 {
108 if ( !action_data.m_Player || m_TendencyDrain == -1 || !action_data.m_Target || !action_data.m_Target.GetObject() )
109 {
110 return UA_ERROR;
111 }
112
113 CalcAndSetQuantity( action_data );
114 return UA_INTERRUPT;
115 }
116
117 override float GetProgress()
118 {
119 if ( m_TendencyDrain )
120 {
122 }
123 else
124 {
126 }
127 }
128
129 //---------------------------------------------------------------------------
130
131 void CalcAndSetQuantity( ActionData action_data )
132 {
133 ItemBase target_item = ItemBase.Cast(action_data.m_Target.GetObject());
135
136 if ( GetGame().IsServer() )
137 {
138 if ( m_SpentUnits )
139 {
142 }
143
144 //could move following stuff to action itself, if needed
145 if ( m_TendencyDrain )
146 {
147 Liquid.Transfer(target_item, action_data.m_MainItem, m_SpentQuantity);
148 }
149 else
150 {
151 Liquid.Transfer(action_data.m_MainItem, target_item, m_SpentQuantity);
152 }
153 }
154 m_SpentQuantity = 0;
155 }
156}
protected void CalcAndSetQuantity()
ItemBase m_MainItem
Definition ActionBase.c:28
PlayerBase m_Player
Definition ActionBase.c:33
ref ActionTarget m_Target
Definition ActionBase.c:32
void SetACData(Param units)
Definition CABase.c:40
protected ActionBase m_Action
Definition CABase.c:3
void OnCompletePogress(ActionData action_data)
override int Execute(ActionData action_data)
void CAContinuousQuantityLiquidTransfer(float quantity_used_per_second, float time_to_progress, int drain=-1)
override void Setup(ActionData action_data)
override float GetLiquidThroughputCoef()
Definition Liquid.c:2
static void Transfer(ItemBase source_ent, ItemBase target_ent, float quantity=-1)
Definition Liquid.c:39
Definition EnMath.c:7
proto native CGame GetGame()
static proto float Min(float x, float y)
Returns smaller of two given values.
const int UA_FINISHED
Definition constants.c:420
const int UA_ERROR
Definition constants.c:439
const int UA_INTERRUPT
Definition constants.c:422
const int UA_PROCESSING
Definition constants.c:418