mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-17 03:43:26 +08:00
JS脚本打牌一条龙更新 (#2045)
* Update settings.json * Update manifest.json * Update main.js * Add files via upload
This commit is contained in:
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable1.json
Normal file
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable1.json
Normal file
@@ -0,0 +1 @@
|
||||
{"macroEvents":[{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":1687},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":3156},{"type":0,"keyCode":68,"mouseX":0,"mouseY":0,"time":3515},{"type":1,"keyCode":68,"mouseX":0,"mouseY":0,"time":3656},{"type":4,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":4312},{"type":5,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":4437},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":5234},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":7140},{"type":0,"keyCode":65,"mouseX":0,"mouseY":0,"time":7500},{"type":1,"keyCode":65,"mouseX":0,"mouseY":0,"time":7700}],"info":{"name":"","description":"","x":1090,"y":758,"width":1920,"height":1080,"recordDpi":1.75}}
|
||||
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable2.json
Normal file
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable2.json
Normal file
@@ -0,0 +1 @@
|
||||
{"macroEvents":[{"type":0,"keyCode":100,"mouseX":0,"mouseY":0,"time":500},{"type":1,"keyCode":100,"mouseX":0,"mouseY":0,"time":900},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":1062},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":2765},{"type":0,"keyCode":68,"mouseX":0,"mouseY":0,"time":3375},{"type":1,"keyCode":68,"mouseX":0,"mouseY":0,"time":3500},{"type":4,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":4375},{"type":5,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":4531},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":5390},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":7031},{"type":0,"keyCode":68,"mouseX":0,"mouseY":0,"time":7200},{"type":1,"keyCode":68,"mouseX":0,"mouseY":0,"time":8000}],"info":{"name":"","description":"","x":1090,"y":758,"width":1920,"height":1080,"recordDpi":1.75}}
|
||||
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable3.json
Normal file
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable3.json
Normal file
@@ -0,0 +1 @@
|
||||
{"macroEvents":[{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":2218},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":3718},{"type":0,"keyCode":68,"mouseX":0,"mouseY":0,"time":4109},{"type":1,"keyCode":68,"mouseX":0,"mouseY":0,"time":4265},{"type":4,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":5187},{"type":5,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":5312},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":6140},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":8937},{"type":0,"keyCode":68,"mouseX":0,"mouseY":0,"time":9375},{"type":1,"keyCode":68,"mouseX":0,"mouseY":0,"time":10843}],"info":{"name":"","description":"","x":1090,"y":758,"width":1920,"height":1080,"recordDpi":1.75}}
|
||||
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable4.json
Normal file
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable4.json
Normal file
@@ -0,0 +1 @@
|
||||
{"macroEvents":[{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":750},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":2125},{"type":0,"keyCode":68,"mouseX":0,"mouseY":0,"time":2468},{"type":1,"keyCode":68,"mouseX":0,"mouseY":0,"time":2562},{"type":6,"mouseX":0,"mouseY":120,"time":3406},{"type":4,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":3593},{"type":6,"mouseX":0,"mouseY":-120,"time":3593},{"type":5,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":3750},{"type":6,"mouseX":0,"mouseY":120,"time":3781},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":4718},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":8593},{"type":0,"keyCode":65,"mouseX":0,"mouseY":0,"time":8890},{"type":1,"keyCode":65,"mouseX":0,"mouseY":0,"time":9875}],"info":{"name":"","description":"","x":1090,"y":758,"width":1920,"height":1080,"recordDpi":1.75}}
|
||||
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable5.json
Normal file
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable5.json
Normal file
@@ -0,0 +1 @@
|
||||
{"macroEvents":[{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":1016},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":2407},{"type":0,"keyCode":68,"mouseX":0,"mouseY":0,"time":2938},{"type":1,"keyCode":68,"mouseX":0,"mouseY":0,"time":3047},{"type":4,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":3813},{"type":5,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":3969},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":4766},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":11500}],"info":{"name":"","description":"","x":1090,"y":758,"width":1920,"height":1080,"recordDpi":1.75}}
|
||||
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable6.json
Normal file
1
repo/js/七圣召唤七日历练全自动/assets/gotoTable6.json
Normal file
@@ -0,0 +1 @@
|
||||
{"macroEvents":[{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":1219},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":2672},{"type":0,"keyCode":68,"mouseX":0,"mouseY":0,"time":3141},{"type":1,"keyCode":68,"mouseX":0,"mouseY":0,"time":3250},{"type":4,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":4219},{"type":5,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":4391},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":5250},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":8400},{"type":0,"keyCode":65,"mouseX":0,"mouseY":0,"time":8735},{"type":1,"keyCode":65,"mouseX":0,"mouseY":0,"time":8844},{"type":4,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":9453},{"type":5,"mouseX":2051,"mouseY":1275,"mouseButton":"Middle","time":9980},{"type":0,"keyCode":87,"mouseX":0,"mouseY":0,"time":10400},{"type":1,"keyCode":87,"mouseX":0,"mouseY":0,"time":13000}],"info":{"name":"","description":"","x":1090,"y":758,"width":1920,"height":1080,"recordDpi":1.75}}
|
||||
@@ -590,6 +590,91 @@ async function searchAndClickTexts() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 在指定区域内查找并点击指定文字
|
||||
* @param {string} targetText - 要点击的目标文字
|
||||
* @param {number} x - 识别区域的左上角X坐标
|
||||
* @param {number} y - 识别区域的左上角Y坐标
|
||||
* @param {number} width - 识别区域的宽度
|
||||
* @param {number} height - 识别区域的高度
|
||||
* @param {object} options - 可选参数
|
||||
* @param {boolean} options.trimText - 是否对OCR结果进行trim处理,默认true
|
||||
* @param {boolean} options.clickCenter - 是否点击文字区域中心,默认true
|
||||
* @param {number} options.retryCount - 重试次数,默认1(不重试)
|
||||
* @param {number} options.retryInterval - 重试间隔(毫秒),默认500
|
||||
* @returns {Promise<boolean>} 是否找到并点击了文字
|
||||
*/
|
||||
async function clickTextInRegion(targetText, x, y, width, height, options = {}) {
|
||||
const {
|
||||
trimText = true,
|
||||
clickCenter = true,
|
||||
retryCount = 1,
|
||||
retryInterval = 500
|
||||
} = options;
|
||||
|
||||
for (let attempt = 0; attempt <= retryCount; attempt++) {
|
||||
try {
|
||||
// 获取游戏区域截图
|
||||
const captureRegion = captureGameRegion();
|
||||
|
||||
// 创建OCR识别对象,限定识别区域
|
||||
const ocrRo = RecognitionObject.ocr(x, y, width, height);
|
||||
|
||||
// 在限定区域内进行OCR识别
|
||||
const results = captureRegion.findMulti(ocrRo);
|
||||
|
||||
// 遍历OCR结果
|
||||
for (let i = 0; i < results.count; i++) {
|
||||
const res = results[i];
|
||||
let detectedText = res.text;
|
||||
|
||||
// 可选:去除前后空白字符
|
||||
if (trimText) {
|
||||
detectedText = detectedText.trim();
|
||||
}
|
||||
|
||||
// 检查是否匹配目标文字
|
||||
if (detectedText === targetText) {
|
||||
log.info(`找到目标文字: "${targetText}",位置: (${res.x}, ${res.y}, ${res.width}, ${res.height})`);
|
||||
|
||||
if (clickCenter) {
|
||||
// 点击文字区域中心
|
||||
|
||||
keyDown("VK_LMENU");
|
||||
await sleep(500);
|
||||
res.click();
|
||||
await sleep(100);
|
||||
keyUp("VK_LMENU");
|
||||
log.info(`已点击文字中心: "${targetText}"`);
|
||||
|
||||
} else {
|
||||
// 点击文字区域的左上角
|
||||
res.clickTo(0, 0);
|
||||
log.info(`已点击文字偏移位置: "${targetText}"`);
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// 如果当前尝试未找到,且还有重试机会,则等待后重试
|
||||
if (attempt < retryCount) {
|
||||
log.info(`第${attempt + 1}次尝试未找到文字"${targetText}",${retryInterval}ms后重试...`);
|
||||
await sleep(retryInterval);
|
||||
}
|
||||
} catch (error) {
|
||||
log.error(`点击文字"${targetText}"时发生错误: ${error.message}`);
|
||||
if (attempt < retryCount) {
|
||||
await sleep(retryInterval);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.info(`未找到文字: "${targetText}",已尝试${retryCount + 1}次`);
|
||||
return false;
|
||||
}
|
||||
|
||||
//函数:打开地图前往猫尾酒馆
|
||||
async function gotoTavern() {
|
||||
const tavernRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/tavern.png"));
|
||||
@@ -599,7 +684,7 @@ async function gotoTavern() {
|
||||
await sleep(1500);
|
||||
click(1841, 1015); //地图选择
|
||||
await sleep(1000);
|
||||
click(1460, 140); //蒙德
|
||||
await clickTextInRegion("蒙德", 1310, 70, 90, 180);
|
||||
await sleep(1200);
|
||||
//放大地图
|
||||
await genshin.setBigMapZoomLevel(1.0);
|
||||
@@ -643,12 +728,13 @@ async function waitOrCheckMaxCoin(wait_time_ms) {
|
||||
|
||||
// true和false对应打牌成功或失败
|
||||
async function Playcards(strategy, teamName, pos) {
|
||||
|
||||
// 点击存储的位置
|
||||
await keyMouseScript.runFile(`assets/ALT点击.json`);
|
||||
keyDown("VK_LMENU");
|
||||
await sleep(500);
|
||||
pos.click();
|
||||
await sleep(500);
|
||||
await keyMouseScript.runFile(`assets/ALT释放.json`);
|
||||
keyUp("VK_LMENU");
|
||||
await sleep(800); //略微俯视,避免名字出现在选项框附近,导致错误点击
|
||||
moveMouseBy(0, 1030);
|
||||
await sleep(1000);
|
||||
@@ -672,6 +758,11 @@ async function Playcards(strategy, teamName, pos) {
|
||||
//前往一号桌
|
||||
async function gotoTable1() {
|
||||
log.info(`前往1号桌`);
|
||||
if(settings.teamName){
|
||||
keyPress("4");
|
||||
await keyMouseScript.runFile(`assets/gotoTable1.json`);
|
||||
}
|
||||
else{
|
||||
keyDown("d");
|
||||
await sleep(1500);
|
||||
keyUp("d");
|
||||
@@ -684,10 +775,16 @@ async function gotoTable1() {
|
||||
keyUp("d");
|
||||
keyUp("w");
|
||||
await sleep(700);
|
||||
}
|
||||
}
|
||||
//前往二号桌
|
||||
async function gotoTable2() {
|
||||
log.info(`前往2号桌`);
|
||||
if(settings.teamName){
|
||||
keyPress("4");
|
||||
await keyMouseScript.runFile(`assets/gotoTable2.json`);
|
||||
}
|
||||
else{
|
||||
keyDown("d");
|
||||
await sleep(1500);
|
||||
keyUp("d");
|
||||
@@ -704,9 +801,15 @@ async function gotoTable2() {
|
||||
keyUp("s");
|
||||
await sleep(700);
|
||||
}
|
||||
}
|
||||
//前往三号桌
|
||||
async function gotoTable3() {
|
||||
log.info(`前往3号桌`);
|
||||
if(settings.teamName){
|
||||
keyPress("4");
|
||||
await keyMouseScript.runFile(`assets/gotoTable3.json`);
|
||||
}
|
||||
else{
|
||||
keyDown("w");
|
||||
await sleep(2000);
|
||||
keyUp("w");
|
||||
@@ -718,9 +821,15 @@ async function gotoTable3() {
|
||||
keyUp("a");
|
||||
await sleep(700);
|
||||
}
|
||||
}
|
||||
//前往四号桌
|
||||
async function gotoTable4() {
|
||||
log.info(`前往4号桌`);
|
||||
if(settings.teamName){
|
||||
keyPress("4");
|
||||
await keyMouseScript.runFile(`assets/gotoTable4.json`);
|
||||
}
|
||||
else{
|
||||
keyDown("w");
|
||||
await sleep(2000);
|
||||
keyUp("w");
|
||||
@@ -738,9 +847,15 @@ async function gotoTable4() {
|
||||
keyUp("w");
|
||||
await sleep(700);
|
||||
}
|
||||
}
|
||||
//前往一号包间
|
||||
async function gotoTable5() {
|
||||
log.info(`前往1号包间`);
|
||||
if(settings.teamName){
|
||||
keyPress("4");
|
||||
await keyMouseScript.runFile(`assets/gotoTable5.json`);
|
||||
}
|
||||
else{
|
||||
keyDown("w");
|
||||
await sleep(2500);
|
||||
keyUp("w");
|
||||
@@ -757,9 +872,15 @@ async function gotoTable5() {
|
||||
keyUp("w");
|
||||
await sleep(700);
|
||||
}
|
||||
}
|
||||
//前往二号包间
|
||||
async function gotoTable6() {
|
||||
log.info(`前往2号包间`);
|
||||
if(settings.teamName){
|
||||
keyPress("4");
|
||||
await keyMouseScript.runFile(`assets/gotoTable6.json`);
|
||||
}
|
||||
else{
|
||||
await sleep(1500);
|
||||
keyDown("d");
|
||||
await sleep(1500);
|
||||
@@ -784,6 +905,8 @@ async function gotoTable6() {
|
||||
keyUp("s");
|
||||
await sleep(500);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
async function main() {
|
||||
//主流程
|
||||
@@ -850,6 +973,9 @@ async function main() {
|
||||
return;
|
||||
}
|
||||
if ((await isTaskRefreshed("assets/weekly.txt"), refresh)) {
|
||||
await genshin.returnMainUi();
|
||||
if(settings.teamName)await genshin.switchParty(settings.teamName);
|
||||
await main();
|
||||
}
|
||||
})();
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "打牌一条龙",
|
||||
"version": "2.7",
|
||||
"version": "2.8",
|
||||
"description": "完成每周的七圣召唤七日历练(来客挑战)。详见README.md",
|
||||
"tags": [
|
||||
"七圣召唤"
|
||||
@@ -23,4 +23,4 @@
|
||||
"牌组策略/*.txt",
|
||||
"牌组策略/各策略胜败记录.json"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,11 @@
|
||||
"type": "input-text",
|
||||
"label": "仅使用胜率记录大于该值的备用策略 (0到1之间的小数)",
|
||||
"default": "0.25"
|
||||
},
|
||||
{
|
||||
"name": "teamName",
|
||||
"type": "input-text",
|
||||
"label": "如无法到达牌桌,请输入指定队伍(强制芭芭拉4号位且队伍无加速)"
|
||||
},
|
||||
{
|
||||
"name": "passWord",
|
||||
@@ -27,3 +32,4 @@
|
||||
"label": "请阅读脚本说明或README.md文件获取启动密码后填写到此处"
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user