LUADOC - Farming Simulator 17

Printable Version

Script v1.4.4.0

Engine v7.0.0.2

Foundation Reference

Overloading

Description
Class for overloading vehicles
Functions

prerequisitesPresent

Description
Checks if all prerequisite specializations are loaded
Definition
prerequisitesPresent(table specializations)
Arguments
tablespecializationsspecializations
Return Values
booleanhasPrerequisitetrue if all prerequisite specializations are loaded
Code
20function Overloading.prerequisitesPresent(specializations)
21 return SpecializationUtil.hasSpecialization(Fillable, specializations) and SpecializationUtil.hasSpecialization(FillVolume, specializations);
22end

load

Description
Called on loading
Definition
load(table savegame)
Arguments
tablesavegamesavegame
Code
30function Overloading:load(savegame)
31
32 self.setOverloadingActive = Overloading.setOverloadingActive;
33 self.doOverload = Overloading.doOverload;
34 self.getIsFoldAllowed = Utils.overwrittenFunction(self.getIsFoldAllowed, Overloading.getIsFoldAllowed);
35 self.getPtoRpm = Utils.overwrittenFunction(self.getPtoRpm, Overloading.getPtoRpm);
36 self.getDoConsumePtoPower = Utils.overwrittenFunction(self.getDoConsumePtoPower, Overloading.getDoConsumePtoPower);
37 self.getIsOverloadingAllowed = Overloading.getIsOverloadingAllowed;
38 self.findValidTrailer = Overloading.findValidTrailer;
39 self.loadTrailerTriggers = Overloading.loadTrailerTriggers;
40 self.onOverloadingTrailerTrigger = Overloading.onOverloadingTrailerTrigger;
41 self.getAutomaticOverloadingState = Overloading.getAutomaticOverloadingState;
42 self.getOverloadingActive = Utils.overwrittenFunction(self.getOverloadingActive, Overloading.getOverloadingActive);
43
44 self.startOverloadingDelay = Overloading.startOverloadingDelay;
45 self.stopOverloadingDelay = Overloading.stopOverloadingDelay;
46 self.updateOverloadingDelay = Overloading.updateOverloadingDelay;
47 self.setOverloadingDelay = Overloading.setOverloadingDelay;
48 self.getOverloadingDelayIsActive = Overloading.getOverloadingDelayIsActive;
49 self.getAllowDelayedUnloading = Overloading.getAllowDelayedUnloading;
50 self.getAllowDelayEffects = Overloading.getAllowDelayEffects;
51 self.getAllowDelayedEffects = Overloading.getAllowDelayedEffects;
52
53 Utils.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.combineTrailerTriggers.combineTrailerTrigger", "vehicle.overloading.trailerTriggers.trailerTrigger")
54 Utils.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.overloadingCapacity", "vehicle.overloading#capacity")
55 Utils.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.trailerTriggers#foldMinTime", "vehicle.overloading#foldMinTime")
56 Utils.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.trailerTriggers#foldMaxTime", "vehicle.overloading#foldMaxTime")
57 Utils.checkDeprecatedXMLElements(self.xmlFile, self.configFileName, "vehicle.trailerTriggers#allowFoldWhileOverloading", "vehicle.overloading#allowFoldWhileOverloading")
58
59 self.overloading = {};
60 self.overloading.trailerTriggers = {};
61 self:loadTrailerTriggers(self.overloading.trailerTriggers, self.xmlFile);
62 for _, trigger in pairs(self.overloading.trailerTriggers) do
63 addTrigger(trigger.node, "onOverloadingTrailerTrigger", self);
64 end
65 self.overloading.trailersInRange = {};
66 self.overloading.capacity = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.overloading#capacity"), 10);
67 self.overloading.fillUnitIndex = Utils.getNoNil(getXMLInt(self.xmlFile, "vehicle.overloading#fillUnitIndex"), 1);
68 self.overloading.unloadInfoIndex = Utils.getNoNil(getXMLInt(self.xmlFile, "vehicle.overloading#unloadInfoIndex"), 1);
69 self.overloading.loadInfoIndex = Utils.getNoNil(getXMLInt(self.xmlFile, "vehicle.overloading#loadInfoIndex"), 1);
70 self.overloading.dischargeInfoIndex = Utils.getNoNil(getXMLInt(self.xmlFile, "vehicle.overloading#dischargeInfoIndex"), 1);
71 self.overloading.stopOverloadIfEmpty = Utils.getNoNil(getXMLBool(self.xmlFile, "vehicle.overloading#stopOverloadIfEmpty"), true);
72 self.overloading.forceActive = Utils.getNoNil(getXMLBool(self.xmlFile, "vehicle.overloading#forceActive"), false);
73 self.overloading.canToggleOverloading = Utils.getNoNil(getXMLBool(self.xmlFile, "vehicle.overloading#canToggleOverloading"), true);
74 self.overloading.foldMinTime = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.overloading#foldMinTime"), 0);
75 self.overloading.foldMaxTime = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.overloading#foldMaxTime"), 1);
76 self.overloading.allowFoldWhileOverloading = Utils.getNoNil(getXMLBool(self.xmlFile, "vehicle.overloading#allowFoldWhileOverloading"), false);
77 self.overloading.isActive = false;
78 self.overloading.didOverload = false;
79
80 self.overloading.delay = {};
81 self.overloading.delay.current = 0;
82 self.overloading.delay.unloadStartTime = 0;
83 self.overloading.delay.sentCurrent = 0;
84 self.overloading.delay.sentUnloadStartTime = 0;
85 self.overloading.delay.dirtyFlag = self:getNextDirtyFlag();
86 self.overloading.delay.time = Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.overloading#delay"), Utils.getNoNil(getXMLFloat(self.xmlFile, "vehicle.pipe#delay"), 0)) * 1000;
87
88 self.isSelectable = true;
89
90 local linkNode = Utils.indexToObject(self.components, Utils.getNoNil(getXMLString(self.xmlFile, "vehicle.fillSound#linkNode"), "0>"));
91 self.sampleFill = SoundUtil.loadSample(self.xmlFile, {}, "vehicle.fillSound", nil, self.baseDirectory, linkNode);
92 self.sampleFillStopTime = 0;
93
94
95 self.overloadingDirtyFlag = self:getNextDirtyFlag();
96
97 self:addConflictCheckedInput(InputBinding.TOGGLE_PIPE);
98end

