LUADOC - Farming Simulator 19

Storage

Description
Storage is an object that stores different fillTypes
Parent
Object
Functions

delete

Description
Deleting storage
Definition
delete()
Code
80function Storage:delete()
81 if self.rootNode ~= 0 and entityExists(self.rootNode) then
82 delete(self.rootNode)
83 end
84
85 g_currentMission.environment:removeHourChangeListener(self)
86 g_messageCenter:unsubscribeAll(self)
87
88 Storage:superClass().delete(self)
89end

empty

Description
Definition
empty()
Code
215function Storage:empty()
216 for fillType, _ in pairs(self.fillLevels) do
217 self.fillLevels[fillType] = 0
218 if self.isServer then
219 self:raiseDirtyFlags(self.storageDirtyFlag)
220 end
221 end
222end

farmDestroyed

Description
Definition
farmDestroyed()
Code
308function Storage:farmDestroyed(farmId)
309 if self:getOwnerFarmId() == farmId then
310 for fillType, accepted in pairs(self.fillTypes) do
311 if accepted then
312 self:setFillLevel(0, fillType)
313 end
314 end
315 end
316end

getFillLevel

Description
Returns fill level
Definition
getFillLevel(integer fillType)
Arguments
integerfillTypefill type
Return Values
floatfillLevelfill level
Code
236function Storage:getFillLevel(fillType)
237 return self.fillLevels[fillType] or 0
238end

getFreeCapacity

Description
Returns free capacity
Definition
getFreeCapacity(integer fillType)
Arguments
integerfillTypefill type
Return Values
floatfreeCapacityfree capacity
Code
263function Storage:getFreeCapacity(fillType)
264 if self.fillLevels[fillType] ~= nil then
265 return math.max(self.capacityPerFillType - self.fillLevels[fillType], 0)
266 end
267 return 0
268end

getIsFillTypeSupported

Description
Returns if storage allows fill type
Definition
getIsFillTypeSupported(integer fillType)
Arguments
integerfillTypefill type
Return Values
booleanallowallow fill type
Code
228function Storage:getIsFillTypeSupported(fillType)
229 return self.fillTypes[fillType] == true
230end

hourChanged

Description
Called on hour change
Definition
hourChanged()
Code
276function Storage:hourChanged()
277 if self.isServer then
278 local difficultyMultiplier = g_currentMission.missionInfo.buyPriceMultiplier
279 local fillLevelFactor = difficultyMultiplier * self.costsPerFillLevelAndDay / 24
280
281 local costs = 0
282 for _, fillLevel in pairs(self.fillLevels) do
283 costs = costs + fillLevel * fillLevelFactor
284 end
285
286 g_currentMission:addMoney(-costs, self:getOwnerFarmId(), MoneyType.PROPERTY_MAINTENANCE, true)
287 end
288end

load

Description
Load storage attributes from object
Definition
load(integer id)
Arguments
integeridid of object
Return Values
booleansuccesssuccess
Code
38function Storage:load(id, xmlFile, key)
39 self.rootNode = id
40
41 self.capacityPerFillType = getXMLFloat(xmlFile, key .. "#capacityPerFillType") or 100000
42 self.costsPerFillLevelAndDay = getXMLFloat(xmlFile, key .. "#costsPerFillLevelAndDay") or 0
43
44 self.fillTypes = {}
45 self.fillLevels = {}
46 self.sortedFillTypes = {}
47
48 local fillTypeCategories = getXMLString(xmlFile, key .. "#fillTypeCategories")
49 local fillTypeNames = getXMLString(xmlFile, key .. "#fillTypes")
50 local fillTypes
51
52 if fillTypeCategories ~= nil and fillTypeNames == nil then
53 fillTypes = g_fillTypeManager:getFillTypesByCategoryNames(fillTypeCategories, "Warning: '"..tostring(key).. "' has invalid fillTypeCategory '%s'.")
54 elseif fillTypeCategories == nil and fillTypeNames ~= nil then
55 fillTypes = g_fillTypeManager:getFillTypesByNames(fillTypeNames, "Warning: '"..tostring(key).. "' has invalid fillType '%s'.")
56 else
57 print("Warning: '"..tostring(key).. "' a 'Storage' entry needs either the 'fillTypeCategories' or 'fillTypes' attribute.")
58 return false
59 end
60
61 for _,fillType in pairs(fillTypes) do
62 self.fillTypes[fillType] = true
63 end
64
65 for fillType,_ in pairs(self.fillTypes) do
66 table.insert(self.sortedFillTypes, fillType)
67 self.fillLevels[fillType] = 0
68 end
69 table.sort(self.sortedFillTypes)
70
71 self.storageDirtyFlag = self:getNextDirtyFlag()
72
73 g_messageCenter:subscribe(MessageType.FARM_DELETED, self.farmDestroyed, self)
74
75 return true
76end

loadFromXMLFile

