From 21b48d76645195679033a0067abeda0195f022eb Mon Sep 17 00:00:00 2001 From: masterdraco Date: Wed, 30 Sep 2026 21:55:01 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20objektlager=20t=C3=A6ller=20alle=20grupp?= =?UTF-8?q?er=20af=20varen=20(Sell=20Egg=20stoppede=20halvfuld)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + FS25_ADSmartPickup/adOutbound.lua | 2 +- FS25_ADSmartPickup/adSources.lua | 12 ++++++++++-- FS25_ADSmartPickup/modDesc.xml | 2 +- .../ad-smooth/__pycache__/adfix.cpython-314.pyc | Bin 0 -> 17992 bytes .../__pycache__/adroutes.cpython-314.pyc | Bin 0 -> 7234 bytes .../__pycache__/adsmooth.cpython-314.pyc | Bin 0 -> 15938 bytes .../__pycache__/adturns.cpython-314.pyc | Bin 0 -> 5912 bytes 8 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 tools/ad-smooth/__pycache__/adfix.cpython-314.pyc create mode 100644 tools/ad-smooth/__pycache__/adroutes.cpython-314.pyc create mode 100644 tools/ad-smooth/__pycache__/adsmooth.cpython-314.pyc create mode 100644 tools/ad-smooth/__pycache__/adturns.cpython-314.pyc diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fb386b..ac81926 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ står i [docs/BRUGERMANUAL.md](docs/BRUGERMANUAL.md) (dansk) og [docs/USER_MANUA ## 1.62 — Kæder slås selv til +- **1.62.1** Rettet: udkørsel fra objektlager (fx Sell Egg fra Æglageret) stoppede halvfuld med "spawner ikke … (30 s uden fremdrift)". Lageret deler samme vare i flere grupper (paller med forskellig fyldning), og moden talte kun den første gruppe — når en lille gruppe blev tom, så lageret ud til at vokse. Nu tælles alle grupper. Advarslen viser lager- og vogntal, hvis den alligevel opstår. - **1.62.0** **En kæde er noget du selv slår til:** tændte produktioner er ikke længere automatisk kæder (FS25 tænder nye produktioner som standard — 7 ensilagetårne gav 56 kæder og fik AIO-fabrikkens høproduktion tændt). Fanen **Kæder** har nederst *N tændte produktioner uden kæde* (foldet sammen); **[Kæde til]** gør en produktion til en kæde. En pauset kæde har **[Fjern]**. Ikke-valgte produktioner bruges stadig som kilde. Når en kæde fjernes, slettes dens tomme kædeflows (uden traktor), og mellemled kæden selv tændte slukkes igen. Rettet: kædens flowoversigt manglede traktorerne, så sammenlægning/oprydning kunne ramme et kædeflow med traktor. Udkørsel fra palleskur holder AutoDrive, mens moden tager paller ud. ## 1.61 — Produktionskæder diff --git a/FS25_ADSmartPickup/adOutbound.lua b/FS25_ADSmartPickup/adOutbound.lua index 1eaac07..96b6d64 100644 --- a/FS25_ADSmartPickup/adOutbound.lua +++ b/FS25_ADSmartPickup/adOutbound.lua @@ -683,7 +683,7 @@ local function updateSpawn(adEnv, state, task, source, dt) if stored < spawn.pending.stored and (loaded > spawn.pending.loaded or level > spawn.pending.level) then spawn.pending = nil elseif spawn.pending.ms > ADOutbound.SPAWN_STALL_MS then - warnOnce(adEnv, vehicle, "spawn", string.format("'%s': objektlageret %s spawner ikke %s (30 s uden fremdrift); kører med det der er", tostring(ADRuns.vehicleLabel(vehicle)), tostring(source.name), fillTypeName(fillType))) + warnOnce(adEnv, vehicle, "spawn", string.format("'%s': objektlageret %s spawner ikke %s (30 s uden fremdrift: lager %d -> %d, vogn %d -> %d objekter); kører med det der er", tostring(ADRuns.vehicleLabel(vehicle)), tostring(source.name), fillTypeName(fillType), spawn.pending.stored, stored, spawn.pending.loaded, loaded)) state.done = true return else diff --git a/FS25_ADSmartPickup/adSources.lua b/FS25_ADSmartPickup/adSources.lua index 4a2c366..4967052 100644 --- a/FS25_ADSmartPickup/adSources.lua +++ b/FS25_ADSmartPickup/adSources.lua @@ -585,9 +585,17 @@ function ADSources.getObjectInfoIndex(source, fillType) return nil end +-- Alle grupper med varen: lageret deler samme vare i flere objectInfos (fx paller med forskellig fyldning). Kun den +-- første talt -> tallet "voksede", når en lille gruppe blev tom, og spawn-ventningen gik i stå (Sell Egg 30/9). function ADSources.countStored(source, fillType) - local _, count = ADSources.getObjectInfoIndex(source, fillType) - return count or 0 + local spec = source.placeable ~= nil and source.placeable.spec_objectStorage or nil + local count = 0 + for _, objectInfo in ipairs(spec ~= nil and spec.objectInfos or {}) do + if getObjectInfoContent(objectInfo) == fillType then + count = count + (objectInfo.numObjects or 0) + end + end + return count end -- Bed lageret spawne ÉT objekt (det knappen i spillet gør). connection = nil, så diff --git a/FS25_ADSmartPickup/modDesc.xml b/FS25_ADSmartPickup/modDesc.xml index 1d28122..3628bcf 100644 --- a/FS25_ADSmartPickup/modDesc.xml +++ b/FS25_ADSmartPickup/modDesc.xml @@ -1,7 +1,7 @@ masterdraco - 1.62.0.0 + 1.62.1.0 <en>AD Smart Pickup</en> diff --git a/tools/ad-smooth/__pycache__/adfix.cpython-314.pyc b/tools/ad-smooth/__pycache__/adfix.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19944719970e0b5ac3bed044d95b212f3d6149c9 GIT binary patch literal 17992 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 literal 0 HcmV?d00001 diff --git a/tools/ad-smooth/__pycache__/adroutes.cpython-314.pyc b/tools/ad-smooth/__pycache__/adroutes.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..586d91ce62532e02950cef01956d598d88f2e2e6 GIT binary patch literal 7234 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 literal 0 HcmV?d00001 diff --git a/tools/ad-smooth/__pycache__/adsmooth.cpython-314.pyc b/tools/ad-smooth/__pycache__/adsmooth.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79887265ed26052d6eb794e91030953861afc29e GIT binary patch literal 15938 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

0z{$? zPE&>^RB?$49l4}m&L{?h&`VVC$V>X$8q1Q#61FdEO8)@Gmzq-GH=2@%&tPKbQTIa> zSStu7n=vw`0MS6;`!lq2)&;b8P%sjE6$tF3dj|CQj6M^qOzlb+;YxE8fbVoS04Re3 zOVtywo0F%3PTszO{(Kqo)wC+9I)T84#qm0|@1^6ao0`Dk0@(_j%9I7=FzL#M z_Af&FpbeG~>qqQNb67Z(y?%z$^Lxn_bp=7eo!=mb$C2nGt=i~LGIiSq%G6a6T)B+U zUsd`IeQX>ePCKdn7&jadD6*9s#vBniW z7iNHP*wEfxKXZ>Rwc&nD+BCs(qb`SCBF*_;#euR!-+)OzbPH%m-Uq^)O+VYid8cQ* zyq|BgKDTA2_LR*!(|)SW%6t7=n3HgeFy*nHi6+SYz3_dCkU8J0^~n`C{WW-s=X zAQF}l5ChmU0`@9w86icL55)I=pyaR^v7tAFxCL@XG-Rpa1N0>bqBRT25uqF;(8Spj z`0|OD8MPz}$@hSW2Lob4<1Ib>N#3F(p-kDYjzmpS`@7~S^KQYseZK!j^8$IJb;Z`U zz^rW9eYETpB4nJO`@u+3`*bq)&Evg>{%2$P?!aga&a^Qdh)#9!Y5t4DxB?eh8F@;o&o3Apag9 zzS3s~x>xhdUY)uybvwUiPB*6xnu3myV$EO-nL_qU=FoK5bjcq#lmyAuEMri)W-16P zeryRkeh1ee(_!vv>!s%+uH}L)tCclTGHQ>y=PTbGi9Ekj*&3n%O`5`v(DyE6|Eh4+ zXu6~dI@XMZVbeDRY3d|zqcw_`9u~h=H*bkHy>&Wa(enJnGVhpYZgel0Z#;QliO7SF zugc0p6`_96QHtgcM{<8|dD9Yg{H*kDCXrL}O%{=p8&Y0Z#`Bx6E2H*se}s(K!~0)- zKJ@%`fbKOD5YPJyoKXa)&oOkKKm)Yg3 z<<^Mf%Bc(9Xv=l;eB-?N-N!@9)lSD^#Z7AQ$jAD4*})I>3-&1UPJWn=*ne_rzW*`XBu zT1h$FPdg&R5iQ(MbMLl(S<-Z&JLFh1!>oa+_7DJ}(&n$~8|J4Mau@o4oqyx(V%|#Y z6U+5aKqXbs{hCYKaP^AOdfT{p$+$U6E*rPr8u<5r$tLou?-mdRo4=_c4936#bahk! z7f2cctkVyKvO_%DL?6|e_wCf&EVJzE(0p8A*{{^3T@ImbhcRyuPAF5xlrvVQ;$c0E zRix}HbP`*#0P|T2pqVO_E5R{EpTU8?cf<&+oYt`NbHJ27I{VvhUpAQ zRiac@N2@owL=j6$sz*5p!z2U)5es5<<5IY0sT44NvYbc(yVPaX5HdjEkP>=>o8`pjNSl!LtbH^n_r(GE?Ij zT$TEja>z=hasM&+zhvM>f2d40)_Qr*1{>sGQk}G3E+xQ?N43#q%i!;uWIILL3sM~$ zt*q=y#&}#QQA%qDD{a{5dS>wV8<%TJf^~o#KT3#oYQq}N48A`2K~vJH4MPGDI2feB z>>e@AD6s1iKr_}vn`ACd3OZeJNGK)XZj|uFU~^cL%-N_~8Wo!ht7oPud@gc$;r<)X#vsOsw)st+| zP?c2nI7t^uxo{4gutFBvLKn*G^i|MhbUAIMD0F7wR8n8lXV|Hh&u?=AK}oc*7Y7nMYr`JU`6*uT3RT{uvHjsXQ~xgrEZVs0nZ$;{+8l&hfT9gm%HXjPZED+6Q;S zD(8tVN1vc}p6GEpx-ia0X@~ara#LtrIw1FWPckzT$lD4o96T6&V=EzsyMhk2cLF!W zAx%o4+}^PXK_hvUb6}TA!1m|R8wZiCk~@J&Rj4d4qIc>vxX**H)&v7L)qvy$iuZzB z7s+Bnm_WL@bEx>ss2nx!J0S==B9xEZCot`|nU@ z6czq!Q6EU%X5@yCT(*QZMfXGo=7;B%|B(Ap-omD}+`_qxAQ@!9LLRCJ?hI4Q`jR^a zGhq7=6FeL4Udpxxsa1{Pyk-uJeh8>9Yl{E2J3R2l(btZGHMu`Bwp_Yx!Sn5!A^W20 z;;FYNxW^j+&8#_Y-L_J&?Qd#6XkH`%U^6#8@y8FWG#-c>4ua;PH=LU}w-dFLZGr}J za$m^@RU$V(H2uoXEAB|e<+0%OYF_?D`U3fuIl^4?!0zpiSJ>wrD-|t(?G4%Id*^z? zj_~%knts|6H`s0)>Xr<3?|4DUnEu81vY~CE`|l6@>cB12XEWfF6+8O9PoInJd-}`v zp}QGGPT@BiLYsMBKc@%f!ya+O%(b^Qb$5#ibJ5)rVpDZoU;U;%%mf|h{Gtl+;_M5D z-n0k6Nv(R#R2pXDrs}|xt4P;ctE^ell%XjMO|P2E!v2Wk>gg5p=BQ=9d%<+$i4|LW za3H9Jv4r?bbh!WO09ds%MOtj zn_u1eqn%;rTU)Lki|0NTWma+<;)ZQ7gC=uG6;!R6V9LO$vKZzB*35x4vfmkxq8T!s zKR9>rN@1kp&Hf1gQ~K@xDE|xkdjCBC9u11dz~ZJ~KNT<9_oZP!nvqg8BU$GSbB55s zvc|HOR~XKVs3ODHv|r|Jo!c991UXTIbcDEby}!%Oo%635%`kfkP-3#6hWy8pb9%8G zt{eKpV^Pls)r*Qn$NROPRmb}JW3GWuAB!CuUN*aLYdm+$iK@-tSQEO-X2MW|b@h)m zB?os?ZY6ACDP+M5`o3?4Ee*=ax_cJ5TS;fNGNG{ko@M<#j9h>;DW)6KYg*ruoSFvT zI5~q~-;$iRNx@P>(rAc{{kdsyQ330!>JQRUm=3Ja;2;d@llY4XS}lGh{F9Vba{qB8 zI@g5?c|O3<^#Ss=Qks)WsR{tS;3s}*A6-O25Y1U(R2_{$ay3I6?Ec}|(4MgQ;(qX5MHhYT zFSK8w-q60TeXA-m{7w~klvaXGta_mmPI~o?y2Z-H{+rdeDsT0FUVXD}rSWiVfLYYy`VX9ViGJ?Cr*e${%Zt3da=wDXL7Npv#s}QbS8W8 z6+F65LhjO2{@D!t3%fS!tPy_kg?>24StpoNUO%M3ue`R1Khv_NK|54W6+HJFAxauO z!8Kyqlztu)CP+X(*aS(6CP=stMq)bQRihB?kjU;PUXdo22w5Dl%hFF!4nnio?P?#h zH1rHyhTq!$+oFFgiVr;_`dj^FUI96qWwWM!y9fO@S*<+F&4Bwi{7MZ5*7heI2KRTU zhn*;TAEJ#r{|3rI_XoK1Py3gAeC*lr*m2M8A@3JM-nfr{z*l=5=`EUO~}C6kS5mV<%!Idt`y6tR^3Aglf1@Nx@~%Qd zQva4ikj1wN%UAmBfCi9DK((sP45$GJ1yuLcMsoYTnjG>Vd2cI8mfX{jt_S1HY3?f=XDLC=NmaBkTB zN^jJ@Le-({CoXh_Rj)i5YLAsSTvyI_zo(5px3Kj?*Am{*@qJ8uFB9t?21~4)wA`_P zUwx$N>geUVXyuBfHda&@tLyj`zu5Br>?d8ZzJX8ouk1duboA*Zyrtq#`{PIbE4%%% pjv1I&{b}-F2~u^2ylWyT3$id~9wxCz&2KWY_hwPQDb9uX{{g`1x10a~ literal 0 HcmV?d00001 diff --git a/tools/ad-smooth/__pycache__/adturns.cpython-314.pyc b/tools/ad-smooth/__pycache__/adturns.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..86dad08de6e52a47a646cf5a5f7a52d1dfc86dd5 GIT binary patch literal 5912 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 literal 0 HcmV?d00001