delete

Description
Called on deleting
Definition
delete()
Code
102function Overloading:delete()
103 for _, trailerTrigger in pairs(self.overloading.trailerTriggers) do
104 removeTrigger(trailerTrigger.node);
105 end
106
107 if self.isClient then
108 SoundUtil.deleteSample(self.sampleFill);
109 end
110end

readStream

Description
Called on client side on join
Definition
readStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
120function Overloading:readStream(streamId, connection)
121 if connection:getIsServer() then
122 self.overloading.didOverload = streamReadBool(streamId);
123 self:setOverloadingActive(streamReadBool(streamId), true);
124 end
125end

writeStream

Description
Called on server side on join
Definition
writeStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
131function Overloading:writeStream(streamId, connection)
132 if not connection:getIsServer() then
133 streamWriteBool(streamId, self.overloading.didOverload);
134 streamWriteBool(streamId, self.overloading.isActive);
135 end
136end

readUpdateStream

Description
Called on on update
Definition
readUpdateStream(integer streamId, integer timestamp, table connection)
Arguments
integerstreamIdstream ID
integertimestamptimestamp
tableconnectionconnection
Code
143function Overloading:readUpdateStream(streamId, timestamp, connection)
144 if connection:getIsServer() then
145 if streamReadBool(streamId) then
146 self.overloading.didOverload = streamReadBool(streamId);
147 end;
148
149 if streamReadBool(streamId) then
150 self.overloading.delay.current = streamReadUIntN(streamId, 6)/63*self.overloading.delay.time;
151
152 if streamReadBool(streamId) then
153 self.overloading.delay.unloadStartTime = 1;
154 else
155 self.overloading.delay.unloadStartTime = -1;
156 end;
157 end;
158 end
159end

writeUpdateStream

