archive js
This commit is contained in:
103
archive/js/5_7PVP_Auto/lib.js
Normal file
103
archive/js/5_7PVP_Auto/lib.js
Normal file
@@ -0,0 +1,103 @@
|
||||
//eval(file.readTextSync("lib.js"));
|
||||
|
||||
|
||||
const width = genshin.width;
|
||||
const height = genshin.height;
|
||||
|
||||
function clickf(x, y) {
|
||||
click(Math.round(width * x), Math.round(height * y));
|
||||
}
|
||||
function movetof(x, y) {
|
||||
moveMouseTo(Math.round(width * x), Math.round(height * y));
|
||||
}
|
||||
function get_config(name, defval) {
|
||||
let t = settings[name];
|
||||
return typeof (t) === 'undefined' ? defval : t;
|
||||
}
|
||||
function get_config_int(name, defval) {
|
||||
return parseInt(get_config(name, defval), 10);
|
||||
}
|
||||
|
||||
|
||||
class OCRError extends Error {
|
||||
constructor(message, options) { super(message, options); }
|
||||
}
|
||||
|
||||
|
||||
setGameMetrics(genshin.width, genshin.height, 1); // 设置游戏窗口大小和DPI
|
||||
function test1() {
|
||||
log.info(`窗口大小: ${genshin.width} * ${genshin.height}`);
|
||||
let a = captureGameRegion();
|
||||
log.info(`截图:x=${a.x} y=${a.y} w=${a.width} h=${a.height} l=${a.left} t=${a.top} r=${a.right} b=${a.bottom}`);
|
||||
}
|
||||
const global_region = captureGameRegion();
|
||||
//test1();
|
||||
|
||||
function template(filename, x, y, w, h, center = true) {
|
||||
if (center) { x = x - w / 2; y = y - h / 2; }
|
||||
return RecognitionObject.TemplateMatch(file.ReadImageMatSync(filename), 1920 * x, 1080 * y, 1920 * w, 1080 * h);
|
||||
//return RecognitionObject.TemplateMatch(file.ReadImageMatSync(filename), genshin.width * x, genshin.height * y, genshin.width * w, genshin.height * h);
|
||||
}
|
||||
function template_ocr(x, y, w, h, center = true) {
|
||||
if (center) { x = x - w / 2; y = y - h / 2; }
|
||||
return RecognitionObject.Ocr(1920 * x, 1080 * y, 1920 * w, 1080 * h);
|
||||
}
|
||||
|
||||
function draw_obj(obj, name = "test") {
|
||||
const r = obj.RegionOfInterest;
|
||||
let s = global_region.deriveCrop(r.x, r.y, r.width, r.height);
|
||||
s.DrawSelf(name);
|
||||
}
|
||||
|
||||
async function match_click(obj, desc, click = true, timeout = 15000) {
|
||||
draw_obj(obj, "match");
|
||||
await sleep(1000);
|
||||
const start = Date.now();
|
||||
let x = 1;
|
||||
while (Date.now() - start < timeout) {
|
||||
let result = captureGameRegion().Find(obj);
|
||||
await sleep(800);
|
||||
if (result.isExist()) {
|
||||
result.drawSelf("match_found");
|
||||
if (click) {
|
||||
result.click();
|
||||
log.info(`成功识别并点击 ${desc},耗时${Date.now() - start}ms`);
|
||||
} else {
|
||||
log.info(`成功识别到 ${desc},耗时${Date.now() - start}ms`);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
log.info(`第${x}次识别并点击 ${desc} 失败,耗时${Date.now() - start}ms`);
|
||||
x++;
|
||||
await sleep(1000);
|
||||
}
|
||||
throw new OCRError(`等待超时,未找到目标 ${desc}`);
|
||||
}
|
||||
|
||||
async function ocr_click(obj, desc, click = true, timeout = 15000) {
|
||||
draw_obj(obj, "ocr");
|
||||
await sleep(1000);
|
||||
const start = Date.now();
|
||||
let x = 1;
|
||||
while (Date.now() - start < timeout) {
|
||||
let results = captureGameRegion().findMulti(obj);
|
||||
if (results.Count != 1) {
|
||||
log.warn(`搜索到${results.Count}个结果(预期为1个)`);
|
||||
}
|
||||
await sleep(800);
|
||||
if (results.Count == 1) {
|
||||
results[0].drawSelf("ocr_found");
|
||||
if (click) {
|
||||
results[0].click();
|
||||
log.info(`成功Ocr识别并点击 ${desc}, 耗时${Date.now() - start}ms`);
|
||||
} else {
|
||||
log.info(`成功Ocr识别到 ${desc}, 耗时${Date.now() - start}ms`)
|
||||
}
|
||||
return results[0];
|
||||
}
|
||||
log.info(`第${x}次Ocr识别并点击 ${desc} 失败,耗时${Date.now() - start}ms`);
|
||||
x++;
|
||||
await sleep(1000);
|
||||
}
|
||||
throw new OCRError(`等待超时,未找到Ocr目标 ${desc}`);
|
||||
}
|
||||
Reference in New Issue
Block a user