From 36fae228f84448710dc5a6c96b831ed2cfc852b3 Mon Sep 17 00:00:00 2001 From: this-Fish Date: Tue, 17 Mar 2026 07:58:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E8=B4=AD=E4=B9=B0=E6=AF=8F?= =?UTF-8?q?=E5=A4=A9&3=E5=A4=A9&=E6=AF=8F=E5=91=A8=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E5=95=86=E5=93=81=20=E6=94=B9=E5=90=8D=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E8=B4=AD=E4=B9=B0=E5=95=86=E5=93=81=20(#3006)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 自动购买每天&3天&每周刷新商品 改名 自动购买商品 新增支援商人:挪德卡莱-那夏镇-旗舰-德米安 --- .../README.md | 531 ++-- .../assets/images/Exit.png | Bin .../assets/images/buyBtn.png | Bin .../assets/images/「四方八方之网」.png | Bin .../assets/images/「皮拉米达的夜莺」.png | Bin 0 -> 8498 bytes .../assets/images/云岩裂叶.png | Bin .../assets/images/兽肉.png | Bin .../assets/images/冒险家之花.png | Bin .../assets/images/冒险家头带.png | Bin .../assets/images/冒险家尾羽.png | Bin .../assets/images/冒险家怀表.png | Bin .../assets/images/冒险家金杯.png | Bin .../assets/images/冰钩钩果汁.png | Bin .../assets/images/冰雾花花朵.png | Bin .../assets/images/劫波莲.png | Bin .../assets/images/卷心菜.png | Bin .../assets/images/发酵果实汁.png | Bin .../assets/images/咖啡豆.png | Bin .../assets/images/嘟嘟莲.png | Bin .../assets/images/团子牛奶.png | Bin .../assets/images/土豆.png | Bin .../assets/images/圣水.png | Bin .../assets/images/培根.png | Bin .../assets/images/堇瓜.png | Bin .../assets/images/塞西莉亚花.png | Bin .../assets/images/墩墩桃.png | Bin .../assets/images/夜泊石.png | Bin .../assets/images/大碗茶.png | Bin .../assets/images/奶油.png | Bin .../assets/images/奶酪.png | Bin .../assets/images/宿影花.png | Bin .../assets/images/小灯草.png | Bin .../assets/images/小麦.png | Bin .../assets/images/帕蒂沙兰.png | Bin .../assets/images/幸运儿之杯.png | Bin .../assets/images/幸运儿沙漏.png | Bin .../assets/images/幸运儿绿花.png | Bin .../assets/images/幸运儿银冠.png | Bin .../assets/images/幸运儿鹰羽.png | Bin .../assets/images/微光角菌.png | Bin .../assets/images/慕风蘑菇.png | Bin .../assets/images/日落果.png | Bin .../assets/images/星蕈.png | Bin .../assets/images/星螺.png | Bin .../assets/images/杏仁.png | Bin .../assets/images/松茸.png | Bin .../assets/images/果酱.png | Bin .../assets/images/枣椰.png | Bin .../assets/images/枫达.png | Bin .../assets/images/树王圣体菇.png | Bin .../assets/images/树莓薄荷饮.png | Bin .../assets/images/气泡酸莓汁.png | Bin .../assets/images/水晶块.png | Bin .../assets/images/汐藻.png | Bin .../assets/images/沉玉仙茗.png | Bin .../assets/images/泡泡桔.png | Bin .../assets/images/洋葱.png | Bin .../assets/images/浪沫羽鳃.png | Bin .../assets/images/海灵芝.png | Bin .../assets/images/海草.png | Bin .../assets/images/海露花.png | Bin .../assets/images/清心.png | Bin .../assets/images/清水玉.png | Bin .../assets/images/游医的怀钟.png | Bin .../assets/images/游医的方巾.png | Bin .../assets/images/游医的枭羽.png | Bin .../assets/images/游医的药壶.png | Bin .../assets/images/游医的银莲.png | Bin .../assets/images/澄晶实.png | Bin .../assets/images/火腿.png | Bin .../assets/images/灼灼彩菊.png | Bin .../assets/images/烈焰花花蕊.png | Bin .../assets/images/烛伞蘑菇.png | Bin .../assets/images/烬芯花.png | Bin .../assets/images/熏禽肉.png | Bin .../assets/images/牛奶.png | Bin .../assets/images/特制风味烤蘑菇披萨.png | Bin .../assets/images/珊瑚真珠.png | Bin .../assets/images/琉璃百合.png | Bin .../assets/images/琉璃袋.png | Bin .../assets/images/琉鳞石.png | Bin .../assets/images/甜甜花.png | Bin .../assets/images/电气水晶.png | Bin .../assets/images/番茄.png | Bin .../assets/images/白萝卜.png | Bin .../assets/images/白铁块.png | Bin .../assets/images/盐.png | Bin .../assets/images/石珀.png | Bin .../assets/images/禽肉.png | Bin .../assets/images/秃秃豆.png | Bin .../assets/images/稻米.png | Bin .../assets/images/竹笋.png | Bin .../assets/images/糖.png | Bin .../assets/images/绝云椒椒.png | Bin .../assets/images/肉龙掌.png | Bin .../assets/images/胡椒.png | Bin .../assets/images/胡萝卜.png | Bin .../assets/images/苍晶螺.png | Bin .../assets/images/苦种.png | Bin .../assets/images/苹果.png | Bin .../assets/images/苹果酿.png | Bin .../assets/images/茉洁草.png | Bin .../assets/images/莲蓬.png | Bin .../assets/images/萃凝晶.png | Bin .../assets/images/落落莓.png | Bin .../assets/images/蒲公英籽.png | Bin .../assets/images/薄荷.png | Bin .../assets/images/蘑菇.png | Bin .../assets/images/虹彩蔷薇.png | Bin .../assets/images/虾仁.png | Bin .../assets/images/螃蟹.png | Bin .../assets/images/蟹黄.png | Bin .../assets/images/豆腐.png | Bin .../自动购买商品/assets/images/边陲之地.png | Bin 0 -> 11063 bytes .../自动购买商品/assets/images/野浆果之路.png | Bin 0 -> 10863 bytes .../assets/images/金鱼草.png | Bin .../assets/images/钩钩果.png | Bin .../assets/images/铁块.png | Bin .../assets/images/霄灯.png | Bin .../assets/images/霓裳花.png | Bin .../assets/images/霜盏花.png | Bin .../assets/images/青蜜莓.png | Bin .../assets/images/面粉.png | Bin .../assets/images/颗粒果.png | Bin .../assets/images/风车菊.png | Bin .../assets/images/香肠.png | Bin .../assets/images/香辛料.png | Bin .../assets/images/香辛果.png | Bin .../assets/images/马尾.png | Bin .../assets/images/鱼肉.png | Bin .../assets/images/鱼肉2.png | Bin .../assets/images/鳗肉.png | Bin .../assets/images/鸟蛋.png | Bin .../assets/images/鸣草.png | Bin .../assets/images/黄油.png | Bin .../assets/images/黑麦.png | Bin .../assets/npcs.json | 9 + .../assets/path/挪德卡莱-皮拉米达城-科菲策.json | 0 .../assets/path/挪德卡莱-那夏镇-丽切娅.json | 0 .../assets/path/挪德卡莱-那夏镇-卡嘉.json | 0 .../assets/path/挪德卡莱-那夏镇-旗舰-德米安.json | 67 + .../assets/path/挪德卡莱-那夏镇-采若.json | 0 .../assets/path/挪德卡莱-那夏镇-雷科.json | 0 .../assets/path/枫丹-枫丹廷-布希柯.json | 0 .../assets/path/枫丹-枫丹廷-德波大饭店-桑格内蒂.json | 0 .../assets/path/枫丹-枫丹廷-欧仁妮.json | 0 .../assets/path/枫丹-枫丹廷-灰河-克洛莎.json | 0 .../assets/path/枫丹-枫丹廷-路易.json | 0 .../assets/path/枫丹-枫丹廷-阿鲁埃.json | 0 .../assets/path/枫丹-白淞镇-安特曼.json | 0 .../assets/path/枫丹-锈舵酒馆-皮托.json | 0 .../assets/path/璃月-望舒客栈-菲尔戈黛特.json | 0 .../assets/path/璃月-琼玑野-朱老板.json | 0 .../assets/path/璃月-璃月港-东升.json | 0 .../assets/path/璃月-璃月港-博来.json | 0 .../assets/path/璃月-璃月港-卯师父.json | 0 .../assets/path/璃月-璃月港-张顺.json | 0 .../assets/path/璃月-璃月港-琳琅.json | 0 .../assets/path/璃月-璃月港-石头.json | 0 .../assets/path/璃月-璃月港-老孙.json | 0 .../assets/path/璃月-璃月港-老高.json | 0 .../assets/path/璃月-璃月港-长顺.json | 0 .../assets/path/璃月-璃月港-阿山婆.json | 0 .../assets/path/璃月-璃月港-阿桂.json | 0 .../assets/path/璃月-石门-老周叔.json | 0 .../assets/path/璃月-轻策庄-凯叔.json | 0 .../assets/path/璃月-遗珑埠-丰泰.json | 0 .../assets/path/璃月-遗珑埠-连芳.json | 0 .../assets/path/稻妻-海祇岛-清子.json | 60 +- .../assets/path/稻妻-白狐之野-若紫.json | 0 .../assets/path/稻妻-离岛-卡琵莉亚.json | 0 .../assets/path/稻妻-离岛-小畑.json | 0 .../assets/path/稻妻-离岛-山城健太.json | 0 .../assets/path/稻妻-离岛-秋月.json | 0 .../assets/path/稻妻-稻妻城-志村勘兵卫.json | 0 .../assets/path/稻妻-稻妻城-智树.json | 0 .../assets/path/稻妻-稻妻城-木南杏奈.json | 0 .../assets/path/稻妻-稻妻城-葵.json | 0 .../assets/path/纳塔-圣火竞技场-夏安卡.json | 0 .../assets/path/纳塔-圣火竞技场-布纳马.json | 112 +- .../assets/path/纳塔-圣火竞技场-艾库瓦.json | 0 .../assets/path/纳塔-圣火竞技场-钦特利.json | 0 .../assets/path/纳塔-坚岩隘谷-伊蜜.json | 0 .../assets/path/纳塔-悠悠度假村-穆托莉娜.json | 0 .../assets/path/蒙德-清泉镇-杜拉夫.json | 0 .../assets/path/蒙德-清泉镇-神奇的霍普金斯.json | 0 .../assets/path/蒙德-蒙德城-天使的馈赠-查尔斯.json | 0 .../assets/path/蒙德-蒙德城-布兰琪.json | 0 .../assets/path/蒙德-蒙德城-石榴.json | 0 .../assets/path/蒙德-蒙德城-芙萝拉.json | 0 .../assets/path/蒙德-蒙德城-莎拉.json | 0 .../assets/path/蒙德-风起地-克罗丽丝.json | 0 .../assets/path/须弥-化城郭-阿什帕齐.json | 0 .../assets/path/须弥-奥摩斯港-巴巴克.json | 0 .../assets/path/须弥-奥摩斯港-布特罗斯.json | 0 .../assets/path/须弥-奥摩斯港-拉玛.json | 0 .../assets/path/须弥-奥摩斯港-秋蔚.json | 0 .../assets/path/须弥-桓那兰那(梦境)-兰玛尼.json | 0 .../assets/path/须弥-阿如村-阿扎莱.json | 0 .../assets/path/须弥-须弥城-兰巴德酒馆-兰巴德.json | 0 .../assets/path/须弥-须弥城-哈马维.json | 0 .../assets/path/须弥-须弥城-普斯帕咖啡馆-恩忒卡.json | 0 .../assets/path/须弥-须弥城-朱特.json | 0 .../assets/path/须弥-须弥城-珀姆.json | 0 .../assets/path/须弥-须弥城-阿夫辛.json | 0 .../main.js | 2370 ++++++++--------- repo/js/自动购买商品/manifest.json | 25 + .../settings.json | 110 +- .../商人与商品支持表.md | 1 + .../manifest.json | 24 - 210 files changed, 1694 insertions(+), 1615 deletions(-) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/README.md (97%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/Exit.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/buyBtn.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/「四方八方之网」.png (100%) create mode 100644 repo/js/自动购买商品/assets/images/「皮拉米达的夜莺」.png rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/云岩裂叶.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/兽肉.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/冒险家之花.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/冒险家头带.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/冒险家尾羽.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/冒险家怀表.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/冒险家金杯.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/冰钩钩果汁.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/冰雾花花朵.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/劫波莲.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/卷心菜.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/发酵果实汁.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/咖啡豆.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/嘟嘟莲.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/团子牛奶.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/土豆.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/圣水.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/培根.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/堇瓜.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/塞西莉亚花.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/墩墩桃.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/夜泊石.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/大碗茶.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/奶油.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/奶酪.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/宿影花.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/小灯草.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/小麦.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/帕蒂沙兰.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/幸运儿之杯.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/幸运儿沙漏.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/幸运儿绿花.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/幸运儿银冠.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/幸运儿鹰羽.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/微光角菌.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/慕风蘑菇.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/日落果.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/星蕈.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/星螺.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/杏仁.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/松茸.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/果酱.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/枣椰.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/枫达.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/树王圣体菇.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/树莓薄荷饮.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/气泡酸莓汁.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/水晶块.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/汐藻.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/沉玉仙茗.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/泡泡桔.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/洋葱.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/浪沫羽鳃.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/海灵芝.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/海草.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/海露花.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/清心.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/清水玉.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/游医的怀钟.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/游医的方巾.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/游医的枭羽.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/游医的药壶.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/游医的银莲.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/澄晶实.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/火腿.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/灼灼彩菊.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/烈焰花花蕊.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/烛伞蘑菇.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/烬芯花.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/熏禽肉.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/牛奶.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/特制风味烤蘑菇披萨.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/珊瑚真珠.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/琉璃百合.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/琉璃袋.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/琉鳞石.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/甜甜花.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/电气水晶.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/番茄.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/白萝卜.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/白铁块.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/盐.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/石珀.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/禽肉.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/秃秃豆.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/稻米.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/竹笋.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/糖.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/绝云椒椒.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/肉龙掌.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/胡椒.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/胡萝卜.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/苍晶螺.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/苦种.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/苹果.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/苹果酿.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/茉洁草.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/莲蓬.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/萃凝晶.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/落落莓.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/蒲公英籽.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/薄荷.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/蘑菇.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/虹彩蔷薇.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/虾仁.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/螃蟹.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/蟹黄.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/豆腐.png (100%) create mode 100644 repo/js/自动购买商品/assets/images/边陲之地.png create mode 100644 repo/js/自动购买商品/assets/images/野浆果之路.png rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/金鱼草.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/钩钩果.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/铁块.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/霄灯.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/霓裳花.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/霜盏花.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/青蜜莓.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/面粉.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/颗粒果.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/风车菊.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/香肠.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/香辛料.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/香辛果.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/马尾.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/鱼肉.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/鱼肉2.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/鳗肉.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/鸟蛋.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/鸣草.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/黄油.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/images/黑麦.png (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/npcs.json (98%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/挪德卡莱-皮拉米达城-科菲策.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/挪德卡莱-那夏镇-丽切娅.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/挪德卡莱-那夏镇-卡嘉.json (100%) create mode 100644 repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-旗舰-德米安.json rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/挪德卡莱-那夏镇-采若.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/挪德卡莱-那夏镇-雷科.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/枫丹-枫丹廷-布希柯.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/枫丹-枫丹廷-德波大饭店-桑格内蒂.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/枫丹-枫丹廷-欧仁妮.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/枫丹-枫丹廷-灰河-克洛莎.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/枫丹-枫丹廷-路易.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/枫丹-枫丹廷-阿鲁埃.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/枫丹-白淞镇-安特曼.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/枫丹-锈舵酒馆-皮托.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-望舒客栈-菲尔戈黛特.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-琼玑野-朱老板.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-东升.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-博来.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-卯师父.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-张顺.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-琳琅.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-石头.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-老孙.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-老高.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-长顺.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-阿山婆.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-璃月港-阿桂.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-石门-老周叔.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-轻策庄-凯叔.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-遗珑埠-丰泰.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/璃月-遗珑埠-连芳.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/稻妻-海祇岛-清子.json (95%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/稻妻-白狐之野-若紫.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/稻妻-离岛-卡琵莉亚.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/稻妻-离岛-小畑.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/稻妻-离岛-山城健太.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/稻妻-离岛-秋月.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/稻妻-稻妻城-志村勘兵卫.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/稻妻-稻妻城-智树.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/稻妻-稻妻城-木南杏奈.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/稻妻-稻妻城-葵.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/纳塔-圣火竞技场-夏安卡.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/纳塔-圣火竞技场-布纳马.json (95%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/纳塔-圣火竞技场-艾库瓦.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/纳塔-圣火竞技场-钦特利.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/纳塔-坚岩隘谷-伊蜜.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/纳塔-悠悠度假村-穆托莉娜.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/蒙德-清泉镇-杜拉夫.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/蒙德-清泉镇-神奇的霍普金斯.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/蒙德-蒙德城-天使的馈赠-查尔斯.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/蒙德-蒙德城-布兰琪.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/蒙德-蒙德城-石榴.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/蒙德-蒙德城-芙萝拉.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/蒙德-蒙德城-莎拉.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/蒙德-风起地-克罗丽丝.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-化城郭-阿什帕齐.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-奥摩斯港-巴巴克.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-奥摩斯港-布特罗斯.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-奥摩斯港-拉玛.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-奥摩斯港-秋蔚.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-桓那兰那(梦境)-兰玛尼.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-阿如村-阿扎莱.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-须弥城-兰巴德酒馆-兰巴德.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-须弥城-哈马维.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-须弥城-普斯帕咖啡馆-恩忒卡.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-须弥城-朱特.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-须弥城-珀姆.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/assets/path/须弥-须弥城-阿夫辛.json (100%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/main.js (97%) create mode 100644 repo/js/自动购买商品/manifest.json rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/settings.json (96%) rename repo/js/{自动购买每天&3天&每周刷新商品 => 自动购买商品}/商人与商品支持表.md (98%) delete mode 100644 repo/js/自动购买每天&3天&每周刷新商品/manifest.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/README.md b/repo/js/自动购买商品/README.md similarity index 97% rename from repo/js/自动购买每天&3天&每周刷新商品/README.md rename to repo/js/自动购买商品/README.md index c71c636b5..8af4177bc 100644 --- a/repo/js/自动购买每天&3天&每周刷新商品/README.md +++ b/repo/js/自动购买商品/README.md @@ -1,265 +1,266 @@ -# 自动购买每天&3天&每周刷新商品 - 使用说明 - -## 📝 功能说明 - -这个脚本可以自动购买原神游戏中各个商品的商品,支持三种刷新周期: -- **每天刷新商品**:每天凌晨4点刷新 -- **3天刷新商品**:每3天刷新一次 -- **每周刷新商品**:每周刷新,可指定购买日 -- **记录系统**:避免重复购买,只购买刷新后的商品 -- **标签系统**:支持按标签批量禁用商人 - -## ⚡ 快速开始 - -### 1. 准备工作 & 注意事项 -1. **游戏分辨率**:1920×1080 解析度** -2. **游戏时间**:脚本会自动调整白天/晚上时间 -3. **背包空间**:确保有足够空间购买商品 -4. **摩拉**:确保有足够的摩拉 -5. **记录系统**:购买记录保存在 `record/账号名/` 目录下 -6. **多人模式**:脚本只能在单人模式下运行 -7. **刷新时间**:基于游戏服务器时间(GMT+8),每天4点刷新 - - -### 2. 首次使用 -1. 打开脚本设置界面 -2. 输入要购买的商品 -3. 设置每周商品购买模式 -4. 设置要禁用的商人或标签 -5. 保存设置 -6. 在主界面运行脚本 - - - -## ⚙️ 设置说明 -1. **账号名**:填写账号名,用于区分不同账号的购买记录(为空则读取uid作为自定义CD记录标识) -2. **要购买的商品**:输入商品名称,用空格分隔(支援的商人与商品请查看下方表格) - - 建议直接复制商品名称贴上输入栏 - - 输入标签后会购买具有该标签的商人的所有商品 - ``` - 示例:盐 胡椒 螃蟹 圣水 松茸 沉玉仙茗 蟹黄 稀少商品 - ``` -3. **每周商品购买方式**: - - 0:跟随游戏系统周期自动判断 - - 1-7:指定周几购买(1=周一,7=周日) - - **适用范围**:包含所有每周刷新的商品 - - 周一刷新商品 - - 周四刷新商品 - - **每月1号刷新商品**:不受此设置影响,刷新即购买 -4. **禁用标签功能**:可以输入要禁用的标签(空格分隔),如: - ``` - 示例:黑心商人 挪德卡莱 卡琵莉亚 - ``` - 禁用后,脚本会跳过这些商人或带有指定标签的商人,不会前往购买。 - - 可以使用国家/地区(如"蒙德"、"璃月")或其他标签(如商人信息总览中的标签) -5. **是否跳过调整时间动画**:开启后会啟用时瞬跳过调整时间动画 -6. **无视购买记录强制购买**:开启后会忽略购买记录,重新购买所有商品 -7. **调试模式**:开启后显示详细执行日志 - -### 购买记录系统说明 -脚本会自动记录购买时间,避免重复购买: -1. **每天刷新商品** - 每天凌晨4点刷新 -2. **3天刷新商品** - 每3天刷新一次 -3. **每周刷新商品** - 每周固定週一购买 - - 周一刷新商品:按设置决定是否购买 - - 周四刷新商品(狗粮商人):同样受设置控制 -4. **每月1号刷新商品** - 每月1号凌晨4点刷新 - - -购买记录保存在:`record/你填的账号名/records.json` -- 下次执行时只购买已刷新商品 -- 可通过"无视购买记录强制购买"选项重置 - - -## 📋 商人与商品支持表 - -### 如何查看支持的商品? -- **查看本文件下方表格**:包含所有支持的商人与商品 - -| 所在地 | 商人名 | 每天刷新商品 | 3天刷新商品 | 每周刷新商品 | 标签 | -|--------|--------|-------------|------------|-------------|------| -| 蒙德-风起地 | 克罗丽丝 | - | 金鱼草、薄荷、钩钩果、落落莓、慕风蘑菇 | - | 移动 | -| 蒙德-清泉镇 | 神奇的霍普金斯 | 圣水 | - | - | 稀少商品 | -| 蒙德-清泉镇 | 杜拉夫 | 兽肉、禽肉、鸟蛋 | - | - | | -| 蒙德-蒙德城 | 布兰琪 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | | -| 蒙德-蒙德城 | 莎拉 | - | - | 面粉、奶油、熏禽肉、黄油、火腿、糖、蟹黄、果酱、奶酪、培根、香肠 | | -| 蒙德-蒙德城 | 芙萝拉 | - | 甜甜花、风车菊、塞西莉亚花、小灯草、嘟嘟莲 | - | | -| 蒙德-蒙德城 | 石榴 | - | - | 冒险家金杯、冒险家尾羽、冒险家头带、冒险家之花、冒险家怀表 | 狗粮商人 | -| 蒙德-蒙德城-天使的馈赠 | 查尔斯 | 冰钩钩果汁、树莓薄荷饮、苹果酿、气泡酸莓汁 | - | - | 独立地图、稀少商品 | -| 璃月-璃月港 | 阿山婆 | 霄灯 | - | - | | -| 璃月-璃月港 | 石头 | 铁块、白铁块、夜泊石 | - | - | | -| 璃月-璃月港 | 东升 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦、稻米、虾仁、豆腐、杏仁 | - | - | | -| 璃月-璃月港 | 卯师父 | 鱼肉、螃蟹 | 竹笋、莲蓬、松茸、蘑菇、胡萝卜、白萝卜、绝云椒椒 | 面粉、糖、香肠、火腿 | | -| 璃月-璃月港 | 老孙 | 鱼肉、螃蟹、虾仁 | - | - | | -| 璃月-璃月港 | 老高 | 鱼肉、鱼肉2 | - | - | | -| 璃月-璃月港 | 长顺 | 土豆 | 石珀、电气水晶 | 糖、奶酪 | | -| 璃月-璃月港 | 琳琅 | - | - | 游医的药壶、游医的枭羽、游医的方巾、游医的银莲、游医的怀钟 | 狗粮商人 | -| 璃月-璃月港 | 张顺 | - | - | 幸运儿之杯、幸运儿鹰羽、幸运儿银冠、幸运儿绿花、幸运儿沙漏 | 狗粮商人 | -| 璃月-璃月港 | 博来 | - | 苹果、日落果、鱼肉、星螺 | - | | -| 璃月-璃月港 | 阿桂 | - | 清心、琉璃袋、马尾、莲蓬、冰雾花花朵、烈焰花花蕊 | - | | -| 璃月-琼玑野 | 朱老板 | 大碗茶 | - | - | 稀少商品 | -| 璃月-望舒客栈 | 菲尔戈黛特 | - | 松茸、霓裳花、琉璃袋 | 黄油、香肠 | | -| 璃月-石门 | 老周叔 | 大碗茶 | - | - | 稀少商品 | -| 璃月-轻策庄 | 小白 | - | 豆腐、杏仁、霓裳花 | 琉璃百合(每月刷新) | | -| 璃月-轻策庄 | 凯叔 | 大碗茶 | - | - | 稀少商品 | -| 璃月-遗珑埠 | 丰泰 | 稻米、豆腐 | 清水玉、石珀、夜泊石、琉璃袋、霓裳花、绝云椒椒、沉玉仙茗 | 蟹黄 | | -| 璃月-遗珑埠 | 连芳 | - | 沉玉仙茗 | - | | -| 稻妻-离岛 | 小畑 | 螃蟹、鱼肉、虾仁 | 海灵芝 | - | | -| 稻妻-离岛 | 秋月 | 铁块、白铁块、电气水晶 | - | - | | -| 稻妻-离岛 | 山城健太 | 鳗肉 | 珊瑚真珠 | 幸运儿之杯、幸运儿鹰羽、幸运儿绿花、幸运儿银冠、幸运儿沙漏 | 狗粮商人 | -| 稻妻-离岛 | 卡琵莉亚 | - | 蒲公英籽 | - | | -| 稻妻-白狐之野 | 若紫 | - | - | 「四方八方之网」 | | -| 稻妻-稻妻城 | 葵 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦、稻米、虾仁、豆腐 | 鸣草 | - | | -| 稻妻-稻妻城 | 志村勘兵卫 | 鱼肉、螃蟹 | 海草、堇瓜、白萝卜 | 香肠、培根、面粉、糖 | | -| 稻妻-稻妻城 | 智树 | 团子牛奶 | - | - | 稀少商品 | -| 稻妻-稻妻城 | 木南杏奈 | 特制风味烤蘑菇披萨 | - | - | 稀少商品 | -| 稻妻-海祇岛 | 清子 | - | - | 牛奶、番茄、土豆、小麦、豆腐 | | -| 须弥-化城郭 | 阿什帕齐 | 兽肉、禽肉 | 鸟蛋、树王圣体菇 | 香辛料 | | -| 须弥-须弥城 | 朱特 | - | 香辛果、帕蒂沙兰 | 香辛料 | | -| 须弥-须弥城 | 阿夫辛 | - | - | 冒险家金杯、冒险家尾羽、冒险家头带、冒险家之花、冒险家怀表 | 狗粮商人 | -| 须弥-须弥城 | 珀姆 | 鱼肉、螃蟹、虾仁 | 海草 | - | | -| 须弥-须弥城 | 哈马维 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦、稻米、豆腐、虾仁 | 香辛果、墩墩桃 | - | | -| 须弥-须弥城-兰巴德酒馆 | 兰巴德 | 鱼肉、螃蟹、秃秃豆 | 星蕈 | 面粉、香肠、培根、香辛料、糖 | 独立地图 | -| 须弥-须弥城-普斯帕咖啡馆 | 恩忒卡 | 咖啡豆 | - | - | 独立地图 | -| 须弥-奥摩斯港 | 拉玛 | 盐、胡椒 | - | 香辛料、糖、黄油、奶酪 | | -| 须弥-奥摩斯港 | 布特罗斯 | 鱼肉、螃蟹、虾仁 | - | - | | -| 须弥-奥摩斯港 | 秋蔚 | - | 水晶块、石珀、夜泊石、霓裳花 | - | | -| 须弥-奥摩斯港 | 巴巴克 | - | 慕风蘑菇、蒲公英籽、琉璃袋、清心、鸣草、珊瑚真珠 | - | | -| 须弥-桓那兰那(梦境) | 兰玛尼 | - | 日落果、香辛果、墩墩桃、树王圣体菇、劫波莲 | - | 桓那兰那(梦境) | -| 须弥-阿如村 | 阿扎莱 | 鱼肉、兽肉、秃秃豆 | 星蕈、枣椰、墩墩桃 | 面粉、香辛料、糖 | 黑心商人 | -| 枫丹-枫丹廷 | 布希柯 | 枫达、盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦、秃秃豆、杏仁、发酵果实汁 | 蘑菇、茉洁草 | - | | -| 枫丹-枫丹廷 | 阿鲁埃 | 枫达、咖啡豆 | - | - | | -| 枫丹-枫丹廷 | 路易 | 枫达 | - | - | | -| 枫丹-枫丹廷 | 欧仁妮 | 番茄、卷心菜 | 泡泡桔、茉洁草、日落果、墩墩桃、枣椰、落落莓、虹彩蔷薇 | - | | -| 枫丹-枫丹廷-德波大饭店 | 桑格内蒂 | 枫达 | - | 面粉、奶油、黄油、火腿、糖、蟹黄、果酱、奶酪、培根、香肠 | 独立地图 | -| 枫丹-枫丹廷-灰河 | 克洛莎 | - | - | 幸运儿之杯、幸运儿鹰羽、幸运儿银冠、幸运儿绿花、幸运儿沙漏 | 狗粮商人 | -| 枫丹-白淞镇 | 安特曼 | 鱼肉、螃蟹、虾仁 | 海露花、汐藻、苍晶螺 | - | | -| 枫丹-锈舵酒馆 | 皮托 | 牛奶 | - | 培根、火腿、香肠、奶酪 | 黑心商人 | -| 纳塔-圣火竞技场 | 钦特利 | 土豆 | 烛伞蘑菇、颗粒果、苦种、烬芯花、青蜜莓、肉龙掌 | - | | -| 纳塔-圣火竞技场 | 艾库瓦 | - | - | 幸运儿之杯、幸运儿鹰羽、幸运儿银冠、幸运儿绿花、幸运儿沙漏 | 狗粮商人 | -| 纳塔-圣火竞技场 | 布纳马 | 盐、胡椒、小麦、洋葱、牛奶、番茄、卷心菜、土豆、秃秃豆 | 蘑菇 | - | | -| 纳塔-圣火竞技场 | 夏安卡 | - | - | 面粉、奶油、黄油、火腿、糖、蟹黄、果酱、奶酪、培根、香肠 | | -| 纳塔-坚岩隘谷 | 伊蜜 | - | 铁块、白铁块、水晶块、萃凝晶、澄晶实 | - | | -| 纳塔-悠悠度假村 | 穆托莉娜 | - | 灼灼彩菊、肉龙掌、云岩裂叶、浪沫羽鳃 | - | | -| 挪德卡莱-那夏镇 | 采若 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦、黑麦 | - | - | | -| 挪德卡莱-那夏镇 | 丽切娅 | - | 甜甜花、宿影花、霜盏花 | - | | -| 挪德卡莱-那夏镇 | 卡嘉 | - | - | 面粉、奶油、熏禽肉、黄油、火腿、糖、蟹黄、果酱、奶酪、培根、香肠 | | -| 挪德卡莱-那夏镇 | 雷科 | - | - | 幸运儿之杯、幸运儿鹰羽、幸运儿银冠、幸运儿绿花、幸运儿沙漏 | 狗粮商人 | -| 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | 黑心商人 | - -### **以下为有效标签** -- **国家**:蒙德、璃月、稻妻、须弥、枫丹、纳塔、挪德卡莱 -- **地区**:风起地、清泉镇、蒙德城、璃月港、离岛、稻妻城、海祇岛等 -- **小地图**:天使的馈赠、兰巴德酒馆、德波大饭店、灰河、锈舵酒馆等 -- **商人**:克罗丽丝、神奇的霍普金斯、杜拉夫等(所有商人名) -- **移动**:指商人会移动,有机会购买失败 -- **稀少商品**:指稀少商品 -- **独立地图**:指需要进入独立空间的特殊地图,这些地图部份路径无法使用地图追踪功能,使用简易脚本到商人位置、有机会购买失败 -- **黑心商人**:指没有折扣的商人,价格较贵的商人 -- **狗粮商人**:指每周四刷新商品的狗粮商人 - -### **欢迎补充商人与商品与标签** - -## 🔧 添加新商品 - -### 1. 添加商品图片 -1. 截图商品图标,尺寸建议 90×90 像素 -2. 保存为 PNG 格式,放在 `assets/images/` 目录下 -3. 文件名建议使用中文,如:`新商品.png` - -### 2. 添加到商人 -在 `assets/npcs.json` 中找到对应商人,添加到相应的商品列表中: - -```json -"_1d_foods": ["新商品"] // 每天刷新商品 -"_3d_foods": ["新商品"] // 3天刷新商品 -"_7d_foods": ["新商品"] // 每周刷新商品 -``` - -### 3. 更新商人与商品支持表 -将新商品添加到本文件的商人与商品支持表中,方便其他用户查看。 - -## 🆕 添加新商人 - -### 1. 录制路径 -1. 使用路径录制工具录制前往商人的路径 -2. 保存为 JSON 文件,命名格式:`地区-位置-商人名.json` -3. 放在 `assets/path/` 目录下 - -### 2. 添加商人数据 -在 `assets/data/npcs.json` 中添加: - -```json -"new_npc": { - "name": "新商人名", - "enable": true, - "page": 2, // 商店总页数 - "time": "any", // any/day/night - "path": "assets/path/地区-位置-新商人名.json", - "_1d_foods": ["商品1", "商品2"], // 每天刷新 - "_3d_foods": ["商品3"], // 3天刷新 - "_7d_foods": ["商品4"], // 每周刷新 - "tags": ["地区", "黑心商人"] // 商人标签 -} -``` - -### 3. 参数说明 -- `page`: 商店的总页数 -- `time`: 商人出现时间 - - `any`: 全天出现 - - `day`: - - `night`: -- `path`: 路径文件位置 - -### 4. 更新商人与商品支持表 -将新商人添加到本文件的商人与商品支持表中。 - -## ❓ 常见问题 - -### Q: 脚本不购买任何商品? -A: 检查: -1. 是否在设置中填写了要购买的商品 -2. 商品名称是否正确(参考上方表格) -3. 游戏分辨率是否为 1920×1080 -4. 角色是否在单人模式 -5. 是否有购买记录导致商品未刷新 - -### Q: 如何知道支持哪些商品名称? -A: 查看: -1. 本文件中的"商人与商品支持表" -2. `assets/data/foods.json` 文件中的 `name` 字段 -3. 运行脚本时的日志输出会显示"用户启用了以下商品" - -### Q: 为什么跳过某些商人? -A: 可能原因: -1. 该商人没有你要购买的商品 -2. 商人在禁用列表中 -3. 购买记录显示商品还未到刷新时间 - -### Q: 如何重置购买记录? -A: 有几种方法: -1. 启用"无视购买记录强制购买"选项 -2. 删除 `record/你的账号名/records.json` 文件 -3. 等待商品自然刷新 - -### Q: 每天什么时候刷新? -A: 游戏内的刷新时间是**每天凌晨4点**。脚本会考虑这个时间点: -- 如果当前时间在4点前,视为前一天 -- 购买记录基于4点刷新时间计算 - -## 🤝 贡献指南 - -欢迎提交新的商人和商品配置! - -1. **提交新的商人**:包含路径文件和商人数据 -2. **提交新的商品**:包含图片和商品数据 -3. **更新文档**:记得更新本README中的商人信息表 -4. **标签补充**:欢迎为现有商人添加合适的标签 -5. **问题反馈**:提供详细的重现步骤和日志 - ---- - -> 注意:本脚本仅供学习与研究使用,请遵守游戏使用条款。 - -`` +# 自动购买商品 - 使用说明 + +## 📝 功能说明 + +这个脚本可以自动购买原神游戏中各个商品的商品,支持三种刷新周期: +- **每天刷新商品**:每天凌晨4点刷新 +- **3天刷新商品**:每3天刷新一次 +- **每周刷新商品**:每周刷新,可指定购买日 +- **记录系统**:避免重复购买,只购买刷新后的商品 +- **标签系统**:支持按标签批量禁用商人 + +## ⚡ 快速开始 + +### 1. 准备工作 & 注意事项 +1. **游戏分辨率**:1920×1080 解析度** +2. **游戏时间**:脚本会自动调整白天/晚上时间 +3. **背包空间**:确保有足够空间购买商品 +4. **摩拉**:确保有足够的摩拉 +5. **记录系统**:购买记录保存在 `record/账号名/` 目录下 +6. **多人模式**:脚本只能在单人模式下运行 +7. **刷新时间**:基于游戏服务器时间(GMT+8),每天4点刷新 + + +### 2. 首次使用 +1. 打开脚本设置界面 +2. 输入要购买的商品 +3. 设置每周商品购买模式 +4. 设置要禁用的商人或标签 +5. 保存设置 +6. 在主界面运行脚本 + + + +## ⚙️ 设置说明 +1. **账号名**:填写账号名,用于区分不同账号的购买记录(为空则读取uid作为自定义CD记录标识) +2. **要购买的商品**:输入商品名称,用空格分隔(支援的商人与商品请查看下方表格) + - 建议直接复制商品名称贴上输入栏 + - 输入标签后会购买具有该标签的商人的所有商品 + ``` + 示例:盐 胡椒 螃蟹 圣水 松茸 沉玉仙茗 蟹黄 稀少商品 + ``` +3. **每周商品购买方式**: + - 0:跟随游戏系统周期自动判断 + - 1-7:指定周几购买(1=周一,7=周日) + - **适用范围**:包含所有每周刷新的商品 + - 周一刷新商品 + - 周四刷新商品 + - **每月1号刷新商品**:不受此设置影响,刷新即购买 +4. **禁用标签功能**:可以输入要禁用的标签(空格分隔),如: + ``` + 示例:黑心商人 挪德卡莱 卡琵莉亚 + ``` + 禁用后,脚本会跳过这些商人或带有指定标签的商人,不会前往购买。 + + 可以使用国家/地区(如"蒙德"、"璃月")或其他标签(如商人信息总览中的标签) +5. **是否跳过调整时间动画**:开启后会啟用时瞬跳过调整时间动画 +6. **无视购买记录强制购买**:开启后会忽略购买记录,重新购买所有商品 +7. **调试模式**:开启后显示详细执行日志 + +### 购买记录系统说明 +脚本会自动记录购买时间,避免重复购买: +1. **每天刷新商品** - 每天凌晨4点刷新 +2. **3天刷新商品** - 每3天刷新一次 +3. **每周刷新商品** - 每周固定週一购买 + - 周一刷新商品:按设置决定是否购买 + - 周四刷新商品(狗粮商人):同样受设置控制 +4. **每月1号刷新商品** - 每月1号凌晨4点刷新 + + +购买记录保存在:`record/你填的账号名/records.json` +- 下次执行时只购买已刷新商品 +- 可通过"无视购买记录强制购买"选项重置 + + +## 📋 商人与商品支持表 + +### 如何查看支持的商品? +- **查看本文件下方表格**:包含所有支持的商人与商品 + +| 所在地 | 商人名 | 每天刷新商品 | 3天刷新商品 | 每周刷新商品 | 标签 | +|--------|--------|-------------|------------|-------------|------| +| 蒙德-风起地 | 克罗丽丝 | - | 金鱼草、薄荷、钩钩果、落落莓、慕风蘑菇 | - | 移动 | +| 蒙德-清泉镇 | 神奇的霍普金斯 | 圣水 | - | - | 稀少商品 | +| 蒙德-清泉镇 | 杜拉夫 | 兽肉、禽肉、鸟蛋 | - | - | | +| 蒙德-蒙德城 | 布兰琪 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦 | - | - | | +| 蒙德-蒙德城 | 莎拉 | - | - | 面粉、奶油、熏禽肉、黄油、火腿、糖、蟹黄、果酱、奶酪、培根、香肠 | | +| 蒙德-蒙德城 | 芙萝拉 | - | 甜甜花、风车菊、塞西莉亚花、小灯草、嘟嘟莲 | - | | +| 蒙德-蒙德城 | 石榴 | - | - | 冒险家金杯、冒险家尾羽、冒险家头带、冒险家之花、冒险家怀表 | 狗粮商人 | +| 蒙德-蒙德城-天使的馈赠 | 查尔斯 | 冰钩钩果汁、树莓薄荷饮、苹果酿、气泡酸莓汁 | - | - | 独立地图、稀少商品 | +| 璃月-璃月港 | 阿山婆 | 霄灯 | - | - | | +| 璃月-璃月港 | 石头 | 铁块、白铁块、夜泊石 | - | - | | +| 璃月-璃月港 | 东升 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦、稻米、虾仁、豆腐、杏仁 | - | - | | +| 璃月-璃月港 | 卯师父 | 鱼肉、螃蟹 | 竹笋、莲蓬、松茸、蘑菇、胡萝卜、白萝卜、绝云椒椒 | 面粉、糖、香肠、火腿 | | +| 璃月-璃月港 | 老孙 | 鱼肉、螃蟹、虾仁 | - | - | | +| 璃月-璃月港 | 老高 | 鱼肉、鱼肉2 | - | - | | +| 璃月-璃月港 | 长顺 | 土豆 | 石珀、电气水晶 | 糖、奶酪 | | +| 璃月-璃月港 | 琳琅 | - | - | 游医的药壶、游医的枭羽、游医的方巾、游医的银莲、游医的怀钟 | 狗粮商人 | +| 璃月-璃月港 | 张顺 | - | - | 幸运儿之杯、幸运儿鹰羽、幸运儿银冠、幸运儿绿花、幸运儿沙漏 | 狗粮商人 | +| 璃月-璃月港 | 博来 | - | 苹果、日落果、鱼肉、星螺 | - | | +| 璃月-璃月港 | 阿桂 | - | 清心、琉璃袋、马尾、莲蓬、冰雾花花朵、烈焰花花蕊 | - | | +| 璃月-琼玑野 | 朱老板 | 大碗茶 | - | - | 稀少商品 | +| 璃月-望舒客栈 | 菲尔戈黛特 | - | 松茸、霓裳花、琉璃袋 | 黄油、香肠 | | +| 璃月-石门 | 老周叔 | 大碗茶 | - | - | 稀少商品 | +| 璃月-轻策庄 | 小白 | - | 豆腐、杏仁、霓裳花 | 琉璃百合(每月刷新) | | +| 璃月-轻策庄 | 凯叔 | 大碗茶 | - | - | 稀少商品 | +| 璃月-遗珑埠 | 丰泰 | 稻米、豆腐 | 清水玉、石珀、夜泊石、琉璃袋、霓裳花、绝云椒椒、沉玉仙茗 | 蟹黄 | | +| 璃月-遗珑埠 | 连芳 | - | 沉玉仙茗 | - | | +| 稻妻-离岛 | 小畑 | 螃蟹、鱼肉、虾仁 | 海灵芝 | - | | +| 稻妻-离岛 | 秋月 | 铁块、白铁块、电气水晶 | - | - | | +| 稻妻-离岛 | 山城健太 | 鳗肉 | 珊瑚真珠 | 幸运儿之杯、幸运儿鹰羽、幸运儿绿花、幸运儿银冠、幸运儿沙漏 | 狗粮商人 | +| 稻妻-离岛 | 卡琵莉亚 | - | 蒲公英籽 | - | | +| 稻妻-白狐之野 | 若紫 | - | - | 「四方八方之网」 | | +| 稻妻-稻妻城 | 葵 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦、稻米、虾仁、豆腐 | 鸣草 | - | | +| 稻妻-稻妻城 | 志村勘兵卫 | 鱼肉、螃蟹 | 海草、堇瓜、白萝卜 | 香肠、培根、面粉、糖 | | +| 稻妻-稻妻城 | 智树 | 团子牛奶 | - | - | 稀少商品 | +| 稻妻-稻妻城 | 木南杏奈 | 特制风味烤蘑菇披萨 | - | - | 稀少商品 | +| 稻妻-海祇岛 | 清子 | - | - | 牛奶、番茄、土豆、小麦、豆腐 | | +| 须弥-化城郭 | 阿什帕齐 | 兽肉、禽肉 | 鸟蛋、树王圣体菇 | 香辛料 | | +| 须弥-须弥城 | 朱特 | - | 香辛果、帕蒂沙兰 | 香辛料 | | +| 须弥-须弥城 | 阿夫辛 | - | - | 冒险家金杯、冒险家尾羽、冒险家头带、冒险家之花、冒险家怀表 | 狗粮商人 | +| 须弥-须弥城 | 珀姆 | 鱼肉、螃蟹、虾仁 | 海草 | - | | +| 须弥-须弥城 | 哈马维 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦、稻米、豆腐、虾仁 | 香辛果、墩墩桃 | - | | +| 须弥-须弥城-兰巴德酒馆 | 兰巴德 | 鱼肉、螃蟹、秃秃豆 | 星蕈 | 面粉、香肠、培根、香辛料、糖 | 独立地图 | +| 须弥-须弥城-普斯帕咖啡馆 | 恩忒卡 | 咖啡豆 | - | - | 独立地图 | +| 须弥-奥摩斯港 | 拉玛 | 盐、胡椒 | - | 香辛料、糖、黄油、奶酪 | | +| 须弥-奥摩斯港 | 布特罗斯 | 鱼肉、螃蟹、虾仁 | - | - | | +| 须弥-奥摩斯港 | 秋蔚 | - | 水晶块、石珀、夜泊石、霓裳花 | - | | +| 须弥-奥摩斯港 | 巴巴克 | - | 慕风蘑菇、蒲公英籽、琉璃袋、清心、鸣草、珊瑚真珠 | - | | +| 须弥-桓那兰那(梦境) | 兰玛尼 | - | 日落果、香辛果、墩墩桃、树王圣体菇、劫波莲 | - | 桓那兰那(梦境) | +| 须弥-阿如村 | 阿扎莱 | 鱼肉、兽肉、秃秃豆 | 星蕈、枣椰、墩墩桃 | 面粉、香辛料、糖 | 黑心商人 | +| 枫丹-枫丹廷 | 布希柯 | 枫达、盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦、秃秃豆、杏仁、发酵果实汁 | 蘑菇、茉洁草 | - | | +| 枫丹-枫丹廷 | 阿鲁埃 | 枫达、咖啡豆 | - | - | | +| 枫丹-枫丹廷 | 路易 | 枫达 | - | - | | +| 枫丹-枫丹廷 | 欧仁妮 | 番茄、卷心菜 | 泡泡桔、茉洁草、日落果、墩墩桃、枣椰、落落莓、虹彩蔷薇 | - | | +| 枫丹-枫丹廷-德波大饭店 | 桑格内蒂 | 枫达 | - | 面粉、奶油、黄油、火腿、糖、蟹黄、果酱、奶酪、培根、香肠 | 独立地图 | +| 枫丹-枫丹廷-灰河 | 克洛莎 | - | - | 幸运儿之杯、幸运儿鹰羽、幸运儿银冠、幸运儿绿花、幸运儿沙漏 | 狗粮商人 | +| 枫丹-白淞镇 | 安特曼 | 鱼肉、螃蟹、虾仁 | 海露花、汐藻、苍晶螺 | - | | +| 枫丹-锈舵酒馆 | 皮托 | 牛奶 | - | 培根、火腿、香肠、奶酪 | 黑心商人 | +| 纳塔-圣火竞技场 | 钦特利 | 土豆 | 烛伞蘑菇、颗粒果、苦种、烬芯花、青蜜莓、肉龙掌 | - | | +| 纳塔-圣火竞技场 | 艾库瓦 | - | - | 幸运儿之杯、幸运儿鹰羽、幸运儿银冠、幸运儿绿花、幸运儿沙漏 | 狗粮商人 | +| 纳塔-圣火竞技场 | 布纳马 | 盐、胡椒、小麦、洋葱、牛奶、番茄、卷心菜、土豆、秃秃豆 | 蘑菇 | - | | +| 纳塔-圣火竞技场 | 夏安卡 | - | - | 面粉、奶油、黄油、火腿、糖、蟹黄、果酱、奶酪、培根、香肠 | | +| 纳塔-坚岩隘谷 | 伊蜜 | - | 铁块、白铁块、水晶块、萃凝晶、澄晶实 | - | | +| 纳塔-悠悠度假村 | 穆托莉娜 | - | 灼灼彩菊、肉龙掌、云岩裂叶、浪沫羽鳃 | - | | +| 挪德卡莱-那夏镇 | 采若 | 盐、胡椒、洋葱、牛奶、番茄、卷心菜、土豆、小麦、黑麦 | - | - | | +| 挪德卡莱-那夏镇 | 丽切娅 | - | 甜甜花、宿影花、霜盏花 | - | | +| 挪德卡莱-那夏镇 | 卡嘉 | - | - | 面粉、奶油、熏禽肉、黄油、火腿、糖、蟹黄、果酱、奶酪、培根、香肠 | | +| 挪德卡莱-那夏镇 | 雷科 | - | - | 幸运儿之杯、幸运儿鹰羽、幸运儿银冠、幸运儿绿花、幸运儿沙漏 | 狗粮商人 | +| 挪德卡莱-那夏镇-旗舰 | 德米安 | 「皮拉米达的夜莺」、边陲之地、野浆果之路 | - | - | 稀少商品、独立地图 | +| 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | 黑心商人 | + +### **以下为有效标签** +- **国家**:蒙德、璃月、稻妻、须弥、枫丹、纳塔、挪德卡莱 +- **地区**:风起地、清泉镇、蒙德城、璃月港、离岛、稻妻城、海祇岛等 +- **小地图**:天使的馈赠、兰巴德酒馆、德波大饭店、灰河、锈舵酒馆等 +- **商人**:克罗丽丝、神奇的霍普金斯、杜拉夫等(所有商人名) +- **移动**:指商人会移动,有机会购买失败 +- **稀少商品**:指稀少商品 +- **独立地图**:指需要进入独立空间的特殊地图,这些地图部份路径无法使用地图追踪功能,使用简易脚本到商人位置、有机会购买失败 +- **黑心商人**:指没有折扣的商人,价格较贵的商人 +- **狗粮商人**:指每周四刷新商品的狗粮商人 + +### **欢迎补充商人与商品与标签** + +## 🔧 添加新商品 + +### 1. 添加商品图片 +1. 截图商品图标,尺寸建议 90×90 像素 +2. 保存为 PNG 格式,放在 `assets/images/` 目录下 +3. 文件名建议使用中文,如:`新商品.png` + +### 2. 添加到商人 +在 `assets/npcs.json` 中找到对应商人,添加到相应的商品列表中: + +```json +"_1d_foods": ["新商品"] // 每天刷新商品 +"_3d_foods": ["新商品"] // 3天刷新商品 +"_7d_foods": ["新商品"] // 每周刷新商品 +``` + +### 3. 更新商人与商品支持表 +将新商品添加到本文件的商人与商品支持表中,方便其他用户查看。 + +## 🆕 添加新商人 + +### 1. 录制路径 +1. 使用路径录制工具录制前往商人的路径 +2. 保存为 JSON 文件,命名格式:`地区-位置-商人名.json` +3. 放在 `assets/path/` 目录下 + +### 2. 添加商人数据 +在 `assets/data/npcs.json` 中添加: + +```json +"new_npc": { + "name": "新商人名", + "enable": true, + "page": 2, // 商店总页数 + "time": "any", // any/day/night + "path": "assets/path/地区-位置-新商人名.json", + "_1d_foods": ["商品1", "商品2"], // 每天刷新 + "_3d_foods": ["商品3"], // 3天刷新 + "_7d_foods": ["商品4"], // 每周刷新 + "tags": ["地区", "黑心商人"] // 商人标签 +} +``` + +### 3. 参数说明 +- `page`: 商店的总页数 +- `time`: 商人出现时间 + - `any`: 全天出现 + - `day`: + - `night`: +- `path`: 路径文件位置 + +### 4. 更新商人与商品支持表 +将新商人添加到本文件的商人与商品支持表中。 + +## ❓ 常见问题 + +### Q: 脚本不购买任何商品? +A: 检查: +1. 是否在设置中填写了要购买的商品 +2. 商品名称是否正确(参考上方表格) +3. 游戏分辨率是否为 1920×1080 +4. 角色是否在单人模式 +5. 是否有购买记录导致商品未刷新 + +### Q: 如何知道支持哪些商品名称? +A: 查看: +1. 本文件中的"商人与商品支持表" +2. `assets/data/foods.json` 文件中的 `name` 字段 +3. 运行脚本时的日志输出会显示"用户启用了以下商品" + +### Q: 为什么跳过某些商人? +A: 可能原因: +1. 该商人没有你要购买的商品 +2. 商人在禁用列表中 +3. 购买记录显示商品还未到刷新时间 + +### Q: 如何重置购买记录? +A: 有几种方法: +1. 启用"无视购买记录强制购买"选项 +2. 删除 `record/你的账号名/records.json` 文件 +3. 等待商品自然刷新 + +### Q: 每天什么时候刷新? +A: 游戏内的刷新时间是**每天凌晨4点**。脚本会考虑这个时间点: +- 如果当前时间在4点前,视为前一天 +- 购买记录基于4点刷新时间计算 + +## 🤝 贡献指南 + +欢迎提交新的商人和商品配置! + +1. **提交新的商人**:包含路径文件和商人数据 +2. **提交新的商品**:包含图片和商品数据 +3. **更新文档**:记得更新本README中的商人信息表 +4. **标签补充**:欢迎为现有商人添加合适的标签 +5. **问题反馈**:提供详细的重现步骤和日志 + +--- + +> 注意:本脚本仅供学习与研究使用,请遵守游戏使用条款。 + +`` diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/Exit.png b/repo/js/自动购买商品/assets/images/Exit.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/Exit.png rename to repo/js/自动购买商品/assets/images/Exit.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/buyBtn.png b/repo/js/自动购买商品/assets/images/buyBtn.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/buyBtn.png rename to repo/js/自动购买商品/assets/images/buyBtn.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/「四方八方之网」.png b/repo/js/自动购买商品/assets/images/「四方八方之网」.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/「四方八方之网」.png rename to repo/js/自动购买商品/assets/images/「四方八方之网」.png diff --git a/repo/js/自动购买商品/assets/images/「皮拉米达的夜莺」.png b/repo/js/自动购买商品/assets/images/「皮拉米达的夜莺」.png new file mode 100644 index 0000000000000000000000000000000000000000..ec9bd20c4457e7cb5182e31db725ce37d240561d GIT binary patch literal 8498 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 literal 0 HcmV?d00001 diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/云岩裂叶.png b/repo/js/自动购买商品/assets/images/云岩裂叶.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/云岩裂叶.png rename to repo/js/自动购买商品/assets/images/云岩裂叶.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/兽肉.png b/repo/js/自动购买商品/assets/images/兽肉.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/兽肉.png rename to repo/js/自动购买商品/assets/images/兽肉.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/冒险家之花.png b/repo/js/自动购买商品/assets/images/冒险家之花.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/冒险家之花.png rename to repo/js/自动购买商品/assets/images/冒险家之花.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/冒险家头带.png b/repo/js/自动购买商品/assets/images/冒险家头带.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/冒险家头带.png rename to repo/js/自动购买商品/assets/images/冒险家头带.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/冒险家尾羽.png b/repo/js/自动购买商品/assets/images/冒险家尾羽.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/冒险家尾羽.png rename to repo/js/自动购买商品/assets/images/冒险家尾羽.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/冒险家怀表.png b/repo/js/自动购买商品/assets/images/冒险家怀表.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/冒险家怀表.png rename to repo/js/自动购买商品/assets/images/冒险家怀表.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/冒险家金杯.png b/repo/js/自动购买商品/assets/images/冒险家金杯.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/冒险家金杯.png rename to repo/js/自动购买商品/assets/images/冒险家金杯.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/冰钩钩果汁.png b/repo/js/自动购买商品/assets/images/冰钩钩果汁.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/冰钩钩果汁.png rename to repo/js/自动购买商品/assets/images/冰钩钩果汁.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/冰雾花花朵.png b/repo/js/自动购买商品/assets/images/冰雾花花朵.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/冰雾花花朵.png rename to repo/js/自动购买商品/assets/images/冰雾花花朵.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/劫波莲.png b/repo/js/自动购买商品/assets/images/劫波莲.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/劫波莲.png rename to repo/js/自动购买商品/assets/images/劫波莲.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/卷心菜.png b/repo/js/自动购买商品/assets/images/卷心菜.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/卷心菜.png rename to repo/js/自动购买商品/assets/images/卷心菜.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/发酵果实汁.png b/repo/js/自动购买商品/assets/images/发酵果实汁.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/发酵果实汁.png rename to repo/js/自动购买商品/assets/images/发酵果实汁.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/咖啡豆.png b/repo/js/自动购买商品/assets/images/咖啡豆.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/咖啡豆.png rename to repo/js/自动购买商品/assets/images/咖啡豆.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/嘟嘟莲.png b/repo/js/自动购买商品/assets/images/嘟嘟莲.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/嘟嘟莲.png rename to repo/js/自动购买商品/assets/images/嘟嘟莲.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/团子牛奶.png b/repo/js/自动购买商品/assets/images/团子牛奶.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/团子牛奶.png rename to repo/js/自动购买商品/assets/images/团子牛奶.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/土豆.png b/repo/js/自动购买商品/assets/images/土豆.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/土豆.png rename to repo/js/自动购买商品/assets/images/土豆.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/圣水.png b/repo/js/自动购买商品/assets/images/圣水.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/圣水.png rename to repo/js/自动购买商品/assets/images/圣水.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/培根.png b/repo/js/自动购买商品/assets/images/培根.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/培根.png rename to repo/js/自动购买商品/assets/images/培根.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/堇瓜.png b/repo/js/自动购买商品/assets/images/堇瓜.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/堇瓜.png rename to repo/js/自动购买商品/assets/images/堇瓜.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/塞西莉亚花.png b/repo/js/自动购买商品/assets/images/塞西莉亚花.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/塞西莉亚花.png rename to repo/js/自动购买商品/assets/images/塞西莉亚花.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/墩墩桃.png b/repo/js/自动购买商品/assets/images/墩墩桃.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/墩墩桃.png rename to repo/js/自动购买商品/assets/images/墩墩桃.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/夜泊石.png b/repo/js/自动购买商品/assets/images/夜泊石.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/夜泊石.png rename to repo/js/自动购买商品/assets/images/夜泊石.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/大碗茶.png b/repo/js/自动购买商品/assets/images/大碗茶.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/大碗茶.png rename to repo/js/自动购买商品/assets/images/大碗茶.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/奶油.png b/repo/js/自动购买商品/assets/images/奶油.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/奶油.png rename to repo/js/自动购买商品/assets/images/奶油.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/奶酪.png b/repo/js/自动购买商品/assets/images/奶酪.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/奶酪.png rename to repo/js/自动购买商品/assets/images/奶酪.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/宿影花.png b/repo/js/自动购买商品/assets/images/宿影花.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/宿影花.png rename to repo/js/自动购买商品/assets/images/宿影花.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/小灯草.png b/repo/js/自动购买商品/assets/images/小灯草.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/小灯草.png rename to repo/js/自动购买商品/assets/images/小灯草.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/小麦.png b/repo/js/自动购买商品/assets/images/小麦.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/小麦.png rename to repo/js/自动购买商品/assets/images/小麦.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/帕蒂沙兰.png b/repo/js/自动购买商品/assets/images/帕蒂沙兰.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/帕蒂沙兰.png rename to repo/js/自动购买商品/assets/images/帕蒂沙兰.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/幸运儿之杯.png b/repo/js/自动购买商品/assets/images/幸运儿之杯.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/幸运儿之杯.png rename to repo/js/自动购买商品/assets/images/幸运儿之杯.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/幸运儿沙漏.png b/repo/js/自动购买商品/assets/images/幸运儿沙漏.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/幸运儿沙漏.png rename to repo/js/自动购买商品/assets/images/幸运儿沙漏.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/幸运儿绿花.png b/repo/js/自动购买商品/assets/images/幸运儿绿花.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/幸运儿绿花.png rename to repo/js/自动购买商品/assets/images/幸运儿绿花.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/幸运儿银冠.png b/repo/js/自动购买商品/assets/images/幸运儿银冠.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/幸运儿银冠.png rename to repo/js/自动购买商品/assets/images/幸运儿银冠.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/幸运儿鹰羽.png b/repo/js/自动购买商品/assets/images/幸运儿鹰羽.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/幸运儿鹰羽.png rename to repo/js/自动购买商品/assets/images/幸运儿鹰羽.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/微光角菌.png b/repo/js/自动购买商品/assets/images/微光角菌.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/微光角菌.png rename to repo/js/自动购买商品/assets/images/微光角菌.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/慕风蘑菇.png b/repo/js/自动购买商品/assets/images/慕风蘑菇.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/慕风蘑菇.png rename to repo/js/自动购买商品/assets/images/慕风蘑菇.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/日落果.png b/repo/js/自动购买商品/assets/images/日落果.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/日落果.png rename to repo/js/自动购买商品/assets/images/日落果.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/星蕈.png b/repo/js/自动购买商品/assets/images/星蕈.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/星蕈.png rename to repo/js/自动购买商品/assets/images/星蕈.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/星螺.png b/repo/js/自动购买商品/assets/images/星螺.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/星螺.png rename to repo/js/自动购买商品/assets/images/星螺.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/杏仁.png b/repo/js/自动购买商品/assets/images/杏仁.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/杏仁.png rename to repo/js/自动购买商品/assets/images/杏仁.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/松茸.png b/repo/js/自动购买商品/assets/images/松茸.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/松茸.png rename to repo/js/自动购买商品/assets/images/松茸.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/果酱.png b/repo/js/自动购买商品/assets/images/果酱.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/果酱.png rename to repo/js/自动购买商品/assets/images/果酱.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/枣椰.png b/repo/js/自动购买商品/assets/images/枣椰.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/枣椰.png rename to repo/js/自动购买商品/assets/images/枣椰.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/枫达.png b/repo/js/自动购买商品/assets/images/枫达.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/枫达.png rename to repo/js/自动购买商品/assets/images/枫达.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/树王圣体菇.png b/repo/js/自动购买商品/assets/images/树王圣体菇.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/树王圣体菇.png rename to repo/js/自动购买商品/assets/images/树王圣体菇.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/树莓薄荷饮.png b/repo/js/自动购买商品/assets/images/树莓薄荷饮.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/树莓薄荷饮.png rename to repo/js/自动购买商品/assets/images/树莓薄荷饮.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/气泡酸莓汁.png b/repo/js/自动购买商品/assets/images/气泡酸莓汁.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/气泡酸莓汁.png rename to repo/js/自动购买商品/assets/images/气泡酸莓汁.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/水晶块.png b/repo/js/自动购买商品/assets/images/水晶块.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/水晶块.png rename to repo/js/自动购买商品/assets/images/水晶块.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/汐藻.png b/repo/js/自动购买商品/assets/images/汐藻.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/汐藻.png rename to repo/js/自动购买商品/assets/images/汐藻.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/沉玉仙茗.png b/repo/js/自动购买商品/assets/images/沉玉仙茗.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/沉玉仙茗.png rename to repo/js/自动购买商品/assets/images/沉玉仙茗.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/泡泡桔.png b/repo/js/自动购买商品/assets/images/泡泡桔.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/泡泡桔.png rename to repo/js/自动购买商品/assets/images/泡泡桔.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/洋葱.png b/repo/js/自动购买商品/assets/images/洋葱.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/洋葱.png rename to repo/js/自动购买商品/assets/images/洋葱.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/浪沫羽鳃.png b/repo/js/自动购买商品/assets/images/浪沫羽鳃.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/浪沫羽鳃.png rename to repo/js/自动购买商品/assets/images/浪沫羽鳃.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/海灵芝.png b/repo/js/自动购买商品/assets/images/海灵芝.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/海灵芝.png rename to repo/js/自动购买商品/assets/images/海灵芝.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/海草.png b/repo/js/自动购买商品/assets/images/海草.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/海草.png rename to repo/js/自动购买商品/assets/images/海草.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/海露花.png b/repo/js/自动购买商品/assets/images/海露花.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/海露花.png rename to repo/js/自动购买商品/assets/images/海露花.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/清心.png b/repo/js/自动购买商品/assets/images/清心.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/清心.png rename to repo/js/自动购买商品/assets/images/清心.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/清水玉.png b/repo/js/自动购买商品/assets/images/清水玉.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/清水玉.png rename to repo/js/自动购买商品/assets/images/清水玉.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/游医的怀钟.png b/repo/js/自动购买商品/assets/images/游医的怀钟.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/游医的怀钟.png rename to repo/js/自动购买商品/assets/images/游医的怀钟.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/游医的方巾.png b/repo/js/自动购买商品/assets/images/游医的方巾.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/游医的方巾.png rename to repo/js/自动购买商品/assets/images/游医的方巾.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/游医的枭羽.png b/repo/js/自动购买商品/assets/images/游医的枭羽.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/游医的枭羽.png rename to repo/js/自动购买商品/assets/images/游医的枭羽.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/游医的药壶.png b/repo/js/自动购买商品/assets/images/游医的药壶.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/游医的药壶.png rename to repo/js/自动购买商品/assets/images/游医的药壶.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/游医的银莲.png b/repo/js/自动购买商品/assets/images/游医的银莲.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/游医的银莲.png rename to repo/js/自动购买商品/assets/images/游医的银莲.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/澄晶实.png b/repo/js/自动购买商品/assets/images/澄晶实.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/澄晶实.png rename to repo/js/自动购买商品/assets/images/澄晶实.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/火腿.png b/repo/js/自动购买商品/assets/images/火腿.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/火腿.png rename to repo/js/自动购买商品/assets/images/火腿.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/灼灼彩菊.png b/repo/js/自动购买商品/assets/images/灼灼彩菊.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/灼灼彩菊.png rename to repo/js/自动购买商品/assets/images/灼灼彩菊.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/烈焰花花蕊.png b/repo/js/自动购买商品/assets/images/烈焰花花蕊.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/烈焰花花蕊.png rename to repo/js/自动购买商品/assets/images/烈焰花花蕊.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/烛伞蘑菇.png b/repo/js/自动购买商品/assets/images/烛伞蘑菇.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/烛伞蘑菇.png rename to repo/js/自动购买商品/assets/images/烛伞蘑菇.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/烬芯花.png b/repo/js/自动购买商品/assets/images/烬芯花.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/烬芯花.png rename to repo/js/自动购买商品/assets/images/烬芯花.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/熏禽肉.png b/repo/js/自动购买商品/assets/images/熏禽肉.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/熏禽肉.png rename to repo/js/自动购买商品/assets/images/熏禽肉.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/牛奶.png b/repo/js/自动购买商品/assets/images/牛奶.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/牛奶.png rename to repo/js/自动购买商品/assets/images/牛奶.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/特制风味烤蘑菇披萨.png b/repo/js/自动购买商品/assets/images/特制风味烤蘑菇披萨.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/特制风味烤蘑菇披萨.png rename to repo/js/自动购买商品/assets/images/特制风味烤蘑菇披萨.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/珊瑚真珠.png b/repo/js/自动购买商品/assets/images/珊瑚真珠.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/珊瑚真珠.png rename to repo/js/自动购买商品/assets/images/珊瑚真珠.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/琉璃百合.png b/repo/js/自动购买商品/assets/images/琉璃百合.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/琉璃百合.png rename to repo/js/自动购买商品/assets/images/琉璃百合.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/琉璃袋.png b/repo/js/自动购买商品/assets/images/琉璃袋.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/琉璃袋.png rename to repo/js/自动购买商品/assets/images/琉璃袋.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/琉鳞石.png b/repo/js/自动购买商品/assets/images/琉鳞石.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/琉鳞石.png rename to repo/js/自动购买商品/assets/images/琉鳞石.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/甜甜花.png b/repo/js/自动购买商品/assets/images/甜甜花.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/甜甜花.png rename to repo/js/自动购买商品/assets/images/甜甜花.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/电气水晶.png b/repo/js/自动购买商品/assets/images/电气水晶.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/电气水晶.png rename to repo/js/自动购买商品/assets/images/电气水晶.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/番茄.png b/repo/js/自动购买商品/assets/images/番茄.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/番茄.png rename to repo/js/自动购买商品/assets/images/番茄.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/白萝卜.png b/repo/js/自动购买商品/assets/images/白萝卜.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/白萝卜.png rename to repo/js/自动购买商品/assets/images/白萝卜.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/白铁块.png b/repo/js/自动购买商品/assets/images/白铁块.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/白铁块.png rename to repo/js/自动购买商品/assets/images/白铁块.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/盐.png b/repo/js/自动购买商品/assets/images/盐.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/盐.png rename to repo/js/自动购买商品/assets/images/盐.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/石珀.png b/repo/js/自动购买商品/assets/images/石珀.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/石珀.png rename to repo/js/自动购买商品/assets/images/石珀.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/禽肉.png b/repo/js/自动购买商品/assets/images/禽肉.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/禽肉.png rename to repo/js/自动购买商品/assets/images/禽肉.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/秃秃豆.png b/repo/js/自动购买商品/assets/images/秃秃豆.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/秃秃豆.png rename to repo/js/自动购买商品/assets/images/秃秃豆.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/稻米.png b/repo/js/自动购买商品/assets/images/稻米.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/稻米.png rename to repo/js/自动购买商品/assets/images/稻米.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/竹笋.png b/repo/js/自动购买商品/assets/images/竹笋.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/竹笋.png rename to repo/js/自动购买商品/assets/images/竹笋.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/糖.png b/repo/js/自动购买商品/assets/images/糖.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/糖.png rename to repo/js/自动购买商品/assets/images/糖.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/绝云椒椒.png b/repo/js/自动购买商品/assets/images/绝云椒椒.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/绝云椒椒.png rename to repo/js/自动购买商品/assets/images/绝云椒椒.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/肉龙掌.png b/repo/js/自动购买商品/assets/images/肉龙掌.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/肉龙掌.png rename to repo/js/自动购买商品/assets/images/肉龙掌.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/胡椒.png b/repo/js/自动购买商品/assets/images/胡椒.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/胡椒.png rename to repo/js/自动购买商品/assets/images/胡椒.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/胡萝卜.png b/repo/js/自动购买商品/assets/images/胡萝卜.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/胡萝卜.png rename to repo/js/自动购买商品/assets/images/胡萝卜.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/苍晶螺.png b/repo/js/自动购买商品/assets/images/苍晶螺.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/苍晶螺.png rename to repo/js/自动购买商品/assets/images/苍晶螺.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/苦种.png b/repo/js/自动购买商品/assets/images/苦种.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/苦种.png rename to repo/js/自动购买商品/assets/images/苦种.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/苹果.png b/repo/js/自动购买商品/assets/images/苹果.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/苹果.png rename to repo/js/自动购买商品/assets/images/苹果.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/苹果酿.png b/repo/js/自动购买商品/assets/images/苹果酿.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/苹果酿.png rename to repo/js/自动购买商品/assets/images/苹果酿.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/茉洁草.png b/repo/js/自动购买商品/assets/images/茉洁草.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/茉洁草.png rename to repo/js/自动购买商品/assets/images/茉洁草.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/莲蓬.png b/repo/js/自动购买商品/assets/images/莲蓬.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/莲蓬.png rename to repo/js/自动购买商品/assets/images/莲蓬.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/萃凝晶.png b/repo/js/自动购买商品/assets/images/萃凝晶.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/萃凝晶.png rename to repo/js/自动购买商品/assets/images/萃凝晶.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/落落莓.png b/repo/js/自动购买商品/assets/images/落落莓.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/落落莓.png rename to repo/js/自动购买商品/assets/images/落落莓.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/蒲公英籽.png b/repo/js/自动购买商品/assets/images/蒲公英籽.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/蒲公英籽.png rename to repo/js/自动购买商品/assets/images/蒲公英籽.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/薄荷.png b/repo/js/自动购买商品/assets/images/薄荷.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/薄荷.png rename to repo/js/自动购买商品/assets/images/薄荷.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/蘑菇.png b/repo/js/自动购买商品/assets/images/蘑菇.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/蘑菇.png rename to repo/js/自动购买商品/assets/images/蘑菇.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/虹彩蔷薇.png b/repo/js/自动购买商品/assets/images/虹彩蔷薇.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/虹彩蔷薇.png rename to repo/js/自动购买商品/assets/images/虹彩蔷薇.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/虾仁.png b/repo/js/自动购买商品/assets/images/虾仁.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/虾仁.png rename to repo/js/自动购买商品/assets/images/虾仁.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/螃蟹.png b/repo/js/自动购买商品/assets/images/螃蟹.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/螃蟹.png rename to repo/js/自动购买商品/assets/images/螃蟹.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/蟹黄.png b/repo/js/自动购买商品/assets/images/蟹黄.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/蟹黄.png rename to repo/js/自动购买商品/assets/images/蟹黄.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/豆腐.png b/repo/js/自动购买商品/assets/images/豆腐.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/豆腐.png rename to repo/js/自动购买商品/assets/images/豆腐.png diff --git a/repo/js/自动购买商品/assets/images/边陲之地.png b/repo/js/自动购买商品/assets/images/边陲之地.png new file mode 100644 index 0000000000000000000000000000000000000000..7a9882052072f96f9d9ba95c657c56e1489eb520 GIT binary patch literal 11063 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 literal 0 HcmV?d00001 diff --git a/repo/js/自动购买商品/assets/images/野浆果之路.png b/repo/js/自动购买商品/assets/images/野浆果之路.png new file mode 100644 index 0000000000000000000000000000000000000000..e0415c4311cfe29e17e893a0f07cf167d886932f GIT binary patch literal 10863 zcmV-#Dv;HQP)PyA07*naRCr#UeFuCU)t&A)?RH&NOO|ZO#)V>=8dDrdi~~4eY@D*mV>cZF0Rw4- zwU_^LvgYHCIdFPuOA}L-VcEbK%{5@P}yRIud_uBuES4Efg`_*3yDia z7M6n?!B9Rhu#a$>!Q0Z}#^=cpV>Tq6j*VG?vgX<=*mxB_Y(BThy%+btIFfZeN&+W%p8)Bxf$(skP=HkF49p6BFBWnr z__0;xMnFN7-KNgsv-w3X!{fa7@gq#455>AtfRbYcv%qu}D4;78ePS z(!{0Q7hYGy*r@qUkLc2Z@DGc)>$@JHsnO&rE+ECoxWm!6F5Pe?kCD@iu0HyKM?_~c zJqyQkDR&Jo3Z$5pz>~V`wAJJb5Q|IEHLf2zL_Uj7CWM!O=vWr!8Y!$i^%T7P#$N0= zdp75tZ^s7~8yh1~@fR7dnkg=b<7vDNEi$l1VK#y|$k~@%isT-ekYY|H zh9X?F4vuvKJj0fZ#q(fJRdC~F@5kuq2)^^=<4CG1K6=TenB6)HU;XhT$h0*xMnS*) z=@!c0QPy7n$!IJV)>qFoIcK7viBE~i$&{rI_Vjdw8_Gb^&vKWi3n@4t=Zb=g34nsJ zF>i<)r$;iom>7MNpCCeo1SCE@&qHRif?IF+93K4E|3#l;)A3z#{zb?o41E2uUm@Ap z2vs9M@*pXVS$5GVkYb=SdS|T4Ap?v7$nl!K4CFX9YLWE}nDK2N5LudzKgJ0~)}~b# z2gdhNEtQb6CQw!ykZ#O}9zqgTK(WaAJ=ms+CP%@l(@sM!spDHuZb7o82}WTGw_STZ zUVP;x{9?y;=*c8hjn*#Fph3qZGLR2t?e$lMl}%t>F&7E~0drsG!jefwT%ErcUyQ(- zWY?}6k?D)Xx;)2YTv1p-Xl}s=8ShkJTQ-`DdvMC)ES}yzfk`(H&#oe&x^T1{ntFP8 zHU>P$#aSJlSiRz%7#kghW83)V&;K14EI%8o-}x>K4IIX|{^OT0o3l`Ltxm{dbENh! za>KeCu4aaRRF@8G%V1??Ah{U|>;mc&A+Ms8=W82Tj3}Ul>Qu-2(cWUC;LWAnl7)p> z#Uie&s&E|##r}RI+##e5jT*7-y2v*s;adv++t84le-d2FMx*86rYo+-AOG-MWKtQN zeCp{qc<2!3%$tYjw?2=jw!etPtY&D2!QDEvdiGl|Qwk~49jjR}1=e0Ln&3vt1TqL|W$kJir3e_UX=cRZ>GopO0 zSY~2nAqx(^ZPQAI44V8sH8zF^HlB{M(F0cR&0$J+B#HJt11*YP!tX6oQ9m|;hZK1XEnGel&kpH!kIXI(eW_!1R8RA4oc9SiH!>`VVJe`xe^L^U#%Fh({iI6@PlM2*>sS zRf9`TrWsImol+BTs24r03Xsys+eoBUWb!J8`+)|<#7DXuESuYi;_wK5(mx9;-@g$< zqr-Ug_gnD#=rD|Yj=C`gF`znciXxpWtGx-3pSem-iE-9lKX%5fJG5pVgt^>h*G#z8 z8j_xe&ZcH8ZcpHZ&IC?BZ3#-=I4ZV-?w(a>c7`!nbkRFeLG!%r7<696M74(YY!9+2 z9qPyeY}@8x`Kha5B$Lqe1X2nxI5>oArHW^M^B{cRfss()XevBKgY5vW>tS)u$CXPn za4Z#Ov4Fo6(%6-}08hRA0@S8FG=qRozIkc*X6j}nv4&tPYd_0*B=<#XOFZ^4qvI8f zL^I-R71XMP;Fij0(=?oN;u5@L#kpv0osGjs4nuc#;OzOtZIbYO4`USzd&(u)MghuH z0>@=%u_!Hal>tFB2h?RrlyJ${M!BBxr zI*S~NnA@x%TPh*r*(hf+&~yXsX$2P^--f1!W=swof$6&V*{%|PURsPqCJmJ&B~@kL zb+}lRVDmIHL(!qE{Vcag=~IEh37INb1yOqNnuK#c*K*)Y6mjv2GjYj97vpcQ?Z)#j zZ^Oaiet5bD*LCrkm5q4!x#wVNssh{ApsEHYyb^Ysd(k+zfWh59sv`#Go#kM>Hi8`o z2C!^l8)l_@pd*LAT_%3_#4Z$zF2<%xP@p26NTMyPp~WPcLfSp)N0HQ1(y1#f#B z&@u;lDi8F%gu{~+jCmP+=h=hUlRW`?f`tVZx#|<=5R$r(hLskfglj*`V`N-YB!(#I zeJt9E6Eec=xh`s@GR~ggh1IJs!H@p)G3*@}fU2v|k_kRQ1?to|esS}=fkYnTB@e#d zfO7E=vJH7`+4)y2TH)b9@ePdb%ORI>fqW4M4^QH>B^{_#ebgKqrJe2A@&rjhNt$$Y z!$Ur0pet$Pe|30h*KIsEU}9Nk6RgP+)RWFY_4LbtTozNkf5iCVJ;)ku`2G`bV6>?l zM$(7?7zb0Z0$z7Tw15zIq3o+NkP?@qIfEa>S%x?vT|zFjy0(pFE$ujI$w~OpZ?@3j zKQCFstv6neXaD#t9^JYV z?I;f?F}vHx3$F~}H5Z^EbVxf|(@HX0kbN!GDSBBTg)Jk(A3 zW(`jZ93v7M0@oH9gGzy{nh?y;i`A_30}d>qARUM>^LEBs17KbO?K=UP69$4M!&TqiUMSpcyZ{HiXXRPE1+_IH=%A z{{*TvVEGwcn3ZeA(?1`DTh*W&I&zH)(kT@~{Vq;!v~k^%3k6y3nd zOXnh0$z%J|MYJ}ikWG?ws6vGg4IWl?CveG$b5ZIapc#B$)r8hQ7rt4BZYN=@I?-zJ z*W!G=Q8gb@c)&>tRfW0Dn% z72KWqPm*;>g8BHW^DtSp;EcbDD?hj%PHqW&y9BSaABN_`@F$?EI+R2!98ba4-rqu7 zG>%DY2vgM>`i93bQL3RhVPl}LjB44!@c0z+={&kSTd=El2xp$Q5L3HNG$V(E4kUaR zx}hNtA4{7QtUPNu6xT<2P9)}@1*bX+S8s!pXh*8yI2c9>@GSUF6>ha3Ti^H_4w=1Z zJFXukYXUU2NUM>tnBcxtql~t%CghfcO)j_M#z#hZIOR*<0k^m{{R>5xM8e1gmpvGmYa(QqV zzx?NKBQy9z_@jG}SiFjDloRRRu0d^B3_ZVuZfHRvlD!7YoW$7F6rO+mXGk|5L9)@r zkM)ROg_3H4;*_Cuu7Cm;T4g7^o=fqQEwACnfBiG` z1Q#Yq!Vp!QpnH7oj9W{>O+ciDj7VbS=dTIHcd;o>33*7nLkbXDq%}H$A3b<4Qu`l5 z(($2pEP-cape54qT^m}{DNs{$DS#AAQg4=Cg|8-In^pXA_iGroU#Cf{GUg$fNT4y% zf(y=Eg=De`ik3m&Xdi|~`p}i156!nxDGWm$-+@%Q50-1gbuAc`Q78!mmX@G<~rWaE6|OmRktlx8NfM%^8EDXW6j4 zDv>o{Rm&(k&9E$&zP7*rFIY5dF`8R)u+18%0OSGHY7(9~1z*cS8GRXsJp!Y#3#wCq zlA8^*EP-7agjX%XFCBn7`#f0HK2#3;8!}68!k_mv;v2tv3Pw5^6b`|pG0h$;8;+d38-)YEd@6{hw@KPZGx&LQ5)R}$1I~EF$Kjp z0W|~YX(;vxe7zZNdI1!B9M;qTyxIWVaz8w$3a>H-$F<-(73d8MprvO)RebpAR#=nU zVU=D%_LOhnyT5n^zdNu8T8dOSa%YD~x=gMU))+Y^*gy?;QmJb*(Sh3^Q%>tzVxU6; zAj-~F=bw)Y&S^(s=LTq66X5#rT_0`7eF%xxv!Q5dnrJ-eP<$KC$TLuL3*gp9;7*M| zOSV8!6GZ!`*62GmShW(gWE&LJ;MK;dz(H1APo$x$KA;+~%`&Qm18~d(aIGSYL?e=| zry<>OE~OyYG_i@EdpF^c7!>Suj#DmQ;(Y7D~ z$>uH1xIS5IZ2C!0|k z+=^OxFXeq|A_qO$f@ISvRO$BY3Cd+@g3~epSrE63TKQGDb`dQnK7?nU@5h6W{~GD$ zyaXb*L}5_OV}ojjVJ%UlKs_g81(bFFc&$%Bi2%u?qZDuHuS~O38ShdE&2cbKHE`D# zzlzH6*H9gM5?Z1i$>c(0vJ0W=Sqh-*5{m=0L<3y2NUf8)J2@w@NR`A;hgq*@!mSmd zak)(hB}7FhNlsG@l%`&RPgzw1R4qY4)Ad&9dK1jrzJNGW*5a07ReRys<7k<`8N2r- z@WqF}j#OtGRpwdcB4<|Sku0=v&4H``bnb+2%AAuMp|b9a8+<0&i+WNtaK>RIpC`RJ zLIfp6nh&RDB406a|1Gy6nb?EE_>W;LQ!tD!(}pM`5b@hKE5PhoiSmo!;r)j3F^jb5*k ztRR(M1j`wLZ%-kwv_e&rsJNr386=_TP?3O(G7Vc9D~XhsfrT1sS`C)wLsxQ0>9bKX zds*d5%K%|gL=m#!TN7}tQDl@(%K(po7RxbO}^#PD9>F~}ksbe)D`kDrfxHknf>|-R>;yDf+%Z5@Y;p3OC z$Lb3%!o<{{FjD>lppGJuZiJ%cC>0{^uIdU+9=f7H({u0$c<_->XA{X5rq>5wap-G? z(gDjKW_^+*-yj2%WM#hJ7D;R> zwM5c)MB*t)jCAZYv=NOfq+x#L4we+vOJ?8gooI++;9DkC0fRgwwg zK#CGlVL~t2d^amKB#I?`=#q7~_@c{DsO-f=@vo@*yPz8u(hWM_GuELSDh#a&9!l`3 zx?-S7dk3oiKGeKJP?Zckzeachn=lbfJQud@g6N@S@yb&kG^-gcxwFyUd?uAhTTN4a$3N zxq(@vAm4n|15=k8Lzy)aFgX>F>r?IzWPpz2u(ptD4c^E&-f`*~c<;J3Xl-i1WThWd zl|Gbfz0eY)$Te6lz#L1P}2G*a3;n#gT`0J@Sz%^LuGlQsc3H5*ft8mvkqbj(FA zIS$aGIp zP>yT(J7`GIY)#x)g$|OoxqQm1E8m5uSa94DD()Z(&TdrP!zdiFFt_nt@T;x3;p=yy zVeV|Ipx4_K6k`j?4VMKekPh9Tqd@X6dX8gh6ri!shw`3{#3Ci#jQ`4FB~Ls&HjtKN zg(QhUk`Lu}nTpA$6Jf-*ER;vaaoxr1aq8)d@y7TgNVQp5+;lk_j82S{e^2TcOgV?> z4k2ARpJikse~~e|z6!@zX_j|g8%qC)Sh4g*M#d6ABQz{&3y%vl z)N5RF4e?37eL$&>z$VbqcxdFYk>!5^B#DtcMTs9lOGu#RhMQp|KJq@Cpcja@pG0Vb z6qt$oxV8hUQbToM7!QB>9=OH;dd;68k!{5Cj;m3%1~FXSjw$Of$)`wZd6;eyS)&u4 zU!e(x0I48}39}ce$=Nu2!3KQ$U%!jTdtXDUAxHOM2sNw!CAB*TqCc6R$C4POLA*~$E`v#ASLrGwk3@hJ-c1QGk0H|fGTOr=c_yCo4@hcBki_M!Tmq!y(hO@?O=Ksh z@W?-X2fh8z;N{9sF?ZIPSkkx(+eUv3+p8d<<*=Y(1%|4xW6bP>uIR{XbKrOuiuM5X zsT9uZxfin2X{ z;o2SwWJb#&sbw)#-G`P$4;u6ql&w*Wjr3#P!q1^NR>rlPHzLv14vp|zL#NvYWKW&# z_Jv+X`DZA_Fxo>cF@9G?Xe2Bov7{M(@f)oq+CzW!gliLm8qGC~Z1D>P+q0ZcMK{x> zu37n#97v%ok-D7F7d9{-)>IYeb@t#3pZ+4AIrI}eSNl(Nq~@dQPSQ!Iv@B|F3C%_a z=BAgx_DuASZpHeJ8<198arMT}!E0-VN;dk5OKODJ6EKNuM{mbt&Hhwh;$>mX5=jyj zH$aI-TCu0iJ9vU5#2Y1oh)dshp}c1kiIH`HAt&oyay?`V(&G=pitCJnd zF9SRAf!bsV>zAE{D?f4t?tA?P40#7JKeY%uC!V9!sWUwvr?;$z3lH0hPvhNfm*eb~ zOYzD7y#bZheBdGE`~pbYp~hV_sHH{0K`m2=6hb=Wo+t#0z>;~{%=i9cIg4g$p0ME& zAlGmDH1Cg$<+|Vo$}nyOjh8~3lX6sWA>rqAKw$|+fFv#*E)09WHZh6MT=+gLddG3N z_4TVTCovC;a!Zj=6VMa`W9A56C_IC++E!u1abLmBn{PocYOMC9mPXvqW3)`ySZf~H z_a^<8gxZK3o}~HE3O!K1g$NN%9<0J)u`xgkvt@rzwR1=@3gK8Pa82 z5u(Va_Z{-s>;u)23EcIG>(Mj69i`GZ6eU5amT4BzJ@+(x^?|$bTCE6$fUgkMo!?o@ zCmu2iidOVy4xw%nr>8YEqi>OfJWV=`Q7AK;Gc9M)&Af97wAA#9KCk zMU4WPT3(?s)EpeekM8_Bh9_RbKp~4l@d!@n$)or6 z2|WDg-yxAr^CZI-J+l1#ew={sijDiAoUIoH*=zN|C5jUtv!qd-PXo})<<2H6%M^o!hEGhW19AH52`Hj1J( z3uEJNVEKtl@y+l25WC?p&d6gB3o!yvA)1C8RKoJ;F;a^nyR@_e9S1VV(a{_2o-~4pcN{TvUjo(ZymbN{+2fmT}$rtI^r1 zVYJ$ciNY?tec1~9<6ZZm+|dlf;J5t->XV!xIk2&C69}(7EC~>Wp-kUZ5$-EICj2}6 zOlT-%?9^M=Zrb2eRxhZ4;9J7z_@IeJ3fd5{E=io=#6qGRAw>x^LMro1`{+T?_Nl1x zzD1{E$&x%qs%vRO)TK5#+#UT>xZgbNvSYv$-; zL}5`Wxv;Q8vF#z`MP=>A4ZesgyoWEAc36E)1YOoJ6yC=fI98CU*e{H`iJxpDGLS63 zMPn8@hBO_Vm+!!;RVSfuB8|dCFD`!jYFzQ9jYu!*ra;oq#xrAV#5{m<7iN|v1%X(M zixnclxmb*p=Mk`|SZJWOwD!x_vIt6{jRtTblTk%HP<+H*@5mhK9RL6d9Z5t%RLnCH zib_C+$(}atLFA%vOjKat`&9gWTcQaUUwATlM>Uj+2eIbdcjL-Un~+`HLwO~u|736^ z0}2roLRsA%QQ^))%&4~xR9+LYUfx-iwqCf^u&WY_43=56sR?~rxHZj)EQT_R2{hgYHQ?v%Gz3?>b8u2k%Jb?8pFT*Eq+lcI<9x6&i zT~9V^=C(0Ap9Z8H6YC`&7DM@eVy|C>J85f0w66$NU0JvBI(BZ+roy)%1Heeeo&iWP z=&0kc=?ESw14*qi@XM%wQXowmOOV2v3s1%N!!=YUkKpnPKY&ke-h|wO9xjnl`;B5Y z%@V_r$<@g8#3Jfxp2Z^|iY?kO%gZ|h;*!i*NQ1y8vS%Z-A}$egQY*k@dl%C!l20iT zfrMR9Fva6&c#I5zoF3%J7|1QaCwM7b@~)Hd!hsU(>JTo!=!3Xs^KHm26hMl?x1K}B z{X=?IMm_BLDToIJlr2`n2V2tA6J_N~gcK%>DC=&$-VZzX#WQ($nI(h@`B^+MUM9d4 ztb*Jj5CnONe#M68__wxkC=u@AC;Xk{aSWC8^v$H5*h7Xajk8imgXih{vdkWi3? zBF*Y;CY{MQPKp>SMKqdhY@DH`aqc-M;}5+9Ky?CFz30QY`m47hyI>BFk^D3C6mc_~ zo`LHrHbJrpVj%-f04f$g9f=AB1L=vEkD9;l}&#gRx*P-IuBRH4V_vW!X4*xZ$x- zxML9GC4U#mkc?ZncSw`#TO^?2{{p+aEg_A_~1Hh%i!jDzhTd6d)Rj$ff0*ccf}V z68e~C=(1oOxCNtA@xEs(%Fk=jt2r&Hw)}Ci6{jO$&d2 z>dDx)V;^3$3(!;I4ulX)s(A`i2zX%N5mi`Ebf_){f7_0Gsu1okW&=2wX|d3a6jv!sH<2^BP!7ei_&gJ7{WKE z0U27;Q9rG$`IvMIoj6nmQ$EqLo^;wJZmi~t!Ne$e`2pu`bbHoup(`p3RY7;>T=ezrMOSAx(rE)L&pQWgZLRqJ z4}S{BQ7~GVfJKs*;?oXaRvbuo@*k5>IkQ#P2Qs!WGhCy-YuCM2Bumt-m&M2G#%3Y( zl1^aTK~^`=*3ybhI!!y(DwQcDlS$~RjZ0Qvgk{T?pryGPqhsT^}-5rR0)f~KFU4w%ZCkA+#AeL`M=I+^EKGMId6emrfZ zwjJbj16>^*&~=0JOGf&04Oy%_cR5a4ya4%p4w($OYYRAZ=rC^Ed><02Mr3mty0uGs zh)4?`y>Glcg`x3LxCvIv|4+Z_)#NjuE0!qf1Kp1bWIT4tCzv@F#jz%yOgLdjLmrL! zrr_aiWcz{uN}31A9SSYY4Vd5Eg_ZAIfu8QU0g#(+zZ;gTpuL^6HX9fj9)gibLZ?D6 z;mr<4C&o~t-4<^hOcAHw+9E{3tPkWgqm(j_gwix9XTX-McE(rH+SE!P97l*g0YM|T zuu*M9fn`~+OcS1K;nZa(V8f@bpz}INEb@+fY0Gmem4Rv2X!l02&rWZ0_mE7bad>nH z3MK7t4U(u^zlG1z3o&vW02#@q@sR{Yebge4Wx!OP@;o%_DP%JZG$xWhZwds-(Vk1) z({Wjom2K6~-PM83U-?pCk+Qg@^sXC5+{ERKu}!lMsvIyNxE zImhHU`2_W3^*YI58jx>FY@`E@g`46MQuVBVq6kG}a7dTP6()WE_b^3VV+ngcf-sz|jE>M2zVQZoPfl zI!Px)RH8recsRo#q}4hWAn93&)z}Ut+_Pr2BViawB$AXLl81oMmOL($kmp@=ceUg0 zuWsT%9>G2LKLkb3(9e-Mo2Es{x;9Y6^4-5cf=k<0n8Hq6yQixiciw(W z0OY;*KSb}#P7w8nFO1OQM@EM+RG45@kGQ$$7(9DMYdnU}28YPr84z;uVyH!hr<57C zSSi^uqe?{Gp~!72p5;JwJv8PT(3H<3nM|QttHCBMfVN42y#3aj>3RAN_v5|?zd@gU zK{n5bD_1HNOccgZvP>xC1|_~b`PO3NQFg=X%|PUp_^I$Q6S^)%m1ziTJRc!F9;XMP&&#JjesitA2k3Rvxeh)=HMIm z-boMNfAA1){>q)0w8@R`k|z2V6diHh{}G69wmKYw{{qNkC$dpP%?SVi002ovPDHLk FV1i6hTk!w@ literal 0 HcmV?d00001 diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/金鱼草.png b/repo/js/自动购买商品/assets/images/金鱼草.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/金鱼草.png rename to repo/js/自动购买商品/assets/images/金鱼草.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/钩钩果.png b/repo/js/自动购买商品/assets/images/钩钩果.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/钩钩果.png rename to repo/js/自动购买商品/assets/images/钩钩果.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/铁块.png b/repo/js/自动购买商品/assets/images/铁块.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/铁块.png rename to repo/js/自动购买商品/assets/images/铁块.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/霄灯.png b/repo/js/自动购买商品/assets/images/霄灯.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/霄灯.png rename to repo/js/自动购买商品/assets/images/霄灯.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/霓裳花.png b/repo/js/自动购买商品/assets/images/霓裳花.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/霓裳花.png rename to repo/js/自动购买商品/assets/images/霓裳花.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/霜盏花.png b/repo/js/自动购买商品/assets/images/霜盏花.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/霜盏花.png rename to repo/js/自动购买商品/assets/images/霜盏花.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/青蜜莓.png b/repo/js/自动购买商品/assets/images/青蜜莓.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/青蜜莓.png rename to repo/js/自动购买商品/assets/images/青蜜莓.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/面粉.png b/repo/js/自动购买商品/assets/images/面粉.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/面粉.png rename to repo/js/自动购买商品/assets/images/面粉.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/颗粒果.png b/repo/js/自动购买商品/assets/images/颗粒果.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/颗粒果.png rename to repo/js/自动购买商品/assets/images/颗粒果.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/风车菊.png b/repo/js/自动购买商品/assets/images/风车菊.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/风车菊.png rename to repo/js/自动购买商品/assets/images/风车菊.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/香肠.png b/repo/js/自动购买商品/assets/images/香肠.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/香肠.png rename to repo/js/自动购买商品/assets/images/香肠.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/香辛料.png b/repo/js/自动购买商品/assets/images/香辛料.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/香辛料.png rename to repo/js/自动购买商品/assets/images/香辛料.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/香辛果.png b/repo/js/自动购买商品/assets/images/香辛果.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/香辛果.png rename to repo/js/自动购买商品/assets/images/香辛果.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/马尾.png b/repo/js/自动购买商品/assets/images/马尾.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/马尾.png rename to repo/js/自动购买商品/assets/images/马尾.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/鱼肉.png b/repo/js/自动购买商品/assets/images/鱼肉.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/鱼肉.png rename to repo/js/自动购买商品/assets/images/鱼肉.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/鱼肉2.png b/repo/js/自动购买商品/assets/images/鱼肉2.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/鱼肉2.png rename to repo/js/自动购买商品/assets/images/鱼肉2.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/鳗肉.png b/repo/js/自动购买商品/assets/images/鳗肉.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/鳗肉.png rename to repo/js/自动购买商品/assets/images/鳗肉.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/鸟蛋.png b/repo/js/自动购买商品/assets/images/鸟蛋.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/鸟蛋.png rename to repo/js/自动购买商品/assets/images/鸟蛋.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/鸣草.png b/repo/js/自动购买商品/assets/images/鸣草.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/鸣草.png rename to repo/js/自动购买商品/assets/images/鸣草.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/黄油.png b/repo/js/自动购买商品/assets/images/黄油.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/黄油.png rename to repo/js/自动购买商品/assets/images/黄油.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/images/黑麦.png b/repo/js/自动购买商品/assets/images/黑麦.png similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/images/黑麦.png rename to repo/js/自动购买商品/assets/images/黑麦.png diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/npcs.json b/repo/js/自动购买商品/assets/npcs.json similarity index 98% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/npcs.json rename to repo/js/自动购买商品/assets/npcs.json index 2a9a64dc6..b1571768f 100644 --- a/repo/js/自动购买每天&3天&每周刷新商品/assets/npcs.json +++ b/repo/js/自动购买商品/assets/npcs.json @@ -632,6 +632,15 @@ "_thu_foods": ["幸运儿之杯", "幸运儿鹰羽", "幸运儿银冠", "幸运儿绿花", "幸运儿沙漏"], "tags": ["挪德卡莱", "那夏镇", "雷科", "狗粮商人"] }, + "德米安": { + "name": "德米安", + "enable": true, + "page": 1, + "time": "any", + "path": "assets/path/挪德卡莱-那夏镇-旗舰-德米安.json", + "_1d_foods": ["「皮拉米达的夜莺」", "边陲之地", "野浆果之路"], + "tags": ["挪德卡莱", "那夏镇", "旗舰", "德米安", "稀少商品", "独立地图"] + }, "科菲策": { "name": "科菲策", "enable": true, diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/挪德卡莱-皮拉米达城-科菲策.json b/repo/js/自动购买商品/assets/path/挪德卡莱-皮拉米达城-科菲策.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/挪德卡莱-皮拉米达城-科菲策.json rename to repo/js/自动购买商品/assets/path/挪德卡莱-皮拉米达城-科菲策.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/挪德卡莱-那夏镇-丽切娅.json b/repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-丽切娅.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/挪德卡莱-那夏镇-丽切娅.json rename to repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-丽切娅.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/挪德卡莱-那夏镇-卡嘉.json b/repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-卡嘉.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/挪德卡莱-那夏镇-卡嘉.json rename to repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-卡嘉.json diff --git a/repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-旗舰-德米安.json b/repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-旗舰-德米安.json new file mode 100644 index 000000000..17ff3231c --- /dev/null +++ b/repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-旗舰-德米安.json @@ -0,0 +1,67 @@ +{ + "info": { + "authors": [ + { + "links": "", + "name": "蜜柑魚" + } + ], + "bgi_version": "0.45.0", + "description": "", + "enable_monster_loot_split": false, + "last_modified_time": 1773665461435, + "map_match_method": "", + "map_name": "Teyvat", + "name": "挪德卡莱-那夏镇-旗舰-德米安", + "tags": [], + "type": "collect", + "version": "1.0" + }, + "positions": [ + { + "action": "", + "action_params": "", + "id": 1, + "move_mode": "walk", + "type": "teleport", + "x": 9452.8056640625, + "y": 1661.51123046875 + }, + { + "action": "", + "action_params": "", + "id": 2, + "move_mode": "run", + "type": "path", + "x": 9466.6640625, + "y": 1657.76513671875 + }, + { + "action": "", + "action_params": "", + "id": 3, + "move_mode": "run", + "type": "path", + "x": 9491.2451171875, + "y": 1609.6298828125 + }, + { + "action": "", + "action_params": "", + "id": 4, + "move_mode": "run", + "type": "path", + "x": 9465.5546875, + "y": 1596.20703125 + }, + { + "action": "combat_script", + "action_params": "wait(0.5),keypress(F),wait(0.2),keypress(F),wait(0.2),keypress(F),wait(7.5),w(1.5),wait(0.5),s(0.26),wait(0.5),d(0.2),wait(0.5),click(middle),wait(0.5),keydown(W),wait(1.3),keypress(SPACE),wait(1.55),keyup(W),wait(0.5),a(0.3),wait(0.5),click(middle),wait(0.5),keydown(W),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keypress(SPACE),wait(0.5),keyup(W),wait(0.5),s(0.3),d(1.1),w(0.2),wait(0.6)", + "id": 5, + "move_mode": "walk", + "type": "target", + "x": 9461.2763671875, + "y": 1598.33837890625 + } + ] +} \ No newline at end of file diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/挪德卡莱-那夏镇-采若.json b/repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-采若.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/挪德卡莱-那夏镇-采若.json rename to repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-采若.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/挪德卡莱-那夏镇-雷科.json b/repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-雷科.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/挪德卡莱-那夏镇-雷科.json rename to repo/js/自动购买商品/assets/path/挪德卡莱-那夏镇-雷科.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-布希柯.json b/repo/js/自动购买商品/assets/path/枫丹-枫丹廷-布希柯.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-布希柯.json rename to repo/js/自动购买商品/assets/path/枫丹-枫丹廷-布希柯.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-德波大饭店-桑格内蒂.json b/repo/js/自动购买商品/assets/path/枫丹-枫丹廷-德波大饭店-桑格内蒂.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-德波大饭店-桑格内蒂.json rename to repo/js/自动购买商品/assets/path/枫丹-枫丹廷-德波大饭店-桑格内蒂.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-欧仁妮.json b/repo/js/自动购买商品/assets/path/枫丹-枫丹廷-欧仁妮.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-欧仁妮.json rename to repo/js/自动购买商品/assets/path/枫丹-枫丹廷-欧仁妮.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-灰河-克洛莎.json b/repo/js/自动购买商品/assets/path/枫丹-枫丹廷-灰河-克洛莎.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-灰河-克洛莎.json rename to repo/js/自动购买商品/assets/path/枫丹-枫丹廷-灰河-克洛莎.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-路易.json b/repo/js/自动购买商品/assets/path/枫丹-枫丹廷-路易.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-路易.json rename to repo/js/自动购买商品/assets/path/枫丹-枫丹廷-路易.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-阿鲁埃.json b/repo/js/自动购买商品/assets/path/枫丹-枫丹廷-阿鲁埃.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-枫丹廷-阿鲁埃.json rename to repo/js/自动购买商品/assets/path/枫丹-枫丹廷-阿鲁埃.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-白淞镇-安特曼.json b/repo/js/自动购买商品/assets/path/枫丹-白淞镇-安特曼.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-白淞镇-安特曼.json rename to repo/js/自动购买商品/assets/path/枫丹-白淞镇-安特曼.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-锈舵酒馆-皮托.json b/repo/js/自动购买商品/assets/path/枫丹-锈舵酒馆-皮托.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/枫丹-锈舵酒馆-皮托.json rename to repo/js/自动购买商品/assets/path/枫丹-锈舵酒馆-皮托.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-望舒客栈-菲尔戈黛特.json b/repo/js/自动购买商品/assets/path/璃月-望舒客栈-菲尔戈黛特.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-望舒客栈-菲尔戈黛特.json rename to repo/js/自动购买商品/assets/path/璃月-望舒客栈-菲尔戈黛特.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-琼玑野-朱老板.json b/repo/js/自动购买商品/assets/path/璃月-琼玑野-朱老板.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-琼玑野-朱老板.json rename to repo/js/自动购买商品/assets/path/璃月-琼玑野-朱老板.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-东升.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-东升.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-东升.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-东升.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-博来.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-博来.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-博来.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-博来.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-卯师父.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-卯师父.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-卯师父.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-卯师父.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-张顺.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-张顺.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-张顺.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-张顺.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-琳琅.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-琳琅.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-琳琅.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-琳琅.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-石头.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-石头.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-石头.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-石头.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-老孙.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-老孙.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-老孙.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-老孙.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-老高.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-老高.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-老高.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-老高.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-长顺.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-长顺.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-长顺.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-长顺.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-阿山婆.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-阿山婆.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-阿山婆.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-阿山婆.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-阿桂.json b/repo/js/自动购买商品/assets/path/璃月-璃月港-阿桂.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-璃月港-阿桂.json rename to repo/js/自动购买商品/assets/path/璃月-璃月港-阿桂.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-石门-老周叔.json b/repo/js/自动购买商品/assets/path/璃月-石门-老周叔.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-石门-老周叔.json rename to repo/js/自动购买商品/assets/path/璃月-石门-老周叔.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-轻策庄-凯叔.json b/repo/js/自动购买商品/assets/path/璃月-轻策庄-凯叔.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-轻策庄-凯叔.json rename to repo/js/自动购买商品/assets/path/璃月-轻策庄-凯叔.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-遗珑埠-丰泰.json b/repo/js/自动购买商品/assets/path/璃月-遗珑埠-丰泰.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-遗珑埠-丰泰.json rename to repo/js/自动购买商品/assets/path/璃月-遗珑埠-丰泰.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-遗珑埠-连芳.json b/repo/js/自动购买商品/assets/path/璃月-遗珑埠-连芳.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/璃月-遗珑埠-连芳.json rename to repo/js/自动购买商品/assets/path/璃月-遗珑埠-连芳.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-海祇岛-清子.json b/repo/js/自动购买商品/assets/path/稻妻-海祇岛-清子.json similarity index 95% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-海祇岛-清子.json rename to repo/js/自动购买商品/assets/path/稻妻-海祇岛-清子.json index 9ea679fb6..01e02b3e4 100644 --- a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-海祇岛-清子.json +++ b/repo/js/自动购买商品/assets/path/稻妻-海祇岛-清子.json @@ -1,31 +1,31 @@ -{ - "info": { - "name": "稻妻-海祇岛-清子", - "type": "collect", - "author": "小鹰划船不用桨", - "version": "1.0", - "description": "稻妻海祇岛百货商人-清子", - "map_name": "Teyvat", - "bgi_version": "0.45.0" - }, - "positions": [ - { - "id": 1, - "action": "", - "move_mode": "walk", - "type": "teleport", - "x": -755.5869140625, - "y": -4001.095703125, - "action_params": "" - }, - { - "id": 2, - "x": -847.1787109375, - "y": -3967.7099609375, - "type": "path", - "move_mode": "fly", - "action": "stop_flying", - "action_params": "" - } - ] +{ + "info": { + "name": "稻妻-海祇岛-清子", + "type": "collect", + "author": "小鹰划船不用桨", + "version": "1.0", + "description": "稻妻海祇岛百货商人-清子", + "map_name": "Teyvat", + "bgi_version": "0.45.0" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": -755.5869140625, + "y": -4001.095703125, + "action_params": "" + }, + { + "id": 2, + "x": -847.1787109375, + "y": -3967.7099609375, + "type": "path", + "move_mode": "fly", + "action": "stop_flying", + "action_params": "" + } + ] } \ No newline at end of file diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-白狐之野-若紫.json b/repo/js/自动购买商品/assets/path/稻妻-白狐之野-若紫.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-白狐之野-若紫.json rename to repo/js/自动购买商品/assets/path/稻妻-白狐之野-若紫.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-离岛-卡琵莉亚.json b/repo/js/自动购买商品/assets/path/稻妻-离岛-卡琵莉亚.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-离岛-卡琵莉亚.json rename to repo/js/自动购买商品/assets/path/稻妻-离岛-卡琵莉亚.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-离岛-小畑.json b/repo/js/自动购买商品/assets/path/稻妻-离岛-小畑.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-离岛-小畑.json rename to repo/js/自动购买商品/assets/path/稻妻-离岛-小畑.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-离岛-山城健太.json b/repo/js/自动购买商品/assets/path/稻妻-离岛-山城健太.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-离岛-山城健太.json rename to repo/js/自动购买商品/assets/path/稻妻-离岛-山城健太.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-离岛-秋月.json b/repo/js/自动购买商品/assets/path/稻妻-离岛-秋月.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-离岛-秋月.json rename to repo/js/自动购买商品/assets/path/稻妻-离岛-秋月.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-稻妻城-志村勘兵卫.json b/repo/js/自动购买商品/assets/path/稻妻-稻妻城-志村勘兵卫.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-稻妻城-志村勘兵卫.json rename to repo/js/自动购买商品/assets/path/稻妻-稻妻城-志村勘兵卫.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-稻妻城-智树.json b/repo/js/自动购买商品/assets/path/稻妻-稻妻城-智树.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-稻妻城-智树.json rename to repo/js/自动购买商品/assets/path/稻妻-稻妻城-智树.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-稻妻城-木南杏奈.json b/repo/js/自动购买商品/assets/path/稻妻-稻妻城-木南杏奈.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-稻妻城-木南杏奈.json rename to repo/js/自动购买商品/assets/path/稻妻-稻妻城-木南杏奈.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-稻妻城-葵.json b/repo/js/自动购买商品/assets/path/稻妻-稻妻城-葵.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/稻妻-稻妻城-葵.json rename to repo/js/自动购买商品/assets/path/稻妻-稻妻城-葵.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-圣火竞技场-夏安卡.json b/repo/js/自动购买商品/assets/path/纳塔-圣火竞技场-夏安卡.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-圣火竞技场-夏安卡.json rename to repo/js/自动购买商品/assets/path/纳塔-圣火竞技场-夏安卡.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-圣火竞技场-布纳马.json b/repo/js/自动购买商品/assets/path/纳塔-圣火竞技场-布纳马.json similarity index 95% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-圣火竞技场-布纳马.json rename to repo/js/自动购买商品/assets/path/纳塔-圣火竞技场-布纳马.json index 820debcff..ea3aca788 100644 --- a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-圣火竞技场-布纳马.json +++ b/repo/js/自动购买商品/assets/path/纳塔-圣火竞技场-布纳马.json @@ -1,57 +1,57 @@ -{ - "info": { - "name": "布纳马", - "type": "collect", - "authors": [ - { - "name": "芝士贝果" - } - ], - "version": "1.0", - "description": "", - "map_name": "Teyvat", - "bgi_version": "0.47.3", - "tags": [], - "last_modified_time": 1754489424074, - "enable_monster_loot_split": false, - "map_match_method": "" - }, - "positions": [ - { - "id": 1, - "action": "", - "move_mode": "walk", - "type": "teleport", - "x": 9060.5419921875, - "y": -1847.5107421875, - "action_params": "" - }, - { - "id": 2, - "x": 9089.0361328125, - "y": -1852.42919921875, - "type": "path", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - { - "id": 3, - "x": 9088.6552734375, - "y": -1856.89306640625, - "type": "target", - "move_mode": "walk", - "action": "", - "action_params": "" - }, - { - "id": 4, - "x": 9089.8935546875, - "y": -1857.2724609375, - "type": "target", - "move_mode": "walk", - "action": "", - "action_params": "" - } - ] +{ + "info": { + "name": "布纳马", + "type": "collect", + "authors": [ + { + "name": "芝士贝果" + } + ], + "version": "1.0", + "description": "", + "map_name": "Teyvat", + "bgi_version": "0.47.3", + "tags": [], + "last_modified_time": 1754489424074, + "enable_monster_loot_split": false, + "map_match_method": "" + }, + "positions": [ + { + "id": 1, + "action": "", + "move_mode": "walk", + "type": "teleport", + "x": 9060.5419921875, + "y": -1847.5107421875, + "action_params": "" + }, + { + "id": 2, + "x": 9089.0361328125, + "y": -1852.42919921875, + "type": "path", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 3, + "x": 9088.6552734375, + "y": -1856.89306640625, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + }, + { + "id": 4, + "x": 9089.8935546875, + "y": -1857.2724609375, + "type": "target", + "move_mode": "walk", + "action": "", + "action_params": "" + } + ] } \ No newline at end of file diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-圣火竞技场-艾库瓦.json b/repo/js/自动购买商品/assets/path/纳塔-圣火竞技场-艾库瓦.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-圣火竞技场-艾库瓦.json rename to repo/js/自动购买商品/assets/path/纳塔-圣火竞技场-艾库瓦.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-圣火竞技场-钦特利.json b/repo/js/自动购买商品/assets/path/纳塔-圣火竞技场-钦特利.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-圣火竞技场-钦特利.json rename to repo/js/自动购买商品/assets/path/纳塔-圣火竞技场-钦特利.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-坚岩隘谷-伊蜜.json b/repo/js/自动购买商品/assets/path/纳塔-坚岩隘谷-伊蜜.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-坚岩隘谷-伊蜜.json rename to repo/js/自动购买商品/assets/path/纳塔-坚岩隘谷-伊蜜.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-悠悠度假村-穆托莉娜.json b/repo/js/自动购买商品/assets/path/纳塔-悠悠度假村-穆托莉娜.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/纳塔-悠悠度假村-穆托莉娜.json rename to repo/js/自动购买商品/assets/path/纳塔-悠悠度假村-穆托莉娜.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-清泉镇-杜拉夫.json b/repo/js/自动购买商品/assets/path/蒙德-清泉镇-杜拉夫.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-清泉镇-杜拉夫.json rename to repo/js/自动购买商品/assets/path/蒙德-清泉镇-杜拉夫.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-清泉镇-神奇的霍普金斯.json b/repo/js/自动购买商品/assets/path/蒙德-清泉镇-神奇的霍普金斯.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-清泉镇-神奇的霍普金斯.json rename to repo/js/自动购买商品/assets/path/蒙德-清泉镇-神奇的霍普金斯.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-蒙德城-天使的馈赠-查尔斯.json b/repo/js/自动购买商品/assets/path/蒙德-蒙德城-天使的馈赠-查尔斯.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-蒙德城-天使的馈赠-查尔斯.json rename to repo/js/自动购买商品/assets/path/蒙德-蒙德城-天使的馈赠-查尔斯.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-蒙德城-布兰琪.json b/repo/js/自动购买商品/assets/path/蒙德-蒙德城-布兰琪.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-蒙德城-布兰琪.json rename to repo/js/自动购买商品/assets/path/蒙德-蒙德城-布兰琪.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-蒙德城-石榴.json b/repo/js/自动购买商品/assets/path/蒙德-蒙德城-石榴.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-蒙德城-石榴.json rename to repo/js/自动购买商品/assets/path/蒙德-蒙德城-石榴.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-蒙德城-芙萝拉.json b/repo/js/自动购买商品/assets/path/蒙德-蒙德城-芙萝拉.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-蒙德城-芙萝拉.json rename to repo/js/自动购买商品/assets/path/蒙德-蒙德城-芙萝拉.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-蒙德城-莎拉.json b/repo/js/自动购买商品/assets/path/蒙德-蒙德城-莎拉.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-蒙德城-莎拉.json rename to repo/js/自动购买商品/assets/path/蒙德-蒙德城-莎拉.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-风起地-克罗丽丝.json b/repo/js/自动购买商品/assets/path/蒙德-风起地-克罗丽丝.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/蒙德-风起地-克罗丽丝.json rename to repo/js/自动购买商品/assets/path/蒙德-风起地-克罗丽丝.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-化城郭-阿什帕齐.json b/repo/js/自动购买商品/assets/path/须弥-化城郭-阿什帕齐.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-化城郭-阿什帕齐.json rename to repo/js/自动购买商品/assets/path/须弥-化城郭-阿什帕齐.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-奥摩斯港-巴巴克.json b/repo/js/自动购买商品/assets/path/须弥-奥摩斯港-巴巴克.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-奥摩斯港-巴巴克.json rename to repo/js/自动购买商品/assets/path/须弥-奥摩斯港-巴巴克.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-奥摩斯港-布特罗斯.json b/repo/js/自动购买商品/assets/path/须弥-奥摩斯港-布特罗斯.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-奥摩斯港-布特罗斯.json rename to repo/js/自动购买商品/assets/path/须弥-奥摩斯港-布特罗斯.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-奥摩斯港-拉玛.json b/repo/js/自动购买商品/assets/path/须弥-奥摩斯港-拉玛.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-奥摩斯港-拉玛.json rename to repo/js/自动购买商品/assets/path/须弥-奥摩斯港-拉玛.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-奥摩斯港-秋蔚.json b/repo/js/自动购买商品/assets/path/须弥-奥摩斯港-秋蔚.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-奥摩斯港-秋蔚.json rename to repo/js/自动购买商品/assets/path/须弥-奥摩斯港-秋蔚.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-桓那兰那(梦境)-兰玛尼.json b/repo/js/自动购买商品/assets/path/须弥-桓那兰那(梦境)-兰玛尼.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-桓那兰那(梦境)-兰玛尼.json rename to repo/js/自动购买商品/assets/path/须弥-桓那兰那(梦境)-兰玛尼.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-阿如村-阿扎莱.json b/repo/js/自动购买商品/assets/path/须弥-阿如村-阿扎莱.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-阿如村-阿扎莱.json rename to repo/js/自动购买商品/assets/path/须弥-阿如村-阿扎莱.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-兰巴德酒馆-兰巴德.json b/repo/js/自动购买商品/assets/path/须弥-须弥城-兰巴德酒馆-兰巴德.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-兰巴德酒馆-兰巴德.json rename to repo/js/自动购买商品/assets/path/须弥-须弥城-兰巴德酒馆-兰巴德.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-哈马维.json b/repo/js/自动购买商品/assets/path/须弥-须弥城-哈马维.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-哈马维.json rename to repo/js/自动购买商品/assets/path/须弥-须弥城-哈马维.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-普斯帕咖啡馆-恩忒卡.json b/repo/js/自动购买商品/assets/path/须弥-须弥城-普斯帕咖啡馆-恩忒卡.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-普斯帕咖啡馆-恩忒卡.json rename to repo/js/自动购买商品/assets/path/须弥-须弥城-普斯帕咖啡馆-恩忒卡.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-朱特.json b/repo/js/自动购买商品/assets/path/须弥-须弥城-朱特.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-朱特.json rename to repo/js/自动购买商品/assets/path/须弥-须弥城-朱特.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-珀姆.json b/repo/js/自动购买商品/assets/path/须弥-须弥城-珀姆.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-珀姆.json rename to repo/js/自动购买商品/assets/path/须弥-须弥城-珀姆.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-阿夫辛.json b/repo/js/自动购买商品/assets/path/须弥-须弥城-阿夫辛.json similarity index 100% rename from repo/js/自动购买每天&3天&每周刷新商品/assets/path/须弥-须弥城-阿夫辛.json rename to repo/js/自动购买商品/assets/path/须弥-须弥城-阿夫辛.json diff --git a/repo/js/自动购买每天&3天&每周刷新商品/main.js b/repo/js/自动购买商品/main.js similarity index 97% rename from repo/js/自动购买每天&3天&每周刷新商品/main.js rename to repo/js/自动购买商品/main.js index 07576aaa1..fd8662783 100644 --- a/repo/js/自动购买每天&3天&每周刷新商品/main.js +++ b/repo/js/自动购买商品/main.js @@ -1,1186 +1,1186 @@ -// fakeLog 函数,使用方法:将本函数放在主函数前,调用时请务必使用await,否则可能出现v8白框报错 -// 在js开头处伪造该js结束运行的日志信息,如 await fakeLog("js脚本", true, true, 0); -// 在js结尾处伪造该js开始运行的日志信息,如 await fakeLog("js脚本", true, false, 2333); -// duration项目仅在伪造结束信息时有效,且无实际作用,可以任意填写,当你需要在日志中输出特定值时才需要,单位为毫秒 -// 在调用地图追踪前伪造该地图追踪开始运行的日志信息,如 await fakeLog(`地图追踪.json`, false, true, 0); -// 在调用地图追踪后伪造该地图追踪结束运行的日志信息,如 await fakeLog(`地图追踪.json`, false, false, 0); -// 如此便可以在js运行过程中伪造地图追踪的日志信息,可以在日志分析等中查看 -// name: 字符串,表示脚本或地图追踪的名称 -// isJs: 布尔值,true表示脚本,false表示地图追踪 -// isStart: 布尔值,true表示开始日志,false表示结束日志 -// duration: 整数,表示脚本或地图追踪的运行时间(仅在结束日志时使用),单位为毫秒_基本填0即可 -// 示例: -// JS脚本开始 -// await fakeLog("js脚本名", true, true, 0); -// JS脚本结束 -// await fakeLog("js脚本名", true, false, 0); -// 地图追踪开始 -// await fakeLog("地图追踪名", false, true, 0); -// 地图追踪结束 -// await fakeLog("地图追踪名", false, false, 0); -// 交互或拾取:"XXXX" -// await fakeLog("XXXX", false, false, 23333); -async function fakeLog(name, isJs, isStart, duration) { - await sleep(10); - const currentTime = Date.now(); - // 参数检查 - if (typeof name !== 'string') { - log.error("参数 'name' 必须是字符串类型!"); - return; - } - if (typeof isJs !== 'boolean') { - log.error("参数 'isJs' 必须是布尔型!"); - return; - } - if (typeof isStart !== 'boolean') { - log.error("参数 'isStart' 必须是布尔型!"); - return; - } - if (typeof duration !== 'number' || !Number.isInteger(duration)) { - log.error("参数 'duration' 必须是整数!"); - return; - } - - // 将 currentTime 转换为 Date 对象并格式化为 HH:mm:ss.sss - const date = new Date(currentTime); - const hours = String(date.getHours()).padStart(2, '0'); - const minutes = String(date.getMinutes()).padStart(2, '0'); - const seconds = String(date.getSeconds()).padStart(2, '0'); - const milliseconds = String(date.getMilliseconds()).padStart(3, '0'); - const formattedTime = `${hours}:${minutes}:${seconds}.${milliseconds}`; - - // 将 duration 转换为分钟和秒,并保留三位小数 - const durationInSeconds = duration / 1000; // 转换为秒 - const durationMinutes = Math.floor(durationInSeconds / 60); - const durationSeconds = (durationInSeconds % 60).toFixed(3); // 保留三位小数 - - // 使用四个独立的 if 语句处理四种情况 - if (isJs && isStart) { - // 处理 isJs = true 且 isStart = true 的情况 - const logMessage = `正在伪造js开始的日志记录\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `------------------------------\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `→ 开始执行JS脚本: "${name}"`; - log.debug(logMessage); - } - if (isJs && !isStart) { - // 处理 isJs = true 且 isStart = false 的情况 - const logMessage = `正在伪造js结束的日志记录\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `→ 脚本执行结束: "${name}", 耗时: ${durationMinutes}分${durationSeconds}秒\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `------------------------------`; - log.debug(logMessage); - } - if (!isJs && isStart) { - // 处理 isJs = false 且 isStart = true 的情况 - const logMessage = `正在伪造地图追踪开始的日志记录\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `------------------------------\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `→ 开始执行地图追踪任务: "${name}"`; - log.debug(logMessage); - } - if (!isJs && !isStart) { - // 处理 isJs = false 且 isStart = false 的情况 - const logMessage = `正在伪造地图追踪结束的日志记录\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `→ 脚本执行结束: "${name}", 耗时: ${durationMinutes}分${durationSeconds}秒\n\n` + - `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + - `------------------------------`; - log.debug(logMessage); - } - // 交互或拾取:"XXXX" - if (duration == 23333) { - log.info(`交互或拾取:"${name}"`); - } -} - -// ==================== 日志辅助函数 ==================== -function logConditional(message) { - if (ignoreRecords || recordDebug) { - log.info(message); - } else { - log.debug(message); - } -} - -// ==================== 加载外部数据文件 ==================== -let npcData = {}; - -// 存储用户要购买的商品名称集合(中文名) -let userFoodsToBuy = new Set(); -let userTagsToBuy = new Set(); // 标签名 -let allTags = new Set(); // 所有可用标签(从 npcs.json 收集) -let requiredFoods = new Set(); // 所有需要加载图片的商品 - -async function loadExternalData() { - try { - // 加载商人数据 - const npcsContent = await file.readText("assets/npcs.json"); - npcData = JSON.parse(npcsContent); - logConditional(`已加载商人数据: ${Object.keys(npcData).length} 个商人`); - - // ========== 收集所有标签 ========== - for (let key in npcData) { - let npc = npcData[key]; - if (npc.tags && Array.isArray(npc.tags)) { - npc.tags.forEach(tag => allTags.add(tag)); - } - } - logConditional(`共收集到 ${allTags.size} 个标签`); - - // ========== 解析用户输入 ========== - const foodsInput = (settings.foodsToBuy || "").trim(); - if (foodsInput) { - const items = foodsInput.split(/[,\s、]+/).filter(item => item.trim() !== ""); - const enabledFoodsList = []; - const enabledTagsList = []; - - for (const item of items) { - if (allTags.has(item)) { - // 是标签 - userTagsToBuy.add(item); - enabledTagsList.push(item); - } else { - // 视为商品名 - userFoodsToBuy.add(item); - enabledFoodsList.push(item); - } - } - - // 输出用户启用的标签和商品 - if (enabledTagsList.length > 0) { - log.info(`用户启用了以下标签: ${enabledTagsList.join(", ")}`); - } - if (enabledFoodsList.length > 0) { - log.info(`用户启用了以下商品: ${enabledFoodsList.join(", ")}`); - } - if (enabledTagsList.length === 0 && enabledFoodsList.length === 0) { - log.warn("用户未启用任何标签或商品"); - } - } else { - log.warn("用户未指定要购买的商品或标签"); - } - - // 计算所有需要加载图片的商品 - requiredFoods = new Set(userFoodsToBuy); - for (let key in npcData) { - let npc = npcData[key]; - if (npc.tags && Array.isArray(npc.tags) && npc.tags.some(tag => userTagsToBuy.has(tag))) { - if (npc._1d_foods) npc._1d_foods.forEach(food => requiredFoods.add(food)); - if (npc._3d_foods) npc._3d_foods.forEach(food => requiredFoods.add(food)); - if (npc._7d_foods) npc._7d_foods.forEach(food => requiredFoods.add(food)); - if (npc._thu_foods) npc._thu_foods.forEach(food => requiredFoods.add(food)); - if (npc._month_foods) npc._month_foods.forEach(food => requiredFoods.add(food)); - } - } - logConditional(`需要加载图片的商品总数: ${requiredFoods.size}`); - - return true; - } catch (error) { - log.error(`加载外部数据失败: ${error.message}`); - return false; - } -} - -// ==================== 辅助函数:获取商人的所有商品 ==================== -function getAllNpcFoods(npc) { - const all = []; - if (npc._1d_foods) all.push(...npc._1d_foods); - if (npc._3d_foods) all.push(...npc._3d_foods); - if (npc._7d_foods) all.push(...npc._7d_foods); - if (npc._thu_foods) all.push(...npc._thu_foods); - if (npc._month_foods) all.push(...npc._month_foods); - return all; -} - -// ==================== 辅助函数:过滤用户要购买的商品 ==================== -function filterUserFoods(foodList) { - if (!foodList || !Array.isArray(foodList)) { - return []; - } - - return foodList.filter(food => { - // 直接检查商品名是否在用户要购买的商品集合中 - const shouldBuy = userFoodsToBuy.has(food); - if (recordDebug && shouldBuy) { - log.info(`[调试] 用户选择购买: ${food}`); - } - return shouldBuy; - }); -} - -// ==================== 辅助函数:获取调整后的星期几(1-7,周一为1) ==================== -function getAdjustedDayOfWeek() { - const now = new Date(); - let dayOfWeek = now.getDay(); // 0-6 (0是周日) - const hours = now.getHours(); - - // 如果时间在00:00~04:00之间,视为前一天 - if (hours < 4) { - dayOfWeek = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // 前一天 - if (recordDebug) { - log.info(`[调试] 当前时间 ${now.getHours()}:${now.getMinutes()},视为前一天(周 ${dayOfWeek === 0 ? 7 : dayOfWeek})`); - } - } else if (recordDebug) { - log.info(`[调试] 当前时间 ${now.getHours()}:${now.getMinutes()},使用当天(周 ${dayOfWeek === 0 ? 7 : dayOfWeek})`); - } - - // 转换为1-7格式(7代表周日) - return dayOfWeek === 0 ? 7 : dayOfWeek; -} - -// ==================== 辅助函数:获取给定日期所在的周一日期 ==================== -function getMondayOfWeek(date) { - const d = new Date(date); - // 调整到4点刷新 - if (d.getHours() < 4) { - d.setDate(d.getDate() - 1); - } - const day = d.getDay(); - const diff = day === 0 ? 6 : day - 1; - d.setDate(d.getDate() - diff); - d.setHours(4, 0, 0, 0); - return d; -} - -// ==================== 辅助函数:获取给定日期所在的周四日期 ==================== -function getThursdayOfWeek(date) { - const d = new Date(date); - // 调整到4点刷新 - if (d.getHours() < 4) { - d.setDate(d.getDate() - 1); - } - const day = d.getDay(); // 0=周日, 1=周一, 2=周二, 3=周三, 4=周四, 5=周五, 6=周六 - // 目标周四:如果当前<=周四,则取本周四;否则取下周四 - let targetDay = 4; // 周四对应的getDay值为4 - if (day <= targetDay) { - d.setDate(d.getDate() + (targetDay - day)); - } else { - d.setDate(d.getDate() + (7 - day + targetDay)); - } - d.setHours(4, 0, 0, 0); - return d; -} - -// ==================== 辅助函数:获取下个月1号的日期 ==================== -function getNextMonthFirstDay(date) { - const d = new Date(date); - d.setMonth(d.getMonth() + 1); - d.setDate(1); - d.setHours(4, 0, 0, 0); - return d; -} - -// ==================== 账号管理功能 ==================== -let userName; - -// 清理账户名,防止路径非法字符 -function validateUserName(name) { - if (typeof name !== 'string' || name.trim() === '') return '默认账户'; - // 替换 Windows 路径非法字符,并去除首尾空格 - return name.trim().replace(/[\\/:*?"<>|]/g, '_'); -} - -async function getUidFromGame() { - // 设置脚本环境的游戏分辨率和DPI缩放 - setGameMetrics(3840, 2160, 1.5); - - // 确保回到主界面 - await genshin.returnMainUi(); - await sleep(1000); - - // 打开派蒙菜单 - keyPress("G"); - await sleep(500); - - // 加载退出按钮识别图(需要 assets/images/Exit.png 存在) - let imageExitRo; - try { - imageExitRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/images/Exit.png")); - imageExitRo.Threshold = 0.8; - } catch (e) { - log.warn("无法加载 assets/Exit.png,将使用固定延时等待菜单打开"); - } - - if (imageExitRo) { - // 等待退出按钮出现,最多5秒 - const startTime = Date.now(); - while (Date.now() - startTime < 5000) { - let capture = captureGameRegion(); - if (capture.Find(imageExitRo).isExist()) { - capture.dispose(); - break; - } - capture.dispose(); - await sleep(500); - } - } else { - await sleep(2000); // 无图片则直接等待2秒 - } - - // OCR识别UID - let gameRegion = captureGameRegion(); - let ocrResult = gameRegion.Find(RecognitionObject.Ocr(1679, 1048, 200, 28)); - gameRegion.dispose(); - - let uid = ""; - if (ocrResult.isExist() && ocrResult.text) { - uid = ocrResult.text.replace(/\D/g, ''); // 只保留数字 - } - - // 关闭派蒙菜单 - keyPress("ESCAPE"); - await sleep(500); - await genshin.returnMainUi(); - - if (uid && uid.length >= 5) { // UID通常9位,至少5位 - log.info(`从游戏获取到UID: ${uid}`); - return uid; - } else { - log.warn("无法从游戏获取UID"); - return null; - } -} - -// 确保设置变量存在 -const ignoreRecords = settings.ignoreRecords || false; -const recordDebug = settings.recordDebug || false; - -// 解析禁用的标签列表 -const disabledTags = (settings.disabledTags || "").split(/[,\s、]+/).filter(tag => tag.trim() !== ""); -if (disabledTags.length > 0) { - log.info(`已禁用标签: ${disabledTags.join(", ")}`); -} - -// 修改AKF设置处理 -const AKFValue = parseInt(settings.AKF) || 1; -let AFKDay = null; -let followSystem = false; - -if (AKFValue === 0) { - // 0 表示跟随系统判定 - followSystem = true; - log.info("每周商品购买: 跟随系统判定"); -} else { - AFKDay = AKFValue === 7 ? 0 : AKFValue; - log.info(`每周商品购买: 每周${AFKDay === 0 ? "日" : AFKDay}购买`); -} - -// 获取账号记录路径 -function getRecordPath(accountName) { - // 简单处理账户名,如果为空则使用默认账户 - if (!accountName || accountName.trim() === "") { - accountName = "默认账户"; - } - return `record/${accountName.trim()}/records.json`; -} - -// ==================== 新增函数:读取商人记录文件 ==================== -async function loadNpcRecords() { - const recordPath = getRecordPath(userName); - try { - const content = await file.readText(recordPath); - if (content.trim()) { - return JSON.parse(content); - } - } catch (error) { - // 文件不存在或格式错误,返回空数组 - } - return []; -} - -// ==================== 辅助函数:从路径中提取显示名称 ==================== -function getDisplayNameFromPath(path) { - try { - // 从路径中提取文件名(不带.json扩展名) - // 例如:assets/path/璃月-璃月港-阿桂.json → 璃月-璃月港-阿桂 - const fileName = path.split('/').pop(); // 获取最后一部分 - return fileName.replace('.json', ''); // 移除.json扩展名 - } catch (error) { - // 如果解析失败,返回原始路径或默认值 - return path || "未知位置"; - } -} - -// ==================== 保存商人记录 ==================== -async function saveNpcRecords(records) { - const recordPath = getRecordPath(userName); - try { - await file.writeText(recordPath, JSON.stringify(records, null, 2)); - return true; - } catch (error) { - log.error(`保存记录文件失败: ${error.message}`); - return false; - } -} - -// ==================== 获取商人记录 ==================== -function getNpcRecord(records, npcName) { - return records.find(record => record.npcname === npcName); -} - -// ==================== 更新商人记录 ==================== -function updateNpcRecord(records, npcName, refreshType, purchasedItems) { - // 如果没有购买任何商品,不更新记录 - if (!purchasedItems || purchasedItems.length === 0) { - return records; - } - - let record = getNpcRecord(records, npcName); - - if (!record) { - record = { - npcname: npcName, - "1d": [], - "1d_time": null, - "3d": [], - "3d_time": null, - "7d": [], - "7d_time": null, - "thu": [], - "thu_time": null, - "month": [], - "month_time": null - }; - records.push(record); - } - - const now = new Date(); - let refreshTime; - - if (refreshType === "1d") { - // 1天商品:下次刷新是购买日+1天 - refreshTime = new Date(now); - refreshTime.setHours(4, 0, 0, 0); - // 如果当前时间在4点前,刷新时间从昨天开始算 - if (now.getHours() < 4) { - refreshTime.setDate(refreshTime.getDate() - 1); - } - refreshTime.setDate(refreshTime.getDate() + 1); - } else if (refreshType === "3d") { - // 3天商品:基于基准日的3天周期计算 - // 基准时间:2025-08-09 04:00 GMT+8 (转换为本地时间) - const baseTime = new Date(2025, 7, 9, 4, 0, 0); // 2025-08-09 04:00 - - // 调整当前时间到4点基准 - const adjustedNow = new Date(now); - if (adjustedNow.getHours() < 4) { - adjustedNow.setDate(adjustedNow.getDate() - 1); - } - adjustedNow.setHours(4, 0, 0, 0); - - // 计算距离基准日的天数 - const timeDiff = adjustedNow.getTime() - baseTime.getTime(); - const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24)); - - // 计算当前3天周期 - const currentPeriod = Math.floor(daysDiff / 3); - - // 下一个3天周期的开始时间 - const nextPeriod = currentPeriod + 1; - refreshTime = new Date(baseTime); - refreshTime.setDate(baseTime.getDate() + (nextPeriod * 3)); - - // 确保刷新时间是04:00 - refreshTime.setHours(4, 0, 0, 0); - } else if (refreshType === "7d") { - // 7天商品(周一刷新):下次刷新是下周一 - refreshTime = getMondayOfWeek(now); - refreshTime.setDate(refreshTime.getDate() + 7); - } else if (refreshType === "thu") { - // 周四刷新商品:下次刷新是下周四 - refreshTime = getThursdayOfWeek(now); - refreshTime.setDate(refreshTime.getDate() + 7); - } else if (refreshType === "month") { - // 每月1号刷新商品:下次刷新是下个月1号 - refreshTime = getNextMonthFirstDay(now); - } - - // 只更新实际购买的商品 - record[refreshType] = purchasedItems; - record[`${refreshType}_time`] = formatDateToLocalISO(refreshTime); - - // 计算下次刷新日期 - if (recordDebug) { - const nextRefresh = new Date(refreshTime); - log.info(`${npcName} 下次${refreshType}刷新时间: ${formatDateToLocalISO(nextRefresh)}`); - } - - return records; -} - -// ==================== 计算3天刷新商品基准日周期 ==================== -function getBasePeriod(currentDate) { - // 基准时间:2025-08-08 20:00 UTC (对应2025-08-09 04:00 GMT+8) - const baseTime = Date.UTC(2025, 7, 8, 20, 0, 0); - - // 转换当前时间到UTC+8 - const utcNowMs = currentDate.getTime() + currentDate.getTimezoneOffset() * 60 * 1000; - const gmt8Ms = utcNowMs + 8 * 60 * 60 * 1000; - const gmt8Date = new Date(gmt8Ms); - - // 如果还没到凌晨4点,算作前一天 - if (gmt8Date.getHours() < 4) { - gmt8Date.setDate(gmt8Date.getDate() - 1); - } - - // 计算距离基准日的天数 - const daysDiff = Math.floor((gmt8Date.getTime() - baseTime) / (24 * 60 * 60 * 1000)); - - return { - day: gmt8Date, - daysDiff: daysDiff, - threeDayPeriod: Math.floor(daysDiff / 3), - sevenDayPeriod: Math.floor(daysDiff / 7) - }; -} - -// ==================== 判断是否需要购买 ==================== -function shouldBuyFoods(npc, npcRecord, currentPeriod, forceRefresh = false) { - const now = new Date(); - const foodsToBuy = { - "1d": [], - "3d": [], - "7d": [], - "thu": [], - "month": [] - }; - - // 首先检查禁用(此处假设之前已检查过,但为防止遗漏,可再加一道保险) - // 实际上禁用检查在更外层(initNpcData 和主循环)已经处理,这里可以省略 - - if (forceRefresh) { - // 强制刷新:决定使用完整列表还是具体商品列表 - // 先判断是否命中标签 - let useAll = false; - if (npc.tags && Array.isArray(npc.tags)) { - useAll = npc.tags.some(tag => userTagsToBuy.has(tag)); - } - if (useAll) { - // 标签商人:购买所有商品 - if (npc._1d_foods) foodsToBuy["1d"] = npc._1d_foods; - if (npc._3d_foods) foodsToBuy["3d"] = npc._3d_foods; - if (npc._7d_foods) foodsToBuy["7d"] = npc._7d_foods; - if (npc._thu_foods) foodsToBuy["thu"] = npc._thu_foods; - if (npc._month_foods) foodsToBuy["month"] = npc._month_foods; - } else { - // 非标签商人:只购买用户明确指定的商品 - if (npc._1d_foods) foodsToBuy["1d"] = filterUserFoods(npc._1d_foods); - if (npc._3d_foods) foodsToBuy["3d"] = filterUserFoods(npc._3d_foods); - if (npc._7d_foods) foodsToBuy["7d"] = filterUserFoods(npc._7d_foods); - if (npc._thu_foods) foodsToBuy["thu"] = filterUserFoods(npc._thu_foods); - if (npc._month_foods) foodsToBuy["month"] = filterUserFoods(npc._month_foods); - } - return foodsToBuy; - } - - // 辅助函数:处理单个类型,根据是否命中标签决定使用完整列表还是过滤列表 - function processType(type, fullList) { - if (!fullList || fullList.length === 0) return []; - - // 判断该商人是否命中用户标签(只需判断一次,可在外层缓存结果) - // 此处简单处理:每次调用都判断,但实际可优化 - let useAll = false; - if (npc.tags && Array.isArray(npc.tags)) { - useAll = npc.tags.some(tag => userTagsToBuy.has(tag)); - } - - // 确定要购买的候选商品列表 - let candidateList = useAll ? fullList : filterUserFoods(fullList); - if (candidateList.length === 0) return []; - - // 获取已购买列表 - const purchasedList = npcRecord && npcRecord[type] ? npcRecord[type] : []; - // 找出未购买的商品 - const notPurchased = candidateList.filter(food => !purchasedList.includes(food)); - - if (!npcRecord || !npcRecord[`${type}_time`]) { - return candidateList; // 从未买过,全部尝试 - } - - const nextRefreshTime = new Date(npcRecord[`${type}_time`]); - if (now >= nextRefreshTime) { - return candidateList; // 已刷新,全部尝试 - } else { - return notPurchased; // 未刷新,只尝试未购买过的 - } - } - - foodsToBuy["1d"] = processType("1d", npc._1d_foods); - foodsToBuy["3d"] = processType("3d", npc._3d_foods); - foodsToBuy["7d"] = processType("7d", npc._7d_foods); - foodsToBuy["thu"] = processType("thu", npc._thu_foods); - foodsToBuy["month"] = processType("month", npc._month_foods); - - return foodsToBuy; -} - -const othrtRo = { - "buy": { - "name": "购买按钮", - "file": "assets/images/buyBtn.png" - } -} - -// 获取游戏内时间(考虑4点刷新) -function getGameTime() { - const now = new Date(); - const utcNowMs = now.getTime() + now.getTimezoneOffset() * 60 * 1000; - const gmt8Ms = utcNowMs + 8 * 60 * 60 * 1000; - const gmt8Date = new Date(gmt8Ms); - - // 如果还没到凌晨4点,算作前一天 - if (gmt8Date.getHours() < 4) { - gmt8Date.setDate(gmt8Date.getDate() - 1); - } - - return gmt8Date; -} - -// ==================== 新增函数:格式化为本地ISO时间 ==================== -function formatDateToLocalISO(date) { - // 将日期格式化为 "YYYY-MM-DDTHH:mm:ss+08:00" 格式 - const pad = (n) => n.toString().padStart(2, '0'); - - const year = date.getFullYear(); - const month = pad(date.getMonth() + 1); - const day = pad(date.getDate()); - const hours = pad(date.getHours()); - const minutes = pad(date.getMinutes()); - const seconds = pad(date.getSeconds()); - - return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}+08:00`; -} - -// 地图追踪 -async function autoPath(locationPath) { - try { - let filePath = locationPath; - await pathingScript.runFile(filePath); - await sleep(200); - - return true; - } catch (error) { - log.error(`执行路径时发生错误: ${error.message}`); - return false; - } -} - -// 平滑过渡函数(缓动效果) -function smoothStep(t) { - return t * t * (3 - 2 * t); -} - -// 模拟鼠标移动到指定位置(带曲线路径) -async function naturalMove(initX, initY, targetX, targetY, duration, wiggle = 30) { - - // 生成控制点(使路径形成曲线) - const controlX = (initX + targetX) / 2 + (Math.random() * wiggle * 2 - wiggle); - const controlY = (initY + targetY) / 2 + (Math.random() * wiggle * 2 - wiggle); - - const steps = Math.max(duration / 20, 10); // 计算步数 - - for (let i = 0; i <= steps; i++) { - const progress = i / steps; - const t = smoothStep(progress); // 使用平滑过渡 - - // 二次贝塞尔曲线计算 - const x = (1 - t) * (1 - t) * initX + 2 * (1 - t) * t * controlX + t * t * targetX; - const y = (1 - t) * (1 - t) * initY + 2 * (1 - t) * t * controlY + t * t * targetY; - - moveMouseTo(Math.trunc(x), Math.trunc(y)); - - // 随机延迟使移动更自然 - await sleep(Math.trunc(duration / steps * (0.8 + Math.random() * 0.4))); - } - - await sleep(200); - // 确保最终位置准确 - moveMouseTo(targetX, targetY); -} - -// 切换下一页商品 -async function nextFoodsPage() { - //设置脚本环境的游戏分辨率和DPI缩放 - setGameMetrics(3840, 2160, 1.5); - - let [initX, initY] = [1500, 1850]; - let [targetX, targetY] = [1800, 260]; - - moveMouseTo(initX, initY); - leftButtonDown(); - await naturalMove(initX, initY, targetX, targetY, 300); - - // 按住了, 防止弹太远 - await sleep(520); - leftButtonUp(); -} - -// 快速购买 -async function qucikBuy() { - //设置脚本环境的游戏分辨率和DPI缩放 - setGameMetrics(3840, 2160, 1.5); - - let [buyBtnX, buyBtnY] = [3200, 2045]; - let [confirmBtnX, confirmBtnY] = [2025, 1570]; - let [addNumX, addNumY] = [2060, 1208]; - - // 等待界面切换 - await sleep(200); - - try { - // 查找购买按钮 - let captureRegion = captureGameRegion(); - let buyBtn = captureRegion.Find(othrtRo.buy.ro); - captureRegion.dispose(); - - if (buyBtn.isEmpty()) { - log.warn("未找到购买按钮"); - return false; - } - - // 点击购买按钮 - click(buyBtn.x * 2 + buyBtn.width, buyBtn.y * 2 + buyBtn.height); - // 等待购买窗口弹出 - await sleep(300); - - // 增加数量至最大 - leftButtonDown(); - await naturalMove(addNumX, addNumY, addNumX + 666, addNumY - 233, 100); - leftButtonUp(); - - // 确保最终数量至最大 - await sleep(200); - click(2370, 1208); - await sleep(200); - - // 点击确认按钮 - click(confirmBtnX, confirmBtnY); - // 等待购买完成 - await sleep(1200); - // 点击空白关闭 - click(buyBtnX, buyBtnY); - await sleep(200); - - return true; - } catch (error) { - log.error(`快速购买失败: ${error.message}`); - return false; - } -} - -// 跳过对话 -async function spikChat(npcName) { - let count = 6; // 添加let声明 - await sleep(1000); - if (npcName == "布纳马" || npcName == "杜拉夫") { - // 设置脚本环境的游戏分辨率和DPI缩放 - setGameMetrics(1920, 1080, 1); - - // 交互 - let loop_count = 3; - if (npcName == "布纳马") { - loop_count = 3; - } else if (npcName == "杜拉夫") { - loop_count = 2; - } - - for (let i = 0; i < loop_count; i++) { - keyPress("VK_F"); - await sleep(1500); - } - - // 点击有什么卖的 - let captureRegion = captureGameRegion() - let resList = captureRegion.findMulti(RecognitionObject.ocrThis); - for (let i = 0; i < resList.count; i++) { - if (resList[i].text.includes("有什么卖的") || resList[i].text.includes("可以卖一些")) { - await sleep(500); - click(resList[i].x + 30, resList[i].y + 30); // 点击有什么卖的 - await sleep(500); - - // 使用完后释放资源 - captureRegion.dispose(); - } - } - - await sleep(1500); - keyPress("VK_F"); - await sleep(1500); - keyPress("VK_F"); - await sleep(1500); - } else { - for (let i = 0; i < count; i++) { - keyPress("VK_F"); - await sleep(1500); - } - } -} - -// ==================== 商品识别对象映射表 ==================== -let foodROMap = {}; // 键为商品名(中文),值为 RecognitionObject - -// 加载识别对象(只加载用户选择的商品) -async function initRo() { - try { - for (let foodName of requiredFoods) { - const imagePath = `assets/images/${foodName}.png`; - try { - const ro = RecognitionObject.TemplateMatch(file.ReadImageMatSync(imagePath)); - ro.Threshold = 0.75; - ro.Use3Channels = true; - foodROMap[foodName] = ro; - logConditional(`已启用商品: ${foodName}`); - } catch (e) { - log.error(`加载商品图片失败: ${imagePath},请确保图片存在`); - } - } - for (let [key, item] of Object.entries(othrtRo)) { - item.ro = RecognitionObject.TemplateMatch(file.ReadImageMatSync(item.file)); - item.ro.Threshold = 0.85; - } - logConditional(`总共启用了 ${requiredFoods.size} 种商品`); - return true; - } - catch (error) { - log.error("加载识别对象时发生错误: {error}", error.message); - throw error; - } -} - -// 主要购买逻辑 -async function buyFoods(npcName, npcRecords, currentPeriod) { - // 设置脚本环境的游戏分辨率和DPI缩放 - setGameMetrics(3840, 2160, 1.5); - - // 获取商人数据 - const npc = npcData[npcName]; - const npcRecord = getNpcRecord(npcRecords, npc.name); - - // 获取显示名称 - const displayName = getDisplayNameFromPath(npc.path); - - if (recordDebug) { - log.info(`[调试] 开始处理: ${displayName}`); - if (npcRecord) { - log.info(`[调试] 当前记录: 1d=${npcRecord["1d_time"] || "无"}, 3d=${npcRecord["3d_time"] || "无"}, 7d=${npcRecord["7d_time"] || "无"}, thu=${npcRecord["thu_time"] || "无"}, month=${npcRecord["month_time"] || "无"}`); - } - } - - // 判断需要购买的商品 - const foodsToBuy = shouldBuyFoods(npc, npcRecord, currentPeriod, ignoreRecords); - - if (recordDebug) { - log.info(`[调试] ${displayName} 购买判断结果:`); - log.info(`[调试] 1天商品: ${foodsToBuy["1d"].join(", ")}`); - log.info(`[调试] 3天商品: ${foodsToBuy["3d"].join(", ")}`); - log.info(`[调试] 7天商品: ${foodsToBuy["7d"].join(", ")}`); - log.info(`[调试] 周四商品: ${foodsToBuy["thu"].join(", ")}`); - log.info(`[调试] 每月商品: ${foodsToBuy["month"].join(", ")}`); - } - - // 合并所有要购买的食物 - const allFoodsToBuy = []; - if (foodsToBuy["1d"]) allFoodsToBuy.push(...foodsToBuy["1d"]); - if (foodsToBuy["3d"]) allFoodsToBuy.push(...foodsToBuy["3d"]); - if (foodsToBuy["7d"]) allFoodsToBuy.push(...foodsToBuy["7d"]); - if (foodsToBuy["thu"]) allFoodsToBuy.push(...foodsToBuy["thu"]); - if (foodsToBuy["month"]) allFoodsToBuy.push(...foodsToBuy["month"]); - - if (allFoodsToBuy.length === 0) { - logConditional(`${displayName} 没有需要购买的商品`); - return { - purchased: [], - "1d": [], - "3d": [], - "7d": [], - "thu": [], - "month": [] - }; - } - - logConditional(`${displayName} 购买列表: ${allFoodsToBuy.join(", ")}`); - - let tempFoods = [...allFoodsToBuy]; - const purchasedFoods = []; - const purchasedByType = { - "1d": [], - "3d": [], - "7d": [], - "thu": [], - "month": [] - }; - - // 构建商品到刷新类型的映射 - const foodToRefreshType = {}; - for (const type of ["1d", "3d", "7d", "thu", "month"]) { - if (foodsToBuy[type]) { - for (const food of foodsToBuy[type]) { - foodToRefreshType[food] = type; - } - } - } - - // 多页购买 - for (let i = 0; i < npc.page; i++) { - await sleep(520); - // 获取一张截图 - let captureRegion = captureGameRegion(); - - // 记录已经购买的物品 - let boughtFoods = new Set([]); - - // 匹配商品 - for (let item of tempFoods) { - if (recordDebug) { - log.info(`[调试] 尝试购买: ${item}`); - } - - // 直接从映射表中获取识别对象 - const ro = foodROMap[item]; - if (!ro) { - log.warn(`商品 "${item}" 未启用或没有识别对象,跳过`); - continue; - } - - let resList = captureRegion.FindMulti(ro); - - for (let res of resList) { - if (recordDebug) { - log.info(`[调试] 找到物品: ${item} 位置(${res.x},${res.y},${res.width},${res.height})`); - } - // 移除已购买的物品 - boughtFoods.add(item); - // 点击商品 - click(res.x * 2 + res.width, res.y * 2 + res.height); - if (await qucikBuy()) { - log.info(`购买成功: ${item}`); - // 交互或拾取:"XXXX" - await fakeLog(item, false, false, 23333); - - // 记录购买的商品 - purchasedFoods.push(item); - const refreshType = foodToRefreshType[item]; - if (refreshType) { - purchasedByType[refreshType].push(item); - - // 立即更新记录 - npcRecords = updateNpcRecord(npcRecords, npc.name, refreshType, purchasedByType[refreshType]); - await saveNpcRecords(npcRecords); - } - - await sleep(1500); - // 重新截图 - captureRegion = captureGameRegion(); - } - else { - log.info(`购买失败: ${item}, 背包已经满或商品已售罄`); - } - } - } - - captureRegion.dispose(); - // 从已购买物品中移除 - tempFoods = tempFoods.filter(item => !boughtFoods.has(item)); - - // 若不是最后一页且还有未购买的物品 - if (tempFoods.length > 0 && i !== npc.page - 1) { - logConditional("切换到下一页商品"); - await nextFoodsPage(); - - // 最后一次切换界面, 等待UI回弹 - if (i === npc.page - 2) { - logConditional("等待界面回弹"); - await sleep(520); - } - } - } - - if (purchasedFoods.length > 0) { - log.info(`${displayName} 购买完成,成功购买: ${purchasedFoods.join(", ")}`); - } else { - logConditional(`${displayName} 没有成功购买任何商品`); - } - - // 返回购买结果 - return { - purchased: purchasedFoods, - "1d": purchasedByType["1d"], - "3d": purchasedByType["3d"], - "7d": purchasedByType["7d"], - "thu": purchasedByType["thu"], - "month": purchasedByType["month"] - }; -} - -// 初始化商人商品 -async function initNpcData(records) { - for (let [key, npc] of Object.entries(npcData)) { - // 检查是否通过标签禁用 - if (npc.tags && Array.isArray(npc.tags)) { - const hasDisabledTag = npc.tags.some(tag => disabledTags.includes(tag)); - if (hasDisabledTag) { - npc.enable = false; - logConditional(`按标签禁用商人: ${npc.name} (标签: ${npc.tags.join(", ")})`); - continue; - } - } - - const npcRecord = getNpcRecord(records, npc.name); - - // 判断是否需要强制刷新 - const forceRefresh = ignoreRecords; - - // 判断需要购买的商品(这里只是检查是否有商品需要购买) - const gameTime = getGameTime(); - const currentPeriod = getBasePeriod(gameTime); - const foodsToBuy = shouldBuyFoods(npc, npcRecord, currentPeriod, forceRefresh); - - // 检查是否有需要购买的商品 - const hasFoodsToBuy = foodsToBuy["1d"].length > 0 || - foodsToBuy["3d"].length > 0 || - foodsToBuy["7d"].length > 0 || - foodsToBuy["thu"].length > 0 || - foodsToBuy["month"].length > 0; - - npc.enable = npc.enable && hasFoodsToBuy; - - if (recordDebug && !npc.enable && hasFoodsToBuy) { - const displayName = getDisplayNameFromPath(npc.path); - log.info(`${displayName} 有商品需要购买但商人被禁用`); - } - } -} - -(async function () { - try { - // ==================== 确定账号名 ==================== - let rawUserName = settings.userName ? settings.userName.trim() : ""; - if (!rawUserName) { - log.info("settings.userName 为空,尝试从游戏获取UID作为账户名..."); - const uid = await getUidFromGame(); - if (uid) { - userName = uid; - log.info(`使用UID作为账户名: ${userName}`); - } else { - userName = "默认账户"; - log.warn("无法获取UID,使用默认账户"); - } - } else { - userName = validateUserName(rawUserName); - if (userName !== rawUserName) { - log.info(`账户名已清理: ${userName}`); - settings.userName = userName; - } - } - - log.info(`当前账户: ${userName}`); - - // ==================== 加载外部数据 ==================== - if (!await loadExternalData()) { - log.error("商人数据加载失败,脚本终止"); - return; - } - const skip = settings.skip || false; - - // ==================== 初始化识别对象 ==================== - await initRo(); - - logConditional("识别对象初始化完成"); - - // ==================== 加载商人购买记录 ==================== - let npcRecords = await loadNpcRecords(); - - logConditional(`已加载 ${npcRecords.length} 个商人的购买记录`); - - if (recordDebug && npcRecords.length > 0) { - log.info("[调试] 当前商人记录:"); - npcRecords.forEach(record => { - log.info(`[调试] ${record.npcname}:`); - if (record["1d_time"]) log.info(`[调试] 1天刷新: ${record["1d_time"]}`); - if (record["3d_time"]) log.info(`[调试] 3天刷新: ${record["3d_time"]}`); - if (record["7d_time"]) log.info(`[调试] 7天刷新: ${record["7d_time"]}`); - if (record["thu_time"]) log.info(`[调试] 周四刷新: ${record["thu_time"]}`); - if (record["month_time"]) log.info(`[调试] 每月刷新: ${record["month_time"]}`); - }); - } - - // ==================== 初始化商人数据 ==================== - await initNpcData(npcRecords); - - logConditional("商人数据初始化完成"); - - // 统计启用的商人数量 - const enabledNpcs = Object.values(npcData).filter(npc => npc.enable); - log.info(`本次执行将处理 ${enabledNpcs.length} 个商人`); - - // ==================== 自动购买 ==================== - // 获取当前时间和周期 - const gameTime = getGameTime(); - const currentPeriod = getBasePeriod(gameTime); - - if (recordDebug) { - log.info(`[调试] 当前游戏时间: ${formatDateToLocalISO(gameTime)}`); - log.info(`[调试] 当前周期信息: 3天周期=${currentPeriod.threeDayPeriod}, 7天周期=${currentPeriod.sevenDayPeriod}`); - } - - let npcIndex = 0; - for (let [key, npc] of Object.entries(npcData)) { - if (npc.enable) { - npcIndex++; - // 获取显示名称(从路径中提取) - const displayName = getDisplayNameFromPath(npc.path); - log.info(`当前进度:${npcIndex}/${enabledNpcs.length}`); - log.info(`开始前往: ${displayName}`); // 修改这里 - - await genshin.returnMainUi(); - - // 地图追踪开始 - await fakeLog(displayName, false, true, 0); - - // 设置游戏时间 - if (npc.time === "night") { - // 设置为晚上8点 - await genshin.setTime(20, 0, skip); - } - else if (npc.time === "day") { - // 设置为早上8点 - await genshin.setTime(8, 0, skip); - } - - await autoPath(npc.path); - await spikChat(npc.name); - - // 购买商品,传入当前记录和周期 - const purchaseResult = await buyFoods(key, npcRecords, currentPeriod); - - // 返回主界面 - await genshin.returnMainUi(); - log.info(`完成: ${displayName}`); - - // 伪造日志任务结束 - await fakeLog(displayName, false, false, 0); - - // 商人之间等待 - if (npcIndex < enabledNpcs.length) { - logConditional("等待1.5秒后处理下一个商人"); - await sleep(1500); - } - } - else { - if (recordDebug) { - log.info(`[调试] 跳过未启用的商人: ${npc.name}`); - } - } - } - - log.info("=== 商品购买脚本执行完成 ==="); - - } catch (error) { - log.error(`执行时发生错误: ${error.message}`); - } - +// fakeLog 函数,使用方法:将本函数放在主函数前,调用时请务必使用await,否则可能出现v8白框报错 +// 在js开头处伪造该js结束运行的日志信息,如 await fakeLog("js脚本", true, true, 0); +// 在js结尾处伪造该js开始运行的日志信息,如 await fakeLog("js脚本", true, false, 2333); +// duration项目仅在伪造结束信息时有效,且无实际作用,可以任意填写,当你需要在日志中输出特定值时才需要,单位为毫秒 +// 在调用地图追踪前伪造该地图追踪开始运行的日志信息,如 await fakeLog(`地图追踪.json`, false, true, 0); +// 在调用地图追踪后伪造该地图追踪结束运行的日志信息,如 await fakeLog(`地图追踪.json`, false, false, 0); +// 如此便可以在js运行过程中伪造地图追踪的日志信息,可以在日志分析等中查看 +// name: 字符串,表示脚本或地图追踪的名称 +// isJs: 布尔值,true表示脚本,false表示地图追踪 +// isStart: 布尔值,true表示开始日志,false表示结束日志 +// duration: 整数,表示脚本或地图追踪的运行时间(仅在结束日志时使用),单位为毫秒_基本填0即可 +// 示例: +// JS脚本开始 +// await fakeLog("js脚本名", true, true, 0); +// JS脚本结束 +// await fakeLog("js脚本名", true, false, 0); +// 地图追踪开始 +// await fakeLog("地图追踪名", false, true, 0); +// 地图追踪结束 +// await fakeLog("地图追踪名", false, false, 0); +// 交互或拾取:"XXXX" +// await fakeLog("XXXX", false, false, 23333); +async function fakeLog(name, isJs, isStart, duration) { + await sleep(10); + const currentTime = Date.now(); + // 参数检查 + if (typeof name !== 'string') { + log.error("参数 'name' 必须是字符串类型!"); + return; + } + if (typeof isJs !== 'boolean') { + log.error("参数 'isJs' 必须是布尔型!"); + return; + } + if (typeof isStart !== 'boolean') { + log.error("参数 'isStart' 必须是布尔型!"); + return; + } + if (typeof duration !== 'number' || !Number.isInteger(duration)) { + log.error("参数 'duration' 必须是整数!"); + return; + } + + // 将 currentTime 转换为 Date 对象并格式化为 HH:mm:ss.sss + const date = new Date(currentTime); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + const seconds = String(date.getSeconds()).padStart(2, '0'); + const milliseconds = String(date.getMilliseconds()).padStart(3, '0'); + const formattedTime = `${hours}:${minutes}:${seconds}.${milliseconds}`; + + // 将 duration 转换为分钟和秒,并保留三位小数 + const durationInSeconds = duration / 1000; // 转换为秒 + const durationMinutes = Math.floor(durationInSeconds / 60); + const durationSeconds = (durationInSeconds % 60).toFixed(3); // 保留三位小数 + + // 使用四个独立的 if 语句处理四种情况 + if (isJs && isStart) { + // 处理 isJs = true 且 isStart = true 的情况 + const logMessage = `正在伪造js开始的日志记录\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `------------------------------\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `→ 开始执行JS脚本: "${name}"`; + log.debug(logMessage); + } + if (isJs && !isStart) { + // 处理 isJs = true 且 isStart = false 的情况 + const logMessage = `正在伪造js结束的日志记录\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `→ 脚本执行结束: "${name}", 耗时: ${durationMinutes}分${durationSeconds}秒\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `------------------------------`; + log.debug(logMessage); + } + if (!isJs && isStart) { + // 处理 isJs = false 且 isStart = true 的情况 + const logMessage = `正在伪造地图追踪开始的日志记录\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `------------------------------\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `→ 开始执行地图追踪任务: "${name}"`; + log.debug(logMessage); + } + if (!isJs && !isStart) { + // 处理 isJs = false 且 isStart = false 的情况 + const logMessage = `正在伪造地图追踪结束的日志记录\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `→ 脚本执行结束: "${name}", 耗时: ${durationMinutes}分${durationSeconds}秒\n\n` + + `[${formattedTime}] [INF] BetterGenshinImpact.Service.ScriptService\n` + + `------------------------------`; + log.debug(logMessage); + } + // 交互或拾取:"XXXX" + if (duration == 23333) { + log.info(`交互或拾取:"${name}"`); + } +} + +// ==================== 日志辅助函数 ==================== +function logConditional(message) { + if (ignoreRecords || recordDebug) { + log.info(message); + } else { + log.debug(message); + } +} + +// ==================== 加载外部数据文件 ==================== +let npcData = {}; + +// 存储用户要购买的商品名称集合(中文名) +let userFoodsToBuy = new Set(); +let userTagsToBuy = new Set(); // 标签名 +let allTags = new Set(); // 所有可用标签(从 npcs.json 收集) +let requiredFoods = new Set(); // 所有需要加载图片的商品 + +async function loadExternalData() { + try { + // 加载商人数据 + const npcsContent = await file.readText("assets/npcs.json"); + npcData = JSON.parse(npcsContent); + logConditional(`已加载商人数据: ${Object.keys(npcData).length} 个商人`); + + // ========== 收集所有标签 ========== + for (let key in npcData) { + let npc = npcData[key]; + if (npc.tags && Array.isArray(npc.tags)) { + npc.tags.forEach(tag => allTags.add(tag)); + } + } + logConditional(`共收集到 ${allTags.size} 个标签`); + + // ========== 解析用户输入 ========== + const foodsInput = (settings.foodsToBuy || "").trim(); + if (foodsInput) { + const items = foodsInput.split(/[,\s、]+/).filter(item => item.trim() !== ""); + const enabledFoodsList = []; + const enabledTagsList = []; + + for (const item of items) { + if (allTags.has(item)) { + // 是标签 + userTagsToBuy.add(item); + enabledTagsList.push(item); + } else { + // 视为商品名 + userFoodsToBuy.add(item); + enabledFoodsList.push(item); + } + } + + // 输出用户启用的标签和商品 + if (enabledTagsList.length > 0) { + log.info(`用户启用了以下标签: ${enabledTagsList.join(", ")}`); + } + if (enabledFoodsList.length > 0) { + log.info(`用户启用了以下商品: ${enabledFoodsList.join(", ")}`); + } + if (enabledTagsList.length === 0 && enabledFoodsList.length === 0) { + log.warn("用户未启用任何标签或商品"); + } + } else { + log.warn("用户未指定要购买的商品或标签"); + } + + // 计算所有需要加载图片的商品 + requiredFoods = new Set(userFoodsToBuy); + for (let key in npcData) { + let npc = npcData[key]; + if (npc.tags && Array.isArray(npc.tags) && npc.tags.some(tag => userTagsToBuy.has(tag))) { + if (npc._1d_foods) npc._1d_foods.forEach(food => requiredFoods.add(food)); + if (npc._3d_foods) npc._3d_foods.forEach(food => requiredFoods.add(food)); + if (npc._7d_foods) npc._7d_foods.forEach(food => requiredFoods.add(food)); + if (npc._thu_foods) npc._thu_foods.forEach(food => requiredFoods.add(food)); + if (npc._month_foods) npc._month_foods.forEach(food => requiredFoods.add(food)); + } + } + logConditional(`需要加载图片的商品总数: ${requiredFoods.size}`); + + return true; + } catch (error) { + log.error(`加载外部数据失败: ${error.message}`); + return false; + } +} + +// ==================== 辅助函数:获取商人的所有商品 ==================== +function getAllNpcFoods(npc) { + const all = []; + if (npc._1d_foods) all.push(...npc._1d_foods); + if (npc._3d_foods) all.push(...npc._3d_foods); + if (npc._7d_foods) all.push(...npc._7d_foods); + if (npc._thu_foods) all.push(...npc._thu_foods); + if (npc._month_foods) all.push(...npc._month_foods); + return all; +} + +// ==================== 辅助函数:过滤用户要购买的商品 ==================== +function filterUserFoods(foodList) { + if (!foodList || !Array.isArray(foodList)) { + return []; + } + + return foodList.filter(food => { + // 直接检查商品名是否在用户要购买的商品集合中 + const shouldBuy = userFoodsToBuy.has(food); + if (recordDebug && shouldBuy) { + log.info(`[调试] 用户选择购买: ${food}`); + } + return shouldBuy; + }); +} + +// ==================== 辅助函数:获取调整后的星期几(1-7,周一为1) ==================== +function getAdjustedDayOfWeek() { + const now = new Date(); + let dayOfWeek = now.getDay(); // 0-6 (0是周日) + const hours = now.getHours(); + + // 如果时间在00:00~04:00之间,视为前一天 + if (hours < 4) { + dayOfWeek = dayOfWeek === 0 ? 6 : dayOfWeek - 1; // 前一天 + if (recordDebug) { + log.info(`[调试] 当前时间 ${now.getHours()}:${now.getMinutes()},视为前一天(周 ${dayOfWeek === 0 ? 7 : dayOfWeek})`); + } + } else if (recordDebug) { + log.info(`[调试] 当前时间 ${now.getHours()}:${now.getMinutes()},使用当天(周 ${dayOfWeek === 0 ? 7 : dayOfWeek})`); + } + + // 转换为1-7格式(7代表周日) + return dayOfWeek === 0 ? 7 : dayOfWeek; +} + +// ==================== 辅助函数:获取给定日期所在的周一日期 ==================== +function getMondayOfWeek(date) { + const d = new Date(date); + // 调整到4点刷新 + if (d.getHours() < 4) { + d.setDate(d.getDate() - 1); + } + const day = d.getDay(); + const diff = day === 0 ? 6 : day - 1; + d.setDate(d.getDate() - diff); + d.setHours(4, 0, 0, 0); + return d; +} + +// ==================== 辅助函数:获取给定日期所在的周四日期 ==================== +function getThursdayOfWeek(date) { + const d = new Date(date); + // 调整到4点刷新 + if (d.getHours() < 4) { + d.setDate(d.getDate() - 1); + } + const day = d.getDay(); // 0=周日, 1=周一, 2=周二, 3=周三, 4=周四, 5=周五, 6=周六 + // 目标周四:如果当前<=周四,则取本周四;否则取下周四 + let targetDay = 4; // 周四对应的getDay值为4 + if (day <= targetDay) { + d.setDate(d.getDate() + (targetDay - day)); + } else { + d.setDate(d.getDate() + (7 - day + targetDay)); + } + d.setHours(4, 0, 0, 0); + return d; +} + +// ==================== 辅助函数:获取下个月1号的日期 ==================== +function getNextMonthFirstDay(date) { + const d = new Date(date); + d.setMonth(d.getMonth() + 1); + d.setDate(1); + d.setHours(4, 0, 0, 0); + return d; +} + +// ==================== 账号管理功能 ==================== +let userName; + +// 清理账户名,防止路径非法字符 +function validateUserName(name) { + if (typeof name !== 'string' || name.trim() === '') return '默认账户'; + // 替换 Windows 路径非法字符,并去除首尾空格 + return name.trim().replace(/[\\/:*?"<>|]/g, '_'); +} + +async function getUidFromGame() { + // 设置脚本环境的游戏分辨率和DPI缩放 + setGameMetrics(3840, 2160, 1.5); + + // 确保回到主界面 + await genshin.returnMainUi(); + await sleep(1000); + + // 打开派蒙菜单 + keyPress("G"); + await sleep(500); + + // 加载退出按钮识别图(需要 assets/images/Exit.png 存在) + let imageExitRo; + try { + imageExitRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/images/Exit.png")); + imageExitRo.Threshold = 0.8; + } catch (e) { + log.warn("无法加载 assets/Exit.png,将使用固定延时等待菜单打开"); + } + + if (imageExitRo) { + // 等待退出按钮出现,最多5秒 + const startTime = Date.now(); + while (Date.now() - startTime < 5000) { + let capture = captureGameRegion(); + if (capture.Find(imageExitRo).isExist()) { + capture.dispose(); + break; + } + capture.dispose(); + await sleep(500); + } + } else { + await sleep(2000); // 无图片则直接等待2秒 + } + + // OCR识别UID + let gameRegion = captureGameRegion(); + let ocrResult = gameRegion.Find(RecognitionObject.Ocr(1679, 1048, 200, 28)); + gameRegion.dispose(); + + let uid = ""; + if (ocrResult.isExist() && ocrResult.text) { + uid = ocrResult.text.replace(/\D/g, ''); // 只保留数字 + } + + // 关闭派蒙菜单 + keyPress("ESCAPE"); + await sleep(500); + await genshin.returnMainUi(); + + if (uid && uid.length >= 5) { // UID通常9位,至少5位 + log.info(`从游戏获取到UID: ${uid}`); + return uid; + } else { + log.warn("无法从游戏获取UID"); + return null; + } +} + +// 确保设置变量存在 +const ignoreRecords = settings.ignoreRecords || false; +const recordDebug = settings.recordDebug || false; + +// 解析禁用的标签列表 +const disabledTags = (settings.disabledTags || "").split(/[,\s、]+/).filter(tag => tag.trim() !== ""); +if (disabledTags.length > 0) { + log.info(`已禁用标签: ${disabledTags.join(", ")}`); +} + +// 修改AKF设置处理 +const AKFValue = parseInt(settings.AKF) || 1; +let AFKDay = null; +let followSystem = false; + +if (AKFValue === 0) { + // 0 表示跟随系统判定 + followSystem = true; + log.info("每周商品购买: 跟随系统判定"); +} else { + AFKDay = AKFValue === 7 ? 0 : AKFValue; + log.info(`每周商品购买: 每周${AFKDay === 0 ? "日" : AFKDay}购买`); +} + +// 获取账号记录路径 +function getRecordPath(accountName) { + // 简单处理账户名,如果为空则使用默认账户 + if (!accountName || accountName.trim() === "") { + accountName = "默认账户"; + } + return `record/${accountName.trim()}/records.json`; +} + +// ==================== 新增函数:读取商人记录文件 ==================== +async function loadNpcRecords() { + const recordPath = getRecordPath(userName); + try { + const content = await file.readText(recordPath); + if (content.trim()) { + return JSON.parse(content); + } + } catch (error) { + // 文件不存在或格式错误,返回空数组 + } + return []; +} + +// ==================== 辅助函数:从路径中提取显示名称 ==================== +function getDisplayNameFromPath(path) { + try { + // 从路径中提取文件名(不带.json扩展名) + // 例如:assets/path/璃月-璃月港-阿桂.json → 璃月-璃月港-阿桂 + const fileName = path.split('/').pop(); // 获取最后一部分 + return fileName.replace('.json', ''); // 移除.json扩展名 + } catch (error) { + // 如果解析失败,返回原始路径或默认值 + return path || "未知位置"; + } +} + +// ==================== 保存商人记录 ==================== +async function saveNpcRecords(records) { + const recordPath = getRecordPath(userName); + try { + await file.writeText(recordPath, JSON.stringify(records, null, 2)); + return true; + } catch (error) { + log.error(`保存记录文件失败: ${error.message}`); + return false; + } +} + +// ==================== 获取商人记录 ==================== +function getNpcRecord(records, npcName) { + return records.find(record => record.npcname === npcName); +} + +// ==================== 更新商人记录 ==================== +function updateNpcRecord(records, npcName, refreshType, purchasedItems) { + // 如果没有购买任何商品,不更新记录 + if (!purchasedItems || purchasedItems.length === 0) { + return records; + } + + let record = getNpcRecord(records, npcName); + + if (!record) { + record = { + npcname: npcName, + "1d": [], + "1d_time": null, + "3d": [], + "3d_time": null, + "7d": [], + "7d_time": null, + "thu": [], + "thu_time": null, + "month": [], + "month_time": null + }; + records.push(record); + } + + const now = new Date(); + let refreshTime; + + if (refreshType === "1d") { + // 1天商品:下次刷新是购买日+1天 + refreshTime = new Date(now); + refreshTime.setHours(4, 0, 0, 0); + // 如果当前时间在4点前,刷新时间从昨天开始算 + if (now.getHours() < 4) { + refreshTime.setDate(refreshTime.getDate() - 1); + } + refreshTime.setDate(refreshTime.getDate() + 1); + } else if (refreshType === "3d") { + // 3天商品:基于基准日的3天周期计算 + // 基准时间:2025-08-09 04:00 GMT+8 (转换为本地时间) + const baseTime = new Date(2025, 7, 9, 4, 0, 0); // 2025-08-09 04:00 + + // 调整当前时间到4点基准 + const adjustedNow = new Date(now); + if (adjustedNow.getHours() < 4) { + adjustedNow.setDate(adjustedNow.getDate() - 1); + } + adjustedNow.setHours(4, 0, 0, 0); + + // 计算距离基准日的天数 + const timeDiff = adjustedNow.getTime() - baseTime.getTime(); + const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24)); + + // 计算当前3天周期 + const currentPeriod = Math.floor(daysDiff / 3); + + // 下一个3天周期的开始时间 + const nextPeriod = currentPeriod + 1; + refreshTime = new Date(baseTime); + refreshTime.setDate(baseTime.getDate() + (nextPeriod * 3)); + + // 确保刷新时间是04:00 + refreshTime.setHours(4, 0, 0, 0); + } else if (refreshType === "7d") { + // 7天商品(周一刷新):下次刷新是下周一 + refreshTime = getMondayOfWeek(now); + refreshTime.setDate(refreshTime.getDate() + 7); + } else if (refreshType === "thu") { + // 周四刷新商品:下次刷新是下周四 + refreshTime = getThursdayOfWeek(now); + refreshTime.setDate(refreshTime.getDate() + 7); + } else if (refreshType === "month") { + // 每月1号刷新商品:下次刷新是下个月1号 + refreshTime = getNextMonthFirstDay(now); + } + + // 只更新实际购买的商品 + record[refreshType] = purchasedItems; + record[`${refreshType}_time`] = formatDateToLocalISO(refreshTime); + + // 计算下次刷新日期 + if (recordDebug) { + const nextRefresh = new Date(refreshTime); + log.info(`${npcName} 下次${refreshType}刷新时间: ${formatDateToLocalISO(nextRefresh)}`); + } + + return records; +} + +// ==================== 计算3天刷新商品基准日周期 ==================== +function getBasePeriod(currentDate) { + // 基准时间:2025-08-08 20:00 UTC (对应2025-08-09 04:00 GMT+8) + const baseTime = Date.UTC(2025, 7, 8, 20, 0, 0); + + // 转换当前时间到UTC+8 + const utcNowMs = currentDate.getTime() + currentDate.getTimezoneOffset() * 60 * 1000; + const gmt8Ms = utcNowMs + 8 * 60 * 60 * 1000; + const gmt8Date = new Date(gmt8Ms); + + // 如果还没到凌晨4点,算作前一天 + if (gmt8Date.getHours() < 4) { + gmt8Date.setDate(gmt8Date.getDate() - 1); + } + + // 计算距离基准日的天数 + const daysDiff = Math.floor((gmt8Date.getTime() - baseTime) / (24 * 60 * 60 * 1000)); + + return { + day: gmt8Date, + daysDiff: daysDiff, + threeDayPeriod: Math.floor(daysDiff / 3), + sevenDayPeriod: Math.floor(daysDiff / 7) + }; +} + +// ==================== 判断是否需要购买 ==================== +function shouldBuyFoods(npc, npcRecord, currentPeriod, forceRefresh = false) { + const now = new Date(); + const foodsToBuy = { + "1d": [], + "3d": [], + "7d": [], + "thu": [], + "month": [] + }; + + // 首先检查禁用(此处假设之前已检查过,但为防止遗漏,可再加一道保险) + // 实际上禁用检查在更外层(initNpcData 和主循环)已经处理,这里可以省略 + + if (forceRefresh) { + // 强制刷新:决定使用完整列表还是具体商品列表 + // 先判断是否命中标签 + let useAll = false; + if (npc.tags && Array.isArray(npc.tags)) { + useAll = npc.tags.some(tag => userTagsToBuy.has(tag)); + } + if (useAll) { + // 标签商人:购买所有商品 + if (npc._1d_foods) foodsToBuy["1d"] = npc._1d_foods; + if (npc._3d_foods) foodsToBuy["3d"] = npc._3d_foods; + if (npc._7d_foods) foodsToBuy["7d"] = npc._7d_foods; + if (npc._thu_foods) foodsToBuy["thu"] = npc._thu_foods; + if (npc._month_foods) foodsToBuy["month"] = npc._month_foods; + } else { + // 非标签商人:只购买用户明确指定的商品 + if (npc._1d_foods) foodsToBuy["1d"] = filterUserFoods(npc._1d_foods); + if (npc._3d_foods) foodsToBuy["3d"] = filterUserFoods(npc._3d_foods); + if (npc._7d_foods) foodsToBuy["7d"] = filterUserFoods(npc._7d_foods); + if (npc._thu_foods) foodsToBuy["thu"] = filterUserFoods(npc._thu_foods); + if (npc._month_foods) foodsToBuy["month"] = filterUserFoods(npc._month_foods); + } + return foodsToBuy; + } + + // 辅助函数:处理单个类型,根据是否命中标签决定使用完整列表还是过滤列表 + function processType(type, fullList) { + if (!fullList || fullList.length === 0) return []; + + // 判断该商人是否命中用户标签(只需判断一次,可在外层缓存结果) + // 此处简单处理:每次调用都判断,但实际可优化 + let useAll = false; + if (npc.tags && Array.isArray(npc.tags)) { + useAll = npc.tags.some(tag => userTagsToBuy.has(tag)); + } + + // 确定要购买的候选商品列表 + let candidateList = useAll ? fullList : filterUserFoods(fullList); + if (candidateList.length === 0) return []; + + // 获取已购买列表 + const purchasedList = npcRecord && npcRecord[type] ? npcRecord[type] : []; + // 找出未购买的商品 + const notPurchased = candidateList.filter(food => !purchasedList.includes(food)); + + if (!npcRecord || !npcRecord[`${type}_time`]) { + return candidateList; // 从未买过,全部尝试 + } + + const nextRefreshTime = new Date(npcRecord[`${type}_time`]); + if (now >= nextRefreshTime) { + return candidateList; // 已刷新,全部尝试 + } else { + return notPurchased; // 未刷新,只尝试未购买过的 + } + } + + foodsToBuy["1d"] = processType("1d", npc._1d_foods); + foodsToBuy["3d"] = processType("3d", npc._3d_foods); + foodsToBuy["7d"] = processType("7d", npc._7d_foods); + foodsToBuy["thu"] = processType("thu", npc._thu_foods); + foodsToBuy["month"] = processType("month", npc._month_foods); + + return foodsToBuy; +} + +const othrtRo = { + "buy": { + "name": "购买按钮", + "file": "assets/images/buyBtn.png" + } +} + +// 获取游戏内时间(考虑4点刷新) +function getGameTime() { + const now = new Date(); + const utcNowMs = now.getTime() + now.getTimezoneOffset() * 60 * 1000; + const gmt8Ms = utcNowMs + 8 * 60 * 60 * 1000; + const gmt8Date = new Date(gmt8Ms); + + // 如果还没到凌晨4点,算作前一天 + if (gmt8Date.getHours() < 4) { + gmt8Date.setDate(gmt8Date.getDate() - 1); + } + + return gmt8Date; +} + +// ==================== 新增函数:格式化为本地ISO时间 ==================== +function formatDateToLocalISO(date) { + // 将日期格式化为 "YYYY-MM-DDTHH:mm:ss+08:00" 格式 + const pad = (n) => n.toString().padStart(2, '0'); + + const year = date.getFullYear(); + const month = pad(date.getMonth() + 1); + const day = pad(date.getDate()); + const hours = pad(date.getHours()); + const minutes = pad(date.getMinutes()); + const seconds = pad(date.getSeconds()); + + return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}+08:00`; +} + +// 地图追踪 +async function autoPath(locationPath) { + try { + let filePath = locationPath; + await pathingScript.runFile(filePath); + await sleep(200); + + return true; + } catch (error) { + log.error(`执行路径时发生错误: ${error.message}`); + return false; + } +} + +// 平滑过渡函数(缓动效果) +function smoothStep(t) { + return t * t * (3 - 2 * t); +} + +// 模拟鼠标移动到指定位置(带曲线路径) +async function naturalMove(initX, initY, targetX, targetY, duration, wiggle = 30) { + + // 生成控制点(使路径形成曲线) + const controlX = (initX + targetX) / 2 + (Math.random() * wiggle * 2 - wiggle); + const controlY = (initY + targetY) / 2 + (Math.random() * wiggle * 2 - wiggle); + + const steps = Math.max(duration / 20, 10); // 计算步数 + + for (let i = 0; i <= steps; i++) { + const progress = i / steps; + const t = smoothStep(progress); // 使用平滑过渡 + + // 二次贝塞尔曲线计算 + const x = (1 - t) * (1 - t) * initX + 2 * (1 - t) * t * controlX + t * t * targetX; + const y = (1 - t) * (1 - t) * initY + 2 * (1 - t) * t * controlY + t * t * targetY; + + moveMouseTo(Math.trunc(x), Math.trunc(y)); + + // 随机延迟使移动更自然 + await sleep(Math.trunc(duration / steps * (0.8 + Math.random() * 0.4))); + } + + await sleep(200); + // 确保最终位置准确 + moveMouseTo(targetX, targetY); +} + +// 切换下一页商品 +async function nextFoodsPage() { + //设置脚本环境的游戏分辨率和DPI缩放 + setGameMetrics(3840, 2160, 1.5); + + let [initX, initY] = [1500, 1850]; + let [targetX, targetY] = [1800, 260]; + + moveMouseTo(initX, initY); + leftButtonDown(); + await naturalMove(initX, initY, targetX, targetY, 300); + + // 按住了, 防止弹太远 + await sleep(520); + leftButtonUp(); +} + +// 快速购买 +async function qucikBuy() { + //设置脚本环境的游戏分辨率和DPI缩放 + setGameMetrics(3840, 2160, 1.5); + + let [buyBtnX, buyBtnY] = [3200, 2045]; + let [confirmBtnX, confirmBtnY] = [2025, 1570]; + let [addNumX, addNumY] = [2060, 1208]; + + // 等待界面切换 + await sleep(200); + + try { + // 查找购买按钮 + let captureRegion = captureGameRegion(); + let buyBtn = captureRegion.Find(othrtRo.buy.ro); + captureRegion.dispose(); + + if (buyBtn.isEmpty()) { + log.warn("未找到购买按钮"); + return false; + } + + // 点击购买按钮 + click(buyBtn.x * 2 + buyBtn.width, buyBtn.y * 2 + buyBtn.height); + // 等待购买窗口弹出 + await sleep(300); + + // 增加数量至最大 + leftButtonDown(); + await naturalMove(addNumX, addNumY, addNumX + 666, addNumY - 233, 100); + leftButtonUp(); + + // 确保最终数量至最大 + await sleep(200); + click(2370, 1208); + await sleep(200); + + // 点击确认按钮 + click(confirmBtnX, confirmBtnY); + // 等待购买完成 + await sleep(1200); + // 点击空白关闭 + click(buyBtnX, buyBtnY); + await sleep(200); + + return true; + } catch (error) { + log.error(`快速购买失败: ${error.message}`); + return false; + } +} + +// 跳过对话 +async function spikChat(npcName) { + let count = 6; // 添加let声明 + await sleep(1000); + if (npcName == "布纳马" || npcName == "杜拉夫") { + // 设置脚本环境的游戏分辨率和DPI缩放 + setGameMetrics(1920, 1080, 1); + + // 交互 + let loop_count = 3; + if (npcName == "布纳马") { + loop_count = 3; + } else if (npcName == "杜拉夫") { + loop_count = 2; + } + + for (let i = 0; i < loop_count; i++) { + keyPress("VK_F"); + await sleep(1500); + } + + // 点击有什么卖的 + let captureRegion = captureGameRegion() + let resList = captureRegion.findMulti(RecognitionObject.ocrThis); + for (let i = 0; i < resList.count; i++) { + if (resList[i].text.includes("有什么卖的") || resList[i].text.includes("可以卖一些")) { + await sleep(500); + click(resList[i].x + 30, resList[i].y + 30); // 点击有什么卖的 + await sleep(500); + + // 使用完后释放资源 + captureRegion.dispose(); + } + } + + await sleep(1500); + keyPress("VK_F"); + await sleep(1500); + keyPress("VK_F"); + await sleep(1500); + } else { + for (let i = 0; i < count; i++) { + keyPress("VK_F"); + await sleep(1500); + } + } +} + +// ==================== 商品识别对象映射表 ==================== +let foodROMap = {}; // 键为商品名(中文),值为 RecognitionObject + +// 加载识别对象(只加载用户选择的商品) +async function initRo() { + try { + for (let foodName of requiredFoods) { + const imagePath = `assets/images/${foodName}.png`; + try { + const ro = RecognitionObject.TemplateMatch(file.ReadImageMatSync(imagePath)); + ro.Threshold = 0.75; + ro.Use3Channels = true; + foodROMap[foodName] = ro; + logConditional(`已启用商品: ${foodName}`); + } catch (e) { + log.error(`加载商品图片失败: ${imagePath},请确保图片存在`); + } + } + for (let [key, item] of Object.entries(othrtRo)) { + item.ro = RecognitionObject.TemplateMatch(file.ReadImageMatSync(item.file)); + item.ro.Threshold = 0.85; + } + logConditional(`总共启用了 ${requiredFoods.size} 种商品`); + return true; + } + catch (error) { + log.error("加载识别对象时发生错误: {error}", error.message); + throw error; + } +} + +// 主要购买逻辑 +async function buyFoods(npcName, npcRecords, currentPeriod) { + // 设置脚本环境的游戏分辨率和DPI缩放 + setGameMetrics(3840, 2160, 1.5); + + // 获取商人数据 + const npc = npcData[npcName]; + const npcRecord = getNpcRecord(npcRecords, npc.name); + + // 获取显示名称 + const displayName = getDisplayNameFromPath(npc.path); + + if (recordDebug) { + log.info(`[调试] 开始处理: ${displayName}`); + if (npcRecord) { + log.info(`[调试] 当前记录: 1d=${npcRecord["1d_time"] || "无"}, 3d=${npcRecord["3d_time"] || "无"}, 7d=${npcRecord["7d_time"] || "无"}, thu=${npcRecord["thu_time"] || "无"}, month=${npcRecord["month_time"] || "无"}`); + } + } + + // 判断需要购买的商品 + const foodsToBuy = shouldBuyFoods(npc, npcRecord, currentPeriod, ignoreRecords); + + if (recordDebug) { + log.info(`[调试] ${displayName} 购买判断结果:`); + log.info(`[调试] 1天商品: ${foodsToBuy["1d"].join(", ")}`); + log.info(`[调试] 3天商品: ${foodsToBuy["3d"].join(", ")}`); + log.info(`[调试] 7天商品: ${foodsToBuy["7d"].join(", ")}`); + log.info(`[调试] 周四商品: ${foodsToBuy["thu"].join(", ")}`); + log.info(`[调试] 每月商品: ${foodsToBuy["month"].join(", ")}`); + } + + // 合并所有要购买的食物 + const allFoodsToBuy = []; + if (foodsToBuy["1d"]) allFoodsToBuy.push(...foodsToBuy["1d"]); + if (foodsToBuy["3d"]) allFoodsToBuy.push(...foodsToBuy["3d"]); + if (foodsToBuy["7d"]) allFoodsToBuy.push(...foodsToBuy["7d"]); + if (foodsToBuy["thu"]) allFoodsToBuy.push(...foodsToBuy["thu"]); + if (foodsToBuy["month"]) allFoodsToBuy.push(...foodsToBuy["month"]); + + if (allFoodsToBuy.length === 0) { + logConditional(`${displayName} 没有需要购买的商品`); + return { + purchased: [], + "1d": [], + "3d": [], + "7d": [], + "thu": [], + "month": [] + }; + } + + logConditional(`${displayName} 购买列表: ${allFoodsToBuy.join(", ")}`); + + let tempFoods = [...allFoodsToBuy]; + const purchasedFoods = []; + const purchasedByType = { + "1d": [], + "3d": [], + "7d": [], + "thu": [], + "month": [] + }; + + // 构建商品到刷新类型的映射 + const foodToRefreshType = {}; + for (const type of ["1d", "3d", "7d", "thu", "month"]) { + if (foodsToBuy[type]) { + for (const food of foodsToBuy[type]) { + foodToRefreshType[food] = type; + } + } + } + + // 多页购买 + for (let i = 0; i < npc.page; i++) { + await sleep(520); + // 获取一张截图 + let captureRegion = captureGameRegion(); + + // 记录已经购买的物品 + let boughtFoods = new Set([]); + + // 匹配商品 + for (let item of tempFoods) { + if (recordDebug) { + log.info(`[调试] 尝试购买: ${item}`); + } + + // 直接从映射表中获取识别对象 + const ro = foodROMap[item]; + if (!ro) { + log.warn(`商品 "${item}" 未启用或没有识别对象,跳过`); + continue; + } + + let resList = captureRegion.FindMulti(ro); + + for (let res of resList) { + if (recordDebug) { + log.info(`[调试] 找到物品: ${item} 位置(${res.x},${res.y},${res.width},${res.height})`); + } + // 移除已购买的物品 + boughtFoods.add(item); + // 点击商品 + click(res.x * 2 + res.width, res.y * 2 + res.height); + if (await qucikBuy()) { + log.info(`购买成功: ${item}`); + // 交互或拾取:"XXXX" + await fakeLog(item, false, false, 23333); + + // 记录购买的商品 + purchasedFoods.push(item); + const refreshType = foodToRefreshType[item]; + if (refreshType) { + purchasedByType[refreshType].push(item); + + // 立即更新记录 + npcRecords = updateNpcRecord(npcRecords, npc.name, refreshType, purchasedByType[refreshType]); + await saveNpcRecords(npcRecords); + } + + await sleep(1500); + // 重新截图 + captureRegion = captureGameRegion(); + } + else { + log.info(`购买失败: ${item}, 背包已经满或商品已售罄`); + } + } + } + + captureRegion.dispose(); + // 从已购买物品中移除 + tempFoods = tempFoods.filter(item => !boughtFoods.has(item)); + + // 若不是最后一页且还有未购买的物品 + if (tempFoods.length > 0 && i !== npc.page - 1) { + logConditional("切换到下一页商品"); + await nextFoodsPage(); + + // 最后一次切换界面, 等待UI回弹 + if (i === npc.page - 2) { + logConditional("等待界面回弹"); + await sleep(520); + } + } + } + + if (purchasedFoods.length > 0) { + log.info(`${displayName} 购买完成,成功购买: ${purchasedFoods.join(", ")}`); + } else { + logConditional(`${displayName} 没有成功购买任何商品`); + } + + // 返回购买结果 + return { + purchased: purchasedFoods, + "1d": purchasedByType["1d"], + "3d": purchasedByType["3d"], + "7d": purchasedByType["7d"], + "thu": purchasedByType["thu"], + "month": purchasedByType["month"] + }; +} + +// 初始化商人商品 +async function initNpcData(records) { + for (let [key, npc] of Object.entries(npcData)) { + // 检查是否通过标签禁用 + if (npc.tags && Array.isArray(npc.tags)) { + const hasDisabledTag = npc.tags.some(tag => disabledTags.includes(tag)); + if (hasDisabledTag) { + npc.enable = false; + logConditional(`按标签禁用商人: ${npc.name} (标签: ${npc.tags.join(", ")})`); + continue; + } + } + + const npcRecord = getNpcRecord(records, npc.name); + + // 判断是否需要强制刷新 + const forceRefresh = ignoreRecords; + + // 判断需要购买的商品(这里只是检查是否有商品需要购买) + const gameTime = getGameTime(); + const currentPeriod = getBasePeriod(gameTime); + const foodsToBuy = shouldBuyFoods(npc, npcRecord, currentPeriod, forceRefresh); + + // 检查是否有需要购买的商品 + const hasFoodsToBuy = foodsToBuy["1d"].length > 0 || + foodsToBuy["3d"].length > 0 || + foodsToBuy["7d"].length > 0 || + foodsToBuy["thu"].length > 0 || + foodsToBuy["month"].length > 0; + + npc.enable = npc.enable && hasFoodsToBuy; + + if (recordDebug && !npc.enable && hasFoodsToBuy) { + const displayName = getDisplayNameFromPath(npc.path); + log.info(`${displayName} 有商品需要购买但商人被禁用`); + } + } +} + +(async function () { + try { + // ==================== 确定账号名 ==================== + let rawUserName = settings.userName ? settings.userName.trim() : ""; + if (!rawUserName) { + log.info("settings.userName 为空,尝试从游戏获取UID作为账户名..."); + const uid = await getUidFromGame(); + if (uid) { + userName = uid; + log.info(`使用UID作为账户名: ${userName}`); + } else { + userName = "默认账户"; + log.warn("无法获取UID,使用默认账户"); + } + } else { + userName = validateUserName(rawUserName); + if (userName !== rawUserName) { + log.info(`账户名已清理: ${userName}`); + settings.userName = userName; + } + } + + log.info(`当前账户: ${userName}`); + + // ==================== 加载外部数据 ==================== + if (!await loadExternalData()) { + log.error("商人数据加载失败,脚本终止"); + return; + } + const skip = settings.skip || false; + + // ==================== 初始化识别对象 ==================== + await initRo(); + + logConditional("识别对象初始化完成"); + + // ==================== 加载商人购买记录 ==================== + let npcRecords = await loadNpcRecords(); + + logConditional(`已加载 ${npcRecords.length} 个商人的购买记录`); + + if (recordDebug && npcRecords.length > 0) { + log.info("[调试] 当前商人记录:"); + npcRecords.forEach(record => { + log.info(`[调试] ${record.npcname}:`); + if (record["1d_time"]) log.info(`[调试] 1天刷新: ${record["1d_time"]}`); + if (record["3d_time"]) log.info(`[调试] 3天刷新: ${record["3d_time"]}`); + if (record["7d_time"]) log.info(`[调试] 7天刷新: ${record["7d_time"]}`); + if (record["thu_time"]) log.info(`[调试] 周四刷新: ${record["thu_time"]}`); + if (record["month_time"]) log.info(`[调试] 每月刷新: ${record["month_time"]}`); + }); + } + + // ==================== 初始化商人数据 ==================== + await initNpcData(npcRecords); + + logConditional("商人数据初始化完成"); + + // 统计启用的商人数量 + const enabledNpcs = Object.values(npcData).filter(npc => npc.enable); + log.info(`本次执行将处理 ${enabledNpcs.length} 个商人`); + + // ==================== 自动购买 ==================== + // 获取当前时间和周期 + const gameTime = getGameTime(); + const currentPeriod = getBasePeriod(gameTime); + + if (recordDebug) { + log.info(`[调试] 当前游戏时间: ${formatDateToLocalISO(gameTime)}`); + log.info(`[调试] 当前周期信息: 3天周期=${currentPeriod.threeDayPeriod}, 7天周期=${currentPeriod.sevenDayPeriod}`); + } + + let npcIndex = 0; + for (let [key, npc] of Object.entries(npcData)) { + if (npc.enable) { + npcIndex++; + // 获取显示名称(从路径中提取) + const displayName = getDisplayNameFromPath(npc.path); + log.info(`当前进度:${npcIndex}/${enabledNpcs.length}`); + log.info(`开始前往: ${displayName}`); // 修改这里 + + await genshin.returnMainUi(); + + // 地图追踪开始 + await fakeLog(displayName, false, true, 0); + + // 设置游戏时间 + if (npc.time === "night") { + // 设置为晚上8点 + await genshin.setTime(20, 0, skip); + } + else if (npc.time === "day") { + // 设置为早上8点 + await genshin.setTime(8, 0, skip); + } + + await autoPath(npc.path); + await spikChat(npc.name); + + // 购买商品,传入当前记录和周期 + const purchaseResult = await buyFoods(key, npcRecords, currentPeriod); + + // 返回主界面 + await genshin.returnMainUi(); + log.info(`完成: ${displayName}`); + + // 伪造日志任务结束 + await fakeLog(displayName, false, false, 0); + + // 商人之间等待 + if (npcIndex < enabledNpcs.length) { + logConditional("等待1.5秒后处理下一个商人"); + await sleep(1500); + } + } + else { + if (recordDebug) { + log.info(`[调试] 跳过未启用的商人: ${npc.name}`); + } + } + } + + log.info("=== 商品购买脚本执行完成 ==="); + + } catch (error) { + log.error(`执行时发生错误: ${error.message}`); + } + })(); \ No newline at end of file diff --git a/repo/js/自动购买商品/manifest.json b/repo/js/自动购买商品/manifest.json new file mode 100644 index 000000000..0f9ce2d20 --- /dev/null +++ b/repo/js/自动购买商品/manifest.json @@ -0,0 +1,25 @@ +{ + "manifest_version": 1, + "name": "自动购买商品", + "version": "3.2.7", + "description": "自动购买商品\n每天刷新商品:自动购买商品\n3天刷新商品:未到刷新日不购买该商品\n每周刷新商品:可指定每周购买商品", + "authors": [ + { + "name": "蜜柑魚", + "links": "https://github.com/this-Fish" + } + ], + "tags": [ + "自动购买", + "购买商品", + "模拟点击" + ], + "saved_files": [ + "record/" + ], + "settings_ui": "settings.json", + "main": "main.js" + +} + + diff --git a/repo/js/自动购买每天&3天&每周刷新商品/settings.json b/repo/js/自动购买商品/settings.json similarity index 96% rename from repo/js/自动购买每天&3天&每周刷新商品/settings.json rename to repo/js/自动购买商品/settings.json index e213f87ea..10e22c237 100644 --- a/repo/js/自动购买每天&3天&每周刷新商品/settings.json +++ b/repo/js/自动购买商品/settings.json @@ -1,55 +1,55 @@ -[ - { - "name": "userName", - "type": "input-text", - "label": "账号名(用于区分不同账户的记录)\n为空则读取uid作为自定义CD记录标识", - "default": "默认账户" - }, - { - "name": "foodsToBuy", - "type": "input-text", - "label": "要购买的商品(多个商品用空格分隔)\n示例:\"小麦 黑麦\"\n\n支援的 商人与商品详细 请前往 README.md 查看\n建议直接复制商品名称贴上输入栏", - "default": "小麦 黑麦" - }, - { - "name": "AKF", - "type": "select", - "label": "每周商品购买方式\n0=跟随系统周期自动判定\n1-7=指定星期几购买(1=周一,7=周日)", - "options": [ - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7" - ], - "default": "0" - }, - { - "name": "disabledTags", - "type": "input-text", - "label": "禁用标签\n(多个标签以空格分隔,如: 挪德卡莱 黑心商人 卡琵莉亚)", - "default": "卡琵莉亚" - }, - { - "name": "skip", - "type": "checkbox", - "label": "跳过调整时间动画", - "default": false - }, - { - "name": "ignoreRecords", - "type": "checkbox", - "label": "-----------------\n无视记录强制购买(不推荐)", - "default": false - }, - { - "name": "recordDebug", - "type": "checkbox", - "label": "调试模式(显示详细日志)", - "default": false - } - -] +[ + { + "name": "userName", + "type": "input-text", + "label": "账号名(用于区分不同账户的记录)\n为空则读取uid作为自定义CD记录标识", + "default": "默认账户" + }, + { + "name": "foodsToBuy", + "type": "input-text", + "label": "要购买的商品(多个商品用空格分隔)\n示例:\"小麦 黑麦\"\n\n支援的 商人与商品详细 请前往 README.md 查看\n建议直接复制商品名称贴上输入栏", + "default": "小麦 黑麦" + }, + { + "name": "AKF", + "type": "select", + "label": "每周商品购买方式\n0=跟随系统周期自动判定\n1-7=指定星期几购买(1=周一,7=周日)", + "options": [ + "0", + "1", + "2", + "3", + "4", + "5", + "6", + "7" + ], + "default": "0" + }, + { + "name": "disabledTags", + "type": "input-text", + "label": "禁用标签\n(多个标签以空格分隔,如: 挪德卡莱 黑心商人 卡琵莉亚)", + "default": "卡琵莉亚" + }, + { + "name": "skip", + "type": "checkbox", + "label": "跳过调整时间动画", + "default": false + }, + { + "name": "ignoreRecords", + "type": "checkbox", + "label": "-----------------\n无视记录强制购买(不推荐)", + "default": false + }, + { + "name": "recordDebug", + "type": "checkbox", + "label": "调试模式(显示详细日志)", + "default": false + } + +] diff --git a/repo/js/自动购买每天&3天&每周刷新商品/商人与商品支持表.md b/repo/js/自动购买商品/商人与商品支持表.md similarity index 98% rename from repo/js/自动购买每天&3天&每周刷新商品/商人与商品支持表.md rename to repo/js/自动购买商品/商人与商品支持表.md index 4c9343895..13a5c2efb 100644 --- a/repo/js/自动购买每天&3天&每周刷新商品/商人与商品支持表.md +++ b/repo/js/自动购买商品/商人与商品支持表.md @@ -73,6 +73,7 @@ | 挪德卡莱-那夏镇 | 丽切娅 | - | 甜甜花、宿影花、霜盏花 | - | | | 挪德卡莱-那夏镇 | 卡嘉 | - | - | 面粉、奶油、熏禽肉、黄油、火腿、糖、蟹黄、果酱、奶酪、培根、香肠 | | | 挪德卡莱-那夏镇 | 雷科 | - | - | 幸运儿之杯、幸运儿鹰羽、幸运儿银冠、幸运儿绿花、幸运儿沙漏 | 狗粮商人 | +| 挪德卡莱-那夏镇-旗舰 | 德米安 | 「皮拉米达的夜莺」、边陲之地、野浆果之路 | - | - | 稀少商品、独立地图 | | 挪德卡莱-皮拉米达城 | 科菲策 | 牛奶、咖啡豆 | 微光角菌、琉鳞石 | - | 黑心商人 | ### **以下为有效标签** diff --git a/repo/js/自动购买每天&3天&每周刷新商品/manifest.json b/repo/js/自动购买每天&3天&每周刷新商品/manifest.json deleted file mode 100644 index 821e40cc6..000000000 --- a/repo/js/自动购买每天&3天&每周刷新商品/manifest.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "manifest_version": 1, - "name": "自动购买每天&3天&每周刷新商品", - "version": "3.2.6", - "description": "自动购买每天&3天&每周刷新商品\n每天刷新商品:自动购买商品\n3天刷新商品:未到刷新日不购买该商品\n每周刷新商品:可指定每周购买商品", - "authors": [ - { - "name": "蜜柑魚", - "links": "https://github.com/this-Fish" - } - ], - "tags": [ - "购买商品", - "模拟点击" - ], - "saved_files": [ - "record/" - ], - "settings_ui": "settings.json", - "main": "main.js" - -} - -