From e98d08bb4494bb460e60fe947020e8cec3142180 Mon Sep 17 00:00:00 2001 From: 21in7 Date: Wed, 25 Mar 2026 21:56:26 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EA=B0=9C=EC=84=A0=EB=90=9C=20=EC=9D=B8?= =?UTF-8?q?=EB=B2=A4=ED=86=A0=EB=A6=AC=20=ED=8C=90=EB=8F=85=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9C=BC=EB=A1=9C=20=EC=95=88=EC=A0=95=EC=84=B1=20?= =?UTF-8?q?=ED=96=A5=EC=83=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 인벤토리 판독 시 `inv.get_contents()`를 우선 사용하여 일부 환경에서 발생할 수 있는 오류를 줄임 - 이전 방식인 인덱스 접근 방식은 호환성 문제를 해결하기 위한 폴백으로 유지 - README.md에 변경 사항 반영 --- README.md | 1 + .../context_compressor.cpython-311.pyc | Bin 14598 -> 14818 bytes __pycache__/state_reader.cpython-311.pyc | Bin 10178 -> 10479 bytes context_compressor.py | 14 ++++++++++---- state_reader.py | 14 ++++++++++---- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3cf20c2..9359850 100644 --- a/README.md +++ b/README.md @@ -118,3 +118,4 @@ planner.set_goal( - 또한 채굴 시작(`mining_state`) 좌표는 정수 타일이 아니라, Lua가 찾은 실제 자원 엔티티의 `e.position`(정확 실수 좌표)을 사용해 “플레이어가 타일 위에 있는데도 즉시 채굴 감지 실패”를 줄입니다. - `mine_resource`는 move 후 `p.position` 근처(반경 1.2)에서 실제로 해당 광물 엔티티가 있는지 재확인하고, 없으면 채굴을 시도하지 않고 다음 후보로 넘어갑니다. - `explore`는 `wanted_ores`가 있으면 해당 자원이 발견될 때까지 멈추지 않고 계속 이동해, `iron-ore`처럼 주변에 흔한 자원만 계속 발견되어 진행이 막히는 문제를 줄입니다. +- 인벤토리 판독은 `inv.get_contents()`를 우선 사용해, 일부 환경에서 `#inv` / 인덱스 접근이 비어있음으로 오인되는 문제를 줄입니다. diff --git a/__pycache__/context_compressor.cpython-311.pyc b/__pycache__/context_compressor.cpython-311.pyc index cd7cd4697b77298465fd47db0e09e52cc5b86c56..4c4042767c94da9f9966b5ee4515f9d61f9c5064 100644 GIT binary patch delta 427 zcmZoGdQ{A}oR^o20SNeSAI?0awvq3M0(0pHrpbOBdXt$IbLunG6f*P5^wLvH;*<09 zN>cMmiWN#SQuDYJpg>nw!7VYlB)=##U%^Pvz)AsGsfOmO4Gju!=5@T8v*-27Eeb&1 zn|VtW-c0Ryvta6*1&tu#g>w|%%-#EDZV%i@poQ_prMbC@MU^%RwixznXo6Ly<`k#G zwE$i5cE*mkGiNBg?cefx!$z>g{`JZbtB&q1?EIirpbOBdXt$Ib0+I4Nl*4wlAWBVq&a!E zlKI8Z-m0U-$arb<4P7}V z#=D!p>px;-d_MV>;dI8wn~RK$m>FMhUTWIN$as9Ry7?Vx30AQMDjyht6gpwCS>B?B Y(LSD;QQ`vwcJd=w{0k1*A|9Z>07tw=Gynhq diff --git a/__pycache__/state_reader.cpython-311.pyc b/__pycache__/state_reader.cpython-311.pyc index ff188ba8ca6468fb8989e21408cf5f78c059afd6..ad8384d7a07991783aebe8d6809818d0bc953167 100644 GIT binary patch delta 537 zcmX@)|2~j!IWI340}wFXKAgEkY9rq!4(8HhOq1hz^d^7gNUzUKQ^?FK(@Re+iBHbY zD@n~ODOM=SNX_F?fC61z1-HcHlKi5~d<7#t11kk&r5c*AHZ&-_nb+}V&YssRwp-4P%P&&M1iHvj z2Vzc2KG*@1vpH2K_i*Y?-pc984^o$!mjZLy=Ji@1TF0svW@K^_1A diff --git a/context_compressor.py b/context_compressor.py index 7996440..b5a2518 100644 --- a/context_compressor.py +++ b/context_compressor.py @@ -169,10 +169,16 @@ local ok, err = pcall(function() local inv = p.get_main_inventory() if not inv then rcon.print("{}") return end local inv_summary = {} - for i = 1, #inv do - local stack = inv[i] - if stack.valid_for_read then - inv_summary[stack.name] = (inv_summary[stack.name] or 0) + stack.count + if inv.get_contents then + -- Factorio 2.0: get_contents()가 있으면 가장 안정적으로 읽음 + inv_summary = inv.get_contents() + else + -- 호환 폴백 + for i = 1, #inv do + local stack = inv[i] + if stack.valid_for_read then + inv_summary[stack.name] = (inv_summary[stack.name] or 0) + stack.count + end end end rcon.print(game.table_to_json({ diff --git a/state_reader.py b/state_reader.py index 9b59f77..ca455a8 100644 --- a/state_reader.py +++ b/state_reader.py @@ -43,10 +43,16 @@ local ok, err = pcall(function() local inv = p.get_main_inventory() if not inv then rcon.print("{}") return end local result = {} - for i = 1, #inv do - local stack = inv[i] - if stack.valid_for_read then - result[stack.name] = (result[stack.name] or 0) + stack.count + if inv.get_contents then + -- Factorio 2.0: get_contents()가 있으면 가장 안정적으로 읽을 수 있음 + result = inv.get_contents() + else + -- 호환용 폴백 (일부 버전에서 #inv / 인덱스 접근이 불안정할 수 있음) + for i = 1, #inv do + local stack = inv[i] + if stack.valid_for_read then + result[stack.name] = (result[stack.name] or 0) + stack.count + end end end rcon.print(game.table_to_json(result))