两个打牌脚本更新 (#1378)

This commit is contained in:
5117600049
2025-07-22 10:28:22 +08:00
committed by GitHub
parent 17d1222053
commit 7d59eae42d
7 changed files with 106 additions and 109 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -200,37 +200,31 @@ async function checkChallengeResults() {
} }
} }
//通过f和空格自动对话对话区域为空,选项区域为真时停止 await autoConversation(); //通过f和空格自动对话对话标志消失时停止await autoConversation();
async function autoConversation() { async function autoConversation() {
await sleep(2500); //点击后等待一段时间避免误判 await sleep(500); //点击后等待一段时间避免误判
const region1 = RecognitionObject.ocr(785, 890, 340, 82); // 对话区域 const talkRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/talkSymbol.png"));
const region2 = RecognitionObject.ocr(1250, 400, 660, 440); // 选项区域
let talkTime = 0; let talkTime = 0;
let talkTimes = 0;
log.info("准备开始对话");
//最多10次对话 //最多10次对话
while (talkTime < 20) { while (talkTime < 30) {
let capture = captureGameRegion(); let talk = captureGameRegion().find(talkRo);
let res1 = capture.find(region1); if (talk.isExist()) {
let res2 = capture.find(region2); await sleep(300);
if (!res1.isEmpty() && res2.isEmpty()) {
talkTime++;
keyPress("VK_SPACE"); keyPress("VK_SPACE");
await sleep(500); await sleep(300);
keyPress("VK_SPACE");
await sleep(500);
} else if (!res1.isEmpty() && !res2.isEmpty()) {
await sleep(500);
keyPress("F"); keyPress("F");
await sleep(400); talkTimes++;
keyPress("F"); await sleep(1500);
log.info("已选择第一个对话选项");
} else if (res1.isEmpty() && !res2.isEmpty()) {
log.info("谈话完成");
await sleep(1000);
return;
}
talkTime++;
await sleep(1200);
} }
else if(talkTimes){
log.info("对话结束");
return ;
}
talkTime++;
await sleep(1200);
}
throw new Error("对话时间超时"); throw new Error("对话时间超时");
} }

View File

