Skip to content

Commit 8b20d0a

Browse files
committed
fix: yet another specialization race condition
1 parent 85dd7d6 commit 8b20d0a

1 file changed

Lines changed: 17 additions & 19 deletions

File tree

scripts/specializations/CpAIBunkerSiloWorker.lua

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ end
2929

3030
function CpAIBunkerSiloWorker.registerEventListeners(vehicleType)
3131
SpecializationUtil.registerEventListener(vehicleType, 'onLoad', CpAIBunkerSiloWorker)
32-
SpecializationUtil.registerEventListener(vehicleType, 'onUpdate', CpAIBunkerSiloWorker)
3332
SpecializationUtil.registerEventListener(vehicleType, 'onLoadFinished', CpAIBunkerSiloWorker)
3433
SpecializationUtil.registerEventListener(vehicleType, 'onReadStream', CpAIBunkerSiloWorker)
3534
SpecializationUtil.registerEventListener(vehicleType, 'onWriteStream', CpAIBunkerSiloWorker)
@@ -49,46 +48,45 @@ function CpAIBunkerSiloWorker.registerOverwrittenFunctions(vehicleType)
4948
SpecializationUtil.registerOverwrittenFunction(vehicleType, 'startCpAtFirstWp', CpAIBunkerSiloWorker.startCpAtFirstWp)
5049
SpecializationUtil.registerOverwrittenFunction(vehicleType, 'startCpAtLastWp', CpAIBunkerSiloWorker.startCpAtLastWp)
5150
end
51+
52+
-- shortcut to access the spec
53+
function CpAIBunkerSiloWorker.getSpec(self)
54+
return self["spec_" .. CpAIBunkerSiloWorker.SPEC_NAME]
55+
end
56+
5257
------------------------------------------------------------------------------------------------------------------------
5358
--- Event listeners
5459
---------------------------------------------------------------------------------------------------------------------------
5560
function CpAIBunkerSiloWorker:onLoad(savegame)
56-
--- Register the spec: spec_CpAIBunkerSiloWorker
57-
self.spec_cpAIBunkerSiloWorker = self["spec_" .. CpAIBunkerSiloWorker.SPEC_NAME]
58-
local spec = self.spec_cpAIBunkerSiloWorker
61+
local spec = CpAIBunkerSiloWorker.getSpec(self)
5962
--- This job is for starting the driving with a key bind or the mini gui.
6063
spec.cpJob = g_currentMission.aiJobTypeManager:createJob(AIJobType.BUNKER_SILO_CP)
6164
spec.cpJob:setVehicle(self, true)
6265
end
6366

6467

6568
function CpAIBunkerSiloWorker:onLoadFinished(savegame)
66-
local spec = self.spec_cpAIBunkerSiloWorker
69+
local spec = CpAIBunkerSiloWorker.getSpec(self)
6770
if savegame ~= nil then
6871
spec.cpJob:loadFromXMLFile(savegame.xmlFile, savegame.key.. CpAIBunkerSiloWorker.KEY..".cpJob")
6972
end
7073
end
7174

7275
function CpAIBunkerSiloWorker:saveToXMLFile(xmlFile, baseKey, usedModNames)
73-
local spec = self.spec_cpAIBunkerSiloWorker
76+
local spec = CpAIBunkerSiloWorker.getSpec(self)
7477
spec.cpJob:saveToXMLFile(xmlFile, baseKey.. ".cpJob")
7578
end
7679

7780
function CpAIBunkerSiloWorker:onReadStream(streamId, connection)
78-
local spec = self.spec_cpAIBunkerSiloWorker
81+
local spec = CpAIBunkerSiloWorker.getSpec(self)
7982
spec.cpJob:readStream(streamId, connection)
8083
end
8184

8285
function CpAIBunkerSiloWorker:onWriteStream(streamId, connection)
83-
local spec = self.spec_cpAIBunkerSiloWorker
86+
local spec = CpAIBunkerSiloWorker.getSpec(self)
8487
spec.cpJob:writeStream(streamId, connection)
8588
end
8689

87-
function CpAIBunkerSiloWorker:onUpdate(dt)
88-
local spec = self.spec_cpAIBunkerSiloWorker
89-
90-
end
91-
9290
--- Is the bunker silo allowed?
9391
function CpAIBunkerSiloWorker:getCanStartCpBunkerSiloWorker()
9492
return not self:getCanStartCpFieldWork()
@@ -102,26 +100,26 @@ function CpAIBunkerSiloWorker:getCanStartCp(superFunc)
102100
end
103101

104102
function CpAIBunkerSiloWorker:getCpStartableJob(superFunc, isStartedByHud)
105-
local spec = self.spec_cpAIBunkerSiloWorker
103+
local spec = CpAIBunkerSiloWorker.getSpec(self)
106104
if isStartedByHud and self:cpIsHudBunkerSiloJobSelected() then
107105
return self:getCanStartCpBunkerSiloWorker() and spec.cpJob
108106
end
109107
return superFunc(self, isStartedByHud) or not isStartedByHud and self:getCanStartCpBunkerSiloWorker() and spec.cpJob
110108
end
111109

112110
function CpAIBunkerSiloWorker:getCpBunkerSiloWorkerJobParameters()
113-
local spec = self.spec_cpAIBunkerSiloWorker
111+
local spec = CpAIBunkerSiloWorker.getSpec(self)
114112
return spec.cpJob:getCpJobParameters()
115113
end
116114

117115
function CpAIBunkerSiloWorker:applyCpBunkerSiloWorkerJobParameters(job)
118-
local spec = self.spec_cpAIBunkerSiloWorker
116+
local spec = CpAIBunkerSiloWorker.getSpec(self)
119117
spec.cpJob:getCpJobParameters():validateSettings()
120118
spec.cpJob:copyFrom(job)
121119
end
122120

123121
function CpAIBunkerSiloWorker:getCpBunkerSiloWorkerJob()
124-
local spec = self.spec_cpAIBunkerSiloWorker
122+
local spec = CpAIBunkerSiloWorker.getSpec(self)
125123
return spec.cpJob
126124
end
127125

@@ -130,7 +128,7 @@ end
130128
function CpAIBunkerSiloWorker:startCpAtFirstWp(superFunc, ...)
131129
if not superFunc(self, ...) then
132130
if self:getCanStartCpBunkerSiloWorker() then
133-
local spec = self.spec_cpAIBunkerSiloWorker
131+
local spec = CpAIBunkerSiloWorker.getSpec(self)
134132
spec.cpJob:applyCurrentState(self, g_currentMission, g_currentMission.playerSystem:getLocalPlayer().farmId, true)
135133
spec.cpJob:setValues()
136134
local success = spec.cpJob:validate(false)
@@ -148,7 +146,7 @@ end
148146
function CpAIBunkerSiloWorker:startCpAtLastWp(superFunc, ...)
149147
if not superFunc(self, ...) then
150148
if self:getCanStartCpBunkerSiloWorker() then
151-
local spec = self.spec_cpAIBunkerSiloWorker
149+
local spec = CpAIBunkerSiloWorker.getSpec(self)
152150
spec.cpJob:applyCurrentState(self, g_currentMission, g_currentMission.playerSystem:getLocalPlayer().farmId, true)
153151
spec.cpJob:setValues()
154152
local success = spec.cpJob:validate(false)

0 commit comments

Comments
 (0)