Description
Called on on update
Definition
writeUpdateStream(integer streamId, table connection, integer dirtyMask)
Arguments
integerstreamIdstream ID
tableconnectionconnection
integerdirtyMaskdirty mask
Code
166function Overloading:writeUpdateStream(streamId, connection, dirtyMask)
167 if not connection:getIsServer() then
168 if streamWriteBool(streamId, bitAND(dirtyMask, self.overloadingDirtyFlag) ~= 0) then
169 streamWriteBool(streamId, self.overloading.didOverload);
170 end;
171
172 if streamWriteBool(streamId, bitAND(dirtyMask, self.overloading.delay.dirtyFlag) ~= 0) then
173 streamWriteUIntN(streamId, Utils.clamp(math.floor(self.overloading.delay.current/self.overloading.delay.time*63), 0, 63), 6);
174 streamWriteBool(streamId, self.overloading.delay.unloadStartTime > 0);
175 end;
176 end
177end

update

Description
Called on update
Definition
update(float dt)
Arguments
floatdttime since last call in ms
Code
188function Overloading:update(dt)
189 if self.isClient and self:getIsActive() then
190 if InputBinding.hasEvent(InputBinding.TOGGLE_TIPSTATE) and self.overloading.canToggleOverloading then
191 if self:getIsActiveForInput(true) and not self:hasInputConflictWithSelection() then
192 if self:getIsOverloadingAllowed() then
193 self:setOverloadingActive(not self.overloading.isActive);
194 end
195 end
196 end
197 end
198end

updateTick

Description
Called on update tick
Definition
updateTick(float dt)
Arguments
floatdttime since last call in ms
Code
203function Overloading:updateTick(dt)
204 -- sound for a more holistic refactoring
205 if self.isClient then
206 if self.overloading.didOverload or self.isFilling then
207 self.sampleFillStopTime = g_currentMission.time + 150;
208 end
209
210 if self.sampleFillStopTime > g_currentMission.time then
211 if self:getIsActiveForSound(true) then
212 SoundUtil.playSample(self.sampleFill, 0, 0, nil);
213 SoundUtil.stop3DSample(self.sampleFill);
214 else
215 SoundUtil.stopSample(self.sampleFill);
216 SoundUtil.play3DSample(self.sampleFill);
217 end
218 else
219 SoundUtil.stopSample(self.sampleFill);
220 SoundUtil.stop3DSample(self.sampleFill);
221 end
222 end
223
224 if self.isServer then
225 self:updateOverloadingDelay(dt);
226
227 if self.overloading.delay.current ~= self.overloading.delay.sentCurrent or self.overloading.delay.unloadStartTime ~= self.overloading.delay.sentUnloadStartTime then
228 self:raiseDirtyFlags(self.overloading.delay.dirtyFlag);
229
230 self.overloading.delay.sentCurrent = self.overloading.delay.current;
231 self.overloading.delay.sentUnloadStartTime = self.overloading.delay.unloadStartTime;
232 end;
233
234 if self:getUnitFillLevel(self.overloading.fillUnitIndex) <= 0 and self:getOverloadingDelayIsActive() then
235 self:stopOverloadingDelay();
236 end;
237
238 self.overloading.didOverload = false;
239 if next(self.overloading.trailersInRange) ~= nil or self.shovelTargetFound ~= nil or self:getOverloadingActive() then
240 -- first update the target trailer
241 self.targetTrailer = self:findValidTrailer(self.overloading.trailersInRange);
242
243 -- second, update status
244 if self.overloading.isActive then
245 if self:getUnitFillLevel(self.overloading.fillUnitIndex) > 0 and not self:getOverloadingDelayIsActive() then
246 self:startOverloadingDelay();
247 end;
248
249 if not self:getIsOverloadingAllowed() then
250 self:setOverloadingActive(false);
251 else
252 if self.overloading.stopOverloadIfEmpty then
253 if self:getUnitFillLevel(self.overloading.fillUnitIndex) == 0 then
254 self:setOverloadingActive(false);
255 end
256 end
257 end
258
259 -- third, overload if required
260 if (self.targetTrailer ~= nil or self.shovelTargetFound ~= nil) and self:getAllowDelayedUnloading() then
261
262 local fillType = self:getUnitLastValidFillType(self.overloading.fillUnitIndex);
263 local fillLevel = self:getUnitFillLevel(self.overloading.fillUnitIndex);
264 if self.lastLostFillLevel ~= nil then
265 fillLevel = math.max(fillLevel, self.lastLostFillLevel);
266 end
267
268 local deltaFill = fillLevel;
269 if self:getUnitCapacity(self.overloading.fillUnitIndex) > 0 then
270 deltaFill = math.min(fillLevel, self.overloading.capacity*dt/1000.0);
271 end
272
273 if self.targetTrailer ~= nil then
274 self.overloading.didOverload = self:doOverload(self.targetTrailer, fillType, deltaFill);
275 elseif self.shovelTargetFound ~= nil then
276 local realDelta = self.shovelTargetFound:addPipeFillLevel(self, deltaFill, fillType);
277 if realDelta > 0 then
278 self:setUnitFillLevel(self.overloading.fillUnitIndex, self:getUnitFillLevel(self.overloading.fillUnitIndex) - realDelta, fillType, false, self.fillVolumeUnloadInfos[self.overloading.unloadInfoIndex]);
279 self.overloading.didOverload = true;
280 else
281 self:setOverloadingActive(false);
282 end;
283 end;
284 end
285 else
286 if self:getAutomaticOverloadingState() then
287 self:setOverloadingActive(true);
288 end
289 end
290 else
291 self.targetTrailer = nil;
292 end
293
294 if self.overloading.didOverload ~= self.sendDidOverload then
295 self:raiseDirtyFlags(self.overloadingDirtyFlag);
296 self.sendDidOverload = self.overloading.didOverload;
297 end
298 end
299end

