LUADOC - Farming Simulator 22

Script v1_7_1_0

Engine v1_7_1_0

Foundation Reference

AIJobVehicle

Description
Specialization for extending vehicles to by used by AI helpers
Functions

actionEventToggleAIState

Description
Definition
actionEventToggleAIState()
Code
589function AIJobVehicle.actionEventToggleAIState(self, actionName, inputValue, callbackState, isAnalog)
590 if g_currentMission:getHasPlayerPermission("hireAssistant") then
591 self:toggleAIVehicle()
592 end
593end

getCanStartAIVehicle

Description
Returns true if ai can start
Definition
getCanStartAIVehicle()
Return Values
booleancanStartcan start ai
Code
409function AIJobVehicle:getCanStartAIVehicle()
410 if g_currentMission.disableAIVehicle then
411 return false
412 end
413
414 if not self.spec_aiJobVehicle.supportsAIJobs then
415 return false
416 end
417
418 if self:getAIDirectionNode() == nil then
419 return false
420 end
421
422 if g_currentMission.aiSystem:getAILimitedReached() then
423 return false
424 end
425
426 if self:getIsAIActive() then
427 return false
428 end
429
430 if self.isBroken then
431 return false
432 end
433
434 return true
435end

getCanToggleAIVehicle

Description
Returns if ai can be toggled
Definition
getCanToggleAIVehicle()
Return Values
booleancanBeToggledcan be toggled
Code
402function AIJobVehicle:getCanToggleAIVehicle()
403 return self:getCanStartAIVehicle() or self:getIsAIActive()
404end

getIsActive

Description
Definition
getIsActive()
Code
337function AIJobVehicle:getIsActive(superFunc)
338 if self:getIsAIActive() then
339 return true
340 end
341
342 return superFunc(self)
343end

getIsAIActive

Description
Definition
getIsAIActive()
Code
351function AIJobVehicle:getIsAIActive(superFunc)
352 return superFunc(self) or self.spec_aiJobVehicle.job ~= nil
353end

getIsInUse

Description
Definition
getIsInUse()
Code
327function AIJobVehicle:getIsInUse(superFunc, connection)
328 if self:getIsAIActive() then
329 return true
330 end
331
332 return superFunc(self, connection)
333end

getShowAIToggleActionEvent

Description
Returns true if ai action event should be displayed
Definition
getShowAIToggleActionEvent()
Return Values
booleanactiveactive
Code
206function AIJobVehicle:getShowAIToggleActionEvent()
207 if self:getAIDirectionNode() == nil then
208 return false
209 end
210
211 if g_currentMission.disableAIVehicle then
212 return false
213 end
214
215 if not g_currentMission:getHasPlayerPermission("hireAssistant") then
216 return false
217 end
218
219 if not self:getIsAIActive() and g_currentMission.aiSystem:getAILimitedReached() then
220 return false
221 end
222
223 return true
224end

initSpecialization

Description
Definition
initSpecialization()
Code
25function AIJobVehicle.initSpecialization()
26 local schema = Vehicle.xmlSchema
27 schema:setXMLSpecializationType("AIJobVehicle")
28 schema:register(XMLValueType.NODE_INDEX, "vehicle.ai.steeringNode#node", "Steering node")
29 schema:register(XMLValueType.NODE_INDEX, "vehicle.ai.reverserNode#node", "Reverser node")
30 schema:register(XMLValueType.FLOAT, "vehicle.ai.steeringSpeed", "Speed of steering" , 1)
31 schema:register(XMLValueType.BOOL, "vehicle.ai#supportsAIJobs", "If true vehicle supports ai jobs", true)
32 schema:setXMLSpecializationType()
33end

onLoad

Description
Called on loading
Definition
onLoad(table savegame)
Arguments
tablesavegamesavegame
Code
102function AIJobVehicle:onLoad(savegame)
103 local spec = self.spec_aiJobVehicle
104
105 spec.actionEvents = {}
106 spec.job = nil
107 spec.lastJob = nil
108 spec.startedFarmId = nil
109
110 spec.aiSteeringSpeed = self.xmlFile:getValue("vehicle.ai.steeringSpeed", 1) * 0.001
111 spec.steeringNode = self.xmlFile:getValue("vehicle.ai.steeringNode#node", nil, self.components, self.i3dMappings)
112 spec.reverserNode = self.xmlFile:getValue("vehicle.ai.reverserNode#node", nil, self.components, self.i3dMappings)
113 spec.supportsAIJobs = self.xmlFile:getValue("vehicle.ai#supportsAIJobs", true)
114
115 spec.texts = {}
116 spec.texts.dismissEmployee = g_i18n:getText("action_dismissEmployee")
117 spec.texts.openHelperMenu = g_i18n:getText("action_openHelperMenu")
118 spec.texts.hireEmployee = g_i18n:getText("action_hireEmployee")
119
120 if savegame ~= nil then
121 local aiJobTypeManager = g_currentMission.aiJobTypeManager
122 local savegameKey = savegame.key .. ".aiJobVehicle.lastJob"
123 local jobTypeName = savegame.xmlFile:getString(savegameKey .. "#type")
124
125 local jobTypeIndex = aiJobTypeManager:getJobTypeIndexByName(jobTypeName)
126 if jobTypeIndex ~= nil then
127 local job = aiJobTypeManager:createJob(jobTypeIndex)
128 if job ~= nil and job.loadFromXMLFile ~= nil then
129 job:loadFromXMLFile(savegame.xmlFile, savegameKey)
130 spec.lastJob = job
131 end
132 end
133 end
134end

