mirror of
https://github.com/babalae/bettergi-scripts-list.git
synced 2026-03-19 03:59:51 +08:00
JS脚本:打牌一条龙2.0,支持切换卡组重新挑战 (#1628)
* Update settings.json * Update manifest.json * Update main.js * Add files via upload
This commit is contained in:
1
repo/js/七圣召唤七日历练全自动/1号卡牌策略.txt
Normal file
1
repo/js/七圣召唤七日历练全自动/1号卡牌策略.txt
Normal file
@@ -0,0 +1 @@
|
||||
// 请复制对应的卡牌策略,否则执行默认配置
|
||||
1
repo/js/七圣召唤七日历练全自动/2号卡牌策略.txt
Normal file
1
repo/js/七圣召唤七日历练全自动/2号卡牌策略.txt
Normal file
@@ -0,0 +1 @@
|
||||
// 请复制对应的卡牌策略,否则执行默认配置
|
||||
1
repo/js/七圣召唤七日历练全自动/3号卡牌策略.txt
Normal file
1
repo/js/七圣召唤七日历练全自动/3号卡牌策略.txt
Normal file
@@ -0,0 +1 @@
|
||||
// 请复制对应的卡牌策略,否则执行默认配置
|
||||
8
repo/js/七圣召唤七日历练全自动/README.md
Normal file
8
repo/js/七圣召唤七日历练全自动/README.md
Normal file
@@ -0,0 +1,8 @@
|
||||
脚本兼容绝大部分的行走角色,一般不需要切换专门的队伍,可以自行测试。
|
||||
|
||||
2.0版本之后,支持挑战失败更换卡牌重新挑战。把卡牌策略文本复制到脚本目录的文件中即可。
|
||||
|
||||
举一个例子,我最常用的卡牌策略是雷柯刻,这个卡组在我游戏中的名字是"优先卡组",那么我会在 js 自定义设置中输入这个名字,之后我会打开脚本目录,将这个卡牌策略复制到脚本的1号卡牌策略.txt文件中,之后的以此类推。
|
||||
|
||||
密码 : BugGI
|
||||
|
||||
@@ -34,12 +34,43 @@ async function switchCardTeam(Name) {
|
||||
}
|
||||
}
|
||||
|
||||
async function runCardStrategyFromFolder(folderName) {
|
||||
try {
|
||||
// 构建策略文件路径
|
||||
const strategyFilePath = `${folderName}.txt`;
|
||||
|
||||
// 读取策略文件内容
|
||||
const strategyContent = await file.readText(strategyFilePath);
|
||||
|
||||
// 检查策略内容是否为空
|
||||
if (!strategyContent || strategyContent.trim() === '') {
|
||||
log.error('策略文件内容为空');
|
||||
return false;
|
||||
}
|
||||
log.info(`开始执行 ${folderName} `);
|
||||
// 执行策略
|
||||
await dispatcher.runTask(new SoloTask("AutoGeniusInvokation", {
|
||||
strategy: strategyContent
|
||||
}));
|
||||
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
log.error(`执行策略失败: ${error},默认使用独立任务中的设置`);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
(async function () {
|
||||
|
||||
|
||||
// 存储挑战玩家信息
|
||||
let textArray = [];
|
||||
let skipNum = 0;
|
||||
let teamName = settings.partyName1;
|
||||
let folderName = "1号卡牌策略";
|
||||
|
||||
|
||||
/**
|
||||
* 判断任务是否已刷新
|
||||
@@ -153,7 +184,7 @@ async function isTaskRefreshed(filePath, options = {}) {
|
||||
|
||||
return true;
|
||||
} else {
|
||||
notification.send(`七圣召唤七日历练未刷新,冷却还有${((nowTime - lastTime)/3600).toFixed(1)}小时`);
|
||||
log.info(`七圣召唤七日历练未刷新`);
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -361,6 +392,26 @@ async function captureAndStoreTexts() {
|
||||
await sleep(1000);
|
||||
}
|
||||
|
||||
// 计算两个字符串的相似度(允许最多一个字的差异)
|
||||
function isTextMatch(target, source) {
|
||||
// 如果完全匹配直接返回true
|
||||
if (target === source) return true;
|
||||
|
||||
// 如果长度不同,直接不匹配
|
||||
if (target.length !== source.length) return false;
|
||||
|
||||
let diffCount = 0;
|
||||
for (let i = 0; i < target.length; i++) {
|
||||
if (target[i] !== source[i]) {
|
||||
diffCount++;
|
||||
if (diffCount > 1) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//检查是否有对应的挑战对手
|
||||
async function searchAndClickTexts() {
|
||||
middleButtonClick();
|
||||
@@ -388,12 +439,11 @@ async function searchAndClickTexts() {
|
||||
const resText = res.text.trim();
|
||||
|
||||
// 在存储的文本数组中查找匹配项
|
||||
const index = textArray.findIndex((item) => item.text === resText);
|
||||
const index = textArray.findIndex((item) => isTextMatch(item.text, resText));
|
||||
|
||||
if (index !== -1) {
|
||||
// 找到匹配项,点击对应位置
|
||||
|
||||
log.info(`找到匹配文本: ${resText}`);
|
||||
log.info(`找到匹配文本: ${resText} (原存储文本: ${textArray[index].text})`);
|
||||
skipNum = 0;
|
||||
// 点击存储的位置
|
||||
await keyMouseScript.runFile(`assets/ALT点击.json`);
|
||||
@@ -473,12 +523,10 @@ async function Playcards() {
|
||||
await autoConversation();
|
||||
log.info("对话完成");
|
||||
await sleep(1500);
|
||||
if (settings.partyName != undefined) {
|
||||
await switchCardTeam(settings.partyName);
|
||||
}
|
||||
await switchCardTeam(teamName);
|
||||
click(1610, 900); //点击挑战
|
||||
await waitOrCheckMaxCoin(8000);
|
||||
await dispatcher.runTask(new SoloTask("AutoGeniusInvokation"));
|
||||
await runCardStrategyFromFolder(folderName);
|
||||
await sleep(3000);
|
||||
await checkChallengeResults();
|
||||
await sleep(1000);
|
||||
@@ -632,9 +680,23 @@ if( await isTaskRefreshed("assets/weekly.txt", {
|
||||
weeklyDay: 1, // 周一
|
||||
weeklyHour: 4 // 凌晨4点
|
||||
})){
|
||||
|
||||
|
||||
if(settings.partyName1) await main();
|
||||
teamName = settings.partyName2;
|
||||
folderName = "2号卡牌策略";
|
||||
|
||||
if(textArray.length != 0 && settings.partyName2){
|
||||
log.info(`尝试2号卡牌策略`);
|
||||
await main();
|
||||
}
|
||||
teamName = settings.partyName3;
|
||||
folderName = "3号卡牌策略";
|
||||
if(textArray.length != 0 && settings.partyName3){
|
||||
log.info(`尝试3号卡牌策略`);
|
||||
await main();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
})();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"manifest_version": 1,
|
||||
"name": "打牌一条龙",
|
||||
"version": "1.9.8",
|
||||
"description": "已添加 CD 管理,执行完后会检测是否全部挑战成功,之后会记录本次时间进入CD,如果想要重置请前往assets/weekly.txt中删除内容",
|
||||
"version": "2.0",
|
||||
"description": "详见README.md",
|
||||
"authors": [
|
||||
{
|
||||
"name": "柒叶子",
|
||||
|
||||
@@ -1,7 +1,22 @@
|
||||
[
|
||||
{
|
||||
"name": "partyName",
|
||||
"name": "partyName1",
|
||||
"type": "input-text",
|
||||
"label": "设置要使用的七圣召唤队伍名称"
|
||||
"label": "请输入游戏中的卡组名称(1号卡牌策略)"
|
||||
},
|
||||
{
|
||||
"name": "partyName2",
|
||||
"type": "input-text",
|
||||
"label": "请输入游戏中的卡组名称(2号卡牌策略)"
|
||||
},
|
||||
{
|
||||
"name": "partyName3",
|
||||
"type": "input-text",
|
||||
"label": "请输入游戏中的卡组名称(3号卡牌策略)"
|
||||
},
|
||||
{
|
||||
"name": "passWord",
|
||||
"type": "input-text",
|
||||
"label": "启动密码在README.md"
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user