feat(markarbejde): efter genindlæsning genstartes CP-maskiner der var midt i et job fra sidste waypoint (CP's eget fortsæt-job; HUD'ens startpunkt urørt) og meldes ind på marken igen, hvis trinnet passer til rollen (v1.37.0.0)
This commit is contained in:
@@ -811,6 +811,15 @@ local function followWorking(adEnv, field, assignment)
|
||||
end
|
||||
if ADCpBridge.isWorking(vehicle) or isAdActive(vehicle) then
|
||||
assignment.idleSince = nil
|
||||
assignment.seenWorking = true
|
||||
return
|
||||
end
|
||||
-- genoptaget efter indlæsning: CP starter asynkront — vent til den kører, før "står stille" betyder færdig
|
||||
if assignment.resumed and not assignment.seenWorking then
|
||||
if now() - assignment.since > ADFieldWork.START_TIMEOUT_MS then
|
||||
ADFieldWork.release(assignment)
|
||||
fail(assignment.fieldId, string.format("'%s': Courseplay fortsatte ikke efter genindlæsning", ADRuns.vehicleLabel(vehicle)))
|
||||
end
|
||||
return
|
||||
end
|
||||
assignment.idleSince = assignment.idleSince or now()
|
||||
@@ -827,6 +836,42 @@ local function followWorking(adEnv, field, assignment)
|
||||
finishAssignment(adEnv, assignment)
|
||||
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
|
||||
-- mark hvis aktuelle trin er maskinens rolle, meldes den ind på marken igen, så den følges og trinnet afsluttes.
|
||||
function ADFieldWork.resumeAfterLoad(adEnv)
|
||||
local fields, stageById = {}, {}
|
||||
for _, info in ipairs(ADFields.list()) do
|
||||
local field = ADFieldJobs.getField(info.id)
|
||||
if field ~= nil and ADFieldModel.isWorking(field) then
|
||||
table.insert(fields, {id = info.id, stage = field.stage, verts = info.verts})
|
||||
stageById[info.id] = field.stage
|
||||
end
|
||||
end
|
||||
for _, rig in ipairs(ADFieldWork.getRigs(adEnv)) do
|
||||
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 wasWorking and not rig.busy and not rig.controlled then
|
||||
local ok, started = pcall(vehicle.startCpAtLastWp, vehicle)
|
||||
if not ok then
|
||||
Logging.warning(ADFieldJobs.LOG_PREFIX .. "'%s' kunne ikke genstartes: %s", tostring(rig.label), tostring(started))
|
||||
elseif started then
|
||||
local fieldId = ADFieldJobs.resumeField(rig.x, rig.z, rig.role, fields)
|
||||
if fieldId ~= nil then
|
||||
ADFieldJobs.state.assignments[rig.id] = {vehicleId = rig.id, vehicle = vehicle, fieldId = fieldId, role = rig.role,
|
||||
stage = stageById[fieldId], helper = false, phase = "working", since = now(), width = rig.width,
|
||||
groupSize = 1, leader = true, resumed = true}
|
||||
log(fieldId, "'%s' fortsætter efter genindlæsning (Courseplay fra sidste waypoint)", tostring(rig.label))
|
||||
else
|
||||
Logging.info(ADFieldJobs.LOG_PREFIX .. "'%s' genstartet fra sidste waypoint efter genindlæsning", tostring(rig.label))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function ADFieldWork.follow(adEnv, assignment)
|
||||
local vehicle = assignment.vehicle
|
||||
-- Kun når spilleren selv KØRER (bevæger sig uden Courseplay/AutoDrive) slippes sættet — at sidde i
|
||||
|
||||
Reference in New Issue
Block a user