Script v1_7_1_0
- AI
- Animals
- Collections
- Contracts
- Debug
- Economy
- Elements
- EnvironmentalScore
- Errors
- Events
- GUI
- Handtools
- Hud
- I3d
- Input
- Jobs
- Maps
- Materials
- Misc
- Objects
- Parameters
- Placeables
- Placement
- Player
- Shop
- Sounds
- Specialization
- Specializations
- AIConveyorBelt
- AIDrivable
- AIFieldWorker
- AIImplement
- AIJobVehicle
- AIVehicle
- AIVehicleObstacle
- AnimatedVehicle
- ArticulatedAxis
- Attachable
- AttacherJointControl
- AttacherJoints
- AutoLoader
- BaleGrab
- BaleLoader
- Baler
- BaleWrapper
- BaseMaterial
- BigBag
- BunkerSiloCompacter
- BunkerSiloInteractor
- CCTDrivable
- Combine
- ConnectionHoses
- ConveyorBelt
- Cover
- CrabSteering
- Crawlers
- CropSensor
- Cultivator
- Cutter
- Cylindered
- CylinderedFoldable
- Dashboard
- Dischargeable
- Drivable
- DynamicallyLoadedParts
- DynamicMountAttacher
- Enterable
- ExtendedAIVehicle
- ExtendedCombine
- ExtendedMotorized
- ExtendedMower
- ExtendedSowingMachine
- ExtendedSprayer
- ExtendedWearable
- FertilizingCultivator
- FertilizingSowingMachine
- FillTriggerVehicle
- FillUnit
- FillVolume
- Foldable
- FoliageBending
- ForageWagon
- FrontloaderAttacher
- FruitPreparer
- GroundAdjustedNodes
- GroundReference
- HeadlandAnimation
- Honk
- HookLiftContainer
- HookLiftTrailer
- IKChains
- InlineWrapper
- JigglingParts
- Leveler
- LicensePlates
- Lights
- LivestockTrailer
- Locomotive
- LogGrab
- ManureBarrel
- ManureSensor
- MixerWagon
- Motorized
- Mountable
- Mower
- Mulcher
- MultipleItemPurchase
- Pallet
- Pickup
- Pipe
- PlaceableAI
- PlaceableAnimatedObjects
- PlaceableBeehive
- PlaceableBeehivePalletSpa...
- PlaceableBunkerSilo
- PlaceableBuyingStation
- PlaceableCartridgePlayer
- PlaceableChargingStation
- PlaceableClearAreas
- PlaceableColorable
- PlaceableDeletedNodes
- PlaceableDoghouse
- PlaceableDynamicallyLoade...
- PlaceableFarmhouse
- PlaceableFence
- PlaceableFoliageAreas
- PlaceableGreenhouse
- PlaceableHighPressureWash...
- PlaceableHotspots
- PlaceableHusbandry
- PlaceableHusbandryAnimals
- PlaceableHusbandryFeeding...
- PlaceableHusbandryFence
- PlaceableHusbandryFood
- PlaceableHusbandryLiquidM...
- PlaceableHusbandryMilk
- PlaceableHusbandryPallets
- PlaceableHusbandryStraw
- PlaceableHusbandryWater
- PlaceableIncomePerHour
- PlaceableIndoorAreas
- PlaceableInfoTrigger
- PlaceableLeveling
- PlaceableLights
- PlaceableManureHeap
- PlaceablePlacement
- PlaceableProductionPoint
- PlaceableSellingStation
- PlaceableSilo
- PlaceableSiloExtension
- PlaceableSolarPanels
- PlaceableTipOcclusionArea...
- PlaceableTrainSystem
- PlaceableTriggerMarkers
- PlaceableVine
- PlaceableWardrobe
- PlaceableWeatherStation
- PlaceableWeighingStation
- PlaceableWindTurbine
- PlaceableWorkshop
- Plow
- PlowPacker
- PowerConsumer
- PowerTakeOffs
- PrecisionFarmingStatistic
- PushHandTool
- RandomlyMovingParts
- ReceivingHopper
- ReverseDriving
- Rideable
- RidgeMarker
- Roller
- Ropes
- RTKStation
- SaltSpreader
- SemiTrailerFront
- Shovel
- SlopeCompensation
- SmartAttach
- SoilSampler
- SowingMachine
- SpeedRotatingParts
- SplineVehicle
- Sprayer
- StonePicker
- StrawBlower
- StumpCutter
- SupportVehicle
- Suspensions
- Tedder
- TensionBeltObject
- TensionBelts
- TestAreas
- TipOccluder
- Trailer
- TreePlanter
- TreeSaplingPallet
- TreeSaw
- TurnOnVehicle
- VariableWorkWidth
- VehicleSettings
- VineCutter
- VineDetector
- VinePrepruner
- Washable
- WaterTrailer
- Wearable
- Weeder
- WeedSpotSpray
- Wheels
- WindBending
- Windrower
- Wipers
- WoodCrusher
- WoodHarvester
- WorkArea
- WorkMode
- WorkParticles
- StateMachine
- Statistics
- Tasks
- Triggers
- Utils
- Vehicles
Engine v1_7_1_0
- AI
- Animation
- Camera
- Entity
- Fillplanes
- general
- General
- I3D
- Input
- Lighting
- Math
- Network
- Node
- NoteNode
- Overlays
- Particle System
- Physics
- Rendering
- Scenegraph
- Shape
- Sound
- Spline
- String
- Terrain Detail
- Text Rendering
- Tire Track
- VoiceChat
- XML
Foundation Reference
AIJobVehicle
DescriptionSpecialization for extending vehicles to by used by AI helpersFunctions
- actionEventToggleAIState
- getCanStartAIVehicle
- getCanToggleAIVehicle
- getIsActive
- getIsAIActive
- getIsInUse
- getShowAIToggleActionEvent
- initSpecialization
- onLoad
- onReadStream
- onRegisterActionEvents
- onWriteStream
- prerequisitesPresent
- registerEventListeners
- registerEvents
- registerFunctions
- registerOverwrittenFunctions
- toggleAIVehicle
actionEventToggleAIState
DescriptionDefinitionactionEventToggleAIState()Code
589 | function AIJobVehicle.actionEventToggleAIState(self, actionName, inputValue, callbackState, isAnalog) |
590 | if g_currentMission:getHasPlayerPermission("hireAssistant") then |
591 | self:toggleAIVehicle() |
592 | end |
593 | end |
getCanStartAIVehicle
DescriptionReturns true if ai can startDefinition
getCanStartAIVehicle()Return Values
boolean | canStart | can start ai |
409 | function 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 |
435 | end |
getCanToggleAIVehicle
DescriptionReturns if ai can be toggledDefinition
getCanToggleAIVehicle()Return Values
boolean | canBeToggled | can be toggled |
402 | function AIJobVehicle:getCanToggleAIVehicle() |
403 | return self:getCanStartAIVehicle() or self:getIsAIActive() |
404 | end |
getIsActive
DescriptionDefinitiongetIsActive()Code
337 | function AIJobVehicle:getIsActive(superFunc) |
338 | if self:getIsAIActive() then |
339 | return true |
340 | end |
341 | |
342 | return superFunc(self) |
343 | end |
getIsAIActive
DescriptionDefinitiongetIsAIActive()Code
351 | function AIJobVehicle:getIsAIActive(superFunc) |
352 | return superFunc(self) or self.spec_aiJobVehicle.job ~= nil |
353 | end |
getIsInUse
DescriptionDefinitiongetIsInUse()Code
327 | function AIJobVehicle:getIsInUse(superFunc, connection) |
328 | if self:getIsAIActive() then |
329 | return true |
330 | end |
331 | |
332 | return superFunc(self, connection) |
333 | end |
getShowAIToggleActionEvent
DescriptionReturns true if ai action event should be displayedDefinition
getShowAIToggleActionEvent()Return Values
boolean | active | active |
206 | function 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 |
224 | end |
initSpecialization
DescriptionDefinitioninitSpecialization()Code
25 | function 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() |
33 | end |
onLoad
DescriptionCalled on loadingDefinition
onLoad(table savegame)Arguments
table | savegame | savegame |
102 | function 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 |
134 | end |
onReadStream
DescriptionCalled on client side on joinDefinition
onReadStream(integer streamId, integer connection)Arguments
integer | streamId | streamId |
integer | connection | connection |
153 | function 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 |
170 | end |
onRegisterActionEvents
DescriptionDefinitiononRegisterActionEvents()Code
573 | function 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 |
585 | end |
onWriteStream
DescriptionCalled on server side on joinDefinition
onWriteStream(integer streamId, integer connection)Arguments
integer | streamId | streamId |
integer | connection | connection |
176 | function 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 |
190 | end |
prerequisitesPresent
DescriptionChecks if all prerequisite specializations are loadedDefinition
prerequisitesPresent(table specializations)Arguments
table | specializations | specializations |
boolean | hasPrerequisite | true if all prerequisite specializations are loaded |
18 | function AIJobVehicle.prerequisitesPresent(specializations) |
19 | return SpecializationUtil.hasSpecialization(AIVehicle, specializations) |
20 | and SpecializationUtil.hasSpecialization(Drivable, specializations) |
21 | end |
registerEventListeners
DescriptionDefinitionregisterEventListeners()Code
88 | function 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) |
97 | end |
registerEvents
DescriptionDefinitionregisterEvents()Code
38 | function AIJobVehicle.registerEvents(vehicleType) |
39 | SpecializationUtil.registerEvent(vehicleType, "onAIJobStarted") |
40 | SpecializationUtil.registerEvent(vehicleType, "onAIJobFinished") |
41 | SpecializationUtil.registerEvent(vehicleType, "onAIJobVehicleBlock") |
42 | SpecializationUtil.registerEvent(vehicleType, "onAIJobVehicleContinue") |
43 | end |
registerFunctions
DescriptionDefinitionregisterFunctions()Code
46 | function 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) |
69 | end |
registerOverwrittenFunctions
DescriptionDefinitionregisterOverwrittenFunctions()Code
73 | function 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) |
84 | end |
toggleAIVehicle
DescriptionDefinitiontoggleAIVehicle()Code
384 | function 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 |
397 | end |