feat(genstart): husk ved hvert gem hvilke maskiner Courseplay kører (uden AD) og start netop dem igen efter indlæsning fra nærmeste waypoint via CP's HUD-start — også CP-jobs uden markrolle (v1.45.0.0)
This commit is contained in:
@@ -933,9 +933,15 @@ end
|
||||
|
||||
-- Efter genindlæsning: spillet stopper alle arbejdere ved gem, og Courseplay genstarter dem ikke (in-game 27/9).
|
||||
-- En maskine med CP-kursus og et husket waypoint (CP nulstiller det når kurset er kørt færdigt) var midt i et job:
|
||||
-- start den fra sidste waypoint med CP's eget "fortsæt"-job (HUD'ens eget startpunkt røres ikke). Står den på en
|
||||
-- start den fra sidste waypoint med CP's eget "fortsæt"-job (med gemt liste fra ADCpResume: netop de maskiner
|
||||
-- der kørte CP ved gem, fra nærmeste waypoint) (HUD'ens eget startpunkt røres ikke). Står den på en
|
||||
-- mark hvis aktuelle trin er maskinens rolle, meldes den ind på marken igen, så den følges og trinnet afsluttes.
|
||||
function ADFieldWork.resumeAfterLoad(adEnv)
|
||||
-- gemt liste over maskiner hvor CP kørte (ADCpResume): den afgør alene hvem der startes, fra nærmeste waypoint
|
||||
local toStart, cpVehicles = nil, {}
|
||||
if ADCpResume ~= nil then toStart, cpVehicles = ADCpResume.takeToStart(adEnv) end
|
||||
local startSet, handled = {}, {}
|
||||
for _, id in ipairs(toStart or {}) do startSet[id] = true end
|
||||
local fields, stageById = {}, {}
|
||||
for _, info in ipairs(ADFields.list()) do
|
||||
local field = ADFieldJobs.getField(info.id)
|
||||
@@ -948,18 +954,24 @@ function ADFieldWork.resumeAfterLoad(adEnv)
|
||||
local vehicle = rig.vehicle
|
||||
local wasWorking = vehicle.startCpAtLastWp ~= nil and vehicle.hasCpCourse ~= nil and vehicle:hasCpCourse()
|
||||
and vehicle.getCpLastRememberedWaypointIx ~= nil and vehicle:getCpLastRememberedWaypointIx() ~= nil
|
||||
if toStart ~= nil then wasWorking = startSet[rig.id] == true end
|
||||
handled[rig.id] = true
|
||||
local fieldId, distance = nil, nil
|
||||
if wasWorking then
|
||||
if wasWorking and toStart ~= nil then
|
||||
fieldId = ADFieldJobs.resumeField(rig.x, rig.z, rig.role, fields)
|
||||
elseif wasWorking then
|
||||
fieldId = ADFieldJobs.resumeField(rig.x, rig.z, rig.role, fields)
|
||||
local course = ADCpBridge.getCourse(vehicle)
|
||||
local okWp, wp = pcall(function() return course ~= nil and course:getWaypoint(vehicle:getCpLastRememberedWaypointIx()) or nil end)
|
||||
if okWp and wp ~= nil and wp.x ~= nil then distance = math.sqrt((wp.x - rig.x) ^ 2 + (wp.z - rig.z) ^ 2) end
|
||||
end
|
||||
if wasWorking and not rig.busy and not rig.controlled and not ADFieldJobs.shouldResume({fieldId = fieldId, distance = distance}) then
|
||||
if wasWorking and toStart == nil and not rig.busy and not rig.controlled and not ADFieldJobs.shouldResume({fieldId = fieldId, distance = distance}) then
|
||||
Logging.info(ADFieldJobs.LOG_PREFIX .. "'%s' genstartes ikke: husket waypoint fra et gammelt job (%s væk, ikke på en mark i gang)",
|
||||
tostring(rig.label), distance ~= nil and string.format("%.0f m", distance) or "ukendt afstand")
|
||||
elseif wasWorking and not rig.busy and not rig.controlled then
|
||||
local ok, started = pcall(vehicle.startCpAtLastWp, vehicle)
|
||||
local ok, started
|
||||
if toStart ~= nil then ok, started = pcall(ADCpResume.startNearest, vehicle)
|
||||
else ok, started = pcall(vehicle.startCpAtLastWp, vehicle) end
|
||||
if not ok then
|
||||
Logging.warning(ADFieldJobs.LOG_PREFIX .. "'%s' kunne ikke genstartes: %s", tostring(rig.label), tostring(started))
|
||||
elseif started then
|
||||
@@ -980,11 +992,24 @@ function ADFieldWork.resumeAfterLoad(adEnv)
|
||||
log(fieldId, "'%s' fortsætter efter genindlæsning (Courseplay fra sidste waypoint)%s", tostring(rig.label),
|
||||
assignment.storeId ~= nil and "" or (fillType ~= nil and " — intet lager til resten fundet" or ""))
|
||||
else
|
||||
Logging.info(ADFieldJobs.LOG_PREFIX .. "'%s' genstartet fra sidste waypoint efter genindlæsning", tostring(rig.label))
|
||||
Logging.info(ADFieldJobs.LOG_PREFIX .. "'%s' genstartet fra %s waypoint efter genindlæsning", tostring(rig.label),
|
||||
toStart ~= nil and "nærmeste" or "sidste")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
-- CP-maskiner uden markrolle (fx balleopsamler, tømmevogn i CP-job): start dem også
|
||||
for _, id in ipairs(toStart or {}) do
|
||||
local vehicle = cpVehicles[id]
|
||||
if not handled[id] and vehicle ~= nil then
|
||||
local ok, started = pcall(ADCpResume.startNearest, vehicle)
|
||||
if ok and started then
|
||||
Logging.info(ADFieldJobs.LOG_PREFIX .. "'%s' genstartet fra nærmeste waypoint efter genindlæsning", tostring(ADRuns.vehicleLabel(vehicle)))
|
||||
elseif not ok then
|
||||
Logging.warning(ADFieldJobs.LOG_PREFIX .. "'%s' kunne ikke genstartes: %s", tostring(ADRuns.vehicleLabel(vehicle)), tostring(started))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Markmaskiner der stadig hedder modelnavnet ("Unrealistic Engine 3") får et navn efter rollen ("Roeoptager 2").
|
||||
|
||||
Reference in New Issue
Block a user