draw

Description
Called on draw
Definition
draw()
Code
303function Overloading:draw()
304 if self.isClient and self:getIsActiveForInput(true) and not self:hasInputConflictWithSelection() then
305 if self.overloading.canToggleOverloading and self:getIsOverloadingAllowed() then
306 if self.overloading.isActive then
307 g_currentMission:addHelpButtonText(g_i18n:getText("action_stopOverloading"), InputBinding.TOGGLE_TIPSTATE, nil, GS_PRIO_HIGH);
308 else
309 if self:getUnitFillLevel(self.overloading.fillUnitIndex) > 0 and self.targetTrailer ~= nil then
310 g_currentMission:addHelpButtonText(g_i18n:getText("action_startOverloading"), InputBinding.TOGGLE_TIPSTATE, nil, GS_PRIO_HIGH);
311 end
312 end
313 end
314 end
315end

setOverloadingActive

Description
Set overloading is active state
Definition
setOverloadingActive(boolean isActive, boolean noEventSend)
Arguments
booleanisActivenew is active state
booleannoEventSendno event send
Code
321function Overloading:setOverloadingActive(isActive, noEventSend)
322 if isActive ~= self.overloading.isActive then
323 OverloadingToggleUnloadEvent.sendEvent(self, isActive, noEventSend);
324 self.overloading.isActive = isActive;
325
326 if not isActive then
327 self.pipeUnloadingStartTime = -1;
328 end;
329 end
330end

getOverloadingActive

Description
Returns if overloading is active
Definition
getOverloadingActive()
Return Values
booleanisActiveoverloading is active
Code
335function Overloading:getOverloadingActive(superFunc)
336 if self.overloading.isActive then
337 return true;
338 end;
339
340 if superFunc ~= nil then
341 return superFunc(self);
342 end
343 return false;
344end

doOverload

Description
Do overload
Definition
doOverload(table tagetTrailer, integer fillType, float deltaFill)
Arguments
tabletagetTrailertrailer to fill
integerfillTypefill type to overload
floatdeltaFilldelta to fill
Return Values
booleandidOverloaddid overload something
Code
352function Overloading:doOverload(targetTrailer, fillType, deltaFill)
353 targetTrailer:resetFillLevelIfNeeded(fillType);
354
355 local trailerFillLevel = targetTrailer:getFillLevel(fillType);
356 local trailerCapacity = targetTrailer:getCapacity(fillType);
357
358 deltaFill = math.min(deltaFill, trailerCapacity - trailerFillLevel);
359
360 if deltaFill > 0 then
361 targetTrailer:setFillLevel(trailerFillLevel+deltaFill, fillType, false, self.fillVolumeDischargeInfos[self.overloading.dischargeInfoIndex]);
362 self:setFillLevel(self:getUnitFillLevel(self.overloading.fillUnitIndex)-deltaFill, fillType, false, self.fillVolumeUnloadInfos[self.overloading.unloadInfoIndex]);
363 return true;
364 else
365 return false;
366 end
367end

