diff --git a/repo/js/AutoSwitchGraphicsSettings/README.md b/repo/js/AutoSwitchGraphicsSettings/README.md new file mode 100644 index 000000000..7da02a7ac --- /dev/null +++ b/repo/js/AutoSwitchGraphicsSettings/README.md @@ -0,0 +1,35 @@ +# 自动修改画质 + +## 重要提醒 + +为了保证您的良好体验,请务必在开始使用前阅读完本 README。 + +## 作用说明 + +本 JS 可以根据用户的预设自动修改图像设置,避免了繁琐的手动调整流程。在您使用 BetterGI 自动完成锄地等重复性任务前,可以运行本 JS,调低画质以降低功耗;同样地,在锄地结束后也可以运行本 JS,调回高画质保证游戏体验。您还可以根据自己的需求开发新的用法。 + +## 兼容性 + +由于缺少修改画质的选项,本 JS **不支持**云原神。 + +经过实测,本 JS 支持 1920 \* 1080、2560 \* 1440 分辨率。推测 3840 \* 2160 也可支持。 + +本 JS 基于 OCR 识别,故**仅支持**简体中文 UI。如果您平时使用的是其它语言,可以发 Issue 说明。收到需求后,作者将酌情尝试通过在 JS 运行前后修改 UI 语言以解决此问题。 + +经过实测,本 JS 可以在大部分图像设置下正常运行。但由于作者仅在高性能 PC 上测试了本 JS,其在老旧平台或移动设备上的运行效果是未知的。如果您遇到问题,请发 Issue 说明您的运行平台和运行效果。 + +由于可能导致 BetterGI 崩溃,本 JS **不支持**调整游戏分辨率。您可使用 [Unity 启动参数](https://docs.unity3d.com/cn/2021.1/Manual/CommandLineArguments.html)指定原神的窗口宽高等。 + +## 使用方法 + +在配置组中添加本 JS 后,右键本 JS,点击`修改JS脚本自定义配置`,即可在弹出的对话框中调整预设图像设置。 + +### 选项说明 + +预设设置的标签名称与选项名称皆与游戏内名称一致,如果您发现不同,请发 Issue。 + +每项设置的第一个选项都是`默认`,在您选中它后本 JS 会**不修改**此选项。 + +注意,即使您预设`图像质量`选项不是`默认`或`自定义`,本 JS 依然会根据您的预设修改其余选项。所以如果您设置了图像质量预设,又修改了其余选项为非预设的值,则在 JS 运行结束后`图像质量`将是`自定义`。 + +感谢您耐心读完此 README,请勾选自定义配置中的复选框。 \ No newline at end of file diff --git a/repo/js/AutoSwitchGraphicsSettings/assets/RecognitionObject/gear.png b/repo/js/AutoSwitchGraphicsSettings/assets/RecognitionObject/gear.png new file mode 100644 index 000000000..031a4ad17 Binary files /dev/null and b/repo/js/AutoSwitchGraphicsSettings/assets/RecognitionObject/gear.png differ diff --git a/repo/js/AutoSwitchGraphicsSettings/assets/RecognitionObject/graphics.png b/repo/js/AutoSwitchGraphicsSettings/assets/RecognitionObject/graphics.png new file mode 100644 index 000000000..1f54270e9 Binary files /dev/null and b/repo/js/AutoSwitchGraphicsSettings/assets/RecognitionObject/graphics.png differ diff --git a/repo/js/AutoSwitchGraphicsSettings/main.js b/repo/js/AutoSwitchGraphicsSettings/main.js new file mode 100644 index 000000000..3d6f40174 --- /dev/null +++ b/repo/js/AutoSwitchGraphicsSettings/main.js @@ -0,0 +1,90 @@ +// 模板数组,用于对比用户设置 +const settingsTemplate = [{"name":"check","type":"checkbox","label":"我已阅读 README.md","default":false},{"name":"图像质量","type":"select","label":"图像质量","options":["默认","极低","低","中","高","自定义"],"default":"默认"},{"name":"帧率","type":"select","label":"帧率","options":["默认","30","45","60"],"default":"默认"},{"name":"垂直同步","type":"select","label":"垂直同步","options":["默认","关闭","打开"],"default":"默认"},{"name":"渲染精度","type":"select","label":"渲染精度","options":["默认","0.6","0.8","0.9","1.0","1.1","1.2","1.3","1.4","1.5"],"default":"默认"},{"name":"阴影质量","type":"select","label":"阴影质量","options":["默认","极低","低","中","高"],"default":"默认"},{"name":"全局光照","type":"select","label":"全局光照","options":["默认","关闭","中","高","非常高"],"default":"默认"},{"name":"后期效果","type":"select","label":"后期效果","options":["默认","极低","低","中","高"],"default":"默认"},{"name":"特效质量","type":"select","label":"特效质量","options":["默认","极低","低","中","高"],"default":"默认"},{"name":"场景细节","type":"select","label":"场景细节","options":["默认","极低","低","中","高","极高"],"default":"默认"},{"name":"抗锯齿","type":"select","label":"抗锯齿","options":["默认","关闭","FSR 2","SMAA"],"default":"默认"},{"name":"体积雾","type":"select","label":"体积雾","options":["默认","关闭","打开"],"default":"默认"},{"name":"反射","type":"select","label":"反射","options":["默认","关闭","打开"],"default":"默认"},{"name":"动态模糊","type":"select","label":"动态模糊","options":["默认","关闭","低","高","非常高"],"default":"默认"},{"name":"Bloom","type":"select","label":"Bloom","options":["默认","关闭","打开"],"default":"默认"},{"name":"人群密度","type":"select","label":"人群密度","options":["默认","低","高"],"default":"默认"},{"name":"多人游戏队友特效","type":"select","label":"多人游戏队友特效","options":["默认","完全屏蔽","部分屏蔽","打开"],"default":"默认"},{"name":"次表面散射","type":"select","label":"次表面散射","options":["默认","关闭","中","高"],"default":"默认"},{"name":"各向异性采样","type":"select","label":"各向异性采样","options":["默认","1x","2x","4x","8x","16x"],"default":"默认"},{"name":"角色动态高精度","type":"select","label":"角色动态高精度","options":["默认","关闭","打开"],"default":"默认"}]; +// 用户设置数组,用 Array.from() 获取字面值 +const settingsArr = Array.from(settings); + +// 载入设置图标和图像设置按钮 +const settingsIconRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/gear.png")); +const graphicsTextRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/RecognitionObject/graphics.png")); + +// 封装好的点击以上两个按钮操作 +const findAndClick = async (object) => { + let res = captureGameRegion(); + if (!res) { + log.error("截图失败"); + return; + } + let found = res.Find(object); + if (!found) { + log.error("未能找到目标元素,请确认游戏界面状态"); + return; + } + found.click(); + found.click(); // 点两次是因为设置图标有的时候点一次无反应 + res.Dispose(); +}; + +// 封装好的寻找选项功能 +const findOption = async (optionName) => { + let pic = captureGameRegion(); + let ocrList = pic.findMulti(RecognitionObject.ocrThis); + pic.Dispose(); + for(let i = 0;i < ocrList.count; i++) + if(ocrList[i].Text === optionName) + return ocrList[i]; +}; + +const chooseOption = async (optionName, order) => { + if(order === 0) + return; // 默认选项,跳过 + let res = await findOption(optionName); + let x = res.x, y = res.y; + click(x + 1000, y + 25); // 点击选项的下拉栏,依赖选项名称的相对位置 + await sleep(20); + click(x + 1000, y + 25 + order * 50); // 点击具体选项 + await sleep(150); + click(1000, 39); + click(1000, 39); // 双击空白处,关闭可能弹出的“部分图像设置需要重启游戏后生效” +}; + +(async function () { + if(settings.check === false) { + log.error("请先阅读 README.md!"); + return; + } + log.info("正在尝试回到主界面……"); + await genshin.returnMainUi(); + log.info("回到主界面成功,正在进入设置界面……"); + await sleep(500); + keyPress("ESCAPE"); + await sleep(1000); + await findAndClick(settingsIconRo); + log.info("进入设置界面成功,打开图像页"); + await sleep(1000); + await findAndClick(graphicsTextRo); + await sleep(500); + + log.info("开始修改图像设置,请{highlight}", "不要操作"); + for(let i = 1; i < 8;++i) + for(let j = 0; j < Array.from(settingsTemplate[i].options).length;++j) + if(settingsArr[i].Value === Array.from(settingsTemplate[i].options)[j]) { + log.info("{name}选择{option}", settingsTemplate[i].name, settingsArr[i].Value); + await chooseOption(settingsTemplate[i].name, j); + } + + moveMouseTo(1000, 500); + for(let i = 0;i < 50;++i) + verticalScroll(-1); + await sleep(500); + + for(let i = 8;i < settingsTemplate.length;++i) + for(let j = 0; j < Array.from(settingsTemplate[i].options).length;++j) + if(settingsArr[i].Value === Array.from(settingsTemplate[i].options)[j]) { + log.info("{name}选择{option}", settingsTemplate[i].name, settingsArr[i].Value); + await chooseOption(settingsTemplate[i].name, j); + } + + log.info("修改图像设置完成,正在尝试回到主界面……"); + await genshin.returnMainUi(); + log.info("回到主界面成功"); +})(); diff --git a/repo/js/AutoSwitchGraphicsSettings/manifest.json b/repo/js/AutoSwitchGraphicsSettings/manifest.json new file mode 100644 index 000000000..af26490ed --- /dev/null +++ b/repo/js/AutoSwitchGraphicsSettings/manifest.json @@ -0,0 +1,24 @@ +{ + "manifest_version": 1, + "name": "自动修改画质", + "version": "1.0", + "bgi_version": "0.56.2", + "description": "自动调整画质,用于便捷切换锄地省电画质和游戏体验画质", + + "authors": [ + { + "name": "OvOAuto", + "link": "https://github.com/OvOAuto" + } + ], + "settings_ui": "settings.json", + "main": "main.js", + "saved_files": [ + "assets/*" + ], + "library": [ + ".", + "src", + "./module" + ] +} \ No newline at end of file diff --git a/repo/js/AutoSwitchGraphicsSettings/settings.json b/repo/js/AutoSwitchGraphicsSettings/settings.json new file mode 100644 index 000000000..bc81116a6 --- /dev/null +++ b/repo/js/AutoSwitchGraphicsSettings/settings.json @@ -0,0 +1,247 @@ +[ + { + "name": "check", + "type": "checkbox", + "label": "我已阅读 README.md", + "default": false + }, + { + "name": "图像质量", + "type": "select", + "label": "图像质量", + "options": [ + "默认", + "极低", + "低", + "中", + "高", + "自定义" + ], + "default": "默认" + }, + { + "name": "帧率", + "type": "select", + "label": "帧率", + "options": [ + "默认", + "30", + "45", + "60" + ], + "default": "默认" + }, + { + "name": "垂直同步", + "type": "select", + "label": "垂直同步", + "options": [ + "默认", + "关闭", + "打开" + ], + "default": "默认" + }, + { + "name": "渲染精度", + "type": "select", + "label": "渲染精度", + "options": [ + "默认", + "0.6", + "0.8", + "0.9", + "1.0", + "1.1", + "1.2", + "1.3", + "1.4", + "1.5" + ], + "default": "默认" + }, + { + "name": "阴影质量", + "type": "select", + "label": "阴影质量", + "options": [ + "默认", + "极低", + "低", + "中", + "高" + ], + "default": "默认" + }, + { + "name": "全局光照", + "type": "select", + "label": "全局光照", + "options": [ + "默认", + "关闭", + "中", + "高", + "非常高" + ], + "default": "默认" + }, + { + "name": "后期效果", + "type": "select", + "label": "后期效果", + "options": [ + "默认", + "极低", + "低", + "中", + "高" + ], + "default": "默认" + }, + { + "name": "特效质量", + "type": "select", + "label": "特效质量", + "options": [ + "默认", + "极低", + "低", + "中", + "高" + ], + "default": "默认" + }, + { + "name": "场景细节", + "type": "select", + "label": "场景细节", + "options": [ + "默认", + "极低", + "低", + "中", + "高", + "极高" + ], + "default": "默认" + }, + { + "name": "抗锯齿", + "type": "select", + "label": "抗锯齿", + "options": [ + "默认", + "关闭", + "FSR 2", + "SMAA" + ], + "default": "默认" + }, + { + "name": "体积雾", + "type": "select", + "label": "体积雾", + "options": [ + "默认", + "关闭", + "打开" + ], + "default": "默认" + }, + { + "name": "反射", + "type": "select", + "label": "反射", + "options": [ + "默认", + "关闭", + "打开" + ], + "default": "默认" + }, + { + "name": "动态模糊", + "type": "select", + "label": "动态模糊", + "options": [ + "默认", + "关闭", + "低", + "高", + "非常高" + ], + "default": "默认" + }, + { + "name": "Bloom", + "type": "select", + "label": "Bloom", + "options": [ + "默认", + "关闭", + "打开" + ], + "default": "默认" + }, + { + "name": "人群密度", + "type": "select", + "label": "人群密度", + "options": [ + "默认", + "低", + "高" + ], + "default": "默认" + }, + { + "name": "多人游戏队友特效", + "type": "select", + "label": "多人游戏队友特效", + "options": [ + "默认", + "完全屏蔽", + "部分屏蔽", + "打开" + ], + "default": "默认" + }, + { + "name": "次表面散射", + "type": "select", + "label": "次表面散射", + "options": [ + "默认", + "关闭", + "中", + "高" + ], + "default": "默认" + }, + { + "name": "各向异性采样", + "type": "select", + "label": "各向异性采样", + "options": [ + "默认", + "1x", + "2x", + "4x", + "8x", + "16x" + ], + "default": "默认" + }, + { + "name": "角色动态高精度", + "type": "select", + "label": "角色动态高精度", + "options": [ + "默认", + "关闭", + "打开" + ], + "default": "默认" + } +]