feat(markarbejde): manuel transport af brede høstere — flueben pr. høster i markflåden; moden beder spilleren køre den til marken og montere skærebordet (dialog + påmindelse hvert 5. min), overtager når den står på marken med passende skærebord og spilleren er steget ud (eller ved Start nu), tømmevogne først når høsten kører, ingen AD-parkering bagefter (v1.38.0.0)
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
-- AD Manual Transport
|
||||
-- Brede høstere (mejetærsker med skærebord) kan ikke køre på vejene: spilleren kører dem til marken, monterer
|
||||
-- skærebordet og stiger ud; moden overtager derfra. Rene regler (testbare uden spillet); spil-delen ligger i
|
||||
-- adFieldWork.
|
||||
|
||||
ADManualTransport = {}
|
||||
|
||||
ADManualTransport.REMIND_MS = 300000 -- påmindelse hvert 5. minut, mens moden venter på spilleren
|
||||
|
||||
-- Må høsteren vælges til marken? Manuel: ja — skærebordet monteres først på marken (tjekkes ved overtagelse).
|
||||
-- Ellers skal det monterede skærebord kunne tage afgrøden.
|
||||
function ADManualTransport.acceptsHarvester(candidate, fruit)
|
||||
if fruit == nil then return false end
|
||||
if candidate.manual then return true end
|
||||
return candidate.fruits ~= nil and candidate.fruits[fruit] == true
|
||||
end
|
||||
|
||||
-- Klar til overtagelse? s = {atField, fruits = {[fruit] = true}, fruit, controlled, forced}.
|
||||
-- Returnerer true, eller false + grund: "notThere" | "noHeader" | "wrongHeader" | "playerInside".
|
||||
-- forced ("Start nu"): sted og spiller springes over, skærebordet tjekkes stadig.
|
||||
function ADManualTransport.readiness(s)
|
||||
if not s.forced and not s.atField then return false, "notThere" end
|
||||
local fruits = s.fruits or {}
|
||||
if next(fruits) == nil then return false, "noHeader" end
|
||||
if s.fruit == nil or not fruits[s.fruit] then return false, "wrongHeader" end
|
||||
if not s.forced and s.controlled then return false, "playerInside" end
|
||||
return true
|
||||
end
|
||||
|
||||
function ADManualTransport.shouldRemind(lastAt, now)
|
||||
return lastAt == nil or now - lastAt >= ADManualTransport.REMIND_MS
|
||||
end
|
||||
Reference in New Issue
Block a user