getIsFoldAllowed

Description
Returns if fold is allowed
Definition
getIsFoldAllowed(boolean onAiTurnOn)
Arguments
booleanonAiTurnOncalled on ai turn on
Return Values
booleanallowsFoldallows folding
Code
373function Overloading:getIsFoldAllowed(superFunc, onAiTurnOn)
374 if not self.overloading.allowFoldWhileOverloading and self.overloading.isActive then
375 if self:getUnitFillLevel(self.overloading.fillUnitIndex) > 0 then
376 return false;
377 end
378 end
379 if self.foldAnimTime ~= nil and (self.foldAnimTime > self.overloading.foldMaxTime or self.foldAnimTime < self.overloading.foldMinTime) then
380 return false;
381 end
382
383 if superFunc ~= nil then
384 return superFunc(self, onAiTurnOn);
385 end
386 return true;
387end

getPtoRpm

Description
Returns rpm of pto
Definition
getPtoRpm()
Return Values
floatrpmrpm of pto
Code
392function Overloading:getPtoRpm(superFunc)
393 local ptoRpm = 0;
394 if superFunc ~= nil then
395 ptoRpm = superFunc(self);
396 end
397 if self.overloading.didOverload and self.powerConsumer ~= nil then
398 ptoRpm = math.max(ptoRpm, self.powerConsumer.ptoRpm);
399 end
400 return ptoRpm;
401end

getDoConsumePtoPower

Description
Returns if should consume pto power
Definition
getDoConsumePtoPower()
Return Values
booleanconsumeconsumePtoPower
Code
406function Overloading:getDoConsumePtoPower(superFunc)
407 local doConsumePower = superFunc(self);
408 return self.overloading.didOverload or doConsumePower;
409end

getIsOverloadingAllowed

Description
Returns if overloading is allowed
Definition
getIsOverloadingAllowed()
Return Values
booleanisAllowedoverloading is allowed
Code
414function Overloading:getIsOverloadingAllowed()
415 if self.foldAnimTime ~= nil then
416 if self.foldAnimTime > self.overloading.foldMaxTime or self.foldAnimTime < self.overloading.foldMinTime then
417 return false;
418 end
419 end
420 return true;
421end

findValidTrailer

Description
Find valid trailer in given table
Definition
findValidTrailer(table trailers)
Arguments
tabletrailerstrailers to search
Return Values
tabletrailervalid trailer
Code
427function Overloading:findValidTrailer(trailers)
428 local fillType = self:getUnitLastValidFillType(self.overloading.fillUnitIndex);
429 for trailer,value in pairs(trailers) do
430 if not entityExists(trailer.components[1].node) then
431 value = 0;
432 end
433 if value > 0 then
434 if trailer:allowFillType(fillType) then
435 if trailer:getFillLevel(fillType) < trailer:getCapacity(fillType) then
436 return trailer;
437 end
438 end
439 end
440 end
441end

getAutomaticOverloadingState

Description
Returns if it is in automatic overloading state
Definition
getAutomaticOverloadingState()
Return Values
booleanisInAutomaticOverloadingStateis in automatic overloading state
Code
446function Overloading:getAutomaticOverloadingState()
447 return false
448end

loadTrailerTriggers

Description
Load trailer triggers from xml file
Definition
loadTrailerTriggers(table triggers, integer xmlFile)
Arguments
tabletriggerstriggers table to add trailer triggers
integerxmlFileid of xml object
Code
454function Overloading:loadTrailerTriggers(triggers, xmlFile)
455 local i = 0;
456 while true do
457 local key = string.format("vehicle.overloading.trailerTriggers.trailerTrigger(%d)", i);
458 if not hasXMLProperty(self.xmlFile, key) then
459 break;
460 end
461 local node = Utils.indexToObject(self.components, getXMLString(self.xmlFile, key.."#index"));
462 if node ~= nil then
463 triggers[node] = {node=node};
464 end
465 i = i + 1;
466 end
467end

onOverloadingTrailerTrigger

