JS脚本 养成一条龙更新 : 允许计划刷取三种天赋书和武器材料、优化了通知和检测流程 (#2017)

* Update main.js

* Update manifest.json

* Update settings.json
This commit is contained in:
5117600049
2025-09-28 22:09:38 +08:00
committed by GitHub
parent f1b4f277d4
commit 6056a273df
3 changed files with 218 additions and 30 deletions

View File

@@ -248,13 +248,13 @@ function positiveIntegerJudgment(testNumber) {
async function queryStaminaValue() {
try {
await genshin.returnMainUi();
await sleep(500);
await sleep(2500);
keyPress("F1");
await sleep(1600);
await sleep(1800);
click(300, 540);
await sleep(400);
await sleep(500);
click(1570, 203);
await sleep(700);
await sleep(800);
let captureRegion = captureGameRegion();
let stamina = captureRegion.find(RecognitionObject.ocr(1580, 20, 210, 55));
log.info(`OCR原始文本${stamina.text}`);
@@ -769,14 +769,16 @@ async function getWeaponMaterialCount(materialName) {
//去刷天赋书
async function getTalentBook(materialName) {
while(1){
let afterStamina = await queryStaminaValue();
log.info(`准备刷取天赋书,开始检查体力`);
let afterStamina = 0;
let res = 9999999;
if(skipCheckStamina)afterStamina = await queryStaminaValue();
if(afterStamina< 20) skipCheckStamina = 0;
if ( afterStamina >= 20 ){
try {
log.info(`体力充足,开始检测物品数量`);
const bookCounts = await getMaterialCount(materialName);
let res = 0.12*(bookRequireCounts[0]-bookCounts[0])+0.36*(bookRequireCounts[1]-bookCounts[1])+(bookRequireCounts[2]-bookCounts[2]);
res = 0.12*(bookRequireCounts[0]-bookCounts[0])+0.36*(bookRequireCounts[1]-bookCounts[1])+(bookRequireCounts[2]-bookCounts[2]);
if(res>0){
log.info(`${materialName}天赋书大约还差${res.toFixed(2)}本紫色品质没有刷取`);
await gotoAutoDomain();
@@ -789,8 +791,10 @@ log.info(`准备刷取天赋书,开始检查体力`);
catch (error) {
notification.send(`${materialName}天赋书刷取失败,错误信息: ${error}`);
await genshin.tp(2297.6201171875,-824.5869140625);//传送到神像回血
const bookCounts = await getMaterialCount(materialName);
let res = 0.12*(bookRequireCounts[0]-bookCounts[0])+0.36*(bookRequireCounts[1]-bookCounts[1])+(bookRequireCounts[2]-bookCounts[2]);
if (error.message != '秘境未在开启时间,跳过执行'){
let bookCounts = await getMaterialCount(materialName);
res = 0.12*(bookRequireCounts[0]-bookCounts[0])+0.36*(bookRequireCounts[1]-bookCounts[1])+(bookRequireCounts[2]-bookCounts[2]);
}
notification.send(`${materialName}天赋书大约还差${res.toFixed(2)}本紫色品质没有刷取`);
return;
}
@@ -809,12 +813,15 @@ log.info(`准备刷取天赋书,开始检查体力`);
async function getWeaponMaterial(materialName) {
while(1){
log.info(`准备刷取武器材料,开始检查体力`);
let afterStamina = await queryStaminaValue();
let afterStamina = 0;
let res = 99999999;
if(skipCheckStamina)afterStamina = await queryStaminaValue();
if(afterStamina< 20) skipCheckStamina = 0;
if ( afterStamina >= 20 ){
try {
log.info(`体力充足,开始检测物品数量`);
const weaponCounts = await getWeaponMaterialCount(materialName);
let res = 0.12*(weaponRequireCounts[0]-weaponCounts.green)+0.36*(weaponRequireCounts[1]-weaponCounts.blue)+(weaponRequireCounts[2]-weaponCounts.purple)+3*(weaponRequireCounts[3]-weaponCounts.gold);
res = 0.12*(weaponRequireCounts[0]-weaponCounts.green)+0.36*(weaponRequireCounts[1]-weaponCounts.blue)+(weaponRequireCounts[2]-weaponCounts.purple)+3*(weaponRequireCounts[3]-weaponCounts.gold);
if(res>0){
log.info(`武器材料${materialName}大约还差${res.toFixed(2)}个紫色品质没有刷取`);
await gotoAutoDomain("weaponDomain");
@@ -827,9 +834,11 @@ let afterStamina = await queryStaminaValue();
catch (error) {
notification.send(`武器材料${materialName}刷取失败,错误信息: ${error}`);
await genshin.tp(2297.6201171875,-824.5869140625);//传送到神像回血
if (error.message != '秘境未在开启时间,跳过执行'){
const weaponCounts = await getWeaponMaterialCount(materialName);
let res = 0.12*(weaponRequireCounts[0]-weaponCounts.green)+0.36*(weaponRequireCounts[1]-weaponCounts.blue)+(weaponRequireCounts[2]-weaponCounts.purple)+3*(weaponRequireCounts[3]-weaponCounts.gold);
notification.send(`武器材料${materialName}大约还差${res.toFixed(2)}个紫色品质没有刷取`);
res = 0.12*(weaponRequireCounts[0]-weaponCounts.green)+0.36*(weaponRequireCounts[1]-weaponCounts.blue)+(weaponRequireCounts[2]-weaponCounts.purple)+3*(weaponRequireCounts[3]-weaponCounts.gold);
}
notification.send(`武器材料${materialName}大约还差${res.toFixed(2)}个紫色品质没有刷取`);
return;
}
}
@@ -846,13 +855,15 @@ let afterStamina = await queryStaminaValue();
async function getBossMaterial(bossName) {
while(1){
log.info(`准备刷取 boss 材料,开始检查体力`);
let afterStamina = await queryStaminaValue();
let afterStamina = 0;
let res = 99999999;
if(skipCheckStamina)afterStamina = await queryStaminaValue();
if(afterStamina< 20) skipCheckStamina = 0;
if ( afterStamina >= 40 ){
try {
log.info(`体力充足,开始检测物品数量`);
const bossCounts = await getBossMaterialCount(bossName);
let res = settings.bossRequireCounts-bossCounts;
res = settings.bossRequireCounts-bossCounts;
if(res>0){
notification.send(`${bossName}还差${res}个材料没有刷取`);
if(!settings.teamName) throw new Error('未输入队伍名称');
@@ -898,7 +909,10 @@ let afterStamina = await queryStaminaValue();
}
}
else{
notification.send(`体力值为${afterStamina},可能无法刷取首领材料${bossName}`);
log.info(`体力值为${afterStamina},可能无法刷取首领材料${bossName}`);
const bossCounts = await getBossMaterialCount(bossName);
let res = settings.bossRequireCounts-bossCounts;
notification.send(`${bossName}还差${res}个材料没有刷取`);
return;
}
}
@@ -937,26 +951,67 @@ function parseAndValidateCounts(input, expectedCount) {
}
let weaponRequireCounts;
let weaponRequireCounts1;
let weaponRequireCounts2;
let bookRequireCounts;
let stop = 0;
let bookRequireCounts1;
let bookRequireCounts2;
let skipCheckStamina = 1;
if(!settings.unfairContractTerms) throw new Error('未签署霸王条款,无法使用');
if(settings.talentBookName != "无" && settings.talentBookName){
try{
bookRequireCounts = parseAndValidateCounts(settings.talentBookRequireCounts, 3);
log.info(`天赋书方案解析成功: ${bookRequireCounts.join(', ')}`);
log.info(`天赋书1方案解析成功: ${bookRequireCounts.join(', ')}`);
await getTalentBook(settings.talentBookName)}
catch (error) { notification.send(`${settings.talentBookName}刷取失败,错误信息: ${error}`);}
}
else log.info(`没有选择刷取天赋书,跳过执行`);
else log.info(`没有选择刷取天赋书1,跳过执行`);
if(settings.talentBookName1 != "无" && settings.talentBookName1){
try{
bookRequireCounts1 = parseAndValidateCounts(settings.talentBookRequireCounts1, 3);
log.info(`天赋书2方案解析成功: ${bookRequireCounts1.join(', ')}`);
await getTalentBook(settings.talentBookName1)}
catch (error) { notification.send(`${settings.talentBookName1}刷取失败,错误信息: ${error}`);}
}
else log.info(`没有选择刷取天赋书2跳过执行`);
if(settings.talentBookName2 != "无" && settings.talentBookName2){
try{
bookRequireCounts2 = parseAndValidateCounts(settings.talentBookRequireCounts2, 3);
log.info(`天赋书3方案解析成功: ${bookRequireCounts2.join(', ')}`);
await getTalentBook(settings.talentBookName2)}
catch (error) { notification.send(`${settings.talentBookName2}刷取失败,错误信息: ${error}`);}
}
else log.info(`没有选择刷取天赋书3跳过执行`);
if(settings.weaponName != "无" && settings.weaponName){
try{
weaponRequireCounts = parseAndValidateCounts(settings.weaponMaterialRequireCounts, 4);
log.info(`武器材料方案解析成功: ${weaponRequireCounts.join(', ')}`);
log.info(`武器材料1方案解析成功: ${weaponRequireCounts.join(', ')}`);
await getWeaponMaterial(settings.weaponName)}
catch (error) { notification.send(`${settings.weaponName}刷取失败,错误信息: ${error}`);}
}
else log.info(`没有选择刷取武器材料,跳过执行`);
else log.info(`没有选择刷取武器材料1,跳过执行`);
if(settings.weaponName1 != "无" && settings.weaponName1){
try{
weaponRequireCounts1 = parseAndValidateCounts(settings.weaponMaterialRequireCounts1, 4);
log.info(`武器材料2方案解析成功: ${weaponRequireCounts1.join(', ')}`);
await getWeaponMaterial(settings.weaponName1)}
catch (error) { notification.send(`${settings.weaponName1}刷取失败,错误信息: ${error}`);}
}
else log.info(`没有选择刷取武器材料2跳过执行`);
if(settings.weaponName2 != "无" && settings.weaponName2){
try{
weaponRequireCounts2 = parseAndValidateCounts(settings.weaponMaterialRequireCounts2, 4);
log.info(`武器材料3方案解析成功: ${weaponRequireCounts2.join(', ')}`);
await getWeaponMaterial(settings.weaponName2)}
catch (error) { notification.send(`${settings.weaponName2}刷取失败,错误信息: ${error}`);}
}
else log.info(`没有选择刷取武器材料3跳过执行`);
if(settings.bossName != "无" && settings.bossName){
try{await getBossMaterial(settings.bossName)}
@@ -964,5 +1019,4 @@ catch (error) { notification.send(`${settings.bossName}刷取失败,错误信
}
else log.info(`没有选择挑战首领,跳过执行`);
})();

View File

@@ -1,7 +1,7 @@
{
"manifest_version": 1,
"name": "角色养成一条龙",
"version": "1.3.1",
"version": "1.4",
"description": "详见readme.md",
"authors": [
{

View File

@@ -2,7 +2,7 @@
{
"name": "talentBookName",
"type": "select",
"label": "请选择天赋书类型",
"label": "请选择天赋书1类型",
"options": [
"无",
"自由",
@@ -28,17 +28,83 @@
"浪迹"
]
},
{
"name": "talentBookRequireCounts",
"type": "input-text",
"label": "天赋书数量,绿-蓝-紫"
"label": "天赋书1数量,绿-蓝-紫"
},
{
"name": "talentBookName1",
"type": "select",
"label": "请选择天赋书2类型",
"options": [
"无",
"自由",
"抗争",
"诗文",
"繁荣",
"勤劳",
"黄金",
"浮世",
"风雅",
"天光",
"净言",
"巧思",
"笃行",
"公平",
"正义",
"秩序",
"角逐",
"焚燔",
"纷争",
"月光",
"乐园",
"浪迹"
]
},
{
"name": "talentBookRequireCounts1",
"type": "input-text",
"label": "天赋书2数量绿-蓝-紫"
},
{
"name": "talentBookName2",
"type": "select",
"label": "请选择天赋书3类型",
"options": [
"无",
"自由",
"抗争",
"诗文",
"繁荣",
"勤劳",
"黄金",
"浮世",
"风雅",
"天光",
"净言",
"巧思",
"笃行",
"公平",
"正义",
"秩序",
"角逐",
"焚燔",
"纷争",
"月光",
"乐园",
"浪迹"
]
},
{
"name": "talentBookRequireCounts2",
"type": "input-text",
"label": "天赋书3数量绿-蓝-紫"
},
{
"name": "weaponName",
"type": "select",
"label": "请选择武器材料类型",
"label": "请选择武器材料1类型",
"options": [
"无",
"高塔孤王",
@@ -67,7 +133,75 @@
{
"name": "weaponMaterialRequireCounts",
"type": "input-text",
"label": "武器材料数量,绿-蓝-紫-金"
"label": "武器材料1数量,绿-蓝-紫-金"
},
{
"name": "weaponName1",
"type": "select",
"label": "请选择武器材料2类型",
"options": [
"无",
"高塔孤王",
"凛风奔狼",
"狮牙斗士",
"孤云寒林",
"雾海云间",
"漆黑陨铁",
"远海夷地",
"鸣神御灵",
"今昔剧话",
"谧林涓露",
"绿洲花园",
"烈日威权",
"幽谷弦音",
"纯圣露滴",
"无垢之海",
"贡祭炽心",
"谵妄圣主",
"神合秘烟",
"奇巧秘器",
"长夜燧火",
"终北遗嗣"
]
},
{
"name": "weaponMaterialRequireCounts1",
"type": "input-text",
"label": "武器材料2数量绿-蓝-紫-金"
},
{
"name": "weaponName2",
"type": "select",
"label": "请选择武器材料3类型",
"options": [
"无",
"高塔孤王",
"凛风奔狼",
"狮牙斗士",
"孤云寒林",
"雾海云间",
"漆黑陨铁",
"远海夷地",
"鸣神御灵",
"今昔剧话",
"谧林涓露",
"绿洲花园",
"烈日威权",
"幽谷弦音",
"纯圣露滴",
"无垢之海",
"贡祭炽心",
"谵妄圣主",
"神合秘烟",
"奇巧秘器",
"长夜燧火",
"终北遗嗣"
]
},
{
"name": "weaponMaterialRequireCounts2",
"type": "input-text",
"label": "武器材料3数量绿-蓝-紫-金"
},
{
"name": "bossName",