Dayz
Build 1.29.163047, Scripts Rev. 123548
Dayz Code Explorer by Zeroy
Toggle main menu visibility
Loading...
Searching...
No Matches
cacontinuousminewood.c
Go to the documentation of this file.
1
class
CAContinuousMineWood
:
CAContinuousBase
2
{
3
protected
float
m_TimeElpased
;
4
protected
float
m_AdjustedTimeBetweenMaterialDrops
;
5
protected
float
m_CycleTimeOverride
;
6
protected
float
m_TimeBetweenMaterialDrops
;
7
protected
float
m_DamageToMiningItemEachDrop
;
8
protected
float
m_AdjustedDamageToMiningItemEachDrop
;
9
protected
int
m_AmountOfDrops
;
10
protected
int
m_CurrentAssumedDrops
;
11
protected
ref
map<string,int>
m_MaterialAndQuantityMap
;
12
protected
float
m_TimeToComplete
;
13
protected
ref Param1<float>
m_SpentUnits
;
14
protected
bool
m_DataLoaded
=
false
;
15
protected
const
int
MINEDITEM_MAX
= 5;
16
protected
ItemBase
m_MinedItem
[
MINEDITEM_MAX
];
17
protected
ItemBase
m_SecondaryItem
;
18
19
void
CAContinuousMineWood
(
float
time_between_drops)
20
{
21
m_TimeBetweenMaterialDrops
= time_between_drops;
22
m_CycleTimeOverride
= -1.0;
23
}
24
25
override
void
Setup
(
ActionData
action_data )
26
{
27
m_TimeElpased
= 0;
28
if
( !
m_SpentUnits
)
29
{
30
m_SpentUnits
=
new
Param1<float>(0);
31
}
32
else
33
{
34
m_SpentUnits
.param1 = 0;
35
}
36
m_MaterialAndQuantityMap
=
new
map<string,int>
;
37
m_DataLoaded
=
GetMiningData
(action_data);
38
39
if
(
m_CycleTimeOverride
> -1.0)
40
{
41
m_TimeBetweenMaterialDrops
=
m_CycleTimeOverride
;
42
if
(!action_data.m_MainItem)
//hand action
43
m_TimeBetweenMaterialDrops
=
m_TimeBetweenMaterialDrops
* 3;
44
}
45
m_AdjustedTimeBetweenMaterialDrops
=
m_TimeBetweenMaterialDrops
;
//removed softskills
46
m_TimeToComplete
=
m_AmountOfDrops
*
m_AdjustedTimeBetweenMaterialDrops
;
47
}
48
49
override
int
Execute
(
ActionData
action_data )
50
{
51
Object
targetObject;
52
Class
.
CastTo
(targetObject, action_data.m_Target.GetObject());
53
if
( !action_data.m_Player || !
m_DataLoaded
)
54
{
55
return
UA_ERROR
;
56
}
57
58
if
( (action_data.m_MainItem && action_data.m_MainItem.IsDamageDestroyed()) || targetObject.IsDamageDestroyed() )
59
{
60
return
UA_FINISHED
;
61
}
62
else
63
{
64
if
(
m_TimeElpased
<
m_AdjustedTimeBetweenMaterialDrops
)
65
{
66
m_TimeElpased
+= action_data.m_Player.GetDeltaT();
67
}
68
else
69
{
70
if
(
g_Game
.IsServer() )
71
{
72
float
damage = 0;
73
if
(
m_AmountOfDrops
> 0)
74
damage = (1 /
m_AmountOfDrops
) * 100;
75
76
targetObject.DecreaseHealth(
""
,
""
, damage, targetObject.CanBeAutoDeleted());
77
CreatePrimaryItems
(action_data);
78
if
(action_data.m_MainItem)
79
action_data.m_MainItem.DecreaseHealth(
""
,
""
,
m_AdjustedDamageToMiningItemEachDrop
);
80
else
81
{
82
DamagePlayersHands
(action_data.m_Player);
83
}
84
85
if
( targetObject.IsDamageDestroyed() )
//client does not know the target is destroyed yet, happens on the next Execute!
86
{
87
if
(
m_SpentUnits
)
88
{
89
m_SpentUnits
.param1 =
m_TimeElpased
;
90
SetACData
(
m_SpentUnits
);
91
}
92
93
if
(
WoodBase
.Cast(targetObject) )
94
{
95
WoodBase
target_woodbase =
WoodBase
.Cast(targetObject);
96
97
if
(target_woodbase.GetSecondaryOutput() !=
""
)
98
CreateSecondaryItems
(action_data,target_woodbase.GetSecondaryOutput(),target_woodbase.GetSecondaryDropsAmount());
99
}
100
101
if
(action_data.m_MainItem)
102
{
103
targetObject.OnTreeCutDown( action_data.m_MainItem );
104
}
105
else
106
{
107
targetObject.OnTreeCutDown( action_data.m_Player );
108
}
109
}
110
}
111
112
m_CurrentAssumedDrops
++;
113
if
(
m_AmountOfDrops
> 0 &&
m_CurrentAssumedDrops
>=
m_AmountOfDrops
)
//assumed end, client does not know the target is destroyed yet
114
{
115
OnCompletePogress
(action_data);
116
return
UA_FINISHED
;
117
}
118
119
m_TimeElpased
=
m_TimeElpased
-
m_AdjustedTimeBetweenMaterialDrops
;
120
OnCompletePogress
(action_data);
121
}
122
return
UA_PROCESSING
;
123
}
124
}
125
126
override
float
GetProgress
()
127
{
128
return
m_TimeElpased
/
m_AdjustedTimeBetweenMaterialDrops
;
129
}
130
131
//---------------------------------------------------------------------------
132
133
bool
GetMiningData
(
ActionData
action_data )
134
{
135
MineActionData
adata =
MineActionData
.Cast(action_data);
136
WoodBase
ntarget;
137
if
(
Class
.
CastTo
(ntarget, action_data.m_Target.GetObject()) )
138
{
139
m_AmountOfDrops
= ntarget.GetAmountOfDropsEx(action_data.m_MainItem,adata.
m_HarvestType
);
140
m_CurrentAssumedDrops
= 0;
141
m_CycleTimeOverride
= ntarget.GetCycleTimeOverride();
//TODO
142
ntarget.GetMaterialAndQuantityMapEx(action_data.m_MainItem,
m_MaterialAndQuantityMap
, adata.
m_HarvestType
);
143
m_DamageToMiningItemEachDrop
= ntarget.GetDamageToMiningItemEachDropEx(action_data.m_MainItem, adata.
m_HarvestType
);
144
m_AdjustedDamageToMiningItemEachDrop
=
m_DamageToMiningItemEachDrop
;
//removed softskills
145
return
true
;
146
}
147
return
false
;
148
}
149
150
void
CreatePrimaryItems
(
ActionData
action_data)
151
{
152
string
material;
153
int
increment;
154
for
(
int
i = 0; i <
m_MaterialAndQuantityMap
.Count(); i++)
155
{
156
material =
m_MaterialAndQuantityMap
.GetKey(i);
157
158
if
(material !=
""
)
159
{
160
increment =
m_MaterialAndQuantityMap
.GetElement(i);
161
162
if
( !
m_MinedItem
[i] )
163
{
164
m_MinedItem
[i] =
ItemBase
.Cast(
g_Game
.CreateObjectEx(material,action_data.m_Player.GetPosition(),
ECE_PLACE_ON_SURFACE
));
165
m_MinedItem
[i].SetQuantity(increment);
166
}
167
else
if
(
m_MinedItem
[i].
HasQuantity
())
168
{
169
if
(
m_MinedItem
[i].
IsFullQuantity
() )
170
{
171
int
stack_max =
m_MinedItem
[i].GetQuantityMax();
172
173
increment -= stack_max -
m_MinedItem
[i].GetQuantity();
174
if
(increment >= 1.0)
175
{
176
m_MinedItem
[i] =
ItemBase
.Cast(
g_Game
.CreateObjectEx(material,action_data.m_Player.GetPosition(),
ECE_PLACE_ON_SURFACE
));
177
m_MinedItem
[i].SetQuantity(increment,
false
);
178
}
179
}
180
else
181
{
182
m_MinedItem
[i].AddQuantity(increment,
false
);
183
}
184
}
185
else
186
{
187
m_MinedItem
[i] =
ItemBase
.Cast(
g_Game
.CreateObjectEx(material,action_data.m_Player.GetPosition(),
ECE_PLACE_ON_SURFACE
));
188
}
189
}
190
}
191
}
192
193
void
CreateSecondaryItems
(
ActionData
action_data,
string
material_secondary =
""
,
int
quantity_secondary = -1)
194
{
195
if
(material_secondary ==
""
|| quantity_secondary <= 0)
196
{
197
return
;
198
}
199
200
m_SecondaryItem
=
ItemBase
.Cast(
g_Game
.CreateObjectEx(material_secondary,action_data.m_Player.GetPosition(),
ECE_PLACE_ON_SURFACE
));
201
if
( !
m_SecondaryItem
.HasQuantity() )
202
{
203
CreateSecondaryItems
(action_data,material_secondary,quantity_secondary - 1);
204
return
;
205
}
206
207
int
increment = quantity_secondary;
208
int
stack_max =
m_SecondaryItem
.GetQuantityMax();
209
int
stacks_amount;
210
211
stacks_amount =
Math
.
Ceil
(increment/stack_max);
212
213
for
(
int
i = 0; i < stacks_amount; i++)
214
{
215
if
(increment > stack_max)
216
{
217
m_SecondaryItem
.SetQuantity(stack_max);
218
increment -= stack_max;
219
m_SecondaryItem
=
ItemBase
.Cast(
g_Game
.CreateObjectEx(material_secondary,action_data.m_Player.GetPosition(),
ECE_PLACE_ON_SURFACE
));
220
}
221
else
222
{
223
m_SecondaryItem
.SetQuantity(increment);
224
}
225
}
226
}
227
228
void
DamagePlayersHands
(
PlayerBase
player)
229
{
230
ItemBase
gloves =
ItemBase
.Cast(player.FindAttachmentBySlotName(
"Gloves"
));
231
if
( gloves && !gloves.IsDamageDestroyed() )
232
{
233
gloves.DecreaseHealth(
""
,
""
,
m_AdjustedDamageToMiningItemEachDrop
);
234
}
235
else
236
{
237
int
rand =
Math
.
RandomIntInclusive
(0,9);
238
if
( rand == 0 )
239
{
240
rand =
Math
.
RandomIntInclusive
(0,1);
241
if
( rand == 0 && !player.GetBleedingManagerServer().AttemptAddBleedingSourceBySelection(
"LeftForeArmRoll"
) )
242
{
243
player.GetBleedingManagerServer().AttemptAddBleedingSourceBySelection(
"RightForeArmRoll"
);
244
}
245
else
if
( rand == 1 && !player.GetBleedingManagerServer().AttemptAddBleedingSourceBySelection(
"RightForeArmRoll"
) )
246
{
247
player.GetBleedingManagerServer().AttemptAddBleedingSourceBySelection(
"LeftForeArmRoll"
);
248
}
249
}
250
}
251
}
252
};
ActionData
ActionBase ActionData
Definition
actionbase.c:30
ECE_PLACE_ON_SURFACE
const int ECE_PLACE_ON_SURFACE
Definition
centraleconomy.c:37
CABase::SetACData
void SetACData(Param units)
Definition
cabase.c:40
CAContinuousBase
Definition
cacontinuousbase.c:2
CAContinuousBase::OnCompletePogress
void OnCompletePogress(ActionData action_data)
Definition
cacontinuousbase.c:8
CAContinuousMineWood::m_DamageToMiningItemEachDrop
float m_DamageToMiningItemEachDrop
Definition
cacontinuousminewood.c:7
CAContinuousMineWood::CreatePrimaryItems
void CreatePrimaryItems(ActionData action_data)
Definition
cacontinuousminewood.c:150
CAContinuousMineWood::GetMiningData
bool GetMiningData(ActionData action_data)
Definition
cacontinuousminewood.c:133
CAContinuousMineWood::m_TimeBetweenMaterialDrops
float m_TimeBetweenMaterialDrops
Definition
cacontinuousminewood.c:6
CAContinuousMineWood::m_AdjustedDamageToMiningItemEachDrop
float m_AdjustedDamageToMiningItemEachDrop
Definition
cacontinuousminewood.c:8
CAContinuousMineWood::m_MinedItem
ItemBase m_MinedItem[MINEDITEM_MAX]
Definition
cacontinuousminewood.c:16
CAContinuousMineWood::m_SecondaryItem
ItemBase m_SecondaryItem
Definition
cacontinuousminewood.c:17
CAContinuousMineWood::m_AdjustedTimeBetweenMaterialDrops
float m_AdjustedTimeBetweenMaterialDrops
Definition
cacontinuousminewood.c:4
CAContinuousMineWood::m_CurrentAssumedDrops
int m_CurrentAssumedDrops
Definition
cacontinuousminewood.c:10
CAContinuousMineWood::Execute
override int Execute(ActionData action_data)
Definition
cacontinuousminewood.c:49
CAContinuousMineWood::CreateSecondaryItems
void CreateSecondaryItems(ActionData action_data, string material_secondary="", int quantity_secondary=-1)
Definition
cacontinuousminewood.c:193
CAContinuousMineWood::m_DataLoaded
bool m_DataLoaded
Definition
cacontinuousminewood.c:14
CAContinuousMineWood::m_TimeToComplete
float m_TimeToComplete
Definition
cacontinuousminewood.c:12
CAContinuousMineWood::GetProgress
override float GetProgress()
Definition
cacontinuousminewood.c:126
CAContinuousMineWood::CAContinuousMineWood
void CAContinuousMineWood(float time_between_drops)
Definition
cacontinuousminewood.c:19
CAContinuousMineWood::m_MaterialAndQuantityMap
ref map< string, int > m_MaterialAndQuantityMap
Definition
cacontinuousminewood.c:11
CAContinuousMineWood::MINEDITEM_MAX
const int MINEDITEM_MAX
Definition
cacontinuousminewood.c:15
CAContinuousMineWood::m_CycleTimeOverride
float m_CycleTimeOverride
Definition
cacontinuousminewood.c:5
CAContinuousMineWood::m_AmountOfDrops
int m_AmountOfDrops
Definition
cacontinuousminewood.c:9
CAContinuousMineWood::m_SpentUnits
ref Param1< float > m_SpentUnits
Definition
cacontinuousminewood.c:13
CAContinuousMineWood::m_TimeElpased
float m_TimeElpased
Definition
cacontinuousminewood.c:3
CAContinuousMineWood::DamagePlayersHands
void DamagePlayersHands(PlayerBase player)
Definition
cacontinuousminewood.c:228
CAContinuousMineWood::Setup
override void Setup(ActionData action_data)
Definition
cacontinuousminewood.c:25
Class
Super root of all classes in Enforce script.
Definition
enscript.c:11
ItemBase
Definition
inventoryitem.c:742
Math
Definition
enmath.c:7
MineActionData
Definition
actionminetree.c:2
MineActionData::m_HarvestType
EHarvestType m_HarvestType
Definition
actionminetree.c:3
Object
Definition
objecttyped.c:2
PlayerBase
Definition
playerbaseclient.c:2
map
Definition
cachedequipmentstorage.c:4
g_Game
DayZGame g_Game
Definition
dayzgame.c:3942
Class::CastTo
static proto bool CastTo(out Class to, Class from)
Try to safely down-cast base class to child class.
Math::RandomIntInclusive
static int RandomIntInclusive(int min, int max)
Returns a random int number between and min [inclusive] and max [inclusive].
Definition
enmath.c:54
Math::Ceil
static proto float Ceil(float f)
Returns ceil of value.
UA_FINISHED
const int UA_FINISHED
Definition
constants.c:469
UA_ERROR
const int UA_ERROR
Definition
constants.c:488
UA_PROCESSING
const int UA_PROCESSING
Definition
constants.c:467
IsFullQuantity
bool IsFullQuantity()
Definition
itembase.c:8403
HasQuantity
override bool HasQuantity()
Definition
itembase.c:8393
WoodBase
void WoodBase()
Definition
woodbase.c:30
Games
Dayz
scripts
4_world
classes
useractionscomponent
actioncomponents
cacontinuousminewood.c
Generated by
1.17.0