Description
Loading from attributes and nodes
Definition
loadFromXMLFile(integer xmlFile, string key)
Arguments
integerxmlFileid of xml object
stringkeykey
Return Values
booleansuccesssuccess
Code
166function Storage:loadFromXMLFile(xmlFile, key)
167 self:setOwnerFarmId(Utils.getNoNil(getXMLInt(xmlFile, key .. "#farmId"), AccessHandler.EVERYONE), true)
168
169 local i = 0
170 while true do
171 local siloKey = string.format(key .. ".node(%d)", i)
172 if not hasXMLProperty(xmlFile, siloKey) then
173 break
174 end
175
176 local fillTypeStr = getXMLString(xmlFile, siloKey.."#fillType")
177 local fillLevel = math.max(Utils.getNoNil(getXMLFloat(xmlFile, siloKey.."#fillLevel"), 0), 0)
178 local fillTypeIndex = g_fillTypeManager:getFillTypeIndexByName(fillTypeStr)
179
180 if fillTypeIndex ~= nil then
181 if self.fillLevels[fillTypeIndex] ~= nil then
182 self:setFillLevel(fillLevel, fillTypeIndex, nil)
183 else
184 print("Warning: Filltype '"..fillTypeStr.."' not supported by Storage "..getName(self.rootNode))
185 end
186 else
187 print("Error: Invalid filltype '"..fillTypeStr.."'")
188 end
189
190 i = i + 1
191 end
192
193 return true
194end

new

Description
Creating new instance of storage class
Definition
new(boolean isServer, boolean isClient)
Arguments
booleanisServeris server
booleanisClientis client
Return Values
tableselfnew instance of object
Code
22function Storage:new(isServer, isClient, customMt)
23 local self = Object:new(isServer, isClient, customMt or Storage_mt)
24
25 self.unloadingStations = {}
26 self.loadingStations = {}
27
28 self.rootNode = 0
29 self.foreignSilo = false
30
31 return self
32end

readStream

Description
Called on client side on join
Definition
readStream(integer streamId, table connection)
Arguments
integerstreamIdstream ID
tableconnectionconnection
Code
95function Storage:readStream(streamId, connection)
96 Storage:superClass().readStream(self, streamId, connection)
97
98 for _, fillType in ipairs(self.sortedFillTypes) do
99 local fillLevel = 0
100 if streamReadBool(streamId) then
101 fillLevel = streamReadFloat32(streamId)
102 end
103 self:setFillLevel(fillLevel, fillType)
104 end
105end

readUpdateStream

Description
Called on client side on update
Definition
readUpdateStream(integer streamId, integer timestamp, table connection)
Arguments
integerstreamIdstream ID
integertimestamptimestamp
tableconnectionconnection
Code
127function Storage:readUpdateStream(streamId, timestamp, connection)
128 Storage:superClass().readUpdateStream(self, streamId, timestamp, connection)
129 if connection:getIsServer() then
130 if streamReadBool(streamId) then
131 for _, fillType in ipairs(self.sortedFillTypes) do
132 local fillLevel = 0
133 if streamReadBool(streamId) then
134 fillLevel = streamReadFloat32(streamId)
135 end
136 self:setFillLevel(fillLevel, fillType)
137 end
138 end
139 end
140end

saveToXMLFile

Description
Definition
saveToXMLFile()
Code
198function Storage:saveToXMLFile(xmlFile, key, usedModNames)
199 setXMLInt(xmlFile, key.."#farmId", self:getOwnerFarmId())
200
201 local index = 0
202 for fillTypeIndex, fillLevel in pairs(self.fillLevels) do
203 if fillLevel > 0 then
204 local fillLevelKey = string.format("%s.node(%d)", key, index)
205 local fillTypeName = g_fillTypeManager:getFillTypeNameByIndex(fillTypeIndex)
206 setXMLString(xmlFile, fillLevelKey.."#fillType", fillTypeName)
207 setXMLFloat(xmlFile, fillLevelKey.."#fillLevel", fillLevel)
208 index = index + 1
209 end
210 end
211end

setFillLevel

Description
Set fill level of storage
Definition
setFillLevel(float fillLevel, integer fillType)
Arguments
floatfillLevelnew fill level
integerfillTypefill type
Code
248function Storage:setFillLevel(fillLevel, fillType)
249 fillLevel = MathUtil.clamp(fillLevel, 0, self.capacityPerFillType)
250 if self.fillLevels[fillType] ~= nil and fillLevel ~= self.fillLevels[fillType] then
251 self.fillLevels[fillType] = fillLevel
252
253 if self.isServer then
254 self:raiseDirtyFlags(self.storageDirtyFlag)
255 end
256 end
257end

writeStream

Description
Called on server side on join
Definition
writeStream(integer streamId, table connection)
Arguments
integerstreamIdstream ID
tableconnectionconnection
Code
111function Storage:writeStream(streamId, connection)
112 Storage:superClass().writeStream(self, streamId, connection)
113
114 for _, fillType in ipairs(self.sortedFillTypes) do
115 local fillLevel = self.fillLevels[fillType]
116 if streamWriteBool(streamId, fillLevel > 0) then
117 streamWriteFloat32(streamId, fillLevel)
118 end
119 end
120end

writeUpdateStream

Description
Called on server side on update
Definition
writeUpdateStream(integer streamId, table connection, integer dirtyMask)
Arguments
integerstreamIdstream ID
tableconnectionconnection
integerdirtyMaskdirty mask
Code
147function Storage:writeUpdateStream(streamId, connection, dirtyMask)
148 Storage:superClass().writeUpdateStream(self, streamId, connection, dirtyMask)
149 if not connection:getIsServer() then
150 if streamWriteBool(streamId, bitAND(dirtyMask, self.storageDirtyFlag) ~= 0) then
151 for _, fillType in ipairs(self.sortedFillTypes) do
152 local fillLevel = self.fillLevels[fillType]
153 if streamWriteBool(streamId, fillLevel > 0) then
154 streamWriteFloat32(streamId, fillLevel)
155 end
156 end
157 end
158 end
159end