From 92a3944e43491398ade7742352cb0f05a4d552b9 Mon Sep 17 00:00:00 2001 From: Art_Sakura <1754798088@qq.com> Date: Tue, 20 Oct 2026 11:49:44 +0800 Subject: [PATCH] =?UTF-8?q?fixed=20#=20=E4=BF=AE=E5=A4=8D=E5=A4=B4?= =?UTF-8?q?=E5=83=8F=E6=A1=86=E8=B5=84=E6=BA=90=E4=BD=8D=E7=BD=AE=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E7=9A=84BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/18-web-panel-and-data-directory.md | 43 ++++ integrations/zhenxun/commands.py | 7 +- integrations/zhenxun/data_paths.py | 30 +++ integrations/zhenxun/runtime.py | 8 +- scripts/build_zhenxun.py | 3 +- scripts/export_render_assets.py | 1 + scripts/extract_webgl_render_assets.py | 93 ++++++++- src/farm_render/data/assets.zip | Bin 19090228 -> 19126439 bytes src/farm_render/data/metadata.json | 195 ++++++++++++++++++ src/farm_render/renderer.py | 86 +++++--- src/farm_render/source_assets/manifest.json | 195 ++++++++++++++++++ .../source_assets/webgl/panel/CouponIcon.png | Bin 0 -> 4357 bytes .../source_assets/webgl/panel/ExpBar.png | Bin 0 -> 371 bytes .../source_assets/webgl/panel/ExpProgress.png | Bin 0 -> 155 bytes .../source_assets/webgl/panel/GoldIcon.png | Bin 0 -> 4291 bytes .../source_assets/webgl/panel/HeadFrame.png | Bin 0 -> 16558 bytes .../webgl/panel/PersionInfoBG.png | Bin 0 -> 9717 bytes tests/test_data_directory.py | 58 ++++++ tests/test_render.py | 83 +++++--- tests/test_zhenxun_runtime.py | 26 ++- 20 files changed, 754 insertions(+), 74 deletions(-) create mode 100644 docs/18-web-panel-and-data-directory.md create mode 100644 integrations/zhenxun/data_paths.py create mode 100644 src/farm_render/source_assets/webgl/panel/CouponIcon.png create mode 100644 src/farm_render/source_assets/webgl/panel/ExpBar.png create mode 100644 src/farm_render/source_assets/webgl/panel/ExpProgress.png create mode 100644 src/farm_render/source_assets/webgl/panel/GoldIcon.png create mode 100644 src/farm_render/source_assets/webgl/panel/HeadFrame.png create mode 100644 src/farm_render/source_assets/webgl/panel/PersionInfoBG.png create mode 100644 tests/test_data_directory.py diff --git a/docs/18-web-panel-and-data-directory.md b/docs/18-web-panel-and-data-directory.md new file mode 100644 index 0000000..2edf0ed --- /dev/null +++ b/docs/18-web-panel-and-data-directory.md @@ -0,0 +1,43 @@ +# 网页头像栏与数据目录 + +## 头像栏 + +正式渲染器读取 `metadata.json` 的 `panel` 配置。头像、头像框、昵称、 +经验条、等级、农场币和点券使用原始 `WebGLPersionInfo` prefab 的矩形、 +锚点与文字对齐方式,不再使用旧版 `userInfo.png` 的位置。 + +来源为已下载公开资源包 `mainscene_053483f584f07436ac0569e2f4f7ed01`。 +提取脚本只读取资源,不执行游戏脚本。原始包哈希及六张新增素材的哈希 +记录在 `src/farm_render/source_assets/manifest.json`。完整头像框先于文字、 +后于头像合成;Gold 的裁切透明边距按资源中的 textureRectOffset 恢复。 + +坐标以左上角为起点。Unity RectTransform 的锚点、pivot 和父矩形计算出 +各元素矩形。渲染器采用宽 1920 的参考画布,输出坐标和尺寸乘以 +`输出宽度 / 1920`;1280 像素网页截图按 2/3 对照。1920 是本渲染器的 +对照基准,没有把它报告为已经提取到的网页 CanvasScaler 参数。 + +原始头像矩形为 `[32.2744, 39.7618, 111.3870, 107.7072]`, +头像框为 `[3.0930, 8.8650, 169.7500, 169.5000]`。昵称在头像右侧, +经验条与等级在昵称下方,农场币和点券在第三行。文字按矩形尺寸适配, +经验条裁切填充图片,不通过拉伸改变纹理。 + +保留本项目的账户与经验规则。网页的 VIP、晶钻、星钻及购买按钮没有 +对应业务,不添加假余额或操作入口。渲染时暂时收起底板上原图纵坐标 +168 到 208 的空栏区域,将原始下边框上移拼接。头像和现有文字的位置、 +字号保持不变,面板可见高度约缩短 19%;原始素材完整保留,便于以后恢复。 + +## 数据目录 + +默认路径改为宿主 `DATA_PATH / farm_db`。为保持数据连续,数据库文件名 +`farm-preview.sqlite3`、日志文件名和 deployment 标识不变。 + +更新插件后下次启动时,若默认旧目录 `farm_preview` 中存在本项目 SQLite, +且 `farm_db` 不存在,会把整个旧目录重命名为 `farm_db`,同时保留日志和 +SQLite 附属文件。迁移在打开数据库前进行,成功后记录迁移日志。 + +若两个目录同时存在,启动失败并提示明确选择数据目录,禁止覆盖或默默 +创建空账户。文件被占用导致重命名失败时同样终止启动;应停止旧实例再启动。 +原有显式 `farm_preview_data_dir` 配置继续生效;该配置用于自定义路径, +不会被自动移动。若显式配置仍指向 `farm_preview`,需自行更改该路径。 + +本轮只修改开发源并进行隔离测试;没有移动正在使用的宿主数据或重启机器人。 diff --git a/integrations/zhenxun/commands.py b/integrations/zhenxun/commands.py index 221c8be..e0f8b21 100644 --- a/integrations/zhenxun/commands.py +++ b/integrations/zhenxun/commands.py @@ -15,15 +15,20 @@ from zhenxun.utils.message import MessageUtils from zhenxun.utils.platform import PlatformUtils from .runtime import COMMANDS, Runtime +from .data_paths import data_directories logger = logging.getLogger(__name__) driver = get_driver() +data_dir, legacy_data_dir = data_directories( + DATA_PATH, getattr(driver.config, 'farm_preview_data_dir', None), +) runtime = Runtime( - getattr(driver.config, "farm_preview_data_dir", DATA_PATH / "farm_preview"), + data_dir, getattr(driver.config, "farm_preview_font", None), getattr(driver.config, "farm_preview_deployment", "zhenxun-preview"), str(getattr(driver.config, "farm_preview_image_format", "AUTO")).upper(), font_dir=FONT_PATH, + legacy_data_dir=legacy_data_dir, ) driver.on_startup(runtime.start) driver.on_shutdown(runtime.close) diff --git a/integrations/zhenxun/data_paths.py b/integrations/zhenxun/data_paths.py new file mode 100644 index 0000000..8da924c --- /dev/null +++ b/integrations/zhenxun/data_paths.py @@ -0,0 +1,30 @@ +"""农场默认目录与旧预览目录的无覆盖迁移。""" + +from pathlib import Path + + +def data_directories(base, configured=None): + if configured is not None: + return Path(configured), None + return Path(base) / 'farm_db', Path(base) / 'farm_preview' + + +def prepare_directory(target, legacy=None): + target = Path(target).absolute() + if legacy is not None: + legacy = Path(legacy).absolute() + if (target.name != 'farm_db' or legacy.name != 'farm_preview' + or target.parent != legacy.parent): + raise ValueError('Farm migration requires default sibling paths') + if target.is_symlink() or legacy.is_symlink(): + raise ValueError('Farm migration does not follow directory links') + if (legacy / 'farm-preview.sqlite3').is_file(): + if target.exists(): + raise FileExistsError( + 'farm_db already exists beside farm_preview; ' + 'select farm_preview_data_dir explicitly before startup' + ) + legacy.rename(target) + return True + target.mkdir(parents=True, exist_ok=True) + return False diff --git a/integrations/zhenxun/runtime.py b/integrations/zhenxun/runtime.py index 60a47a1..76d0eec 100644 --- a/integrations/zhenxun/runtime.py +++ b/integrations/zhenxun/runtime.py @@ -12,6 +12,7 @@ from ._vendor.farm_core.storage import SCHEMA_VERSION from ._vendor.farm_core.presentation import receipt_text, snapshot_text from ._vendor.farm_render import FarmRenderer, RenderOptions, RenderService from ._vendor.farm_render.seasons import season_for +from .data_paths import prepare_directory logger = logging.getLogger(__name__) COMMANDS = { @@ -65,8 +66,9 @@ def operation_id(bot_id, platform, user_id, message_id, action): class Runtime: def __init__(self, data_dir, font_path=None, deployment="zhenxun-preview", - image_format="AUTO", *, font_dir=None): + image_format="AUTO", *, font_dir=None, legacy_data_dir=None): self.data_dir = Path(data_dir).resolve() + self.legacy_data_dir = legacy_data_dir self.font_path = font_path self.font_dir = Path(font_dir or "resources/font") self.deployment = deployment @@ -80,7 +82,7 @@ class Runtime: async def start(self): if self.started: return - self.data_dir.mkdir(parents=True, exist_ok=True) + migrated = prepare_directory(self.data_dir, self.legacy_data_dir) self.log_handler = logging.FileHandler( self.data_dir / "farm-preview.log", encoding="utf-8", ) @@ -89,6 +91,8 @@ class Runtime: )) logging.getLogger(__package__).setLevel(logging.INFO) logging.getLogger(__package__).addHandler(self.log_handler) + if migrated: + logger.info('farm data directory migrated farm_preview -> farm_db') try: await self.store.initialize(catalogue=self.service.catalogue) except Exception: diff --git a/scripts/build_zhenxun.py b/scripts/build_zhenxun.py index 7c60c9b..8df40b5 100644 --- a/scripts/build_zhenxun.py +++ b/scripts/build_zhenxun.py @@ -44,7 +44,8 @@ def build(root, output): files = {} integration = root / "integrations/zhenxun" for name in ( - "__init__.py", "runtime.py", "commands.py", "requirements.txt", + "__init__.py", "runtime.py", "commands.py", "data_paths.py", + "requirements.txt", ): files[name] = (integration / name).read_bytes() files["_vendor/__init__.py"] = b'"""Private shared farm modules."""\n' diff --git a/scripts/export_render_assets.py b/scripts/export_render_assets.py index a978686..e7a837f 100644 --- a/scripts/export_render_assets.py +++ b/scripts/export_render_assets.py @@ -88,6 +88,7 @@ def export(root): webgl_source = root / "src/farm_render/source_assets" manifest = json.loads((webgl_source / "manifest.json").read_bytes()) metadata["pest"] = manifest["pest"] + metadata["panel"] = manifest["panel"] entries = {path.relative_to(source).as_posix(): path for path in paths} entries.update({name: webgl_source / name for name in manifest["images"]}) with ZipFile(output, "w", compression=ZIP_STORED) as bundle: diff --git a/scripts/extract_webgl_render_assets.py b/scripts/extract_webgl_render_assets.py index 19ae76a..9dffd5e 100644 --- a/scripts/extract_webgl_render_assets.py +++ b/scripts/extract_webgl_render_assets.py @@ -8,10 +8,78 @@ import re import sys +def panel_layout(environment): + prefab = next( + entry.asset for obj in environment.objects + if obj.type.name == 'AssetBundle' + for path, entry in obj.read().m_Container + if path.endswith('/webglpersioninfo.prefab') + ) + nodes = {} + + def visit(pointer, parent=None): + game_object = pointer.read() + components = [c.component for c in game_object.m_Component] + transform = next(c.read() for c in components + if c.type.name == 'RectTransform') + rect = [0, 0, 100, 100] + if parent is not None: + lo, hi = transform.m_AnchorMin, transform.m_AnchorMax + pivot, pos = transform.m_Pivot, transform.m_AnchoredPosition + w = parent[2] * (hi.x - lo.x) + transform.m_SizeDelta.x + h = parent[3] * (hi.y - lo.y) + transform.m_SizeDelta.y + rect = [ + parent[0] + parent[2] * (lo.x + (hi.x-lo.x)*pivot.x) + + pos.x - w*pivot.x, + parent[1] + parent[3] * (1-lo.y-(hi.y-lo.y)*pivot.y) + - pos.y - h*(1-pivot.y), w, h, + ] + for component in components: + if component.type.name != 'MonoBehaviour': + continue + data = component.read_typetree() + if 'm_Sprite' in data or 'm_Text' in data: + nodes[game_object.m_Name] = { + 'rect': rect, 'data': data, + } + for child in transform.m_Children: + visit(child.read().m_GameObject, rect) + + visit(prefab) + sprites = [] + sprite_ids = {} + for name in ('PersionInfoBG', 'HeadFrame', 'ExpBar', 'ExpProgress', + 'GoldIcon', 'CouponIcon'): + node = nodes[name] + sprite_id = node['data']['m_Sprite']['m_PathID'] + path = f'webgl/panel/{name}.png' + sprite_ids[sprite_id] = path + sprites.append({'name': name, 'sprite': path, 'rect': node['rect']}) + fields = [] + for node_name, field in (('NameT', 'name'), ('text', 'experience'), + ('LevelT', 'level'), ('GoldT', 'point'), + ('CouponT', 'vip_point')): + node = nodes[node_name] + color = node['data']['m_Color'] + fields.append({ + 'field': field, 'rect': node['rect'], + 'alignment': node['data']['m_FontData']['m_Alignment'], + 'color': [round(color[c]*255) for c in ('r', 'g', 'b')], + }) + return { + 'reference_canvas': [1920, 1080], + 'source_prefab': 'mainscene#WebGLPersionInfo', + 'anchor': 'top_left', 'sprites': sprites, + 'avatar': nodes['HeadIcon']['rect'], 'fields': fields, + }, sprite_ids + + def extract(bundle, destination): import UnityPy + from PIL import Image environment = UnityPy.load(str(bundle)) + panel, panel_ids = panel_layout(environment) destination.mkdir(parents=True, exist_ok=True) images = {} for obj in environment.objects: @@ -19,7 +87,9 @@ def extract(bundle, destination): continue sprite = obj.read() name = sprite.m_Name - if re.fullmatch(r"pest\d+", name): + if obj.path_id in panel_ids: + path = panel_ids[obj.path_id] + elif re.fullmatch(r"pest\d+", name): path = f"pest/{name}.png" elif name in ("Icon_PlantSeed", "Icon_PlantWither"): path = "webgl/" + ( @@ -28,9 +98,23 @@ def extract(bundle, destination): else: continue image = sprite.image + full_size = (round(sprite.m_Rect.width), round(sprite.m_Rect.height)) + if obj.path_id in panel_ids and image.size != full_size: + offset = sprite.m_RD.textureRectOffset + position = (round(offset.x), + full_size[1] - round(offset.y) - image.height) + if (min(position) < 0 or position[0]+image.width > full_size[0] + or position[1]+image.height > full_size[1]): + raise ValueError('Panel sprite exceeds its original canvas') + full = Image.new('RGBA', full_size) + full.paste(image, position) + image = full if image.size != (round(sprite.m_Rect.width), round(sprite.m_Rect.height)): - raise ValueError("Sprite extraction lost its full canvas") + raise ValueError( + f'Sprite extraction lost its full canvas: {name} ' + f'{image.size} vs {sprite.m_Rect}' + ) target = destination / path target.parent.mkdir(parents=True, exist_ok=True) image.save(target) @@ -38,8 +122,8 @@ def extract(bundle, destination): "size": list(image.size), "sha256": hashlib.sha256(target.read_bytes()).hexdigest(), } - if len(images) != 40: - raise ValueError("Expected 38 pest frames and two common crop sprites") + if len(images) != 46: + raise ValueError("Expected 38 pests, two crop and six panel sprites") manifest = { "schema": 1, "source_url": ( @@ -49,6 +133,7 @@ def extract(bundle, destination): "source_sha256": hashlib.sha256(bundle.read_bytes()).hexdigest(), "extractor": "UnityPy 1.25.4 Sprite.image; full sprite rect checked", "images": images, + "panel": panel, "pest": { "frames": [f"pest/pest{i}.png" for i in range(1, 76, 2)], "sample_rate": 24, diff --git a/src/farm_render/data/assets.zip b/src/farm_render/data/assets.zip index 9f2e97725797739fca96729c6c3edd4cffa2cbb9..55467b0a9f8a3d919a747d4bbe5bec831e8b6ce5 100644 GIT binary patch delta 36793 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 1: + box = font(self.font_path, size).getbbox(value) + if (box[2]-box[0] <= width + and box[3]-box[1] <= height): + break + size -= 1 text = canvas.fit_text( - value, self.font_path, size, max(1, s(width)), + value, self.font_path, size, width, ) + box = font(self.font_path, size).getbbox(text) + left = s(x) - box[0] + if entry['alignment'] == 4: + left += (width - (box[2]-box[0])) // 2 + top = s(y) + (height - (box[3]-box[1])) // 2 - box[1] canvas.text( - tuple(s(n) for n in position), text, - self.font_path, size, color, + (left, top), text, self.font_path, size, tuple(entry['color']), ) diff --git a/src/farm_render/source_assets/manifest.json b/src/farm_render/source_assets/manifest.json index c3a1740..acf7517 100644 --- a/src/farm_render/source_assets/manifest.json +++ b/src/farm_render/source_assets/manifest.json @@ -25,6 +25,20 @@ ], "sha256": "226c96b60648787fd457d2f968c0eee7c610444f191e6c73fdd071fa6e95bf14" }, + "webgl/panel/GoldIcon.png": { + "size": [ + 64, + 64 + ], + "sha256": "5389afb3a3b1245e9fdc8d3a8839c8ff07a653ebf160bb8e43882a461e73ce49" + }, + "webgl/panel/HeadFrame.png": { + "size": [ + 230, + 230 + ], + "sha256": "74e8f716f58f9055d873657eb8fbaea2170ea19365fe83299b8e32f8484b0b62" + }, "pest/pest37.png": { "size": [ 44, @@ -116,6 +130,13 @@ ], "sha256": "1ad3f1bd4521ef462056b88070728853fc93de85457eac1903d8dd11dc175642" }, + "webgl/panel/PersionInfoBG.png": { + "size": [ + 492, + 236 + ], + "sha256": "62971e70743418988982667625f3e6e4e61073e74610c5279919be2e71c1bd10" + }, "pest/pest69.png": { "size": [ 44, @@ -172,6 +193,13 @@ ], "sha256": "8a78d0b046991de083334cabba06291fecc7739be501beb2caf3fcc87f5454f7" }, + "webgl/panel/ExpProgress.png": { + "size": [ + 225, + 23 + ], + "sha256": "fcb1bdc9a568758460e005a1be58c04d8346eaedfcbc3fef59b29ad0dedcfdc0" + }, "pest/pest65.png": { "size": [ 44, @@ -249,6 +277,13 @@ ], "sha256": "353ff338fd5ab3f7812e9d2d7f98df11d0de4e04af6de7f9d5aa0249d40b3609" }, + "webgl/panel/CouponIcon.png": { + "size": [ + 64, + 64 + ], + "sha256": "8f564bf9da5c0fbeb65a3e320cfb47d66648405f09e2309a42825c1f5404caf1" + }, "pest/pest27.png": { "size": [ 44, @@ -263,6 +298,13 @@ ], "sha256": "fc3a21ed236cd2200704d2971c54dcf6f90fe92ada756da6acb70b78d2c9fd82" }, + "webgl/panel/ExpBar.png": { + "size": [ + 223, + 30 + ], + "sha256": "efb13c2dcb1ecd49689ed561d3f816312738f84887e01496385914e86dcf87d5" + }, "pest/pest61.png": { "size": [ 44, @@ -285,6 +327,159 @@ "sha256": "5bd1ed7e9db82572119403fce50ff9c7276df33ad4288869aeac3fa5896652e6" } }, + "panel": { + "reference_canvas": [ + 1920, + 1080 + ], + "source_prefab": "mainscene#WebGLPersionInfo", + "anchor": "top_left", + "sprites": [ + { + "name": "PersionInfoBG", + "sprite": "webgl/panel/PersionInfoBG.png", + "rect": [ + 0.0, + 0.0, + 492.0, + 236.0 + ] + }, + { + "name": "HeadFrame", + "sprite": "webgl/panel/HeadFrame.png", + "rect": [ + 3.092998504638672, + 8.865001678466797, + 169.75, + 169.5 + ] + }, + { + "name": "ExpBar", + "sprite": "webgl/panel/ExpBar.png", + "rect": [ + 177.60000610351562, + 85.89997100830078, + 223.0, + 30.0 + ] + }, + { + "name": "ExpProgress", + "sprite": "webgl/panel/ExpProgress.png", + "rect": [ + 179.90000915527344, + 89.89997100830078, + 215.0, + 22.0 + ] + }, + { + "name": "GoldIcon", + "sprite": "webgl/panel/GoldIcon.png", + "rect": [ + 146.5999984741211, + 128.8000030517578, + 30.0, + 30.0 + ] + }, + { + "name": "CouponIcon", + "sprite": "webgl/panel/CouponIcon.png", + "rect": [ + 310.5, + 128.8000030517578, + 30.0, + 30.0 + ] + } + ], + "avatar": [ + 32.2744255065918, + 39.76182556152344, + 111.38700103759766, + 107.70719909667969 + ], + "fields": [ + { + "field": "name", + "rect": [ + 161.24510192871094, + 40.90002250671387, + 298.0353088378906, + 31.200000762939453 + ], + "alignment": 3, + "color": [ + 74, + 31, + 0 + ] + }, + { + "field": "experience", + "rect": [ + 177.60003662109375, + 89.78792595863342, + 223.0, + 22.024199962615967 + ], + "alignment": 4, + "color": [ + 91, + 110, + 3 + ] + }, + { + "field": "level", + "rect": [ + 400.9734191894531, + 85.36273193359375, + 56.0, + 30.0 + ], + "alignment": 4, + "color": [ + 216, + 112, + 0 + ] + }, + { + "field": "point", + "rect": [ + 178.46239471435547, + 128.23919677734375, + 123.61039733886719, + 30.0 + ], + "alignment": 3, + "color": [ + 255, + 255, + 255 + ] + }, + { + "field": "vip_point", + "rect": [ + 342.0, + 128.23919677734375, + 108.0, + 30.0 + ], + "alignment": 3, + "color": [ + 255, + 255, + 255 + ] + } + ] + }, "pest": { "frames": [ "pest/pest1.png", diff --git a/src/farm_render/source_assets/webgl/panel/CouponIcon.png b/src/farm_render/source_assets/webgl/panel/CouponIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..7874d984d3f1b8e5c1608d3e7bdf4308c0d7214b GIT binary patch literal 4357 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 literal 0 HcmV?d00001 diff --git a/src/farm_render/source_assets/webgl/panel/ExpBar.png b/src/farm_render/source_assets/webgl/panel/ExpBar.png new file mode 100644 index 0000000000000000000000000000000000000000..969d9cab1402409be3acb923b85e938cd20e7af4 GIT binary patch literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^_kmcBgAGWo@jY$Jz`$tb>EaktG3V`Fd#}R@GVLGZ zYvP@%I-7PsSoJ{k%>spaha5|^<(y*ox`&=bEuk+H~8M5xQ9kkvr z6{mjsl^st4b7kO~J^y~itef{EEBE~a1HH>8cT?mUvZka;PWOL&@mBRduJ?aFt$Mec zLF$6Nb?ohJmyhr>|FDi1`FVcfMk{gONBa#KW*NlavHP+2TJ)n6>>UE~3Qjc*93L5# zj*!UdIA3%8o_cWgj+gq|RxD%M;w2aSd&b!}Un>{Q|5EF^6Y24{Y2OE{1j~^U|=$My85}Sb4q9e0A`Jzg#Z8m literal 0 HcmV?d00001 diff --git a/src/farm_render/source_assets/webgl/panel/ExpProgress.png b/src/farm_render/source_assets/webgl/panel/ExpProgress.png new file mode 100644 index 0000000000000000000000000000000000000000..1b7a0e57c897d0b7408a7776681025d3d9ced18d GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp^4}n;mgAGXjtX<2zq}DQnQ!$Nr=E5z$9KqHPS(*1e5|&>K Pw2i^j)z4*}Q$iB}MQk+n literal 0 HcmV?d00001 diff --git a/src/farm_render/source_assets/webgl/panel/GoldIcon.png b/src/farm_render/source_assets/webgl/panel/GoldIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..532a386a76f9d2110d959e2dd536e6b23a41bee9 GIT binary patch literal 4291 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 {DW>h;ySHxq()9AEd;zRDLGhKbmd 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