Description
Trigger callback
Definition
onOverloadingTrailerTrigger(integer triggerId, integer otherId, boolean onEnter, boolean onLeave, boolean onStay, integer otherShapeId)
Arguments
integertriggerIdid of trigger
integerotherIdid of other actor
booleanonEnteron enter
booleanonLeaveon leave
booleanonStayon stay
integerotherShapeIdid of other shape
Code
477function Overloading:onOverloadingTrailerTrigger(triggerId, otherId, onEnter, onLeave, onStay, otherShapeId)
478 if onEnter or onLeave then
479 local trailer = g_currentMission.nodeToVehicle[otherId];
480 if trailer ~= nil and trailer.fillRootNode ~= nil and trailer ~= self then
481 if onEnter then
482 self.overloading.trailersInRange[trailer] = Utils.getNoNil(self.overloading.trailersInRange[trailer], 0) + 1;
483 else
484 self.overloading.trailersInRange[trailer] = math.max(Utils.getNoNil(self.overloading.trailersInRange[trailer], 0) - 1, 0);
485 if self.overloading.trailersInRange[trailer] == 0 then
486 self.overloading.trailersInRange[trailer] = nil
487 end
488 end
489 end
490 end
491end

startOverloadingDelay

Description
Start delay
Definition
startOverloadingDelay()
Code
495function Overloading:startOverloadingDelay()
496 self.overloading.delay.unloadStartTime = g_currentMission.time;
497 self.overloading.delay.current = 0;
498end

stopOverloadingDelay

Description
Stop delay
Definition
stopOverloadingDelay()
Code
502function Overloading:stopOverloadingDelay()
503 self.overloading.delay.unloadStartTime = -1;
504end

updateOverloadingDelay

Description
Update delay time
Definition
updateOverloadingDelay(float dt)
Arguments
floatdttime since last call in ms
Code
509function Overloading:updateOverloadingDelay(dt)
510 if self.overloading.delay.unloadStartTime > 0 then
511 if self.overloading.delay.current < self.overloading.delay.time then
512 self:setOverloadingDelay(math.min(self.overloading.delay.current + dt, self.overloading.delay.time));
513 end;
514 else
515 if self.overloading.delay.current > 0 then
516 self:setOverloadingDelay(math.max(self.overloading.delay.current - dt, 0));
517 end;
518 end;
519end

setOverloadingDelay

Description
Set current overloading delay time
Definition
setOverloadingDelay(float delay)
Arguments
floatdelaynew delay time
Code
524function Overloading:setOverloadingDelay(delay)
525 self.overloading.delay.current = delay;
526end

getOverloadingDelayIsActive

Description
Returns if delay is active
Definition
getOverloadingDelayIsActive()
Return Values
booleanisActivedelay is active
Code
531function Overloading:getOverloadingDelayIsActive()
532 return self.overloading.delay.unloadStartTime > 0;
533end

getAllowDelayEffects

Description
Returns if delay effects should be displayed
Definition
getAllowDelayEffects()
Return Values
booleanallowallow delay effects (stop if unloading stoped)
Code
538function Overloading:getAllowDelayEffects()
539 if self:getUnitCapacity(self.overloading.fillUnitIndex) == 0 then
540 return self.overloading.didOverload;
541 end;
542
543 return self.overloading.delay.current > 0 and self:getOverloadingDelayIsActive();
544end

getAllowDelayedEffects

Description
Returns if delayed effects should be displayed
Definition
getAllowDelayedEffects()
Return Values
booleanallowallow delayed effects (start after delay time, stop after delay time)
Code
549function Overloading:getAllowDelayedEffects()
550 if self:getUnitCapacity(self.overloading.fillUnitIndex) == 0 then
551 return self.overloading.didOverload;
552 end;
553
554 return (self.overloading.delay.current > 0 and not self:getOverloadingDelayIsActive()) or self:getAllowDelayedUnloading();
555end

getAllowDelayedUnloading

Description
Returns if delay is over and delayed unloading is allowed
Definition
getAllowDelayedUnloading()
Return Values
booleanisAllowedis allowed
Code
560function Overloading:getAllowDelayedUnloading()
561 return self.overloading.delay.current == self.overloading.delay.time;
562end