193 lines
4.9 KiB
JavaScript
193 lines
4.9 KiB
JavaScript
(async function () {
|
||
|
||
//读取配置
|
||
let letterNumber = settings.letterNumber != undefined && ~~settings.letterNumber >= 0 ? ~~settings.letterNumber : 0;
|
||
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(){
|
||
await sleep(700);
|
||
keyDown("w");
|
||
await sleep(1400);
|
||
keyUp("w");
|
||
await sleep(2000);
|
||
keyPress("F");
|
||
await sleep(2000);
|
||
click(900, 1000);//对话
|
||
await sleep(500);
|
||
click(900, 1000);//对话
|
||
await sleep(500);
|
||
click(900, 1000);//对话
|
||
await sleep(1000);
|
||
click(1355,650);//进入商店
|
||
await sleep(1000);
|
||
click(160, 245);//选择邀请函
|
||
await sleep(1000);
|
||
click(610, 360);//点击邀请函
|
||
await sleep(1000);
|
||
click(747,628 );//只买一个
|
||
await sleep(1000);
|
||
click(1185,755 );//点击购买
|
||
await sleep(1000);
|
||
click(1185,755 );//点击空白处
|
||
await sleep(1000);
|
||
keyPress("ESCAPE");
|
||
await sleep(3000);
|
||
click(1355, 800);
|
||
await sleep(3000);
|
||
}
|
||
|
||
//函数:邀请版选择角色挑战
|
||
async function chooseCharacter() {
|
||
await sleep(1000);
|
||
keyPress("F");
|
||
await sleep(1500);
|
||
click(446, 413);//选择角色1
|
||
await sleep(1000);
|
||
click(1435, 224);//选择认真胜负
|
||
await sleep(6000);
|
||
click(1443, 875);//开始
|
||
await sleep(1000);
|
||
click(1175, 754);//确认
|
||
await sleep(1000);
|
||
}
|
||
|
||
//函数:对话和打牌
|
||
async function Playcards() {
|
||
await autoConversation();
|
||
await sleep(1000);
|
||
await dispatcher.runTask(new SoloTask("AutoGeniusInvokation"));
|
||
await sleep(3000);
|
||
click(754,915 );//退出挑战
|
||
await sleep(1000);
|
||
await autoConversation();
|
||
}
|
||
|
||
//通过f和空格自动对话,对话标志消失时停止await autoConversation();
|
||
async function autoConversation() {
|
||
await sleep(2500); //点击后等待一段时间避免误判
|
||
const talkRo = RecognitionObject.TemplateMatch(file.ReadImageMatSync("assets/talkSymbol.png"));
|
||
let talkTime = 0;
|
||
let talkTimes = 0;
|
||
log.info("开始对话");
|
||
//最多10次对话
|
||
while (talkTime < 30) {
|
||
let talk = captureGameRegion().find(talkRo);
|
||
if (talk.isExist()) {
|
||
await sleep(300);
|
||
keyPress("VK_SPACE");
|
||
await sleep(300);
|
||
keyPress("F");
|
||
talkTimes++;
|
||
await sleep(1500);
|
||
}
|
||
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() {
|
||
await sleep(1000);
|
||
keyDown("a");
|
||
await sleep(2000);
|
||
keyUp("a");
|
||
await sleep(600);
|
||
keyDown("w");
|
||
await sleep(600);
|
||
keyUp("w");
|
||
await sleep(500);
|
||
keyPress("F");
|
||
await sleep(1500);
|
||
keyDown("s");
|
||
await sleep(300);
|
||
keyUp("s");
|
||
await sleep(1000);
|
||
}
|
||
|
||
//函数:前往邀请版(洞天内)
|
||
async function gotoBoard2() {
|
||
await sleep(1000);
|
||
keyDown("s");
|
||
await sleep(1000);
|
||
keyUp("s");
|
||
await sleep(1000);
|
||
}
|
||
|
||
|
||
|
||
//主流程
|
||
await genshin.returnMainUi();
|
||
log.info(`开始执行角色邀约挑战`);
|
||
for (let i = 0; i < challengeNumber; i++) {
|
||
await gotoTavern();
|
||
if (challengeNumber-letterNumber > 0) {
|
||
log.info(`购买第${i+1}次`);
|
||
await BuyLetter();
|
||
letterNumber++;
|
||
}
|
||
await gotoBoard1();
|
||
await chooseCharacter();
|
||
await Playcards();
|
||
await gotoBoard2();
|
||
await chooseCharacter();
|
||
await Playcards();
|
||
log.info(`完成挑战第${i+1}次`);
|
||
}
|
||
|
||
})();
|