onReadStream

Description
Called on client side on join
Definition
onReadStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
153function AIJobVehicle:onReadStream(streamId, connection)
154
155 -- we only need to sync lastjob if no active job is running
156
157 if streamReadBool(streamId) then
158 local jobId = streamReadInt32(streamId)
159 local startedFarmId = streamReadUIntN(streamId, FarmManager.FARM_ID_SEND_NUM_BITS)
160 local helperIndex = streamReadUInt8(streamId)
161 local job = g_currentMission.aiSystem:getJobById(jobId)
162
163 self:aiJobStarted(job, helperIndex, startedFarmId)
164 elseif streamReadBool(streamId) then
165 local jobTypeIndex = streamReadInt32(streamId)
166 local spec = self.spec_aiJobVehicle
167 spec.lastJob = g_currentMission.aiJobTypeManager:createJob(jobTypeIndex)
168 spec.lastJob:readStream(streamId, connection)
169 end
170end

onRegisterActionEvents

Description
Definition
onRegisterActionEvents()
Code
573function AIJobVehicle:onRegisterActionEvents(isActiveForInput, isActiveForInputIgnoreSelection)
574 if self.isClient then
575 local spec = self.spec_aiJobVehicle
576 self:clearActionEventsTable(spec.actionEvents)
577
578 if spec.supportsAIJobs and self:getIsActiveForInput(true, true) then
579 local _, eventId = self:addActionEvent(spec.actionEvents, InputAction.TOGGLE_AI, self, AIJobVehicle.actionEventToggleAIState, false, true, false, true, nil)
580 g_inputBinding:setActionEventTextPriority(eventId, GS_PRIO_HIGH)
581
582 AIJobVehicle.updateActionEvents(self)
583 end
584 end
585end

onWriteStream

Description
Called on server side on join
Definition
onWriteStream(integer streamId, integer connection)
Arguments
integerstreamIdstreamId
integerconnectionconnection
Code
176function AIJobVehicle:onWriteStream(streamId, connection)
177 local spec = self.spec_aiJobVehicle
178
179 -- we only need to sync lastjob if no active job is running
180
181 if streamWriteBool(streamId, spec.job ~= nil) then
182 streamWriteInt32(streamId, spec.job.jobId)
183 streamWriteUIntN(streamId, spec.startedFarmId, FarmManager.FARM_ID_SEND_NUM_BITS)
184 streamWriteUInt8(streamId, spec.currentHelper.index)
185 elseif streamWriteBool(streamId, spec.lastJob ~= nil) then
186 local jobTypeIndex = g_currentMission.aiJobTypeManager:getJobTypeIndex(spec.lastJob)
187 streamWriteInt32(streamId, jobTypeIndex)
188 spec.lastJob:writeStream(streamId, connection)
189 end
190end

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
18function AIJobVehicle.prerequisitesPresent(specializations)
19 return SpecializationUtil.hasSpecialization(AIVehicle, specializations)
20 and SpecializationUtil.hasSpecialization(Drivable, specializations)
21end

registerEventListeners

Description
Definition
registerEventListeners()
Code
88function AIJobVehicle.registerEventListeners(vehicleType)
89 SpecializationUtil.registerEventListener(vehicleType, "onLoad", AIJobVehicle)
90 SpecializationUtil.registerEventListener(vehicleType, "onDelete", AIJobVehicle)
91 SpecializationUtil.registerEventListener(vehicleType, "onRegisterActionEvents", AIJobVehicle)
92 SpecializationUtil.registerEventListener(vehicleType, "onUpdate", AIJobVehicle)
93 SpecializationUtil.registerEventListener(vehicleType, "onUpdateTick", AIJobVehicle)
94 SpecializationUtil.registerEventListener(vehicleType, "onSetBroken", AIJobVehicle)
95 SpecializationUtil.registerEventListener(vehicleType, "onReadStream", AIJobVehicle)
96 SpecializationUtil.registerEventListener(vehicleType, "onWriteStream", AIJobVehicle)
97end

registerEvents

Description
Definition
registerEvents()
Code
38function AIJobVehicle.registerEvents(vehicleType)
39 SpecializationUtil.registerEvent(vehicleType, "onAIJobStarted")
40 SpecializationUtil.registerEvent(vehicleType, "onAIJobFinished")
41 SpecializationUtil.registerEvent(vehicleType, "onAIJobVehicleBlock")
42 SpecializationUtil.registerEvent(vehicleType, "onAIJobVehicleContinue")
43end

