feat(kilder): generelt lager — bygninger med egen læssestation uden silo/fabrik/stald-spec (P&H separatorhal, digestat) kan vælges under Fra; varer fra stationen (v1.18.4.0)
This commit is contained in:
@@ -203,6 +203,13 @@ local function isSellPlaceable(placeable, unloadStations)
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function hasOwnLoadingStation(placeable, loadStations)
|
||||||
|
for _, station in pairs(loadStations) do
|
||||||
|
if station.owningPlaceable == placeable then return true end
|
||||||
|
end
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
local function build(adEnv, farmId)
|
local function build(adEnv, farmId)
|
||||||
local placeables = g_currentMission ~= nil and g_currentMission.placeableSystem ~= nil and g_currentMission.placeableSystem.placeables or {}
|
local placeables = g_currentMission ~= nil and g_currentMission.placeableSystem ~= nil and g_currentMission.placeableSystem.placeables or {}
|
||||||
local storage = g_currentMission ~= nil and g_currentMission.storageSystem or nil
|
local storage = g_currentMission ~= nil and g_currentMission.storageSystem or nil
|
||||||
@@ -213,6 +220,9 @@ local function build(adEnv, farmId)
|
|||||||
local kind = getKind(placeable)
|
local kind = getKind(placeable)
|
||||||
local isSell = kind == nil and isSellPlaceable(placeable, unloadStations)
|
local isSell = kind == nil and isSellPlaceable(placeable, unloadStations)
|
||||||
if isSell then kind = "sell" end
|
if isSell then kind = "sell" end
|
||||||
|
-- generelt lager: gårdens bygning med egen læssestation uden silo/fabrik/stald-spec
|
||||||
|
-- (fx Pumps&Hoses' separatorhal der udleverer digestat)
|
||||||
|
if kind == nil and hasOwnLoadingStation(placeable, loadStations) then kind = "storage" end
|
||||||
if kind ~= nil and (kind == "sell" or isOwnedBy(placeable, farmId)) then
|
if kind ~= nil and (kind == "sell" or isOwnedBy(placeable, farmId)) then
|
||||||
local id = ADBuildings.getId(placeable)
|
local id = ADBuildings.getId(placeable)
|
||||||
if id ~= nil then
|
if id ~= nil then
|
||||||
|
|||||||
@@ -141,6 +141,10 @@ function ADSources.identify(adEnv, wayPointId, farmId)
|
|||||||
if placeable ~= nil and placeable.getHusbandryFillLevel ~= nil then
|
if placeable ~= nil and placeable.getHusbandryFillLevel ~= nil then
|
||||||
return {kind = "husbandry", placeable = placeable, station = station, wayPointId = wayPointId, name = getPlaceableName(placeable, markerName)}
|
return {kind = "husbandry", placeable = placeable, station = station, wayPointId = wayPointId, name = getPlaceableName(placeable, markerName)}
|
||||||
end
|
end
|
||||||
|
-- generelt lager: anden bygning med læssestation (fx separatorhal med digestat); varer fra stationen
|
||||||
|
if placeable ~= nil and placeable.spec_objectStorage == nil then
|
||||||
|
return {kind = "storage", placeable = placeable, station = station, wayPointId = wayPointId, name = getPlaceableName(placeable, markerName)}
|
||||||
|
end
|
||||||
-- Det strenge opslag (trigger bag næsen) passer til silorækker; en mælketank eller fabrik ligger
|
-- Det strenge opslag (trigger bag næsen) passer til silorækker; en mælketank eller fabrik ligger
|
||||||
-- ofte ved siden af markøren. Løst opslag inden for 40 m — men aldrig for siloer.
|
-- ofte ved siden af markøren. Løst opslag inden for 40 m — men aldrig for siloer.
|
||||||
if placeable == nil and ADSmartPickup.getLoadStationNearWayPointId ~= nil then
|
if placeable == nil and ADSmartPickup.getLoadStationNearWayPointId ~= nil then
|
||||||
@@ -402,6 +406,30 @@ local function getHusbandryProducts(adEnv, source)
|
|||||||
return products
|
return products
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- Generelt lager: det læssestationen har af de varer den udleverer (supportedFillTypes/triggeres fillTypes;
|
||||||
|
-- ukendt = alt med niveau). Kapacitet = stationens samlede.
|
||||||
|
local function getStationProducts(source)
|
||||||
|
local station = source.station
|
||||||
|
if station == nil or station.getAllFillLevels == nil then
|
||||||
|
return {}
|
||||||
|
end
|
||||||
|
local farmId = g_currentMission ~= nil and g_currentMission.getFarmId ~= nil and g_currentMission:getFarmId() or 1
|
||||||
|
local ok, levels, capacity = pcall(station.getAllFillLevels, station, farmId)
|
||||||
|
if not ok or type(levels) ~= "table" then
|
||||||
|
return {}
|
||||||
|
end
|
||||||
|
local supported = station.supportedFillTypes
|
||||||
|
local products = {}
|
||||||
|
for fillType, level in pairs(levels) do
|
||||||
|
local isSupported = supported == nil or next(supported) == nil or supported[fillType] == true
|
||||||
|
if isSupported and (level or 0) > 0 then
|
||||||
|
table.insert(products, newProduct(fillType, level, level, math.max(tonumber(capacity) or 0, level), false))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
table.sort(products, function(a, b) return a.fillType < b.fillType end)
|
||||||
|
return products
|
||||||
|
end
|
||||||
|
|
||||||
-- Varer ved kilden med tilgængelig mængde: { {fillType, name, title, available, level, capacity, isPallet} }.
|
-- Varer ved kilden med tilgængelig mængde: { {fillType, name, title, available, level, capacity, isPallet} }.
|
||||||
function ADSources.getProducts(adEnv, source, farmId)
|
function ADSources.getProducts(adEnv, source, farmId)
|
||||||
if source.kind == "factory" then
|
if source.kind == "factory" then
|
||||||
@@ -410,6 +438,8 @@ function ADSources.getProducts(adEnv, source, farmId)
|
|||||||
return getSiloProducts(source)
|
return getSiloProducts(source)
|
||||||
elseif source.kind == "husbandry" then
|
elseif source.kind == "husbandry" then
|
||||||
return getHusbandryProducts(adEnv, source)
|
return getHusbandryProducts(adEnv, source)
|
||||||
|
elseif source.kind == "storage" then
|
||||||
|
return getStationProducts(source)
|
||||||
elseif source.kind == "objectStorage" then
|
elseif source.kind == "objectStorage" then
|
||||||
return getObjectStorageProducts(source)
|
return getObjectStorageProducts(source)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
<text name="spu_source_kind_factory" text="fabrik"/>
|
<text name="spu_source_kind_factory" text="fabrik"/>
|
||||||
<text name="spu_source_kind_silo" text="silo"/>
|
<text name="spu_source_kind_silo" text="silo"/>
|
||||||
<text name="spu_source_kind_objectStorage" text="objektlager"/>
|
<text name="spu_source_kind_objectStorage" text="objektlager"/>
|
||||||
|
<text name="spu_source_kind_storage" text="lager"/>
|
||||||
<text name="spu_tab_flows" text="Flows"/>
|
<text name="spu_tab_flows" text="Flows"/>
|
||||||
<text name="spu_section_flows" text="— Flows (Vare · Fra → Til · Regel · Traktorer · Status) —"/>
|
<text name="spu_section_flows" text="— Flows (Vare · Fra → Til · Regel · Traktorer · Status) —"/>
|
||||||
<text name="spu_section_flow" text="— Ret flow: %s —"/>
|
<text name="spu_section_flow" text="— Ret flow: %s —"/>
|
||||||
|
|||||||
@@ -101,6 +101,7 @@
|
|||||||
<text name="spu_source_kind_factory" text="factory"/>
|
<text name="spu_source_kind_factory" text="factory"/>
|
||||||
<text name="spu_source_kind_silo" text="silo"/>
|
<text name="spu_source_kind_silo" text="silo"/>
|
||||||
<text name="spu_source_kind_objectStorage" text="object storage"/>
|
<text name="spu_source_kind_objectStorage" text="object storage"/>
|
||||||
|
<text name="spu_source_kind_storage" text="storage"/>
|
||||||
<text name="spu_tab_flows" text="Flows"/>
|
<text name="spu_tab_flows" text="Flows"/>
|
||||||
<text name="spu_section_flows" text="— Flows (Goods · From → To · Rule · Tractors · Status) —"/>
|
<text name="spu_section_flows" text="— Flows (Goods · From → To · Rule · Tractors · Status) —"/>
|
||||||
<text name="spu_section_flow" text="— Edit flow: %s —"/>
|
<text name="spu_section_flow" text="— Edit flow: %s —"/>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||||
<modDesc descVersion="107">
|
<modDesc descVersion="107">
|
||||||
<author>masterdraco</author>
|
<author>masterdraco</author>
|
||||||
<version>1.18.3.0</version>
|
<version>1.18.4.0</version>
|
||||||
<title>
|
<title>
|
||||||
<en>AD Smart Pickup</en>
|
<en>AD Smart Pickup</en>
|
||||||
</title>
|
</title>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# AD Smart Pickup — brugermanual
|
# AD Smart Pickup — brugermanual
|
||||||
|
|
||||||
Version 1.18.3 · Farming Simulator 25 · tillæg til AutoDrive
|
Version 1.18.4 · Farming Simulator 25 · tillæg til AutoDrive
|
||||||
|
|
||||||
*English version: [USER_MANUAL.md](USER_MANUAL.md)*
|
*English version: [USER_MANUAL.md](USER_MANUAL.md)*
|
||||||
|
|
||||||
@@ -275,6 +275,7 @@ Under **Fra** kan du vælge:
|
|||||||
| **Silo** | Siloens indhold |
|
| **Silo** | Siloens indhold |
|
||||||
| **Stald** | Mælk, gylle og gødning fra staldens læssepunkter, inklusive tilknyttede udvidelsestanke som Milk Tank Extension |
|
| **Stald** | Mælk, gylle og gødning fra staldens læssepunkter, inklusive tilknyttede udvidelsestanke som Milk Tank Extension |
|
||||||
| **Objektlager** | Paller og baller. De tages ud én ad gangen |
|
| **Objektlager** | Paller og baller. De tages ud én ad gangen |
|
||||||
|
| **Lager** | Andre bygninger med en læssestation, fx Pumps & Hoses' separatorhal med digestat. Varerne læses fra læssestationen |
|
||||||
|
|
||||||
**Kilder med fælles lager:** nogle lagre er udvidelser, der deler beholdning med alle inden for en
|
**Kilder med fælles lager:** nogle lagre er udvidelser, der deler beholdning med alle inden for en
|
||||||
vis afstand, fx mælketanke i en række. Læsser man ved én, tømmes de alle. Moden opdager det selv og
|
vis afstand, fx mælketanke i en række. Læsser man ved én, tømmes de alle. Moden opdager det selv og
|
||||||
|
|||||||
+2
-1
@@ -1,6 +1,6 @@
|
|||||||
# AD Smart Pickup — user manual
|
# AD Smart Pickup — user manual
|
||||||
|
|
||||||
Version 1.18.3 · Farming Simulator 25 · add-on for AutoDrive
|
Version 1.18.4 · Farming Simulator 25 · add-on for AutoDrive
|
||||||
|
|
||||||
*Dansk version: [BRUGERMANUAL.md](BRUGERMANUAL.md)*
|
*Dansk version: [BRUGERMANUAL.md](BRUGERMANUAL.md)*
|
||||||
|
|
||||||
@@ -278,6 +278,7 @@ Under **From** you can pick:
|
|||||||
| **Silo** | The silo's contents |
|
| **Silo** | The silo's contents |
|
||||||
| **Barn** | Milk, slurry and manure from the barn's loading points, including attached extension tanks such as Milk Tank Extension |
|
| **Barn** | Milk, slurry and manure from the barn's loading points, including attached extension tanks such as Milk Tank Extension |
|
||||||
| **Object storage** | Pallets and bales. They are taken out one at a time |
|
| **Object storage** | Pallets and bales. They are taken out one at a time |
|
||||||
|
| **Storage** | Other buildings with a loading station, such as the Pumps & Hoses separator hall with digestate. The goods are read from the loading station |
|
||||||
|
|
||||||
**Sources with shared storage:** some storages are extensions that share their stock with everything
|
**Sources with shared storage:** some storages are extensions that share their stock with everything
|
||||||
within a set distance, such as a row of milk tanks. Loading at one empties them all. The mod detects
|
within a set distance, such as a row of milk tanks. Loading at one empties them all. The mod detects
|
||||||
|
|||||||
@@ -149,5 +149,18 @@ do
|
|||||||
check("B-DOB almindelig silo stadig ikke mål", byIdDob.silo1.canBeTarget, false)
|
check("B-DOB almindelig silo stadig ikke mål", byIdDob.silo1.canBeTarget, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- B-SEP: bygning med læssestation men uden silo/fabrik/stald-spec (Pumps&Hoses separatorhal: digestat-udlevering)
|
||||||
|
do
|
||||||
|
local sep = placeable("sep1", "Separator Hall", 7000, 0, {spec_manureSeparator = {}})
|
||||||
|
table.insert(loadStations, {owningPlaceable = sep, loadTriggers = {{triggerNode = {x = 7000, z = 5}}}})
|
||||||
|
addMarker(41, "Digestate pickup", "Biogas", 7000, 10)
|
||||||
|
ADBuildings.invalidate()
|
||||||
|
local bySep = {}
|
||||||
|
for _, b in ipairs(ADBuildings.list(adEnv, 1)) do bySep[b.id] = b end
|
||||||
|
check("B-SEP findes som lager", bySep.sep1 and bySep.sep1.kind, "storage")
|
||||||
|
check("B-SEP kan være kilde", bySep.sep1 and bySep.sep1.canBeSource, true)
|
||||||
|
check("B-SEP læssemarkør", bySep.sep1 and bySep.sep1.loadMarker and bySep.sep1.loadMarker.id, 41)
|
||||||
|
end
|
||||||
|
|
||||||
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
print(failures == 0 and "\nALLE TESTS OK" or ("\n" .. failures .. " FEJL"))
|
||||||
os.exit(failures == 0 and 0 or 1)
|
os.exit(failures == 0 and 0 or 1)
|
||||||
|
|||||||
@@ -377,6 +377,18 @@ local tankProducts = ADSources.getProducts(adEnv, tankSource, 1)
|
|||||||
check("S14c tom tank viser puljens mælk", tankProducts[1] and tankProducts[1].level, 500000)
|
check("S14c tom tank viser puljens mælk", tankProducts[1] and tankProducts[1].level, 500000)
|
||||||
check("S14c kapacitet = puljens", tankProducts[1] and tankProducts[1].capacity, 70000000)
|
check("S14c kapacitet = puljens", tankProducts[1] and tankProducts[1].capacity, 70000000)
|
||||||
|
|
||||||
|
-- S14d: generelt lager (separatorhal): kilde via læssestationen, varer = stationens niveauer
|
||||||
|
local DIGESTATE = 30
|
||||||
|
DESC[DIGESTATE] = {index = DIGESTATE, name = "DIGESTATE", title = "Digestat"}
|
||||||
|
local separator = {rootNode = {x = 7000, z = 0}, ownerFarmId = 1, getOwnerFarmId = function() return 1 end, getName = function() return "Separator Hall" end, spec_manureSeparator = {}}
|
||||||
|
local sepStation = {owningPlaceable = separator, supportedFillTypes = {[DIGESTATE] = true}, getAllFillLevels = function() return {[DIGESTATE] = 42000}, 200000 end}
|
||||||
|
addMarker(77, "Digestate pickup", 7000, 10); loadAt[77] = sepStation
|
||||||
|
local sepSource = ADSources.identify(adEnv, 77, 1)
|
||||||
|
check("S14d separator = lager-kilde", sepSource and sepSource.kind, "storage")
|
||||||
|
local sepProducts = sepSource and ADSources.getProducts(adEnv, sepSource, 1) or {}
|
||||||
|
check("S14d digestat fra stationen", sepProducts[1] and sepProducts[1].fillType, DIGESTATE)
|
||||||
|
check("S14d mængde", sepProducts[1] and sepProducts[1].level, 42000)
|
||||||
|
|
||||||
-- S15: forklaring af en markør til advarslen (hvad opslaget ser)
|
-- S15: forklaring af en markør til advarslen (hvad opslaget ser)
|
||||||
check("S15 forklaring stald", ADSources.explainMarker(adEnv, 10, 1), "læssestation ved markøren hører til 'Kostald' (stald)")
|
check("S15 forklaring stald", ADSources.explainMarker(adEnv, 10, 1), "læssestation ved markøren hører til 'Kostald' (stald)")
|
||||||
check("S15 forklaring ingen station", ADSources.explainMarker(adEnv, 4, 1), "ingen læssestation ved markøren, og ingen fabrik/objektlager inden for 40 m")
|
check("S15 forklaring ingen station", ADSources.explainMarker(adEnv, 4, 1), "ingen læssestation ved markøren, og ingen fabrik/objektlager inden for 40 m")
|
||||||
|
|||||||
Reference in New Issue
Block a user