@@ -1,7 +1,7 @@
{ {
"manifest_version": 1, "manifest_version": 1,
"name": "打牌一条龙", "name": "打牌一条龙",
"version": "1.9.7", "version": "1.9.8",
"description": "已添加 CD 管理执行完后会检测是否全部挑战成功之后会记录本次时间进入CD如果想要重置请前往assets/weekly.txt中删除内容", "description": "已添加 CD 管理执行完后会检测是否全部挑战成功之后会记录本次时间进入CD如果想要重置请前往assets/weekly.txt中删除内容",
"authors": [ "authors": [
{ {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -4,6 +4,26 @@
let letterNumber = settings.letterNumber != undefined && ~~settings.letterNumber >= 0 ? ~~settings.letterNumber : 0; let letterNumber = settings.letterNumber != undefined && ~~settings.letterNumber >= 0 ? ~~settings.letterNumber : 0;
let challengeNumber = settings.challengeNumber != undefined && ~~settings.challengeNumber > 0 ? ~~settings.challengeNumber : 1; let challengeNumber = settings.challengeNumber != undefined && ~~settings.challengeNumber > 0 ? ~~settings.challengeNumber : 1;
//检测传送结束
async function tpEndDetection() {
const region = RecognitionObject.ocr(1690, 230, 75, 350); // 队伍名称区域
let tpTime = 0;
await sleep(500); //点击传送后等待一段时间避免误判
//最多30秒传送时间
while (tpTime < 300) {
let capture = captureGameRegion();
let res = capture.find(region);
if (!res.isEmpty()) {
log.info("传送完成");
await sleep(1200); //传送结束后有僵直
return;
}
tpTime++;
await sleep(100);
}
throw new Error("传送时间超时");
}
//函数:找小王子买邀请函 //函数:找小王子买邀请函
async function BuyLetter(){ async function BuyLetter(){
await sleep(700); await sleep(700);
@@ -25,6 +45,8 @@ click(160, 245);//选择邀请函
await sleep(1000); await sleep(1000);
click(610, 360);//点击邀请函 click(610, 360);//点击邀请函
await sleep(1000); await sleep(1000);
click(747,628 );//只买一个
await sleep(1000);
click(1185,755 );//点击购买 click(1185,755 );//点击购买
await sleep(1000); await sleep(1000);
click(1185,755 );//点击空白处 click(1185,755 );//点击空白处
@@ -52,72 +74,71 @@ await sleep(1000);
//函数:对话和打牌 //函数:对话和打牌
async function Playcards() { async function Playcards() {
click(900, 1000);//对话 await autoConversation();
await sleep(500);
click(900, 1000);//对话
await sleep(1000); await sleep(1000);
click(900, 1000);//对话
await sleep(500);
click(900, 1000);//对话
await sleep(1000);
click(900, 1000);//对话
await sleep(500);
click(900, 1000);//对话
await sleep(1000);
click(900, 1000);//对话
await sleep(500);
click(900, 1000);//对话
await sleep(1000);
click(900, 1000);//对话
await sleep(500);
click(900, 1000);//对话
await sleep(1000);
click(900, 1000);//对话
await sleep(500);
click(900, 1000);//对话
await sleep(1000);
keyPress("F");
await sleep(8000);
await dispatcher.runTask(new SoloTask("AutoGeniusInvokation")); await dispatcher.runTask(new SoloTask("AutoGeniusInvokation"));
await sleep(3000); await sleep(3000);
click(754,915 );//退出挑战 click(754,915 );//退出挑战
await sleep(10000); await sleep(1000);
click(900, 1000);//对话 await autoConversation();
await sleep(1500);
click(900, 1000);//对话
await sleep(1500);
click(900, 1000);//对话
await sleep(1500);
click(900, 1000);//对话
await sleep(1500);
} }
//函数:打开地图前往猫尾酒馆 //通过f和空格自动对话对话标志消失时停止await autoConversation();
async function gotoTavern() { async function autoConversation() {
await sleep(1000); await sleep(2500); //点击后等待一段时间避免误判
keyPress("M"); const talkRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/talkSymbol.png"));
await sleep(1500); let talkTime = 0;
click(1841, 1015);//地图选择 let talkTimes = 0;
await sleep(1000); log.info("开始对话");
click(1460, 140);//蒙德 //最多10次对话
await sleep(1000); while (talkTime < 30) {
click(48, 441);//放大地图 let talk = captureGameRegion().find(talkRo);
await sleep(500); if (talk.isExist()) {
click(48, 441);//放大地图 await sleep(300);
await sleep(500); keyPress("VK_SPACE");
click(48, 441);//放大地图 await sleep(300);
await sleep(500); keyPress("F");
click(48, 441);//放大地图 talkTimes++;
await sleep(500); await sleep(1500);
click(48, 441);//放大地图
await sleep(500);
click(1000, 645);//猫尾酒馆
await sleep(500);
click(1345, 690);//猫尾酒馆
await sleep(500);
click(1707, 1010);//猫尾酒馆
await sleep(8000);
} }
else if(talkTimes){
log.info("对话结束");
return ;
}
talkTime++;
await sleep(1500);
}
throw new Error("对话时间超时");
}
//函数:打开地图前往猫尾酒馆
async function gotoTavern() {
const tavernRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/tavern.png"));
await genshin.returnMainUi();
await sleep(1000);
keyPress("m");
await sleep(1500);
click(1841, 1015); //地图选择
await sleep(1000);
click(1460, 140); //蒙德
await sleep(1200);
//放大地图
await genshin.setBigMapZoomLevel(1.0);
await sleep(400);
click(1000, 645); //猫尾酒馆
await sleep(600);
let tavern = captureGameRegion().find(tavernRo);
if (tavern.isExist()) {
tavern.click();
await sleep(500);
} else {
throw new Error("未能找到猫尾酒馆");
}
click(1707, 1010); //确认传送
await sleep(1000);
await tpEndDetection();
}
//函数:前往邀请版(酒馆内) //函数:前往邀请版(酒馆内)
async function gotoBoard1() { async function gotoBoard1() {
@@ -147,31 +168,13 @@ keyUp("s");
await sleep(1000); await sleep(1000);
} }
//函数:打开自动剧情
async function autoPlot() {
await sleep(1000);
keyPress("ESCAPE");
await sleep(1500);
click(45, 820);
await sleep(1500);
click(175, 710);
await sleep(1500);
click(1628, 275);
await sleep(1500);
click(1628, 330);
await sleep(1500);
keyPress("ESCAPE");
await sleep(1000);
keyPress("ESCAPE");
await sleep(1000);
}
//主流程 //主流程
//await pathingScript.runFile(`assets/1.json`);用不来从其他界面强制回到大世界,只能用这个 await genshin.returnMainUi();
log.info(`开始执行`); log.info(`开始执行角色邀约挑战`);
for (let i = 0; i < challengeNumber; i++) { for (let i = 0; i < challengeNumber; i++) {
await gotoTavern(); await gotoTavern();
await sleep(2000);
if (challengeNumber-letterNumber > 0) { if (challengeNumber-letterNumber > 0) {
log.info(`购买第${i+1}`); log.info(`购买第${i+1}`);
await BuyLetter(); await BuyLetter();

View File

@@ -1,8 +1,8 @@
{ {
"manifest_version": 1, "manifest_version": 1,
"name": "七圣召唤角色邀请全自动", "name": "七圣召唤角色邀请全自动",
"version": "1.0", "version": "1.1",
"description": "挑战前请选好卡组并设好js脚本参数最少持有一张邀请函或1000牌币", "description": "挑战前请选好卡组并设好js脚本参数最少持有一张邀请函或1000牌币建议先手动买避免一些Bug",
"authors": [ "authors": [
{ {
"name": "柒叶子", "name": "柒叶子",
@@ -11,4 +11,4 @@
], ],
"settings_ui": "settings.json", "settings_ui": "settings.json",
"main": "main.js" "main": "main.js"
} }