registerFunctions

Description
Definition
registerFunctions()
Code
46function AIJobVehicle.registerFunctions(vehicleType)
47 SpecializationUtil.registerFunction(vehicleType, "getShowAIToggleActionEvent", AIJobVehicle.getShowAIToggleActionEvent)
48 SpecializationUtil.registerFunction(vehicleType, "stopCurrentAIJob", AIJobVehicle.stopCurrentAIJob)
49 SpecializationUtil.registerFunction(vehicleType, "skipCurrentTask", AIJobVehicle.skipCurrentTask)
50 SpecializationUtil.registerFunction(vehicleType, "aiJobStarted", AIJobVehicle.aiJobStarted)
51 SpecializationUtil.registerFunction(vehicleType, "aiJobFinished", AIJobVehicle.aiJobFinished)
52 SpecializationUtil.registerFunction(vehicleType, "toggleAIVehicle", AIJobVehicle.toggleAIVehicle)
53 SpecializationUtil.registerFunction(vehicleType, "getCanToggleAIVehicle", AIJobVehicle.getCanToggleAIVehicle)
54 SpecializationUtil.registerFunction(vehicleType, "getCanStartAIVehicle", AIJobVehicle.getCanStartAIVehicle)
55 SpecializationUtil.registerFunction(vehicleType, "setAIMapHotspotBlinking", AIJobVehicle.setAIMapHotspotBlinking)
56 SpecializationUtil.registerFunction(vehicleType, "getCurrentHelper", AIJobVehicle.getCurrentHelper)
57 SpecializationUtil.registerFunction(vehicleType, "aiBlock", AIJobVehicle.aiBlock)
58 SpecializationUtil.registerFunction(vehicleType, "aiContinue", AIJobVehicle.aiContinue)
59 SpecializationUtil.registerFunction(vehicleType, "getAIDirectionNode", AIJobVehicle.getAIDirectionNode)
60 SpecializationUtil.registerFunction(vehicleType, "getAISteeringNode", AIJobVehicle.getAISteeringNode)
61 SpecializationUtil.registerFunction(vehicleType, "getAIReverserNode", AIJobVehicle.getAIReverserNode)
62 SpecializationUtil.registerFunction(vehicleType, "getAISteeringSpeed", AIJobVehicle.getAISteeringSpeed)
63 SpecializationUtil.registerFunction(vehicleType, "getAIJobFarmId", AIJobVehicle.getAIJobFarmId)
64 SpecializationUtil.registerFunction(vehicleType, "getStartableAIJob", AIJobVehicle.getStartableAIJob)
65 SpecializationUtil.registerFunction(vehicleType, "getHasStartableAIJob", AIJobVehicle.getHasStartableAIJob)
66 SpecializationUtil.registerFunction(vehicleType, "getStartAIJobText", AIJobVehicle.getStartAIJobText)
67 SpecializationUtil.registerFunction(vehicleType, "getJob", AIJobVehicle.getJob)
68 SpecializationUtil.registerFunction(vehicleType, "getLastJob", AIJobVehicle.getLastJob)
69end

registerOverwrittenFunctions

Description
Definition
registerOverwrittenFunctions()
Code
73function AIJobVehicle.registerOverwrittenFunctions(vehicleType)
74 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsVehicleControlledByPlayer", AIJobVehicle.getIsVehicleControlledByPlayer)
75 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsActive", AIJobVehicle.getIsActive)
76 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsAIActive", AIJobVehicle.getIsAIActive)
77 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getAllowTireTracks", AIJobVehicle.getAllowTireTracks)
78 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDeactivateOnLeave", AIJobVehicle.getDeactivateOnLeave)
79 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getStopMotorOnLeave", AIJobVehicle.getStopMotorOnLeave)
80 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getDisableVehicleCharacterOnLeave", AIJobVehicle.getDisableVehicleCharacterOnLeave)
81 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getFullName", AIJobVehicle.getFullName)
82 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getActiveFarm", AIJobVehicle.getActiveFarm)
83 SpecializationUtil.registerOverwrittenFunction(vehicleType, "getIsMapHotspotVisible", AIJobVehicle.getIsMapHotspotVisible)
84end

toggleAIVehicle

Description
Definition
toggleAIVehicle()
Code
384function AIJobVehicle:toggleAIVehicle()
385 if self:getIsAIActive() then
386 self:stopCurrentAIJob(AIMessageSuccessStoppedByUser.new())
387 else
388 local startableJob = self:getStartableAIJob()
389 if startableJob ~= nil then
390 g_client:getServerConnection():sendEvent(AIJobStartRequestEvent.new(startableJob, self:getOwnerFarmId()))
391 return
392 end
393
394 g_gui:showGui("InGameMenu")
395 g_messageCenter:publishDelayed(MessageType.GUI_INGAME_OPEN_AI_SCREEN, self)
396 end
397end