├── .gitignore ├── builds ├── buildImages.js ├── buildScripts.js ├── clean.js ├── insertKeymap.js └── utils.js ├── changelog.md ├── docs ├── images │ ├── 01-js-settings.png │ ├── 02-key-macro.png │ ├── heping-settings.jpg │ └── tcg-settings.png ├── 官方资料 │ ├── TCG单段,时间间隔压枪配置(推荐设置比较简单).zip │ ├── TCG多段,指定像素压枪配置(不推荐调像素较麻烦).zip │ └── TCG多段,时间间隔压枪配置(推荐设置较简单).zip └── 键位配置 │ └── 2880x1800 │ └── TG_Keys_XiaoMiPad6Max14_2023-12-31.properties ├── gulpfile.js ├── package-lock.json ├── package.json ├── qodana.yaml ├── readme.md ├── src ├── images │ ├── 1600 │ │ ├── bag │ │ │ ├── 拾取列表关闭按钮.png │ │ │ └── 背包已打开的标志.png │ │ ├── car │ │ │ └── 下车按钮.png │ │ ├── guns │ │ │ ├── delicate │ │ │ │ ├── 大图ACVAL.png │ │ │ │ ├── 大图AKM.png │ │ │ │ ├── 大图AUG.png │ │ │ │ ├── 大图DP28.png │ │ │ │ ├── 大图GROZA.png │ │ │ │ ├── 大图M249.png │ │ │ │ ├── 大图M4.png │ │ │ │ ├── 大图M417.png │ │ │ │ ├── 大图M762.png │ │ │ │ ├── 大图MG3.png │ │ │ │ ├── 大图MIGUAN.png │ │ │ │ ├── 大图MK20H.png │ │ │ │ ├── 大图P90.png │ │ │ │ ├── 大图PKM.png │ │ │ │ ├── 大图SCARL.png │ │ │ │ ├── 大图TANGMUXUN.png │ │ │ │ ├── 大图UMP45.png │ │ │ │ ├── 大图UZI.png │ │ │ │ ├── 大图VECTOR.png │ │ │ │ ├── 大图VSS.png │ │ │ │ └── 大图YENIU.png │ │ │ └── flat │ │ │ │ ├── ACVAL.png │ │ │ │ ├── AK.png │ │ │ │ ├── AKM.png │ │ │ │ ├── AUG.png │ │ │ │ ├── DP28.png │ │ │ │ ├── GOZA.png │ │ │ │ ├── GROZA.png │ │ │ │ ├── M249.png │ │ │ │ ├── M4.png │ │ │ │ ├── M417.png │ │ │ │ ├── M762.png │ │ │ │ ├── MG3.png │ │ │ │ ├── MIGUAN.png │ │ │ │ ├── MK20H.png │ │ │ │ ├── P90.png │ │ │ │ ├── PKM.png │ │ │ │ ├── SCARL.png │ │ │ │ ├── TANGMUXUN.png │ │ │ │ ├── UMP45.png │ │ │ │ ├── UZI.png │ │ │ │ ├── VECTOR.png │ │ │ │ ├── VSS.png │ │ │ │ └── YENIU.png │ │ ├── medicine │ │ │ ├── 急救包.png │ │ │ ├── 止痛药.png │ │ │ ├── 绷带.png │ │ │ ├── 肾上腺素注射剂.png │ │ │ └── 能量饮料.png │ │ ├── mirrors │ │ │ ├── 6倍镜调距按钮.png │ │ │ ├── delicate │ │ │ │ ├── 大图2倍镜.png │ │ │ │ ├── 大图3倍镜.png │ │ │ │ ├── 大图4倍镜.png │ │ │ │ ├── 大图6倍镜.png │ │ │ │ ├── 大图8倍镜.png │ │ │ │ ├── 大图全息.png │ │ │ │ └── 大图红点.png │ │ │ ├── text │ │ │ │ ├── 2倍镜文本.png │ │ │ │ ├── 3倍镜文本.png │ │ │ │ ├── 4倍镜文本.png │ │ │ │ ├── 6倍镜文本.png │ │ │ │ ├── 8倍镜文本.png │ │ │ │ ├── 全息文本.png │ │ │ │ ├── 机瞄文本.png │ │ │ │ └── 红点文本.png │ │ │ └── 第一人称文本.png │ │ └── missile │ │ │ ├── 取消投掷按钮.png │ │ │ ├── 投掷物展开按钮.png │ │ │ ├── 投掷物折叠按钮.png │ │ │ ├── 烟雾弹.png │ │ │ ├── 燃烧瓶.png │ │ │ └── 碎片手榴弹.png │ └── 1800 │ │ ├── bag │ │ ├── 拾取列表关闭按钮.png │ │ ├── 拾取列表关闭按钮备用2.png │ │ └── 背包已打开的标志.png │ │ ├── car │ │ └── 下车按钮.png │ │ ├── guns │ │ ├── delicate │ │ │ ├── 大图ACVAL.png │ │ │ ├── 大图AKM.png │ │ │ ├── 大图AUG.png │ │ │ ├── 大图DP28.png │ │ │ ├── 大图GROZA.png │ │ │ ├── 大图M249.png │ │ │ ├── 大图M4.png │ │ │ ├── 大图M417.png │ │ │ ├── 大图M762.png │ │ │ ├── 大图MG3.png │ │ │ ├── 大图MIGUAN.png │ │ │ ├── 大图MK20H.png │ │ │ ├── 大图P90.png │ │ │ ├── 大图PKM.png │ │ │ ├── 大图SCARL.png │ │ │ ├── 大图TANGMUXUN.png │ │ │ ├── 大图UMP45.png │ │ │ ├── 大图UZI.png │ │ │ ├── 大图VECTOR.png │ │ │ ├── 大图VSS.png │ │ │ └── 大图YENIU.png │ │ └── flat │ │ │ ├── ACVAL.png │ │ │ ├── AK.png │ │ │ ├── AKM.png │ │ │ ├── AUG.png │ │ │ ├── DP28.png │ │ │ ├── GOZA.png │ │ │ ├── GROZA.png │ │ │ ├── M249.png │ │ │ ├── M4.png │ │ │ ├── M417.png │ │ │ ├── M762.png │ │ │ ├── MG3.png │ │ │ ├── MIGUAN.png │ │ │ ├── MK14.png │ │ │ ├── MK20H.png │ │ │ ├── P90.png │ │ │ ├── PKM.png │ │ │ ├── SCARL.png │ │ │ ├── TANGMUXUN.png │ │ │ ├── UMP45.png │ │ │ ├── UZI.png │ │ │ ├── VECTOR.png │ │ │ ├── VSS.png │ │ │ └── YENIU.png │ │ ├── medicine │ │ ├── 急救包.png │ │ ├── 止痛药.png │ │ ├── 绷带.png │ │ ├── 肾上腺素注射剂.png │ │ └── 能量饮料.png │ │ ├── mirrors │ │ ├── 6倍镜调距按钮.png │ │ ├── delicate │ │ │ ├── 大图2倍镜.png │ │ │ ├── 大图3倍镜.png │ │ │ ├── 大图4倍镜.png │ │ │ ├── 大图6倍镜.png │ │ │ ├── 大图8倍镜.png │ │ │ ├── 大图全息.png │ │ │ └── 大图红点.png │ │ ├── text │ │ │ ├── 2倍镜文本.png │ │ │ ├── 3倍镜文本.png │ │ │ ├── 4倍镜文本.png │ │ │ ├── 6倍镜文本.png │ │ │ ├── 8倍镜文本.png │ │ │ ├── 全息文本.png │ │ │ ├── 机瞄文本.png │ │ │ └── 红点文本.png │ │ └── 第一人称文本.png │ │ └── missile │ │ ├── 取消投掷按钮.png │ │ ├── 投掷物展开按钮.png │ │ ├── 投掷物折叠按钮.png │ │ ├── 烟雾弹.png │ │ ├── 燃烧瓶.png │ │ └── 碎片手榴弹.png └── scripts │ ├── bag.ts │ ├── car.ts │ ├── constant.ts │ ├── gun.ts │ ├── keymap.ts │ ├── medicine.ts │ ├── mirror.ts │ ├── missile.ts │ ├── posture.ts │ ├── pressArgs.ts │ ├── pressCtrl.ts │ ├── skill.ts │ ├── store.ts │ └── utils.ts ├── tsconfig.json └── types ├── index.d.ts └── mapi.d.ts /.gitignore: -------------------------------------------------------------------------------- 1 | temp/ 2 | .idea 3 | node_modules 4 | dist/ 5 | -------------------------------------------------------------------------------- /builds/buildImages.js: -------------------------------------------------------------------------------- 1 | const { src, dest, series } = require('gulp'); 2 | const rename = require('gulp-rename'); 3 | const { CTX_PATH, TCG_IMAGES_DIR } = require('./utils'); 4 | const clean = require('./clean'); 5 | 6 | 7 | function build() { 8 | return src(`src/images/**/*.png`, { cwd: CTX_PATH }) 9 | 10 | // 1600/guns/AMK.png -> 1600/AMK.png 11 | .pipe(rename(function (path) { 12 | // { dirname: '1600\\guns', basename: 'ACVAL', extname: '.png' } 13 | const { dirname } = path; 14 | 15 | const dirs = dirname.split(/[/\\]/); 16 | 17 | const firstDir = dirs[0] || ''; 18 | 19 | path.dirname = firstDir; 20 | })) 21 | 22 | .pipe(dest(TCG_IMAGES_DIR)); 23 | } 24 | 25 | module.exports = series(clean(TCG_IMAGES_DIR), build); 26 | -------------------------------------------------------------------------------- /builds/buildScripts.js: -------------------------------------------------------------------------------- 1 | const { src, dest, series } = require('gulp'); 2 | const replace = require('gulp-replace'); 3 | const ts = require('gulp-typescript'); 4 | const clean = require('./clean') 5 | const { CTX_PATH, TCG_SCRIPTS_DIR, DIST_PATH } = require('./utils'); 6 | 7 | const tsProject = ts.createProject('tsconfig.json'); 8 | 9 | const DEVICE = process.env.DEVICE; 10 | 11 | const DEVICE_REGEX = /\/\*\s*replace\s*start\s*\*\/\s*\w+\s*\/\*\s*replace end\s*\*\//; 12 | const RELATIVE_IMPORT_REGEX = /(from\s+['"])(\.\/)(\w+['"])/gm; 13 | 14 | function build() { 15 | return src(['src/scripts/*.js', 'src/scripts/*.ts'], { cwd: CTX_PATH }) 16 | // 指定编译哪个设备 17 | // /* replace start */ DEVICE /* replace end */ 18 | .pipe(replace(DEVICE_REGEX, DEVICE)) 19 | 20 | .pipe(tsProject()).js 21 | 22 | // import x from './x' --> import x from 'x' 23 | .pipe(replace(RELATIVE_IMPORT_REGEX, '$1$3')) 24 | 25 | .pipe(dest(TCG_SCRIPTS_DIR)) 26 | .pipe(dest(DIST_PATH)); 27 | } 28 | 29 | module.exports = series(clean(TCG_SCRIPTS_DIR), build); 30 | -------------------------------------------------------------------------------- /builds/clean.js: -------------------------------------------------------------------------------- 1 | const { rmSync } = require('fs'); 2 | 3 | module.exports = function(dir) { 4 | return function(next) { 5 | rmSync(dir, { recursive: true }); 6 | next(); 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /builds/insertKeymap.js: -------------------------------------------------------------------------------- 1 | const { CTX_PATH } = require('./utils'); 2 | const { readFileSync, writeFileSync } = require('fs'); 3 | const { resolve } = require('path') 4 | 5 | const KEYMAP_SCRIPT_FILE_PATH = resolve(CTX_PATH, './src/scripts/keymap.ts'); 6 | 7 | const README_FILE_PATH = resolve(CTX_PATH, './readme.md'); 8 | 9 | const DOC_COMMENTS_REGEX = /(\/\*\*\s*[\s\S]+?\*\/\s*\w+\(\)\s*{)/gm; 10 | 11 | const DESCRIPTION_REGEX = /@description\s([\s\S]*?)@/m; 12 | 13 | const BIND_REGEX = /@bind\s([\s\S]*?)\s*\*/m; 14 | 15 | const METHOD_REGEX = /^\s*(\w*\(\))\s*{/m; 16 | 17 | const KEYMAP_START_TEXT = ''; 18 | 19 | const KEYMAP_END_TEXT = ''; 20 | 21 | function insertKeymap() { 22 | const comments = getComments(); 23 | writeToReadme(comments); 24 | } 25 | 26 | function getComments() { 27 | const content = readFileSync(KEYMAP_SCRIPT_FILE_PATH, { encoding: 'utf-8' }); 28 | 29 | const commentStrList = content.match(DOC_COMMENTS_REGEX) 30 | .filter((item) => item.includes('@description') && item.includes('@bind')); 31 | 32 | const comments = commentStrList.map((commentStr) => { 33 | const [ , description ] = commentStr.match(DESCRIPTION_REGEX); 34 | const [ , bind ] = commentStr.match(BIND_REGEX); 35 | const [ , method ] = commentStr.match(METHOD_REGEX); 36 | 37 | 38 | const desc = description.split(/[\n\r]/) 39 | .map((item) => { 40 | return item.trim().replace(/^\*/, ''); 41 | }) 42 | .filter(Boolean) 43 | .join('
'); 44 | 45 | return { description: desc, bind, method }; 46 | }); 47 | 48 | comments.sort((prev, curr) => { 49 | if (prev.bind < curr.bind) { 50 | return -1; 51 | } else { 52 | return 1; 53 | } 54 | }); 55 | 56 | return comments; 57 | } 58 | 59 | function writeToReadme(comments) { 60 | const content = readFileSync(README_FILE_PATH, { encoding: 'utf-8' }); 61 | 62 | const tableHeader = '' 63 | + '| 按键 | 说明 | 宏 |\n' 64 | + '| --- | --- | --- |\n' 65 | 66 | let tableRows = ''; 67 | 68 | comments.forEach(({ description, bind, method }) => { 69 | const macro =` 70 | (function() { 71 | import('keymap') 72 | .then(({ default: keymap }) => { 73 | keymap.${method}; 74 | }); 75 | } ()); 76 | ` 77 | .split(/[\n\r]/gm) 78 | .filter((item) => Boolean(item.trim())) 79 | .map((item) => (`\`${item}\``)) 80 | .join('
') 81 | ; 82 | 83 | tableRows += `| ${bind} | ${description} | ${macro} |\n` 84 | }); 85 | 86 | const table = tableHeader + tableRows; 87 | 88 | const replacement = `\n${table}\n`; 89 | 90 | const startIndex = content.indexOf(KEYMAP_START_TEXT) + KEYMAP_START_TEXT.length + 1; 91 | const endIndex = content.indexOf(KEYMAP_END_TEXT); 92 | 93 | const newContent = content.substring(0, startIndex) + replacement + content.substring(endIndex) 94 | 95 | writeFileSync(README_FILE_PATH, newContent, { encoding: 'utf-8' }); 96 | } 97 | 98 | module.exports = function (next) { 99 | insertKeymap() 100 | 101 | next(); 102 | } 103 | -------------------------------------------------------------------------------- /builds/utils.js: -------------------------------------------------------------------------------- 1 | const { resolve } = require('path'); 2 | 3 | // C:\Users\abc 4 | const USER_HOME = process.env.HOME || process.env.USERPROFILE; 5 | 6 | // C:\Users\abc\AppData\Roaming\Sigma-RT\TC Games\resource\Scripts 7 | const TCG_SCRIPTS_DIR = resolve(USER_HOME, 'AppData\\Roaming\\Sigma-RT\\TC Games\\resource\\Scripts') 8 | 9 | // C:\Users\abc\AppData\Roaming\Sigma-RT\TC Games\resource\game\smartkey\com.tencent.tmgp.pubgmhd 10 | const TCG_IMAGES_DIR = resolve(USER_HOME, 'AppData\\Roaming\\Sigma-RT\\TC Games\\resource\\game\\smartkey\\com.tencent.tmgp.pubgmhd') 11 | 12 | const CTX_PATH = resolve(__dirname, '../'); 13 | 14 | const DIST_PATH = resolve(__dirname, '../dist'); 15 | 16 | module.exports = { 17 | TCG_SCRIPTS_DIR, 18 | TCG_IMAGES_DIR, 19 | CTX_PATH, 20 | DIST_PATH, 21 | } 22 | -------------------------------------------------------------------------------- /changelog.md: -------------------------------------------------------------------------------- 1 | # change log 2 | 3 | ## v1.0.0 4 | 5 | 说明: 6 | 7 | * 和平精英压枪脚本。 8 | 9 | 支持: 10 | 11 | * 华为 nova9, 2430 × 1080 12 | * 华为 MatePad 11, 2560 × 1600 13 | 14 | 附件 “release-1.0.0.zip” 解压后: 15 | 16 | ```text 17 | release-1.0.0/ 18 | matepad11/ # matepad11 脚本目录 19 | nova9/ # nova9 脚本目录 20 | com.tencent.tmgp.pubgmhd.zip # 图片资源 21 | 键位方案.zip 22 | ``` 23 | 24 | 如果你是 nova9 设备: 25 | 26 | 1. 复制 `nova9/` 下的所有 `.js` 文件 27 | 2. 粘贴到 `C:\Users\abc\AppData\Roaming\Sigma-RT\TC Games\resource\Scripts` 目录下 28 | 3. 注意:`C:\Users\abc` 改成你自己的 29 | -------------------------------------------------------------------------------- /docs/images/01-js-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/docs/images/01-js-settings.png -------------------------------------------------------------------------------- /docs/images/02-key-macro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/docs/images/02-key-macro.png -------------------------------------------------------------------------------- /docs/images/heping-settings.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/docs/images/heping-settings.jpg -------------------------------------------------------------------------------- /docs/images/tcg-settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/docs/images/tcg-settings.png -------------------------------------------------------------------------------- /docs/官方资料/TCG单段,时间间隔压枪配置(推荐设置比较简单).zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/docs/官方资料/TCG单段,时间间隔压枪配置(推荐设置比较简单).zip -------------------------------------------------------------------------------- /docs/官方资料/TCG多段,指定像素压枪配置(不推荐调像素较麻烦).zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/docs/官方资料/TCG多段,指定像素压枪配置(不推荐调像素较麻烦).zip -------------------------------------------------------------------------------- /docs/官方资料/TCG多段,时间间隔压枪配置(推荐设置较简单).zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/docs/官方资料/TCG多段,时间间隔压枪配置(推荐设置较简单).zip -------------------------------------------------------------------------------- /docs/键位配置/2880x1800/TG_Keys_XiaoMiPad6Max14_2023-12-31.properties: -------------------------------------------------------------------------------- 1 | ID=89515 2 | SCRIPT_DESCRIPTION=和平-小米6max-2023-12-30 3 | SCRIPT_EXPLAIN= 4 | SCRIPT_V=false 5 | SCRIPT_IMAGE= 6 | appKeyScriptVersion=0 7 | HOTKEY_PANEL_SIZE=997,621 8 | RESOLUTION=2880,1800 9 | MOUSEAIM_CUT_IN_OUT_M=True 10 | MOUSEAIM_CUT_IN_OUT_TAB=True 11 | ROTATETYPE= 12 | SPECIAL_DEVICE_STUCK_POINT=False 13 | AIM_STATIC_RESETAIM=True 14 | MOUSEAIM_DPAD_RESET=True 15 | SINGLE_POINT_FIREAIM=False 16 | MOUSEAIM_KEYBOARD_RESET=True 17 | MACRO_SHOW_OR_HIDE_COMMAND_TEXT=True 18 | GAME_CONTROL_RANDOM_THRESHOLD=6 19 | HOT_KEY_SYNC_VAL=50 20 | DIRECTION_MODE=False 21 | DIRECTION_ROCK_MODE_BIND_SHIFT=True 22 | DIRECTION_ROCK_MODE_VAL=3 23 | DIRECTION_ROCK_MODE_WLAK_RUN_MODE=DEFRUN 24 | DIRECTION_ROCK_MODE_WLAK_RUN_SELECTED=0 25 | DIRECTION=87,UP,462,1344,81,385,158,158;83,DOWN,462,1344,81,385,158,158;68,RIGHT,462,1344,81,385,158,158;65,LEFT,462,1344,81,385,158,158;$Sync; 26 | AIM_X=26 27 | AIM_Y=26 28 | BOUNDARYPOINTERBACK=False 29 | AREARANGE=1031,-67,549,550 30 | MOUSEAIM_BACK_MODE=2 31 | AIM=192,CENTER,1305,209,357,-23,190,190; 32 | DEFAULT=90,CENTER$Sync,2736,1688,920,555,55,55;67,CENTER$Sync,2777,1351,934,439,55,55;16,CENTER$Sync,2447,419,820,117,55,55;77,CENTER$Sync,2748,71,924,-3,55,55;82,CENTER$Sync,2237,1693,747,557,55,55;49,CENTER,1263,1632,410,536,55,55;50,CENTER,1639,1630,540,535,55,55;53,CENTER,928,1708,294,562,55,55;52,CENTER,1956,1696,650,558,55,55;71,CENTER$Sync,2635,859,885,269,55,55;51,CENTER,1746,1514,577,495,55,55;84,CENTER,1994,656,663,199,55,55;66,CENTER,204,1650,43,542,55,55;18,CENTER,2263,474,756,136,55,55;-234,CENTER,2029,1320,675,428,55,55;73,CENTER,2618,508,879,148,55,55;69,CENTER,602,833,181,260,55,55;88,CENTER,2600,1198,873,386,55,55;89,CENTER,2118,387,706,106,55,55;85,CENTER,625,1719,189,566,55,55;70,CENTER,2034,920,677,290,55,55;32,CENTER,2475,1682,824,553,66,55;86,CENTER,2283,1169,763,376,55,55;81,CENTER,374,833,102,260,55,55;74,CENTER,1440,1201,471,387,55,55; 33 | MACRO=-111,CENTER,2473,1401,829,456,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.fire()&*s*&\n })&*s*&\n} ())&*s*&\n;123,CENTER,2185,71,729,-3,55,55, (function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.toggleEnableOfTip()&*s*&\n })&*s*&\n} ())&*s*&\n;-123,CENTER,2173,1435,725,468,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.toggleX6Sight()&*s*&\n })&*s*&\n} ())&*s*&\n;72,CENTER,1980,77,658,-1,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.hideGun()&*s*&\n })&*s*&\n} ())&*s*&\n;9,CENTER,175,818,33,255,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.switchGun()&*s*&\n })&*s*&\n} ())&*s*&\n;38,CENTER,1751,210,579,45,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.addDelayOfGunPressArgs()&*s*&\n })&*s*&\n} ())&*s*&;40,CENTER,1907,210,633,45,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.subtractDelay()&*s*&\n })&*s*&\n} ())&*s*&\n;122,CENTER,2185,196,729,40,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.logErrorPressArgs()&*s*&\n })&*s*&\n} ())&*s*&\n;-333,CENTER,2771,1068,932,341,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.bindKeyMouseRight()&*s*&\n })&*s*&\n} ())&*s*&\n;17,CENTER,2312,74,773,-2,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.reset()&*s*&\n })&*s*&\n} ())&*s*&\n;97,CENTER,756,674,228,205,67,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.eatEnergyDrink()&*s*&\n })&*s*&\n} ())&*s*&\n;98,CENTER,903,671,279,204,67,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.eatPainkiller()&*s*&\n })&*s*&\n} ())&*s*&\n;99,CENTER,1051,671,330,204,67,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.eatEpinephrineInjection()&*s*&\n })&*s*&\n} ())&*s*&\n;100,CENTER,750,552,226,163,67,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.eatBandage()&*s*&\n })&*s*&\n} ())&*s*&\n;101,CENTER,900,543,278,160,67,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.eatFirstAidKit()&*s*&\n })&*s*&\n} ())&*s*&\n;102,CENTER,1045,540,328,159,67,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.eatMedicalFirstAidKit()&*s*&\n })&*s*&\n} ())&*s*&\n;103,CENTER,744,424,224,119,67,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.switchFragmentBomb()&*s*&\n })&*s*&\n} ())&*s*&\n;104,CENTER,892,424,275,119,67,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.switchSmokeBomb()&*s*&\n })&*s*&\n} ())&*s*&\n;105,CENTER,1042,422,327,118,67,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.switchMolotovCocktail()&*s*&\n })&*s*&\n} ())&*s*&\n;107,CENTER,2800,624,942,188,55,55,(function() {\nvar result =#& mapi.keyispress('shift')&*s*&\nmapi.tip(result)\n} ())&*s*&\n;116,CENTER,2286,196,764,40,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.swapGuns()&*s*&\n })&*s*&\n} ())&*s*&\n;120,CENTER,1774,352,587,94,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.toggleFlashMirror()&*s*&\n })&*s*&\n} ())&*s*&\n;115,CENTER,160,957,28,303,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.hideGun()&*s*&\n })&*s*&\n} ())&*s*&\n;112,CENTER,1751,523,579,153,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.bindKeyF1()&*s*&\n })&*s*&\n} ())&*s*&;113,CENTER,1749,665,578,202,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.bindKeyF2()&*s*&\n })&*s*&\n} ())&*s*&;114,CENTER,1746,804,577,250,55,55,(function() {\n import('keymap')\n .then(({ default: keymap }) =#&> {\n keymap.bindKeyF3()&*s*&\n })&*s*&\n} ())&*s*&; 34 | -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | const buildScripts = require('./builds/buildScripts'); 2 | const buildImages = require('./builds/buildImages'); 3 | const insertKeymap = require('./builds/insertKeymap'); 4 | 5 | exports.buildScripts = buildScripts; 6 | exports.buildImages = buildImages; 7 | exports.insertKeymap = insertKeymap; 8 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tc-games-scripts", 3 | "version": "1.0.0", 4 | "description": "TC Games 压枪脚本", 5 | "main": "index.js", 6 | "directories": { 7 | "doc": "docs", 8 | "test": "test" 9 | }, 10 | "scripts": { 11 | "build:image": "gulp buildImages", 12 | "build:script:nova9": "cross-env DEVICE=Nova9 gulp buildScripts", 13 | "build:script:matepad11": "cross-env DEVICE=MatePad11 gulp buildScripts", 14 | "build:script:XiaoMiPad6Max14": "cross-env DEVICE=XiaoMiPad6Max14 gulp buildScripts", 15 | "insert-keymap": "gulp insertKeymap" 16 | }, 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/forwardNow/tc-games-scripts.git" 20 | }, 21 | "keywords": [], 22 | "author": "", 23 | "license": "ISC", 24 | "bugs": { 25 | "url": "https://github.com/forwardNow/tc-games-scripts/issues" 26 | }, 27 | "homepage": "https://github.com/forwardNow/tc-games-scripts#readme", 28 | "dependencies": { 29 | "gulp": "^4.0.2", 30 | "gulp-rename": "^2.0.0", 31 | "gulp-replace": "^1.1.4", 32 | "gulp-typescript": "^6.0.0-alpha.1" 33 | }, 34 | "devDependencies": { 35 | "cross-env": "^7.0.3" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /qodana.yaml: -------------------------------------------------------------------------------- 1 | #-------------------------------------------------------------------------------# 2 | # Qodana analysis is configured by qodana.yaml file # 3 | # https://www.jetbrains.com/help/qodana/qodana-yaml.html # 4 | #-------------------------------------------------------------------------------# 5 | version: "1.0" 6 | 7 | #Specify inspection profile for code analysis 8 | profile: 9 | name: qodana.starter 10 | 11 | #Enable inspections 12 | #include: 13 | # - name: 14 | 15 | #Disable inspections 16 | #exclude: 17 | # - name: 18 | # paths: 19 | # - 20 | 21 | #The following options are only applied in CI/CD environment 22 | #These options are ignored during local run 23 | 24 | #Execute shell command before Qodana execution 25 | #bootstrap: sh ./prepare-qodana.sh 26 | 27 | #Install IDE plugins before Qodana execution 28 | #plugins: 29 | # - id: #(plugin id can be found at https://plugins.jetbrains.com) 30 | 31 | #Specify Qodana linter for analysis 32 | linter: jetbrains/qodana-js:latest 33 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # TC Games JS 脚本 2 | 3 | ## 1. 介绍 4 | 5 | 说明: 6 | 7 | * [TC Games](http://www.tcgames.com.cn/) 和平精英 自动压枪 辅助脚本,其他辅助功能见“宏按键绑定” 8 | * TC Games: 将安卓移动设备投屏到电脑,用电脑操作安卓设备 的软件 9 | 10 | 安装: 11 | 12 | 1. 下载此项目并解压,建议解压到桌面 13 | 2. 下载并安装 [node.js v16.20.1](https://nodejs.org/download/release/v16.20.1/node-v16.20.1-x64.msi) 14 | 3. 使用 windows 搜索 “cmd”,打开 “命令提示符” 15 | 4. 执行如下命令:(`#` 打头的不用执行) 16 | 17 | ```text 18 | # 切换盘符 19 | C:\Users\abc> W: 20 | 21 | # 切换到项目根目录 22 | W:\> cd W:\dev\tc-games-scripts 23 | 24 | # 安装 gulp-cli 25 | W:\dev\tc-games-scripts> npm i -g gulp-cli 26 | 27 | # 安装 gulp 28 | W:\dev\tc-games-scripts> npm i gulp 29 | 30 | # 安装项目依赖 31 | W:\dev\tc-games-scripts> npm i 32 | 33 | # 构建图片: 34 | # 1. 删除 "TC Games\resource\game\smartkey\com.tencent.tmgp.pubgmhd" 目录 35 | # 2. 将 "src/images/" 下的图片拷贝过去 36 | W:\dev\tc-games-scripts> npm run build:image 37 | 38 | # 构建 nova9 可以使用的脚本(根据自己的设备选择,执行一个即可) 39 | W:\dev\tc-games-scripts> npm run build:script:nova9 40 | 41 | # 构建 matepad11 可以使用的脚本(根据自己的设备选择,执行一个即可) 42 | W:\dev\tc-games-scripts> npm run build:script:matepad11 43 | 44 | # 构建 XiaoMiPad6Max14 可以使用的脚本(根据自己的设备选择,执行一个即可) 45 | W:\dev\tc-games-scripts> npm run build:script:XiaoMiPad6Max14 46 | ``` 47 | 48 | 键位: 49 | 50 | * 位置:[./docs/键位配置/2880x1800/TG_Keys_XiaoMiPad6Max14_2023-12-31.properties](./docs/键位配置/2880x1800/TG_Keys_XiaoMiPad6Max14_2023-12-31.properties) 51 | 52 | 宏按键绑定: 53 | 54 | 55 | 56 | | 按键 | 说明 | 宏 | 57 | | --- | --- | --- | 58 | | Ctrl | 1. 重置 准心
2. 重置 方向键
3. 重置点头操作 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.reset();`
` });`
`} ());` | 59 | | F1 | 1. 拾取
2. 切 雷 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.bindKeyF1();`
` });`
`} ());` | 60 | | F11 | 记录不准确的压枪参数 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.logErrorPressArgs();`
` });`
`} ());` | 61 | | F12 | 启用/禁用 utils.showTip() | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.toggleEnableOfTip();`
` });`
`} ());` | 62 | | F2 | 1. 拾取
2. 切 烟 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.bindKeyF2();`
` });`
`} ());` | 63 | | F3 | 1. 拾取
2. 切 火 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.bindKeyF3();`
` });`
`} ());` | 64 | | F4 | 收枪 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.hideGun();`
` });`
`} ());` | 65 | | F5 | 左右枪互换 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.swapGuns();`
` });`
`} ());` | 66 | | Num1 | 吃 能量饮料 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.eatEnergyDrink();`
` });`
`} ());` | 67 | | Num2 | 吃 止痛药 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.eatPainkiller();`
` });`
`} ());` | 68 | | Num3 | 吃 肾上腺素注射剂 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.eatEpinephrineInjection();`
` });`
`} ());` | 69 | | Num4 | 吃 绷带 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.eatBandage();`
` });`
`} ());` | 70 | | Num5 | 吃 急救包 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.eatFirstAidKit();`
` });`
`} ());` | 71 | | Num6 | 吃 医疗急救箱 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.eatMedicalFirstAidKit();`
` });`
`} ());` | 72 | | Num7 | 切换 破片手榴弹 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.switchFragmentBomb();`
` });`
`} ());` | 73 | | Num8 | 切换 烟雾弹 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.switchSmokeBomb();`
` });`
`} ());` | 74 | | Num9 | 切换 燃烧瓶 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.switchMolotovCocktail();`
` });`
`} ());` | 75 | | Tab | 切枪 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.switchGun();`
` });`
`} ());` | 76 | | 上箭头 | 动态调整压枪参数, +1 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.addDelayOfGunPressArgs();`
` });`
`} ());` | 77 | | 下箭头 | 动态调整压枪参数, -1 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.subtractDelay();`
` });`
`} ());` | 78 | | 鼠标右键 | 复合按键:
1. 丢弃背包中光标所指位置的配件 (一旦执行,后续操作都取消)
2. 取消投掷 (一旦执行,后续操作都取消)
3. 开镜
4. 更新压枪参数 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.bindKeyMouseRight();`
` });`
`} ());` | 79 | | 鼠标左键 | 开火 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.fire();`
` });`
`} ());` | 80 | | 鼠标滚轮-滚上 | 调整 6 倍镜
并存储调整过 6 倍镜倍率的枪及倍率 | `(function() {`
` import('keymap')`
` .then(({ default: keymap }) => {`
` keymap.toggleX6Sight();`
` });`
`} ());` | 81 | 82 | 83 | 84 | ## 2. 环境 85 | 86 | ### 2.1. 和平精英 87 | 88 | 说明: 89 | 90 | * 灵敏度 及 按键 都使用默认即可 91 | 92 | 图示: 93 | 94 | ![heping-settings.jpg](./docs/images/heping-settings.jpg) 95 | 96 | ### 2.2. TC Games 97 | 98 | ![tcg-settings.png](./docs/images/tcg-settings.png) 99 | 100 | ### 2.3. 移动设备 101 | 102 | 目前主要使用 103 | 104 | * 小米 Pad 6 max 14 105 | * 华为 matepad11 106 | * 华为 nova9(没有做适配) 107 | 108 | #### 2.3.1. Mi6ProMax 109 | 110 | 参数: 111 | 112 | | 类别 | 描述 | 113 | |-----|-----------------| 114 | | 品牌 | 小米 Pad 6 Max 14 | 115 | | 分辨率 | 2880 × 1800 | 116 | 117 | #### 2.3.2. matepad11 118 | 119 | 参数: 120 | 121 | | 类别 | 描述 | 122 | |-----|---------------| 123 | | 品牌 | 华为 MatePad 11 | 124 | | 分辨率 | 2560 × 1600 | 125 | 126 | #### 2.3.3. nova9 127 | 128 | 参数: 129 | 130 | | 类别 | 描述 | 131 | |--------|---------------------| 132 | | 品牌 | 华为 nova9 (NAM-AL00) | 133 | | 分辨率 | 2430 × 1080 | 134 | | 刷新率 | 智能(最高 120 Hz) | 135 | | 屏幕顶部显示 | 自动匹配 | 136 | 137 | 138 | ### 2.4. 电脑 139 | 140 | #### 2.4.1. 笔记本 141 | 142 | 参数: 143 | 144 | | 类别 | 描述 | 145 | |-----|----------------------| 146 | | 品牌 | 联想笔记本,拯救者 R7000 2021 | 147 | | 系统 | win10 | 148 | | 分辨率 | 2560 × 1600 | 149 | 150 | 151 | #### 2.4.2. 一体机 152 | 153 | 参数: 154 | 155 | | 类别 | 描述 | 156 | |-----|----------------------| 157 | | 品牌 | iMac,2017年款 | 158 | | 系统 | win10 | 159 | | 分辨率 | 4096 × 2304, 缩放 200% | 160 | 161 | ## 3. JS 文件 162 | 163 | ### 3.1. 存放位置 164 | 165 | 位置: 166 | 167 | * `C:\Users\abc\AppData\Roaming\Sigma-RT\TC Games\resource\Scripts` (简称“脚本目录”) 168 | * ![JS 文件存放位置](./docs/images/01-js-settings.png) 169 | 170 | 说明: 171 | 172 | * 在 “脚本目录” 中存放的 JS 文件都会被加载 173 | 174 | ### 3.2. 刷新 175 | 176 | 输入设置 中 快捷键: 177 | 178 | * 键位一键恢复: Ctrl + F5 179 | 180 | 修改了 “脚本目录” 中的 JS 文件后,按 `Ctrl + F5` 后就生效了 181 | 182 | ### 3.3. 模块化语法 183 | 184 | 说明: 185 | 186 | * 使用 ES6 模块化语法 187 | * 不能使用相对路径 188 | 189 | 示例: 190 | 191 | * 目录: 192 | 193 | ```text 194 | .../TC Games/resource/Scripts/ 195 | main.js 196 | gun.js 197 | ``` 198 | 199 | * gun.js: 200 | 201 | ```javascript 202 | // 暴露一个函数 203 | export function getCurrentGunName() { 204 | // ... 205 | } 206 | ``` 207 | 208 | * main.js: 209 | 210 | ```javascript 211 | // 导入 gun 模块(gun.js) 212 | import gun from 'gun'; 213 | 214 | const gunName = gun.getCurrentGunName(); 215 | 216 | mapi.tip(gunName, 2); 217 | ``` 218 | 219 | ## 4. 宏按键 220 | 221 | 什么是宏按键: 222 | 223 | * 键位设置 -> 宏按键 224 | * ![02-key-macro.png](./docs/images/02-key-macro.png) 225 | 226 | 宏按键里的 JS 代码必须用**立即执行的函数**包裹起来: 227 | 228 | ```javascript 229 | (function() { 230 | 231 | // 你的代码 232 | 233 | }()); 234 | ``` 235 | 236 | 在宏按键里使用 “脚本目录” 中的 JS 文件(模块): 237 | 238 | ```javascript 239 | // 使用 gun.js 240 | (function() { 241 | import('gun').then((gun) =>{ 242 | 243 | const gunName = gun.getCurrentGunName(); 244 | 245 | mapi.tip(gunName, 2); 246 | 247 | }); 248 | }()); 249 | ``` 250 | 251 | 模块实例问题: 252 | 253 | ```javascript 254 | // test.js 255 | export default { 256 | count: 1, 257 | add() { 258 | this.count += 1; 259 | } 260 | }; 261 | 262 | // 绑定 num1 263 | (function() { 264 | import('test').then(({ default: test }) => { 265 | const prev = test.count; 266 | test.add(); 267 | const curr = test.count; 268 | 269 | mapi.tip(`prev = ${prev}; curr = ${curr}`); // 显示累加的结果 270 | }); 271 | }()); 272 | 273 | // 绑定 num2 274 | (function() { 275 | import('test').then(({ default: test }) => { 276 | mapi.tip(`count = ${test.count}`); // 一直显示初始值 277 | }); 278 | }()); 279 | 280 | 281 | // num1 宏,多次执行只产生一个 test 模块对象 A 282 | // num2 宏,多次执行只产生一个 test 模块对象 B 283 | // A !== B 284 | ``` 285 | 286 | JS 宏日志: 287 | 288 | * 作用:JS 代码报错都会记录在日志文件 289 | * 位置:`C:\Users\abc\AppData\Roaming\Sigma-RT\TC Games\log\macro_javascript.log` 290 | * 查看:`tail -f ~/AppData/Roaming/Sigma-RT/TC\ Games/log/macro_javascript.log` 291 | 292 | ## 5. 图片 293 | 294 | 说明: 295 | 296 | * “简单找图” 用到的图片,`mapi.findimage(图片名称, ....)` 297 | 298 | 注意: 299 | 300 | * 纯文字找图,相似度要调低 301 | 302 | 位置: 303 | 304 | * `C:\Users\abc\AppData\Roaming\Sigma-RT\TC Games\resource\game\smartkey\com.tencent.tmgp.pubgmhd` 305 | 306 | 目录: 307 | 308 | ```text 309 | com.tencent.tmgp.pubgmhd/ 310 | 1080/ # 存放分辨率高度为 1080 设备的图片 311 | 1600/ # 存放分辨率高度为 1600 设备的图片 312 | ``` 313 | 314 | 查找图片的规则: 315 | 316 | * `mapi.findimage('AKM', ....)` 317 | * 如果当前设备是 1080 的手机,则优先去 `1080` 目录找,找不到则去 `1600` 目录找 318 | * 所以可以使用 1600 的平板,然后降低相似度就可以在 1080 的设备上用了 319 | 320 | ## 6. JS API 321 | 322 | ### 6.1. mapi 323 | 324 | 全局对象,JSAPI 接口 325 | 326 | 类型说明文件:[types/mapi.d.ts](./types/mapi.d.ts) 327 | 328 | 官方文档:[http://www.sigma-rt.com/tcgames/help/?u=15](http://www.sigma-rt.com/tcgames/help/?u=15) 329 | 330 | ### 6.2. 多点找色 331 | 332 | 说明: 333 | 334 | * 那个点 是否 是那个色 335 | * 配合 336 | 337 | API: 338 | 339 | * `mapi.findcolor` 340 | 341 | 示例: 342 | 343 | ```javascript 344 | const point = mapi.findimage('255:254:247:142', '1475:648+1477:648+1475:650+1477:650'); 345 | 346 | if (point.X !== 0 || point.Y !== 0) { 347 | // 找到了 348 | } 349 | ``` 350 | 351 | ### 6.3. 全局 map 352 | 353 | 说明: 354 | 355 | * 读写全局变量 356 | 357 | API: 358 | 359 | * `mapi.setglobalmap`: 写 360 | * `mapi.getglobalmap`: 读 361 | 362 | 示例: 363 | 364 | ### 6.4. 日志 365 | 366 | 说明: 367 | 368 | * 日志输出路径:%appdata%\Sigma-RT\TC Games\Log\macro_javascript.log 369 | 370 | API: 371 | 372 | * `logdebug` 373 | * `loginfo` 374 | * `logwarning` 375 | * `logerror` 376 | * `logfatal` 377 | 378 | 注意: 379 | 380 | * API 是全局方法,不需要 mapi 381 | 382 | ## 7. bug 383 | 384 | ### 7.1. 分段压枪,自动开枪 385 | 386 | 描述: 387 | 388 | * 分段压枪,切换 蹲/站 时,点一下开火键会自动打二三十发子弹 389 | 390 | ## 其他 391 | 392 | 拾取方案: 393 | 394 | * 395 | 396 | ## 8. 参考 397 | 398 | * [和平精英手游物资及事件场景中英文对照(持续更新,务必收藏!)](https://zhuanlan.zhihu.com/p/359768662) 399 | * [官方文档](https://www.sigma-rt.com/tcgames/help/?u=15) 400 | -------------------------------------------------------------------------------- /src/images/1600/bag/拾取列表关闭按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/bag/拾取列表关闭按钮.png -------------------------------------------------------------------------------- /src/images/1600/bag/背包已打开的标志.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/bag/背包已打开的标志.png -------------------------------------------------------------------------------- /src/images/1600/car/下车按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/car/下车按钮.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图ACVAL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图ACVAL.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图AKM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图AKM.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图AUG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图AUG.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图DP28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图DP28.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图GROZA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图GROZA.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图M249.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图M249.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图M4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图M4.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图M417.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图M417.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图M762.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图M762.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图MG3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图MG3.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图MIGUAN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图MIGUAN.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图MK20H.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图MK20H.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图P90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图P90.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图PKM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图PKM.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图SCARL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图SCARL.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图TANGMUXUN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图TANGMUXUN.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图UMP45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图UMP45.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图UZI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图UZI.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图VECTOR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图VECTOR.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图VSS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图VSS.png -------------------------------------------------------------------------------- /src/images/1600/guns/delicate/大图YENIU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/delicate/大图YENIU.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/ACVAL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/ACVAL.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/AK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/AK.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/AKM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/AKM.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/AUG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/AUG.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/DP28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/DP28.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/GOZA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/GOZA.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/GROZA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/GROZA.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/M249.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/M249.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/M4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/M4.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/M417.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/M417.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/M762.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/M762.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/MG3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/MG3.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/MIGUAN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/MIGUAN.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/MK20H.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/MK20H.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/P90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/P90.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/PKM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/PKM.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/SCARL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/SCARL.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/TANGMUXUN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/TANGMUXUN.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/UMP45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/UMP45.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/UZI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/UZI.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/VECTOR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/VECTOR.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/VSS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/VSS.png -------------------------------------------------------------------------------- /src/images/1600/guns/flat/YENIU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/guns/flat/YENIU.png -------------------------------------------------------------------------------- /src/images/1600/medicine/急救包.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/medicine/急救包.png -------------------------------------------------------------------------------- /src/images/1600/medicine/止痛药.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/medicine/止痛药.png -------------------------------------------------------------------------------- /src/images/1600/medicine/绷带.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/medicine/绷带.png -------------------------------------------------------------------------------- /src/images/1600/medicine/肾上腺素注射剂.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/medicine/肾上腺素注射剂.png -------------------------------------------------------------------------------- /src/images/1600/medicine/能量饮料.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/medicine/能量饮料.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/6倍镜调距按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/6倍镜调距按钮.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/delicate/大图2倍镜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/delicate/大图2倍镜.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/delicate/大图3倍镜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/delicate/大图3倍镜.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/delicate/大图4倍镜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/delicate/大图4倍镜.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/delicate/大图6倍镜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/delicate/大图6倍镜.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/delicate/大图8倍镜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/delicate/大图8倍镜.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/delicate/大图全息.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/delicate/大图全息.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/delicate/大图红点.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/delicate/大图红点.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/text/2倍镜文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/text/2倍镜文本.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/text/3倍镜文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/text/3倍镜文本.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/text/4倍镜文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/text/4倍镜文本.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/text/6倍镜文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/text/6倍镜文本.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/text/8倍镜文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/text/8倍镜文本.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/text/全息文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/text/全息文本.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/text/机瞄文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/text/机瞄文本.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/text/红点文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/text/红点文本.png -------------------------------------------------------------------------------- /src/images/1600/mirrors/第一人称文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/mirrors/第一人称文本.png -------------------------------------------------------------------------------- /src/images/1600/missile/取消投掷按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/missile/取消投掷按钮.png -------------------------------------------------------------------------------- /src/images/1600/missile/投掷物展开按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/missile/投掷物展开按钮.png -------------------------------------------------------------------------------- /src/images/1600/missile/投掷物折叠按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/missile/投掷物折叠按钮.png -------------------------------------------------------------------------------- /src/images/1600/missile/烟雾弹.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/missile/烟雾弹.png -------------------------------------------------------------------------------- /src/images/1600/missile/燃烧瓶.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/missile/燃烧瓶.png -------------------------------------------------------------------------------- /src/images/1600/missile/碎片手榴弹.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1600/missile/碎片手榴弹.png -------------------------------------------------------------------------------- /src/images/1800/bag/拾取列表关闭按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/bag/拾取列表关闭按钮.png -------------------------------------------------------------------------------- /src/images/1800/bag/拾取列表关闭按钮备用2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/bag/拾取列表关闭按钮备用2.png -------------------------------------------------------------------------------- /src/images/1800/bag/背包已打开的标志.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/bag/背包已打开的标志.png -------------------------------------------------------------------------------- /src/images/1800/car/下车按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/car/下车按钮.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图ACVAL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图ACVAL.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图AKM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图AKM.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图AUG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图AUG.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图DP28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图DP28.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图GROZA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图GROZA.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图M249.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图M249.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图M4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图M4.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图M417.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图M417.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图M762.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图M762.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图MG3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图MG3.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图MIGUAN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图MIGUAN.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图MK20H.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图MK20H.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图P90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图P90.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图PKM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图PKM.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图SCARL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图SCARL.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图TANGMUXUN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图TANGMUXUN.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图UMP45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图UMP45.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图UZI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图UZI.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图VECTOR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图VECTOR.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图VSS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图VSS.png -------------------------------------------------------------------------------- /src/images/1800/guns/delicate/大图YENIU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/delicate/大图YENIU.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/ACVAL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/ACVAL.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/AK.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/AK.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/AKM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/AKM.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/AUG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/AUG.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/DP28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/DP28.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/GOZA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/GOZA.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/GROZA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/GROZA.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/M249.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/M249.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/M4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/M4.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/M417.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/M417.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/M762.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/M762.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/MG3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/MG3.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/MIGUAN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/MIGUAN.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/MK14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/MK14.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/MK20H.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/MK20H.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/P90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/P90.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/PKM.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/PKM.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/SCARL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/SCARL.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/TANGMUXUN.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/TANGMUXUN.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/UMP45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/UMP45.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/UZI.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/UZI.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/VECTOR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/VECTOR.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/VSS.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/VSS.png -------------------------------------------------------------------------------- /src/images/1800/guns/flat/YENIU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/guns/flat/YENIU.png -------------------------------------------------------------------------------- /src/images/1800/medicine/急救包.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/medicine/急救包.png -------------------------------------------------------------------------------- /src/images/1800/medicine/止痛药.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/medicine/止痛药.png -------------------------------------------------------------------------------- /src/images/1800/medicine/绷带.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/medicine/绷带.png -------------------------------------------------------------------------------- /src/images/1800/medicine/肾上腺素注射剂.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/medicine/肾上腺素注射剂.png -------------------------------------------------------------------------------- /src/images/1800/medicine/能量饮料.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/medicine/能量饮料.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/6倍镜调距按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/6倍镜调距按钮.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/delicate/大图2倍镜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/delicate/大图2倍镜.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/delicate/大图3倍镜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/delicate/大图3倍镜.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/delicate/大图4倍镜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/delicate/大图4倍镜.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/delicate/大图6倍镜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/delicate/大图6倍镜.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/delicate/大图8倍镜.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/delicate/大图8倍镜.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/delicate/大图全息.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/delicate/大图全息.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/delicate/大图红点.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/delicate/大图红点.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/text/2倍镜文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/text/2倍镜文本.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/text/3倍镜文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/text/3倍镜文本.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/text/4倍镜文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/text/4倍镜文本.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/text/6倍镜文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/text/6倍镜文本.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/text/8倍镜文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/text/8倍镜文本.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/text/全息文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/text/全息文本.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/text/机瞄文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/text/机瞄文本.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/text/红点文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/text/红点文本.png -------------------------------------------------------------------------------- /src/images/1800/mirrors/第一人称文本.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/mirrors/第一人称文本.png -------------------------------------------------------------------------------- /src/images/1800/missile/取消投掷按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/missile/取消投掷按钮.png -------------------------------------------------------------------------------- /src/images/1800/missile/投掷物展开按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/missile/投掷物展开按钮.png -------------------------------------------------------------------------------- /src/images/1800/missile/投掷物折叠按钮.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/missile/投掷物折叠按钮.png -------------------------------------------------------------------------------- /src/images/1800/missile/烟雾弹.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/missile/烟雾弹.png -------------------------------------------------------------------------------- /src/images/1800/missile/燃烧瓶.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/missile/燃烧瓶.png -------------------------------------------------------------------------------- /src/images/1800/missile/碎片手榴弹.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/forwardNow/tc-games-scripts/5f16084aab4c7423a7e79b501e0479d4899b198c/src/images/1800/missile/碎片手榴弹.png -------------------------------------------------------------------------------- /src/scripts/bag.ts: -------------------------------------------------------------------------------- 1 | import { utils } from './utils'; 2 | import constant, { BindKeys } from './constant'; 3 | import { ImageArgs, Point } from '../../types'; 4 | 5 | export class Bag { 6 | static ImageArgs: { [name: string]: ImageArgs } = { 7 | BagOpenFlagIcon: ['背包已打开的标志', 0.75, 4, 4, 4, 1], 8 | PickupCloseIcon: ['拾取列表关闭按钮', 0.75, 4, 4, 3, 1], 9 | PickupCloseBackupIcon: ['拾取列表关闭按钮备用2', 0.75, 4, 4, 3, 1], 10 | } 11 | 12 | static Points: { [prop: string]: Point } = { 13 | BagLeftGunCenterPoint: { x: 1788, y: 325 } as Point, 14 | BagRightGunCenterPoint: { x: 1788, y: 973 } as Point, 15 | }; 16 | 17 | openBag() { 18 | if (this.isBagOpen()) { 19 | return; 20 | } 21 | 22 | utils.clickKey(BindKeys.Bag); 23 | } 24 | 25 | closeBag() { 26 | if (!this.isBagOpen()) { 27 | return; 28 | } 29 | 30 | utils.clickKey(BindKeys.Bag) 31 | } 32 | 33 | isBagOpen() { 34 | return utils.isImageExist(...Bag.ImageArgs.BagOpenFlagIcon); 35 | } 36 | 37 | /** 38 | * 丢弃光标所指的物资 39 | * @returns {boolean} true - 执行成功 40 | */ 41 | discardMaterialsUnderCursor = () => { 42 | if (!this.isBagOpen()) { 43 | return false; 44 | } 45 | 46 | const startPoint = utils.getMousePosition(); 47 | 48 | const startX = startPoint.X; 49 | const startY = startPoint.Y; 50 | const endX = constant.BagDustbinX; 51 | const endY = startPoint.Y; 52 | 53 | const total = 200; 54 | const pointNum = 10; 55 | const interval = total / pointNum; 56 | 57 | utils.slide(startX, startY, endX, endY, interval, pointNum); 58 | 59 | return true; 60 | } 61 | 62 | swapGuns() { 63 | this.openBag(); 64 | 65 | utils.delay(); 66 | 67 | const { 68 | BagLeftGunCenterPoint: { x: startX, y: startY }, 69 | BagRightGunCenterPoint: { x: endX, y: endY }, 70 | } = Bag.Points; 71 | 72 | const total = 300; 73 | const pointNum = 20; 74 | const interval = total / pointNum; 75 | 76 | utils.slide(startX, startY, endX, endY, interval, pointNum); 77 | 78 | utils.delay(400); 79 | 80 | this.closeBag(); 81 | } 82 | 83 | /** 是否可以拾取东西 */ 84 | canPickUp() { 85 | return utils.isImageExist(...Bag.ImageArgs.PickupCloseIcon) 86 | || utils.isImageExist(...Bag.ImageArgs.PickupCloseBackupIcon); 87 | } 88 | } 89 | 90 | export const bag = new Bag(); 91 | -------------------------------------------------------------------------------- /src/scripts/car.ts: -------------------------------------------------------------------------------- 1 | import { ImageArgs } from '../../types'; 2 | import { utils } from './utils'; 3 | import { BindKeys } from './constant'; 4 | 5 | export class Car { 6 | static ImageArgs: { [name: string]: ImageArgs } = { 7 | GetOffButton: ['下车按钮', 0.75, 4, 3, 4, 2] 8 | } 9 | 10 | /** 是否在车上 */ 11 | isOnCar() { 12 | const point = utils.findImage(...Car.ImageArgs.GetOffButton); 13 | 14 | const result = utils.isPointExist(point); 15 | 16 | return { point, result }; 17 | } 18 | 19 | /** 上车 */ 20 | getOn() { 21 | utils.clickKey(BindKeys.GetOnDriver); 22 | 23 | utils.resetAimAndDirection(100); 24 | 25 | return true; 26 | } 27 | 28 | /** 下车 */ 29 | getOff = () => { 30 | const { result, point } = this.isOnCar(); 31 | 32 | if (!result) { 33 | return; 34 | } 35 | 36 | utils.clickPoint(point); 37 | 38 | utils.resetAimAndDirection(100); 39 | 40 | return true; 41 | } 42 | } 43 | 44 | export const car = new Car(); 45 | -------------------------------------------------------------------------------- /src/scripts/constant.ts: -------------------------------------------------------------------------------- 1 | import { ColorArgs, Point } from '../../types'; 2 | export const Keyboard = { 3 | Shift: 'shift', 4 | 5 | B: 'B', 6 | F: 'F', 7 | G: 'G', 8 | 9 | Num5: '5', 10 | 11 | SmallNum1: 'num1' 12 | } 13 | 14 | export const BindKeys = { 15 | /** 背包 */ 16 | Bag: Keyboard.B, 17 | 18 | /** 上车,驾驶*/ 19 | GetOnDriver: Keyboard.F, 20 | 21 | /** 上车,乘坐*/ 22 | GetOnPassenger: Keyboard.G, 23 | 24 | /** 打药 */ 25 | TakeMedicine: Keyboard.Num5, 26 | }; 27 | 28 | 29 | export const NodHeadConfig = { 30 | Interval: 300, 31 | MaxDuration: 2000, 32 | }; 33 | 34 | // 华为 nova9, 2430 × 1080 35 | const Nova9 = { 36 | SquatIconColorArgs: [ '255:255:241:119', '1305:653+1307:658+1307:665+1312:672+1313:681+1313:684' ] as ColorArgs, 37 | ProstrateIconColorArgs: [ '255:253:237:119', '1421:639+1426:644+1437:649+1445:652' ] as ColorArgs, 38 | 39 | LeftGunHighlightColorArgs: [ '255:255:221:0', '613:613' ] as ColorArgs, 40 | RightGunHighlightColorArgs: [ '255:254:220:1', '786:614' ] as ColorArgs, 41 | 42 | LeftGunPositionPoint: { x: 1036, y: 946 } as Point, 43 | RightGunPositionPoint: { x: 1263, y: 961 } as Point, 44 | 45 | X6MirrorZoomBarX3PositionPoint: { x: 678, y: 597 } as Point, 46 | X6MirrorZoomBarX6PositionPoint: { x: 678, y: 346 } as Point, 47 | 48 | MirrorHighlightColorArgs: [ '255:255:241:126', '1094:413+1109:408+1108:407+1108:408' ] as ColorArgs, 49 | 50 | MirrorTextImageSim: { 51 | X8Sight: 0.65, 52 | X6Sight: 0.60, 53 | X4Sight: 0.68, 54 | X3Sight: 0.56, 55 | X2Sight: 0.68, 56 | MachineSight: 0.65, 57 | HolographicSight: 0.65, 58 | RedDotSight: 0.65, 59 | }, 60 | 61 | BagDustbinX: 2350, 62 | 63 | RescueButtonPoint: { x: 1, y: 1 } as Point, 64 | 65 | OpenMirrorButtonPoint: { x: 1, y: 1 } as Point, 66 | 67 | SquatIconPoint: { x: 1, y: 1 } as Point, 68 | }; 69 | 70 | 71 | // 华为 MatePad 11, 2560 × 1600 72 | const MatePad11 = { 73 | SquatIconColorArgs: [ '255:254:239:111', '983:694+984:682+993:690+992:691' ] as ColorArgs, 74 | ProstrateIconColorArgs: [ '255:254:225:114', '1076:655+1100:661+1107:661+1112:659' ] as ColorArgs, 75 | 76 | LeftGunHighlightColorArgs: [ '255:242:211:4', '437:629' ] as ColorArgs, 77 | RightGunHighlightColorArgs: [ '255:255:222:0', '582:629' ] as ColorArgs, 78 | 79 | LeftGunPositionPoint: { x: 1125, y: 1450 } as Point, 80 | RightGunPositionPoint: { x: 1430, y: 1450 } as Point, 81 | 82 | X6MirrorZoomBarX3PositionPoint: { x: 746, y: 882 } as Point, 83 | X6MirrorZoomBarX6PositionPoint: { x: 748, y: 538 } as Point, 84 | 85 | MirrorHighlightColorArgs: [ '255:255:241:126', '1094:413+1109:408+1108:407+1108:408' ] as ColorArgs, 86 | 87 | MirrorTextImageSim: { 88 | X8Sight: 0.75, 89 | X6Sight: 0.85, 90 | X4Sight: 0.75, 91 | X3Sight: 0.75, 92 | X2Sight: 0.75, 93 | MachineSight: 0.65, 94 | HolographicSight: 0.75, 95 | RedDotSight: 0.75, 96 | }, 97 | 98 | BagDustbinX: 2500, 99 | 100 | RescueButtonPoint: { x: 1282, y: 1070 } as Point, 101 | 102 | OpenMirrorButtonPoint: { x: 2465, y: 954 } as Point, 103 | 104 | /** 蹲 */ 105 | SquatIconPoint: { x: 2200, y: 1500 } as Point, 106 | }; 107 | 108 | // 小米 6 pro max, 2800 × 1800 109 | const XiaoMiPad6Max14 = { 110 | SquatIconColorArgs: [ '255:254:239:111', '983:694+984:682+993:690+992:691' ] as ColorArgs, 111 | ProstrateIconColorArgs: [ '255:254:225:114', '1076:655+1100:661+1107:661+1112:659' ] as ColorArgs, 112 | 113 | LeftGunHighlightColorArgs: [ '255:242:211:4', '437:629' ] as ColorArgs, 114 | RightGunHighlightColorArgs: [ '255:255:222:0', '582:629' ] as ColorArgs, 115 | 116 | LeftGunPositionPoint: { x: 1280, y: 1620 } as Point, 117 | RightGunPositionPoint: { x: 1620, y: 1620 } as Point, 118 | 119 | X6MirrorZoomBarX3PositionPoint: { x: 832, y: 986 } as Point, 120 | X6MirrorZoomBarX6PositionPoint: { x: 832, y: 609 } as Point, 121 | 122 | MirrorHighlightColorArgs: [ '255:255:241:126', '1094:413+1109:408+1108:407+1108:408' ] as ColorArgs, 123 | 124 | MirrorTextImageSim: { 125 | X8Sight: 0.80, 126 | X6Sight: 0.85, 127 | X4Sight: 0.75, 128 | X3Sight: 0.75, 129 | X2Sight: 0.75, 130 | MachineSight: 0.65, 131 | HolographicSight: 0.75, 132 | RedDotSight: 0.75, 133 | }, 134 | 135 | BagDustbinX: 2800, 136 | 137 | RescueButtonPoint: { x: 1282, y: 1070 } as Point, 138 | 139 | OpenMirrorButtonPoint: { x: 2465, y: 954 } as Point, 140 | 141 | /** 蹲 */ 142 | SquatIconPoint: { x: 2200, y: 1500 } as Point, 143 | }; 144 | 145 | export default /* replace start */ XiaoMiPad6Max14 /* replace end */; 146 | -------------------------------------------------------------------------------- /src/scripts/gun.ts: -------------------------------------------------------------------------------- 1 | import { GunCategory, GunPosition, ImageAreaArgs } from '../../types'; 2 | import { utils } from './utils'; 3 | import constant from './constant'; 4 | 5 | export class Gun { 6 | /** 枪的类型 */ 7 | static Categories: { [key in GunCategory]: GunCategory } = { 8 | M4: 'M4', 9 | SCARL: 'SCARL', 10 | DP28: 'DP28', 11 | 12 | UMP45: 'UMP45', 13 | YENIU: 'YENIU', 14 | UZI: 'UZI', 15 | VECTOR: 'VECTOR', 16 | TANGMUXUN: 'TANGMUXUN', // 汤姆逊枪 17 | 18 | AKM: 'AKM', 19 | 20 | ACVAL: 'ACVAL', 21 | 22 | PKM: 'PKM', 23 | 24 | VSS: 'VSS', 25 | MK20H: 'MK20H', 26 | M417: 'M417', 27 | 28 | M249: 'M249', 29 | 30 | M762: 'M762', 31 | 32 | AUG: 'AUG', 33 | GROZA: 'GROZA', 34 | MG3: 'MG3', 35 | P90: 'P90', 36 | 37 | MIGUAN: 'MIGUAN', // 蜜罐 38 | 39 | MK14: 'MK14', 40 | }; 41 | 42 | static X8SightGuns: GunCategory[] = [ 'M417', 'MK20H' ]; 43 | 44 | /** 持枪位置 */ 45 | static GunPosition: { [key in GunPosition]: GunPosition } = { 46 | /** 左边枪 */ 47 | Left: 'Left', 48 | /** 右边枪 */ 49 | Right: 'Right', 50 | } 51 | 52 | 53 | /** 持枪位置-图片区域 */ 54 | static GunPositionImageArea: { [key in GunPosition]: ImageAreaArgs } = { 55 | Left: [ 0.85, 4, 4, 2, 4 ], 56 | Right: [ 0.85, 4, 4, 3, 4 ], 57 | } 58 | 59 | /** 60 | * 获取当前持枪的位置 61 | * @return { string | null } 62 | */ 63 | getGunPosition() { 64 | if (this.isLeftGun()) { 65 | return Gun.GunPosition.Left; 66 | } 67 | 68 | if (this.isRightGun()) { 69 | return Gun.GunPosition.Right; 70 | } 71 | 72 | return null; 73 | } 74 | 75 | /** 是否持 左 枪 */ 76 | isLeftGun() { 77 | return utils.isColorExist(...constant.LeftGunHighlightColorArgs); 78 | } 79 | 80 | /** 是否持 右 枪 */ 81 | isRightGun() { 82 | return utils.isColorExist(...constant.RightGunHighlightColorArgs); 83 | } 84 | 85 | /** 是否 持枪 */ 86 | isHoldGun() { 87 | return Boolean(this.getGunPosition()); 88 | } 89 | 90 | /** 是否持有已配置的枪 */ 91 | isHoldConfiguredGun() { 92 | return Boolean(this.getCurrentGun()); 93 | } 94 | 95 | 96 | /** 获取当前枪械的名称 */ 97 | getCurrentGun() { 98 | const gunPosition = this.getGunPosition(); 99 | 100 | if (!gunPosition) { 101 | return; 102 | } 103 | 104 | const imageArgs: ImageAreaArgs = Gun.GunPositionImageArea[gunPosition]; 105 | 106 | const guns = Object.keys(Gun.Categories) as GunCategory[]; 107 | 108 | return guns.find((gun) => utils.isImageExist(gun, ...imageArgs)); 109 | } 110 | 111 | identityGunsInBag() { 112 | let leftGuns: string[] = []; 113 | let rightGuns: string[] = []; 114 | 115 | Object.keys(Gun.Categories).forEach((cate) => { 116 | const imageName = `大图${ cate }`; 117 | 118 | if (utils.isImageExist(imageName, 0.85, 2, 2, 2, 1)) { 119 | leftGuns.push(cate); 120 | } 121 | if (utils.isImageExist(imageName, 0.85, 2, 2, 2, 2)) { 122 | rightGuns.push(cate); 123 | } 124 | }); 125 | 126 | const result = { leftGuns, rightGuns }; 127 | 128 | loginfo(JSON.stringify(result)); 129 | 130 | return result; 131 | } 132 | 133 | identityFlatGuns() { 134 | let leftGuns: string[] = []; 135 | let rightGuns: string[] = []; 136 | 137 | Object.keys(Gun.Categories).forEach((cate) => { 138 | if (utils.isImageExist(cate, 0.85, 4, 4, 2, 4)) { 139 | leftGuns.push(cate); 140 | } 141 | if (utils.isImageExist(cate, 0.85, 4, 4, 3, 4)) { 142 | rightGuns.push(cate); 143 | } 144 | }); 145 | 146 | const result = { leftGuns, rightGuns }; 147 | 148 | loginfo(JSON.stringify(result)); 149 | 150 | return result; 151 | } 152 | 153 | /** 154 | * 收枪 155 | */ 156 | hideGun() { 157 | const gunPosition = this.getGunPosition(); 158 | 159 | if (!gunPosition) { 160 | return; 161 | } 162 | 163 | if (gunPosition === Gun.GunPosition.Left) { 164 | this.clickLeftGun(); 165 | return; 166 | } 167 | 168 | if (gunPosition === Gun.GunPosition.Right) { 169 | this.clickRightGun(); 170 | } 171 | } 172 | 173 | /** 174 | * 切枪 175 | */ 176 | switchGun() { 177 | const gunPosition = this.getGunPosition(); 178 | 179 | if (!gunPosition) { 180 | this.clickLeftGun(); 181 | return; 182 | } 183 | 184 | if (gunPosition === Gun.GunPosition.Left) { 185 | this.clickRightGun(); 186 | return; 187 | } 188 | 189 | if (gunPosition === Gun.GunPosition.Right) { 190 | this.clickLeftGun(); 191 | } 192 | } 193 | 194 | clickLeftGun() { 195 | utils.clickPoint(constant.LeftGunPositionPoint); 196 | } 197 | 198 | clickRightGun() { 199 | utils.clickPoint(constant.RightGunPositionPoint) 200 | } 201 | 202 | } 203 | 204 | export const gun = new Gun(); 205 | -------------------------------------------------------------------------------- /src/scripts/keymap.ts: -------------------------------------------------------------------------------- 1 | import { utils } from './utils'; 2 | import { gun } from './gun'; 3 | import store from './store'; 4 | import { medicine } from './medicine'; 5 | import { missile } from './missile'; 6 | import { bag } from './bag'; 7 | import { pressCtrl } from './pressCtrl'; 8 | 9 | export default { 10 | /** 11 | * @description 开火 12 | * @bind 鼠标左键 13 | */ 14 | fire() { 15 | pressCtrl.fire(); 16 | }, 17 | 18 | /** 19 | * @description 复合按键: 20 | * 1. 丢弃背包中光标所指位置的配件 (一旦执行,后续操作都取消) 21 | * 2. 取消投掷 (一旦执行,后续操作都取消) 22 | * 3. 开镜 23 | * 4. 更新压枪参数 24 | * @bind 鼠标右键 25 | */ 26 | bindKeyMouseRight() { 27 | utils.series([ 28 | // 丢弃背包物资 29 | bag.discardMaterialsUnderCursor, 30 | 31 | // 取消投掷 32 | missile.cancelThrow, 33 | 34 | utils.clickCurrentKey, 35 | 36 | // 更新压枪参数 37 | () => { 38 | // 点击当前按键后,准镜不会马上打开 39 | // if (mirror.isOpen()) { 40 | // return; 41 | // } 42 | pressCtrl.updatePressArgs(); 43 | }, 44 | ]); 45 | }, 46 | 47 | 48 | /** 49 | * @description 调整 6 倍镜 50 | * 并存储调整过 6 倍镜倍率的枪及倍率 51 | * @bind 鼠标滚轮-滚上 52 | */ 53 | toggleX6Sight() { 54 | const result = pressCtrl.toggleX6Sight(); 55 | 56 | if (result) { 57 | return; 58 | } 59 | 60 | utils.clickCurrentKey(); 61 | }, 62 | 63 | /** 64 | * @description 启用/禁用 utils.showTip() 65 | * @bind F12 66 | */ 67 | toggleEnableOfTip() { 68 | store.mutations.toggleEnableOfTip(); 69 | }, 70 | 71 | /** 72 | * @description 切枪 73 | * @bind Tab 74 | */ 75 | switchGun() { 76 | utils.switchToShotMode(); 77 | gun.switchGun(); 78 | }, 79 | 80 | /** 81 | * @description 收枪 82 | * @bind F4 83 | */ 84 | hideGun() { 85 | gun.hideGun(); 86 | }, 87 | 88 | /** 89 | * @description 90 | * 1. 拾取 91 | * 2. 切 雷 92 | * @bind F1 93 | */ 94 | bindKeyF1() { 95 | if (bag.canPickUp()) { 96 | utils.clickCurrentKey(); 97 | return; 98 | } 99 | 100 | missile.switchFragmentBomb() 101 | }, 102 | 103 | /** 104 | * @description 105 | * 1. 拾取 106 | * 2. 切 烟 107 | * @bind F2 108 | */ 109 | bindKeyF2() { 110 | if (bag.canPickUp()) { 111 | utils.clickCurrentKey(); 112 | return; 113 | } 114 | 115 | missile.switchSmokeBomb(); 116 | }, 117 | 118 | /** 119 | * @description 120 | * 1. 拾取 121 | * 2. 切 火 122 | * @bind F3 123 | */ 124 | bindKeyF3() { 125 | if (bag.canPickUp()) { 126 | utils.clickCurrentKey(); 127 | return; 128 | } 129 | 130 | missile.switchMolotovCocktail(); 131 | }, 132 | 133 | /** 134 | * @description 左右枪互换 135 | * @bind F5 136 | */ 137 | swapGuns() { 138 | bag.swapGuns(); 139 | }, 140 | 141 | /** 142 | * @description 动态调整压枪参数, +1 143 | * @bind 上箭头 144 | */ 145 | addDelayOfGunPressArgs() { 146 | store.mutations.addDelayOfGunPressArgs(1); 147 | }, 148 | 149 | /** 150 | * @description 动态调整压枪参数, -1 151 | * @bind 下箭头 152 | */ 153 | subtractDelay() { 154 | store.mutations.addDelayOfGunPressArgs(-1); 155 | }, 156 | 157 | /** 158 | * @description 记录不准确的压枪参数 159 | * @bind F11 160 | */ 161 | logErrorPressArgs() { 162 | pressCtrl.logErrorPressArgs(); 163 | }, 164 | 165 | /** 166 | * @description 167 | * 1. 重置 准心 168 | * 2. 重置 方向键 169 | * 3. 重置点头操作 170 | * @bind Ctrl 171 | */ 172 | reset() { 173 | utils.resetAimAndDirection(); 174 | }, 175 | 176 | /** 177 | * @description 吃 能量饮料 178 | * @bind Num1 179 | */ 180 | eatEnergyDrink() { 181 | medicine.eatEnergyDrink(); 182 | }, 183 | 184 | /** 185 | * @description 吃 止痛药 186 | * @bind Num2 187 | */ 188 | eatPainkiller() { 189 | medicine.eatPainkiller(); 190 | }, 191 | 192 | /** 193 | * @description 吃 肾上腺素注射剂 194 | * @bind Num3 195 | */ 196 | eatEpinephrineInjection() { 197 | medicine.eatEpinephrineInjection(); 198 | }, 199 | 200 | /** 201 | * @description 吃 绷带 202 | * @bind Num4 203 | */ 204 | eatBandage() { 205 | medicine.eatBandage(); 206 | }, 207 | 208 | /** 209 | * @description 吃 急救包 210 | * @bind Num5 211 | */ 212 | eatFirstAidKit() { 213 | medicine.eatFirstAidKit(); 214 | }, 215 | 216 | /** 217 | * @description 吃 医疗急救箱 218 | * @bind Num6 219 | */ 220 | eatMedicalFirstAidKit() { 221 | medicine.eatMedicalFirstAidKit(); 222 | }, 223 | 224 | /** 225 | * @description 切换 破片手榴弹 226 | * @bind Num7 227 | */ 228 | switchFragmentBomb() { 229 | missile.switchFragmentBomb(); 230 | }, 231 | 232 | /** 233 | * @description 切换 烟雾弹 234 | * @bind Num8 235 | */ 236 | switchSmokeBomb() { 237 | missile.switchSmokeBomb(); 238 | }, 239 | 240 | /** 241 | * @description 切换 燃烧瓶 242 | * @bind Num9 243 | */ 244 | switchMolotovCocktail() { 245 | missile.switchMolotovCocktail(); 246 | }, 247 | } 248 | -------------------------------------------------------------------------------- /src/scripts/medicine.ts: -------------------------------------------------------------------------------- 1 | import { utils } from './utils'; 2 | import { ImageArgs, MedicineCategory } from '../../types'; 3 | import { BindKeys } from './constant'; 4 | 5 | export class Medicine { 6 | /** 7 | * 药物类别 8 | */ 9 | static Categories: { [key in MedicineCategory]: MedicineCategory } = { 10 | // 能量饮料 11 | EnergyDrink: 'EnergyDrink', 12 | 13 | // 止痛药 14 | Painkiller: 'Painkiller', 15 | 16 | // 肾上腺素注射剂 17 | EpinephrineInjection: 'EpinephrineInjection', 18 | 19 | // 绷带 20 | Bandage: 'Bandage', 21 | 22 | // 急救包 23 | FirstAidKit: 'FirstAidKit', 24 | 25 | // 医疗急救箱 26 | MedicalFirstAidKit: 'MedicalFirstAidKit', 27 | }; 28 | 29 | static ImageNames: { [key in MedicineCategory]: string } = { 30 | // 能量饮料 31 | EnergyDrink: '能量饮料', 32 | // 止痛药 33 | Painkiller: '止痛药', 34 | // 肾上腺素注射剂 35 | EpinephrineInjection: '肾上腺素注射剂', 36 | // 绷带 37 | Bandage: '绷带', 38 | // 急救包 39 | FirstAidKit: '急救包', 40 | // 医疗急救箱 41 | MedicalFirstAidKit: '医疗急救箱', 42 | }; 43 | 44 | static ImageArgs: { [name: string]: ImageArgs } = { 45 | ExpandListButton: [ '投掷物展开按钮', 0.75, 4, 4, 2, 4 ], 46 | CollapseListButton: [ '投掷物折叠按钮', 0.75, 4, 2, 2, 2 ], 47 | 48 | EnergyDrink: [ Medicine.ImageNames.EnergyDrink, 0.75, 4, 2, 2, 2 ], 49 | Painkiller: [ Medicine.ImageNames.Painkiller, 0.75, 4, 2, 2, 2 ], 50 | EpinephrineInjection: [ Medicine.ImageNames.EpinephrineInjection, 0.75, 4, 2, 2, 2 ], 51 | 52 | Bandage: [ Medicine.ImageNames.Bandage, 0.75, 4, 2, 2, 2 ], 53 | FirstAidKit: [ Medicine.ImageNames.FirstAidKit, 0.75, 4, 2, 2, 2 ], 54 | MedicalFirstAidKit: [ Medicine.ImageNames.MedicalFirstAidKit, 0.75, 4, 2, 2, 2 ], 55 | }; 56 | 57 | 58 | // 吃药 59 | takeMedicine(medicine: MedicineCategory) { 60 | this.expandList(); 61 | 62 | utils.delay(200); 63 | 64 | const point = utils.findImage(...Medicine.ImageArgs[medicine]); 65 | 66 | if (utils.isPointNotExist(point)) { 67 | utils.showTip('未找到药品:' + Medicine.ImageNames[medicine]); 68 | this.collapseList(); 69 | return; 70 | } 71 | 72 | utils.clickPoint(point); 73 | 74 | utils.delay(); 75 | 76 | utils.clickKey(BindKeys.TakeMedicine) 77 | } 78 | 79 | expandList() { 80 | utils.clickImagePosition(...Medicine.ImageArgs.ExpandListButton); 81 | } 82 | 83 | collapseList() { 84 | utils.clickImagePosition(...Medicine.ImageArgs.CollapseListButton); 85 | } 86 | 87 | /** 吃 能量饮料 */ 88 | eatEnergyDrink() { 89 | this.takeMedicine(Medicine.Categories.EnergyDrink); 90 | } 91 | 92 | /** 吃 止痛药 */ 93 | eatPainkiller() { 94 | this.takeMedicine(Medicine.Categories.Painkiller); 95 | } 96 | 97 | /** 吃 肾上腺素注射剂 */ 98 | eatEpinephrineInjection() { 99 | this.takeMedicine(Medicine.Categories.EpinephrineInjection); 100 | } 101 | 102 | /** 吃 绷带 */ 103 | eatBandage() { 104 | this.takeMedicine(Medicine.Categories.Bandage); 105 | } 106 | 107 | /** 吃 急救包 */ 108 | eatFirstAidKit() { 109 | this.takeMedicine(Medicine.Categories.FirstAidKit); 110 | } 111 | 112 | /** 吃 医疗急救箱 */ 113 | eatMedicalFirstAidKit() { 114 | this.takeMedicine(Medicine.Categories.MedicalFirstAidKit); 115 | } 116 | } 117 | 118 | export const medicine = new Medicine(); 119 | -------------------------------------------------------------------------------- /src/scripts/mirror.ts: -------------------------------------------------------------------------------- 1 | import { ImageArgs, MirrorCategory, CnMirrorCategory } from '../../types'; 2 | import { utils } from './utils'; 3 | import constant from './constant'; 4 | import Constant from './constant'; 5 | 6 | type DelicateMirror = Exclude; 7 | 8 | export class Mirror { 9 | /** 准镜类型 */ 10 | static Categories: { [key in MirrorCategory | 'X6X3Sight']: MirrorCategory | 'X6X3Sight'; } = { 11 | /** 机瞄 */ 12 | MachineSight: 'MachineSight', 13 | /** 红点 */ 14 | RedDotSight: 'RedDotSight', 15 | /** 全息 */ 16 | HolographicSight: 'HolographicSight', 17 | /** 2倍镜 */ 18 | X2Sight: 'X2Sight', 19 | /** 3倍镜 */ 20 | X3Sight: 'X3Sight', 21 | /** 4倍镜 */ 22 | X4Sight: 'X4Sight', 23 | /** 6倍镜,未调整过的 */ 24 | X6Sight: 'X6Sight', 25 | 26 | /** 6倍镜,3倍率 */ 27 | X6X3Sight: 'X6X3Sight', 28 | 29 | X8Sight: 'X8Sight', 30 | }; 31 | 32 | 33 | /** 准镜映射,对应官方名称 */ 34 | static Mapping: { [key in (keyof (typeof Mirror.Categories))]: CnMirrorCategory } = { 35 | MachineSight: '', 36 | RedDotSight: '', 37 | HolographicSight: '', 38 | X2Sight: '2倍', 39 | X3Sight: '3倍', 40 | X4Sight: '4倍', 41 | X6Sight: '6倍6', 42 | X6X3Sight: '6倍3', 43 | X8Sight: '8倍', 44 | }; 45 | 46 | static ImageArgs: { [name: string]: ImageArgs } = { 47 | /** 第一(三)人称图标 */ 48 | FirstPersonIcon: [ '第一人称文本', 0.65, 4, 4, 1, 4 ], 49 | 50 | /** 打开 6 倍镜缩放条 的按钮 */ 51 | OpenX6MirrorZoomBarIcon: [ '6倍镜调距按钮', 0.75, 4, 3, 2, 1 ], 52 | 53 | /** 6 倍镜缩放条 */ 54 | X6SightZoomBar: [ '6倍镜调距条', 0.75, 4, 1, 2, 1 ], 55 | } 56 | 57 | static MirrorTextImageNames: { [key in MirrorCategory]: string } = { 58 | MachineSight: '机瞄文本', 59 | RedDotSight: '红点文本', 60 | HolographicSight: '全息文本', 61 | X2Sight: '2倍镜文本', 62 | X3Sight: '3倍镜文本', 63 | X4Sight: '4倍镜文本', 64 | X6Sight: '6倍镜文本', 65 | X8Sight: '8倍镜文本', 66 | }; 67 | 68 | static DelicateMirrorImageNames: { [key in DelicateMirror]: string } = { 69 | RedDotSight: '大图红点', 70 | HolographicSight: '大图全息', 71 | X2Sight: '大图2倍镜', 72 | X3Sight: '大图3倍镜', 73 | X4Sight: '大图4倍镜', 74 | X6Sight: '大图6倍镜', 75 | X8Sight: '大图8倍镜', 76 | }; 77 | 78 | static AvailableMirrors: MirrorCategory[] = [ 79 | 'RedDotSight', 80 | 'HolographicSight', 81 | 'X8Sight', 82 | 'X6Sight', 83 | 'X3Sight', 84 | 'X4Sight', 85 | 'X2Sight', 86 | 'MachineSight', 87 | ]; 88 | 89 | /** 90 | * 是否开镜 91 | * 92 | * @return {boolean} 93 | */ 94 | isOpen() { 95 | return utils.isColorExist(...Constant.MirrorHighlightColorArgs); 96 | 97 | // 第一(三)人称图标 如果存在 则说明未开镜 98 | // return !utils.isImageExist(...Mirror.ImageArgs.FirstPersonIcon); 99 | } 100 | 101 | /** 是否有可用准镜 */ 102 | hasAvailableMirror() { 103 | // TODO 104 | } 105 | 106 | /** 获取当前准镜名称 */ 107 | getCurrentMirror(disabledMirrors = [ 'X8Sight' as MirrorCategory ], availableMirrors = Mirror.AvailableMirrors) { 108 | return this.getCurrentBySightText(disabledMirrors, availableMirrors); 109 | } 110 | 111 | getCurrentBySightText(disabledMirrors: MirrorCategory[], availableMirrors: MirrorCategory[]) { 112 | const areaArgs: [ number, number, number, number ] = [ 4, 4, 4, 2 ]; 113 | 114 | const mirrors = availableMirrors.filter((mirror) => { 115 | if (!Mirror.MirrorTextImageNames[mirror]) { 116 | return false; 117 | } 118 | 119 | if (disabledMirrors.includes(mirror)) { 120 | return false; 121 | } 122 | 123 | return true; 124 | }); 125 | 126 | const mirrorArgsList = mirrors.map((mirror) => { 127 | const imageName = Mirror.MirrorTextImageNames[mirror]; 128 | const sim = constant.MirrorTextImageSim[mirror]; 129 | 130 | return [ imageName, sim, ...areaArgs ] as ImageArgs; 131 | }); 132 | 133 | const targetIndex = mirrorArgsList.findIndex((args: ImageArgs) => utils.isImageExist(...args)); 134 | 135 | if (targetIndex === -1) { 136 | return null; 137 | } 138 | 139 | return mirrors[targetIndex]; 140 | } 141 | 142 | isX6Sight() { 143 | const mirror = this.getCurrentMirror(); 144 | 145 | return mirror === Mirror.Categories.X6Sight; 146 | } 147 | 148 | /** 识别出所有可用准镜 */ 149 | identityAvailableMirror() { 150 | const result: string[] = []; 151 | 152 | const delicateMirrors = Object.keys(Mirror.DelicateMirrorImageNames) as DelicateMirror[]; 153 | 154 | delicateMirrors.forEach((mirror) => { 155 | const imageName = Mirror.DelicateMirrorImageNames[mirror]; 156 | 157 | if (utils.isImageExist(imageName, 0.75, 4, 1, 4, 1)) { 158 | result.push(mirror); 159 | } 160 | }); 161 | 162 | // loginfo(JSON.stringify(result)); 163 | return result; 164 | } 165 | 166 | /** 识别背包中的准镜 */ 167 | identityMirrorOfBag() { 168 | let leftGunMirrors: DelicateMirror[] = []; 169 | let rightGunMirrors: DelicateMirror[] = []; 170 | 171 | const delicateMirrors = Object.keys(Mirror.DelicateMirrorImageNames) as DelicateMirror[]; 172 | 173 | delicateMirrors.forEach((mirror) => { 174 | const imageName = Mirror.DelicateMirrorImageNames[mirror].replace('大图', '背包'); 175 | 176 | if (utils.isImageExist(imageName, 0.75, 4, 4, 3, 1)) { 177 | leftGunMirrors.push(mirror); 178 | } 179 | if (utils.isImageExist(imageName, 0.75, 4, 3, 3, 2)) { 180 | rightGunMirrors.push(mirror); 181 | } 182 | }); 183 | 184 | const result = { leftGunMirrors, rightGunMirrors }; 185 | 186 | // loginfo(JSON.stringify(result)); 187 | 188 | if (leftGunMirrors.length !== 1 || rightGunMirrors.length !== 1) { 189 | logerror(JSON.stringify(result)); 190 | } 191 | 192 | return result; 193 | } 194 | 195 | /** 打开 6 倍瞄准镜的缩放栏 */ 196 | openZoomBarOf6XSight() { 197 | const zoomBarPoint = utils.findImage(...Mirror.ImageArgs.X6SightZoomBar); 198 | 199 | if (utils.isPointExist(zoomBarPoint)) { 200 | return; 201 | } 202 | 203 | // TODO 平板,图片寻找区域调整,手机可能也需要调整 204 | const openX6MirrorZoomBarIconPoint = utils.findImage(...Mirror.ImageArgs.OpenX6MirrorZoomBarIcon); 205 | 206 | if (!utils.isPointExist(openX6MirrorZoomBarIconPoint)) { 207 | loginfo('openZoomBarOf6XSight(): 未找到图片 - ' + Mirror.ImageArgs.OpenX6MirrorZoomBarIcon[0]); 208 | return; 209 | } 210 | 211 | utils.clickPoint(openX6MirrorZoomBarIconPoint); 212 | 213 | return true; 214 | } 215 | 216 | /** 调整六倍镜,设置为 3 倍率 */ 217 | adjustX6ToX3() { 218 | if (this.openZoomBarOf6XSight()) { 219 | utils.delay(); 220 | } 221 | 222 | utils.clickPoint(constant.X6MirrorZoomBarX3PositionPoint); 223 | 224 | return Mirror.Categories.X6X3Sight; 225 | } 226 | 227 | /** 调整六倍镜,设置为 6 倍率 */ 228 | adjustX6ToX6() { 229 | if (this.openZoomBarOf6XSight()) { 230 | utils.delay(); 231 | } 232 | 233 | utils.clickPoint(constant.X6MirrorZoomBarX6PositionPoint); 234 | 235 | return Mirror.Categories.X6Sight; 236 | } 237 | } 238 | 239 | export const mirror = new Mirror(); 240 | -------------------------------------------------------------------------------- /src/scripts/missile.ts: -------------------------------------------------------------------------------- 1 | import { ImageArgs, MissileCategory } from '../../types'; 2 | import { utils } from './utils'; 3 | 4 | export class Missile { 5 | /** 6 | * 投掷物类别 7 | */ 8 | static Categories: { [key in MissileCategory]: MissileCategory } = { 9 | // 碎片手榴弹 10 | FragmentBomb: 'FragmentBomb', 11 | 12 | // 烟雾弹 13 | SmokeBomb: 'SmokeBomb', 14 | 15 | // 燃烧瓶 16 | MolotovCocktail: 'MolotovCocktail', 17 | }; 18 | 19 | static ImageNames: { [key in MissileCategory]: string } = { 20 | // 碎片手榴弹 21 | FragmentBomb: '碎片手榴弹', 22 | 23 | // 烟雾弹 24 | SmokeBomb: '烟雾弹', 25 | 26 | // 燃烧瓶 27 | MolotovCocktail: '燃烧瓶', 28 | }; 29 | 30 | static ImageArgs: { [name: string]: ImageArgs } = { 31 | CancelThrowButton: [ '取消投掷按钮', 0.75, 3, 4, 1, 3 ], 32 | 33 | ExpandListButton: [ '投掷物展开按钮', 0.75, 4, 4, 3, 4 ], 34 | CollapseListButton: [ '投掷物折叠按钮', 0.75, 4, 2, 3, 2 ], 35 | 36 | FragmentBomb: [ Missile.ImageNames.FragmentBomb, 0.75, 4, 2, 3, 2 ], 37 | SmokeBomb: [ Missile.ImageNames.SmokeBomb, 0.75, 4, 2, 3, 2 ], 38 | MolotovCocktail: [ Missile.ImageNames.MolotovCocktail, 0.75, 4, 2, 3, 2 ], 39 | }; 40 | 41 | /** 42 | * 取消投掷 43 | */ 44 | cancelThrow = () => { 45 | const point = utils.findImage(...Missile.ImageArgs.CancelThrowButton); 46 | 47 | if (utils.isPointNotExist(point)) { 48 | return false; 49 | } 50 | 51 | utils.clickPoint(point); 52 | 53 | utils.resetAim(); 54 | 55 | return true; 56 | } 57 | 58 | switchMissile(missile: MissileCategory) { 59 | this.expandList(); 60 | 61 | utils.delay(200); 62 | 63 | const point = utils.findImage(...Missile.ImageArgs[missile]); 64 | 65 | if (utils.isPointNotExist(point)) { 66 | utils.showTip('未找到投掷物:' + Missile.ImageNames[missile]); 67 | this.collapseList(); 68 | return; 69 | } 70 | 71 | utils.clickPoint(point); 72 | } 73 | 74 | expandList() { 75 | utils.clickImagePosition(...Missile.ImageArgs.ExpandListButton); 76 | } 77 | 78 | collapseList() { 79 | utils.clickImagePosition(...Missile.ImageArgs.CollapseListButton); 80 | } 81 | 82 | /**切换 碎片手榴弹*/ 83 | switchFragmentBomb() { 84 | this.switchMissile(Missile.Categories.FragmentBomb); 85 | } 86 | 87 | /**切换 烟雾弹*/ 88 | switchSmokeBomb() { 89 | this.switchMissile(Missile.Categories.SmokeBomb); 90 | } 91 | 92 | /**切换 燃烧瓶*/ 93 | switchMolotovCocktail() { 94 | this.switchMissile(Missile.Categories.MolotovCocktail); 95 | } 96 | } 97 | 98 | export const missile = new Missile(); 99 | -------------------------------------------------------------------------------- /src/scripts/posture.ts: -------------------------------------------------------------------------------- 1 | import { utils } from './utils'; 2 | import constant from './constant' 3 | import { ColorArgs, CnPostureCategory, PostureCategory } from '../../types'; 4 | 5 | export class Posture { 6 | /** 姿势类别 */ 7 | static Categories: { [key in PostureCategory]: PostureCategory } = { 8 | /** 站 */ 9 | Stand: 'Stand', 10 | /** 蹲 */ 11 | Squat: 'Squat', 12 | /** 趴 */ 13 | Prostrate: 'Prostrate' 14 | }; 15 | 16 | /** 姿势映射,对应官方名称 */ 17 | static Mapping: { [key in PostureCategory]: CnPostureCategory } = { 18 | Stand: '站', 19 | Squat: '蹲', 20 | Prostrate: '趴', 21 | }; 22 | 23 | /** 姿势类别-颜色点 */ 24 | static ColorPoint: { [key in Exclude]: ColorArgs } = { 25 | Squat: constant.SquatIconColorArgs, 26 | Prostrate: constant.ProstrateIconColorArgs, 27 | } 28 | 29 | /** 获取姿势 */ 30 | getCurrentPostureCategory() { 31 | if (this.isSquat()) { 32 | return Posture.Categories.Squat; 33 | } 34 | 35 | if (this.isProstrate()) { 36 | return Posture.Categories.Prostrate; 37 | } 38 | 39 | return Posture.Categories.Stand; 40 | } 41 | 42 | isSquat() { 43 | return utils.isColorExist(...Posture.ColorPoint.Squat); 44 | } 45 | 46 | isProstrate() { 47 | return utils.isColorExist(...Posture.ColorPoint.Prostrate); 48 | } 49 | 50 | clickSquatKey() { 51 | utils.clickPoint(constant.SquatIconPoint); 52 | } 53 | 54 | } 55 | 56 | export const posture = new Posture(); 57 | -------------------------------------------------------------------------------- /src/scripts/pressArgs.ts: -------------------------------------------------------------------------------- 1 | import { GunCategory, CnMirrorCategory, CnPostureCategory, PressConfig } from '../../types'; 2 | 3 | /** 4 | * 压枪参数 5 | * 6 | * changecustomaimpar(x: number, y: number, delay: number) 7 | */ 8 | const Nova9: PressConfig = { 9 | 'M4': { 10 | 'M4蹲6倍6': [0, 1, 5], 11 | 'M4蹲6倍3': [0, 1, 10], 12 | 'M4蹲4倍': [0, 1, 6], 13 | 'M4蹲3倍': [0, 1, 10], 14 | 'M4蹲2倍': [0, 1, 14], 15 | 'M4蹲': [0, 1, 25], 16 | 'M4趴6倍6': [0, 1, 7], 17 | 'M4趴6倍3': [0, 1, 12], 18 | 'M4趴4倍': [0, 1, 8], 19 | 'M4趴3倍': [0, 1, 12], 20 | 'M4趴2倍': [0, 1, 16], 21 | 'M4趴': [0, 1, 28], 22 | 'M4站6倍6': [0, 1, 3], 23 | 'M4站6倍3': [0, 1, 8], 24 | 'M4站4倍': [0, 1, 5], 25 | 'M4站3倍': [0, 1, 8], 26 | 'M4站2倍': [0, 1, 12], 27 | 'M4站': [0, 1, 19], 28 | }, 29 | 'AKM': { 30 | 'AKM蹲6倍6': [0, 5, 4], 31 | 'AKM蹲6倍3': [0, 5, 7], 32 | 'AKM蹲4倍': [0, 1, 4], 33 | 'AKM蹲3倍': [0, 1, 7], 34 | 'AKM蹲2倍': [0, 1, 9], 35 | 'AKM蹲': [0, 1, 15], 36 | 'AKM趴6倍6': [0, 1, 5], 37 | 'AKM趴6倍3': [0, 1, 10], 38 | 'AKM趴4倍': [0, 1, 6], 39 | 'AKM趴3倍': [0, 1, 10], 40 | 'AKM趴2倍': [0, 1, 13], 41 | 'AKM趴': [0, 1, 22], 42 | 'AKM站6倍6': [0, 1, 2], 43 | 'AKM站6倍3': [0, 1, 5], 44 | 'AKM站4倍': [0, 2, 3], 45 | 'AKM站3倍': [0, 1, 5], 46 | 'AKM站2倍': [0, 1, 7], 47 | 'AKM站': [0, 1, 13], 48 | }, 49 | 'AUG': { 50 | 'AUG蹲6倍6': [0, 1, 5], 51 | 'AUG蹲6倍3': [0, 1, 10], 52 | 'AUG蹲4倍': [0, 1, 6], 53 | 'AUG蹲3倍': [0, 1, 10], 54 | 'AUG蹲2倍': [0, 1, 14], 55 | 'AUG蹲': [0, 1, 22], 56 | 'AUG趴6倍6': [0, 1, 6], 57 | 'AUG趴6倍3': [0, 1, 13], 58 | 'AUG趴4倍': [0, 1, 8], 59 | 'AUG趴3倍': [0, 1, 13], 60 | 'AUG趴2倍': [0, 1, 17], 61 | 'AUG趴': [0, 1, 29], 62 | 'AUG站6倍6': [0, 1, 4], 63 | 'AUG站6倍3': [0, 1, 8], 64 | 'AUG站4倍': [0, 1, 5], 65 | 'AUG站3倍': [0, 1, 8], 66 | 'AUG站2倍': [0, 1, 11], 67 | 'AUG站': [0, 1, 19], 68 | }, 69 | 'ACVAL': { 70 | 'ACVAL蹲6倍6': [0, 1, 5], 71 | 'ACVAL蹲6倍3': [0, 1, 12], 72 | 'ACVAL蹲4倍': [0, 1, 7], 73 | 'ACVAL蹲3倍': [0, 1, 12], 74 | 'ACVAL蹲2倍': [0, 1, 16], 75 | 'ACVAL蹲': [0, 1, 26], 76 | 'ACVAL趴6倍6': [0, 1, 4], 77 | 'ACVAL趴6倍3': [0, 1, 16], 78 | 'ACVAL趴4倍': [0, 1, 10], 79 | 'ACVAL趴3倍': [0, 1, 16], 80 | 'ACVAL趴2倍': [0, 1, 20], 81 | 'ACVAL趴': [0, 1, 33], 82 | 'ACVAL站6倍6': [0, 1, 4], 83 | 'ACVAL站6倍3': [0, 1, 10], 84 | 'ACVAL站4倍': [0, 1, 5], 85 | 'ACVAL站3倍': [0, 1, 10], 86 | 'ACVAL站2倍': [0, 1, 13], 87 | 'ACVAL站': [0, 1, 24], 88 | }, 89 | 'SCARL': { 90 | 'SCARL蹲6倍6': [0, 1, 5], 91 | 'SCARL蹲6倍3': [0, 1, 10], 92 | 'SCARL蹲4倍': [0, 1, 6], 93 | 'SCARL蹲3倍': [0, 1, 10], 94 | 'SCARL蹲2倍': [0, 1, 14], 95 | 'SCARL蹲': [0, 1, 24], 96 | 'SCARL趴6倍6': [0, 1, 7], 97 | 'SCARL趴6倍3': [0, 1, 14], 98 | 'SCARL趴4倍': [0, 1, 9], 99 | 'SCARL趴3倍': [0, 1, 14], 100 | 'SCARL趴2倍': [0, 1, 19], 101 | 'SCARL趴': [0, 1, 30], 102 | 'SCARL站6倍6': [0, 1, 3], 103 | 'SCARL站6倍3': [0, 1, 8], 104 | 'SCARL站4倍': [0, 1, 4], 105 | 'SCARL站3倍': [0, 1, 8], 106 | 'SCARL站2倍': [0, 1, 11], 107 | 'SCARL站': [0, 1, 19], 108 | }, 109 | 'M762': { 110 | 'M762蹲6倍6': [0, 1, 2], 111 | 'M762蹲6倍3': [0, 1, 5], 112 | 'M762蹲4倍': [0, 1, 3], 113 | 'M762蹲3倍': [0, 1, 5], 114 | 'M762蹲2倍': [0, 1, 7], 115 | 'M762蹲': [0, 1, 12], 116 | 'M762趴6倍6': [0, 1, 3], 117 | 'M762趴6倍3': [0, 1, 6], 118 | 'M762趴4倍': [0, 1, 4], 119 | 'M762趴3倍': [0, 1, 6], 120 | 'M762趴2倍': [0, 1, 9], 121 | 'M762趴': [0, 1, 14], 122 | 'M762站6倍6': [0, 1, 2], 123 | 'M762站6倍3': [0, 1, 4], 124 | 'M762站4倍': [0, 1, 2], 125 | 'M762站3倍': [0, 1, 4], 126 | 'M762站2倍': [0, 1, 5], 127 | 'M762站': [0, 1, 10], 128 | }, 129 | 'GROZA': { 130 | 'GROZA蹲6倍6': [0, 1, 4], 131 | 'GROZA蹲6倍3': [0, 1, 9], 132 | 'GROZA蹲4倍': [0, 1, 5], 133 | 'GROZA蹲3倍': [0, 1, 9], 134 | 'GROZA蹲2倍': [0, 1, 12], 135 | 'GROZA蹲': [0, 1, 19], 136 | 'GROZA趴6倍6': [0, 1, 6], 137 | 'GROZA趴6倍3': [0, 1, 12], 138 | 'GROZA趴4倍': [0, 1, 7], 139 | 'GROZA趴3倍': [0, 1, 12], 140 | 'GROZA趴2倍': [0, 1, 15], 141 | 'GROZA趴': [0, 1, 25], 142 | 'GROZA站6倍6': [0, 1, 3], 143 | 'GROZA站6倍3': [0, 1, 7], 144 | 'GROZA站4倍': [0, 1, 4], 145 | 'GROZA站3倍': [0, 1, 7], 146 | 'GROZA站2倍': [0, 1, 10], 147 | 'GROZA站': [0, 1, 16], 148 | }, 149 | 'MIGUAN': { 150 | 'MIGUAN蹲6倍6': [0, 1, 2], 151 | 'MIGUAN蹲6倍3': [0, 1, 5], 152 | 'MIGUAN蹲4倍': [0, 1, 3], 153 | 'MIGUAN蹲3倍': [0, 1, 5], 154 | 'MIGUAN蹲2倍': [0, 1, 8], 155 | 'MIGUAN蹲': [0, 1, 14], 156 | 'MIGUAN趴6倍6': [0, 1, 3], 157 | 'MIGUAN趴6倍3': [0, 1, 7], 158 | 'MIGUAN趴4倍': [0, 1, 4], 159 | 'MIGUAN趴3倍': [0, 1, 7], 160 | 'MIGUAN趴2倍': [0, 1, 10], 161 | 'MIGUAN趴': [0, 1, 17], 162 | 'MIGUAN站6倍6': [0, 5, 2], 163 | 'MIGUAN站6倍3': [0, 5, 4], 164 | 'MIGUAN站4倍': [0, 1, 2], 165 | 'MIGUAN站3倍': [0, 1, 4], 166 | 'MIGUAN站2倍': [0, 1, 6], 167 | 'MIGUAN站': [0, 1, 11], 168 | }, 169 | 'YENIU': { 170 | 'YENIU蹲6倍6': [0, 1, 7], 171 | 'YENIU蹲6倍3': [0, 1, 14], 172 | 'YENIU蹲4倍': [0, 1, 9], 173 | 'YENIU蹲3倍': [0, 1, 14], 174 | 'YENIU蹲2倍': [0, 1, 19], 175 | 'YENIU蹲': [0, 1, 30], 176 | 'YENIU趴6倍6': [0, 1, 9], 177 | 'YENIU趴6倍3': [0, 1, 17], 178 | 'YENIU趴4倍': [0, 1, 11], 179 | 'YENIU趴3倍': [0, 1, 17], 180 | 'YENIU趴2倍': [0, 1, 24], 181 | 'YENIU趴': [0, 1, 36], 182 | 'YENIU站6倍6': [0, 1, 6], 183 | 'YENIU站6倍3': [0, 1, 11], 184 | 'YENIU站4倍': [0, 1, 7], 185 | 'YENIU站3倍': [0, 1, 11], 186 | 'YENIU站2倍': [0, 1, 15], 187 | 'YENIU站': [0, 1, 25], 188 | }, 189 | 'P90': { 190 | 'P90蹲6倍6': [0, 1, 7], 191 | 'P90蹲6倍3': [0, 1, 14], 192 | 'P90蹲4倍': [0, 1, 9], 193 | 'P90蹲3倍': [0, 1, 14], 194 | 'P90蹲2倍': [0, 1, 19], 195 | 'P90蹲': [0, 1, 44], 196 | 'P90趴6倍6': [0, 1, 9], 197 | 'P90趴6倍3': [0, 1, 17], 198 | 'P90趴4倍': [0, 1, 11], 199 | 'P90趴3倍': [0, 1, 17], 200 | 'P90趴2倍': [0, 1, 24], 201 | 'P90趴': [0, 1, 51], 202 | 'P90站6倍6': [0, 1, 6], 203 | 'P90站6倍3': [0, 1, 11], 204 | 'P90站4倍': [0, 1, 7], 205 | 'P90站3倍': [0, 1, 11], 206 | 'P90站2倍': [0, 1, 15], 207 | 'P90站': [0, 1, 35], 208 | }, 209 | 'TANGMUXUN': { 210 | 'TANGMUXUN蹲6倍6': [0, 1, 4], 211 | 'TANGMUXUN蹲6倍3': [0, 1, 20], 212 | 'TANGMUXUN蹲4倍': [0, 1, 15], 213 | 'TANGMUXUN蹲3倍': [0, 1, 20], 214 | 'TANGMUXUN蹲2倍': [0, 1, 25], 215 | 'TANGMUXUN蹲': [0, 1, 21], 216 | 'TANGMUXUN趴6倍6': [0, 1, 4], 217 | 'TANGMUXUN趴6倍3': [0, 1, 20], 218 | 'TANGMUXUN趴4倍': [0, 1, 15], 219 | 'TANGMUXUN趴3倍': [0, 1, 20], 220 | 'TANGMUXUN趴2倍': [0, 1, 25], 221 | 'TANGMUXUN趴': [0, 1, 24], 222 | 'TANGMUXUN站6倍6': [0, 1, 4], 223 | 'TANGMUXUN站6倍3': [0, 1, 20], 224 | 'TANGMUXUN站4倍': [0, 1, 15], 225 | 'TANGMUXUN站3倍': [0, 1, 20], 226 | 'TANGMUXUN站2倍': [0, 1, 25], 227 | 'TANGMUXUN站': [0, 1, 16], 228 | }, 229 | 'VECTOR': { 230 | 'VECTOR蹲6倍6': [0, 1, 5], 231 | 'VECTOR蹲6倍3': [0, 1, 10], 232 | 'VECTOR蹲4倍': [0, 1, 6], 233 | 'VECTOR蹲3倍': [0, 1, 10], 234 | 'VECTOR蹲2倍': [0, 1, 15], 235 | 'VECTOR蹲': [0, 1, 24], 236 | 'VECTOR趴6倍6': [0, 1, 6], 237 | 'VECTOR趴6倍3': [0, 1, 12], 238 | 'VECTOR趴4倍': [0, 1, 7], 239 | 'VECTOR趴3倍': [0, 1, 12], 240 | 'VECTOR趴2倍': [0, 1, 18], 241 | 'VECTOR趴': [0, 1, 27], 242 | 'VECTOR站6倍6': [0, 1, 4], 243 | 'VECTOR站6倍3': [0, 1, 7], 244 | 'VECTOR站4倍': [0, 1, 5], 245 | 'VECTOR站3倍': [0, 1, 7], 246 | 'VECTOR站2倍': [0, 1, 11], 247 | 'VECTOR站': [0, 1, 18], 248 | }, 249 | 'UMP45': { 250 | 'UMP45蹲6倍6': [0, 1, 5], 251 | 'UMP45蹲6倍3': [0, 1, 10], 252 | 'UMP45蹲4倍': [0, 1, 6], 253 | 'UMP45蹲3倍': [0, 1, 10], 254 | 'UMP45蹲2倍': [0, 1, 15], 255 | 'UMP45蹲': [0, 1, 25], 256 | 'UMP45趴6倍6': [0, 1, 6], 257 | 'UMP45趴6倍3': [0, 1, 12], 258 | 'UMP45趴4倍': [0, 1, 8], 259 | 'UMP45趴3倍': [0, 1, 12], 260 | 'UMP45趴2倍': [0, 1, 18], 261 | 'UMP45趴': [0, 1, 28], 262 | 'UMP45站6倍6': [0, 1, 4], 263 | 'UMP45站6倍3': [0, 1, 8], 264 | 'UMP45站4倍': [0, 1, 5], 265 | 'UMP45站3倍': [0, 1, 8], 266 | 'UMP45站2倍': [0, 1, 12], 267 | 'UMP45站': [0, 1, 20], 268 | }, 269 | 'UZI': { 270 | 'UZI蹲6倍6': [0, 1, 4], 271 | 'UZI蹲6倍3': [0, 1, 20], 272 | 'UZI蹲4倍': [0, 1, 15], 273 | 'UZI蹲3倍': [0, 1, 20], 274 | 'UZI蹲2倍': [0, 1, 25], 275 | 'UZI蹲': [0, 1, 26], 276 | 'UZI趴6倍6': [0, 1, 4], 277 | 'UZI趴6倍3': [0, 1, 20], 278 | 'UZI趴4倍': [0, 1, 15], 279 | 'UZI趴3倍': [0, 1, 20], 280 | 'UZI趴2倍': [0, 1, 25], 281 | 'UZI趴': [0, 1, 36], 282 | 'UZI站6倍6': [0, 1, 4], 283 | 'UZI站6倍3': [0, 1, 20], 284 | 'UZI站4倍': [0, 1, 15], 285 | 'UZI站3倍': [0, 1, 20], 286 | 'UZI站2倍': [0, 1, 25], 287 | 'UZI站': [0, 1, 24], 288 | }, 289 | 'MG3': { 290 | 'MG3蹲6倍6': [0, 1, 11], 291 | 'MG3蹲6倍3': [0, 1, 17], 292 | 'MG3蹲4倍': [0, 1, 12], 293 | 'MG3蹲3倍': [0, 1, 17], 294 | 'MG3蹲2倍': [0, 1, 25], 295 | 'MG3蹲': [0, 1, 44], 296 | 'MG3趴6倍6': [0, 1, 16], 297 | 'MG3趴6倍3': [0, 1, 31], 298 | 'MG3趴4倍': [0, 1, 22], 299 | 'MG3趴3倍': [0, 1, 31], 300 | 'MG3趴2倍': [0, 1, 46], 301 | 'MG3趴': [0, 1, 85], 302 | 'MG3站6倍6': [0, 1, 5], 303 | 'MG3站6倍3': [0, 1, 9], 304 | 'MG3站4倍': [0, 1, 6], 305 | 'MG3站3倍': [0, 1, 9], 306 | 'MG3站2倍': [0, 1, 13], 307 | 'MG3站': [0, 1, 23], 308 | }, 309 | 'M249': { 310 | 'M249蹲6倍6': [0, 1, 9], 311 | 'M249蹲6倍3': [0, 1, 18], 312 | 'M249蹲4倍': [0, 1, 11], 313 | 'M249蹲3倍': [0, 1, 18], 314 | 'M249蹲2倍': [0, 1, 25], 315 | 'M249蹲': [0, 1, 44], 316 | 'M249趴6倍6': [0, 1, 30], 317 | 'M249趴6倍3': [0, 1, 48], 318 | 'M249趴4倍': [0, 1, 35], 319 | 'M249趴3倍': [0, 1, 48], 320 | 'M249趴2倍': [0, 1, 80], 321 | 'M249趴': [0, 1, 155], 322 | 'M249站6倍6': [0, 1, 4], 323 | 'M249站6倍3': [0, 1, 8], 324 | 'M249站4倍': [0, 1, 5], 325 | 'M249站3倍': [0, 1, 8], 326 | 'M249站2倍': [0, 1, 13], 327 | 'M249站': [0, 1, 21], 328 | }, 329 | 'DP28': { 330 | 'DP28蹲6倍6': [0, 1, 8], 331 | 'DP28蹲6倍3': [0, 1, 16], 332 | 'DP28蹲4倍': [0, 1, 10], 333 | 'DP28蹲3倍': [0, 1, 16], 334 | 'DP28蹲2倍': [0, 1, 23], 335 | 'DP28蹲': [0, 1, 37], 336 | 'DP28趴6倍6': [0, 1, 12], 337 | 'DP28趴6倍3': [0, 1, 24], 338 | 'DP28趴4倍': [0, 1, 14], 339 | 'DP28趴3倍': [0, 1, 24], 340 | 'DP28趴2倍': [0, 1, 33], 341 | 'DP28趴': [0, 1, 54], 342 | 'DP28站6倍6': [0, 1, 6], 343 | 'DP28站6倍3': [0, 1, 12], 344 | 'DP28站4倍': [0, 1, 7], 345 | 'DP28站3倍': [0, 1, 12], 346 | 'DP28站2倍': [0, 1, 17], 347 | 'DP28站': [0, 1, 28], 348 | }, 349 | PKM: {}, VSS: {}, MK20H: {}, M417: {} 350 | } 351 | 352 | // 比 nova9 , 第三个参数 除以 1.4 353 | const MatePad11: PressConfig = { 354 | 'M4': { 355 | 'M4蹲6倍6': [0, 1, 4], 356 | 'M4蹲6倍3': [0, 1, 8], 357 | 'M4蹲4倍': [0, 1, 7], 358 | 'M4蹲3倍': [0, 1, 8], 359 | 'M4蹲2倍': [0, 1, 10], 360 | 'M4蹲': [0, 1, 18], 361 | 'M4趴6倍6': [0, 1, 5], 362 | 'M4趴6倍3': [0, 1, 10], 363 | 'M4趴4倍': [0, 1, 9], 364 | 'M4趴3倍': [0, 1, 10], 365 | 'M4趴2倍': [0, 1, 14], 366 | 'M4趴': [0, 1, 24], 367 | 'M4站6倍6': [0, 1, 3], 368 | 'M4站6倍3': [0, 1, 6], 369 | 'M4站4倍': [0, 1, 5], 370 | 'M4站3倍': [0, 1, 6], 371 | 'M4站2倍': [0, 1, 8], 372 | 'M4站': [0, 1, 14], 373 | }, 374 | 375 | 'SCARL': { 376 | 'SCARL蹲6倍6': [0, 1, 4], 377 | 'SCARL蹲6倍3': [0, 1, 8], 378 | 'SCARL蹲4倍': [0, 1, 7], 379 | 'SCARL蹲3倍': [0, 1, 8], 380 | 'SCARL蹲2倍': [0, 1, 10], 381 | 'SCARL蹲': [0, 1, 18], 382 | 'SCARL趴6倍6': [0, 1, 6], 383 | 'SCARL趴6倍3': [0, 1, 10], 384 | 'SCARL趴4倍': [0, 1, 9], 385 | 'SCARL趴3倍': [0, 1, 10], 386 | 'SCARL趴2倍': [0, 1, 14], 387 | 'SCARL趴': [0, 1, 24], 388 | 'SCARL站6倍6': [0, 1, 3], 389 | 'SCARL站6倍3': [0, 1, 6], 390 | 'SCARL站4倍': [0, 1, 6], 391 | 'SCARL站3倍': [0, 1, 6], 392 | 'SCARL站2倍': [0, 1, 8], 393 | 'SCARL站': [0, 1, 14], 394 | }, 395 | 396 | 'DP28': { 397 | 'DP28蹲6倍6': [0, 1, 7], 398 | 'DP28蹲6倍3': [0, 1, 13], 399 | 'DP28蹲4倍': [0, 1, 12], 400 | 'DP28蹲3倍': [0, 1, 13], 401 | 'DP28蹲2倍': [0, 1, 19], 402 | 'DP28蹲': [0, 1, 31], 403 | 'DP28趴6倍6': [0, 1, 10], 404 | 'DP28趴6倍3': [0, 1, 20], 405 | 'DP28趴4倍': [0, 1, 17], 406 | 'DP28趴3倍': [0, 1, 19], 407 | 'DP28趴2倍': [0, 1, 28], 408 | 'DP28趴': [0, 1, 44], 409 | 'DP28站6倍6': [0, 1, 5], 410 | 'DP28站6倍3': [0, 1, 10], 411 | 'DP28站4倍': [0, 1, 9], 412 | 'DP28站3倍': [0, 1, 10], 413 | 'DP28站2倍': [0, 1, 14], 414 | 'DP28站': [0, 1, 22], 415 | }, 416 | 417 | 'UMP45': { 418 | 'UMP45蹲6倍6': [0, 1, 5], 419 | 'UMP45蹲6倍3': [0, 1, 9], 420 | 'UMP45蹲4倍': [0, 1, 8], 421 | 'UMP45蹲3倍': [0, 1, 9], 422 | 'UMP45蹲2倍': [0, 1, 11], 423 | 'UMP45蹲': [0, 1, 19], 424 | 'UMP45趴6倍6': [0, 1, 5], 425 | 'UMP45趴6倍3': [0, 1, 10], 426 | 'UMP45趴4倍': [0, 1, 8], 427 | 'UMP45趴3倍': [0, 1, 10], 428 | 'UMP45趴2倍': [0, 1, 13], 429 | 'UMP45趴': [0, 1, 22], 430 | 'UMP45站6倍6': [0, 1, 4], 431 | 'UMP45站6倍3': [0, 1, 7], 432 | 'UMP45站4倍': [0, 1, 6], 433 | 'UMP45站3倍': [0, 1, 7], 434 | 'UMP45站2倍': [0, 1, 9], 435 | 'UMP45站': [0, 1, 15], 436 | }, 437 | 438 | 'AKM': { 439 | 'AKM蹲6倍6': [0, 5, 15], 440 | 'AKM蹲6倍3': [0, 1, 5], 441 | 'AKM蹲4倍': [0, 1, 5], 442 | 'AKM蹲3倍': [0, 1, 5], 443 | 'AKM蹲2倍': [0, 1, 8], 444 | 'AKM蹲': [0, 1, 12], 445 | 'AKM趴6倍6': [0, 1, 4], 446 | 'AKM趴6倍3': [0, 1, 7], 447 | 'AKM趴4倍': [0, 1, 6], 448 | 'AKM趴3倍': [0, 1, 7], 449 | 'AKM趴2倍': [0, 1, 10], 450 | 'AKM趴': [0, 1, 17], 451 | 'AKM站6倍6': [0, 1, 2], 452 | 'AKM站6倍3': [0, 1, 4], 453 | 'AKM站4倍': [0, 2, 8], 454 | 'AKM站3倍': [0, 1, 4], 455 | 'AKM站2倍': [0, 1, 5], 456 | 'AKM站': [0, 1, 10], 457 | }, 458 | 459 | 'PKM': { 460 | 'PKM蹲6倍6': [0, 1, 4], 461 | 'PKM蹲6倍3': [0, 1, 7], 462 | 'PKM蹲4倍': [0, 1, 7], 463 | 'PKM蹲3倍': [0, 1, 7], 464 | 'PKM蹲2倍': [0, 1, 10], 465 | 'PKM蹲': [0, 1, 17], 466 | 467 | 'PKM趴6倍6': [0, 1, 7], 468 | 'PKM趴6倍3': [0, 1, 13], 469 | 'PKM趴4倍': [0, 1, 12], 470 | 'PKM趴3倍': [0, 1, 13], 471 | 'PKM趴2倍': [0, 1, 19], 472 | 'PKM趴': [0, 1, 33], 473 | 474 | 'PKM站6倍6': [0, 1, 2], 475 | 'PKM站6倍3': [0, 1, 4], 476 | 'PKM站4倍': [0, 1, 4], 477 | 'PKM站3倍': [0, 1, 4], 478 | 'PKM站2倍': [0, 1, 6], 479 | 'PKM站': [0, 1, 11], 480 | }, 481 | 482 | 'YENIU': { 483 | 'YENIU蹲6倍6': [0, 1, 6], 484 | 'YENIU蹲6倍3': [0, 1, 11], 485 | 'YENIU蹲4倍': [0, 1, 10], 486 | 'YENIU蹲3倍': [0, 1, 11], 487 | 'YENIU蹲2倍': [0, 1, 15], 488 | 'YENIU蹲': [0, 1, 25], 489 | 'YENIU趴6倍6': [0, 1, 6], 490 | 'YENIU趴6倍3': [0, 1, 13], 491 | 'YENIU趴4倍': [0, 1, 11], 492 | 'YENIU趴3倍': [0, 1, 13], 493 | 'YENIU趴2倍': [0, 1, 16], 494 | 'YENIU趴': [0, 1, 28], 495 | 'YENIU站6倍6': [0, 1, 4], 496 | 'YENIU站6倍3': [0, 1, 8], 497 | 'YENIU站4倍': [0, 1, 8], 498 | 'YENIU站3倍': [0, 1, 8], 499 | 'YENIU站2倍': [0, 1, 11], 500 | 'YENIU站': [0, 1, 18], 501 | }, 502 | 503 | 'UZI': { 504 | 'UZI蹲': [0, 1, 22], 505 | 'UZI趴': [0, 1, 26], 506 | 'UZI站': [0, 1, 20], 507 | }, 508 | 509 | 'TANGMUXUN': { 510 | 'TANGMUXUN蹲': [0, 1, 15], 511 | 'TANGMUXUN趴': [0, 1, 18], 512 | 'TANGMUXUN站': [0, 1, 12], 513 | }, 514 | 515 | 'M249': { 516 | 'M249蹲6倍6': [0, 1, 7], 517 | 'M249蹲6倍3': [0, 1, 12], 518 | 'M249蹲4倍': [0, 1, 11], 519 | 'M249蹲3倍': [0, 1, 12], 520 | 'M249蹲2倍': [0, 1, 18], 521 | 'M249蹲': [0, 1, 31], 522 | 'M249趴6倍6': [0, 1, 11], 523 | 'M249趴6倍3': [0, 1, 23], 524 | 'M249趴4倍': [0, 1, 20], 525 | 'M249趴3倍': [0, 1, 23], 526 | 'M249趴2倍': [0, 1, 32], 527 | 'M249趴': [0, 1, 52], 528 | 'M249站6倍6': [0, 1, 3], 529 | 'M249站6倍3': [0, 1, 6], 530 | 'M249站4倍': [0, 1, 6], 531 | 'M249站3倍': [0, 1, 6], 532 | 'M249站2倍': [0, 1, 9], 533 | 'M249站': [0, 1, 16], 534 | }, 535 | 536 | 'VECTOR': { 537 | 'VECTOR蹲6倍3': [0, 1, 9], 538 | 'VECTOR蹲3倍': [0, 1, 9], 539 | 'VECTOR蹲2倍': [0, 1, 11], 540 | 'VECTOR蹲': [0, 1, 17], 541 | 'VECTOR趴6倍3': [0, 1, 10], 542 | 'VECTOR趴3倍': [0, 1, 10], 543 | 'VECTOR趴2倍': [0, 1, 12], 544 | 'VECTOR趴': [0, 1, 21], 545 | 'VECTOR站6倍3': [0, 1, 7], 546 | 'VECTOR站3倍': [0, 1, 7], 547 | 'VECTOR站2倍': [0, 1, 9], 548 | 'VECTOR站': [0, 1, 14], 549 | }, 550 | 551 | 'M762': { 552 | 'M762蹲6倍6': [0, 1, 2], 553 | 'M762蹲6倍3': [0, 1, 5], 554 | 'M762蹲4倍': [0, 1, 3], 555 | 'M762蹲3倍': [0, 1, 5], 556 | 'M762蹲2倍': [0, 1, 7], 557 | 'M762蹲': [0, 1, 12], 558 | 'M762趴6倍6': [0, 1, 3], 559 | 'M762趴6倍3': [0, 1, 6], 560 | 'M762趴4倍': [0, 1, 5], 561 | 'M762趴3倍': [0, 1, 6], 562 | 'M762趴2倍': [0, 1, 8], 563 | 'M762趴': [0, 1, 13], 564 | 'M762站6倍6': [0, 1, 2], 565 | 'M762站6倍3': [0, 1, 4], 566 | 'M762站4倍': [0, 1, 3], 567 | 'M762站3倍': [0, 1, 4], 568 | 'M762站2倍': [0, 1, 6], 569 | 'M762站': [0, 1, 9], 570 | }, 571 | 572 | 'VSS': { 573 | 'VSS蹲6倍6': [0, 1, 15], 574 | 'VSS蹲6倍3': [0, 1, 15], 575 | 'VSS蹲4倍': [0, 1, 15], 576 | 'VSS蹲3倍': [0, 1, 15], 577 | 'VSS蹲2倍': [0, 1, 15], 578 | 'VSS蹲': [0, 1, 15], 579 | 580 | 'VSS趴6倍6': [0, 1, 22], 581 | 'VSS趴6倍3': [0, 1, 22], 582 | 'VSS趴4倍': [0, 1, 22], 583 | 'VSS趴3倍': [0, 1, 22], 584 | 'VSS趴2倍': [0, 1, 22], 585 | 'VSS趴': [0, 1, 22], 586 | 587 | 'VSS站6倍6': [0, 1, 11], 588 | 'VSS站6倍3': [0, 1, 11], 589 | 'VSS站4倍': [0, 1, 11], 590 | 'VSS站3倍': [0, 1, 11], 591 | 'VSS站2倍': [0, 1, 11], 592 | 'VSS站': [0, 1, 11], 593 | }, 594 | 595 | 'MK20H': { 596 | 'MK20H蹲8倍': [0, 1, 17], 597 | 'MK20H蹲6倍6': [0, 1, 21], 598 | 'MK20H蹲6倍3': [0, 1, 37], 599 | 'MK20H蹲4倍': [0, 1, 34], 600 | 'MK20H蹲3倍': [0, 1, 37], 601 | 'MK20H蹲2倍': [0, 1, 51], 602 | 'MK20H蹲': [0, 1, 86], 603 | 604 | 'MK20H趴8倍': [0, 1, 30], 605 | 'MK20H趴6倍6': [0, 1, 32], 606 | 'MK20H趴6倍3': [0, 1, 68], 607 | 'MK20H趴4倍': [0, 1, 51], 608 | 'MK20H趴3倍': [0, 1, 58], 609 | 'MK20H趴2倍': [0, 1, 82], 610 | 'MK20H趴': [0, 1, 110], 611 | 612 | 'MK20H站8倍': [0, 1, 13], 613 | 'MK20H站6倍6': [0, 1, 15], 614 | 'MK20H站6倍3': [0, 1, 32], 615 | 'MK20H站4倍': [0, 1, 27], 616 | 'MK20H站3倍': [0, 1, 32], 617 | 'MK20H站2倍': [0, 1, 44], 618 | 'MK20H站': [0, 1, 64], 619 | }, 620 | 621 | 'M417': { // 趴着准一些 622 | 'M417蹲8倍': [0, 1, 8], 623 | 'M417蹲6倍6': [0, 1, 10], 624 | 'M417蹲6倍3': [0, 1, 19], 625 | 'M417蹲4倍': [0, 1, 17], 626 | 'M417蹲3倍': [0, 1, 19], 627 | 'M417蹲2倍': [0, 1, 25], 628 | 'M417蹲': [0, 1, 42], 629 | 630 | 'M417趴8倍': [0, 1, 17], 631 | 'M417趴6倍6': [0, 1, 19], 632 | 'M417趴6倍3': [0, 1, 37], 633 | 'M417趴4倍': [0, 1, 32], 634 | 'M417趴3倍': [0, 1, 37], 635 | 'M417趴2倍': [0, 1, 52], 636 | 'M417趴': [0, 1, 82], 637 | 638 | 'M417站8倍': [0, 1, 6], 639 | 'M417站6倍6': [0, 1, 8], 640 | 'M417站6倍3': [0, 1, 15], 641 | 'M417站4倍': [0, 1, 13], 642 | 'M417站3倍': [0, 1, 15], 643 | 'M417站2倍': [0, 1, 20], 644 | 'M417站': [0, 1, 33], 645 | }, 646 | 647 | 'ACVAL': { 648 | 'ACVAL蹲4倍': [0, 1, 8], 649 | 'ACVAL蹲3倍': [0, 1, 9], 650 | 'ACVAL蹲2倍': [0, 1, 12], 651 | 'ACVAL蹲': [0, 1, 21], 652 | 'ACVAL趴4倍': [0, 1, 11], 653 | 'ACVAL趴3倍': [0, 1, 13], 654 | 'ACVAL趴2倍': [0, 1, 17], 655 | 'ACVAL趴': [0, 1, 30], 656 | 'ACVAL站4倍': [0, 1, 7], 657 | 'ACVAL站3倍': [0, 1, 7], 658 | 'ACVAL站2倍': [0, 1, 10], 659 | 'ACVAL站': [0, 1, 18], 660 | }, 661 | 662 | 'MIGUAN': { 663 | 'MIGUAN蹲6倍3': [0, 1, 5], 664 | 'MIGUAN蹲4倍': [0, 1, 4], 665 | 'MIGUAN蹲3倍': [0, 1, 5], 666 | 'MIGUAN蹲2倍': [0, 1, 6], 667 | 'MIGUAN蹲': [0, 1, 10], 668 | 'MIGUAN趴6倍3': [0, 1, 6], 669 | 'MIGUAN趴4倍': [0, 1, 5], 670 | 'MIGUAN趴3倍': [0, 1, 6], 671 | 'MIGUAN趴2倍': [0, 1, 8], 672 | 'MIGUAN趴': [0, 1, 13], 673 | 'MIGUAN站6倍3': [0, 1, 3], 674 | 'MIGUAN站4倍': [0, 1, 3], 675 | 'MIGUAN站3倍': [0, 1, 3], 676 | 'MIGUAN站2倍': [0, 1, 5], 677 | 'MIGUAN站': [0, 1, 8], 678 | }, 679 | 680 | 'AUG': { 681 | 'AUG蹲6倍6': [0, 1, 4], 682 | 'AUG蹲6倍3': [0, 1, 8], 683 | 'AUG蹲4倍': [0, 1, 7], 684 | 'AUG蹲3倍': [0, 1, 8], 685 | 'AUG蹲2倍': [0, 1, 11], 686 | 'AUG蹲': [0, 1, 18], 687 | 'AUG趴6倍6': [0, 1, 5], 688 | 'AUG趴6倍3': [0, 1, 10], 689 | 'AUG趴4倍': [0, 1, 9], 690 | 'AUG趴3倍': [0, 1, 10], 691 | 'AUG趴2倍': [0, 1, 14], 692 | 'AUG趴': [0, 1, 23], 693 | 'AUG站6倍6': [0, 1, 3], 694 | 'AUG站6倍3': [0, 1, 6], 695 | 'AUG站4倍': [0, 1, 5], 696 | 'AUG站3倍': [0, 1, 6], 697 | 'AUG站2倍': [0, 1, 8], 698 | 'AUG站': [0, 1, 14], 699 | }, 700 | 701 | 'P90': { 702 | 'P90蹲6倍6': [0, 1, 34], 703 | 'P90蹲6倍3': [0, 1, 34], 704 | 'P90蹲4倍': [0, 1, 34], 705 | 'P90蹲3倍': [0, 1, 34], 706 | 'P90蹲2倍': [0, 1, 34], 707 | 'P90蹲': [0, 1, 34], 708 | 709 | 'P90趴6倍6': [0, 1, 37], 710 | 'P90趴6倍3': [0, 1, 37], 711 | 'P90趴4倍': [0, 1, 37], 712 | 'P90趴3倍': [0, 1, 37], 713 | 'P90趴2倍': [0, 1, 37], 714 | 'P90趴': [0, 1, 37], 715 | 716 | 'P90站6倍6': [0, 1, 26], 717 | 'P90站6倍3': [0, 1, 26], 718 | 'P90站4倍': [0, 1, 26], 719 | 'P90站3倍': [0, 1, 26], 720 | 'P90站2倍': [0, 1, 26], 721 | 'P90站': [0, 1, 26], 722 | }, 723 | 724 | 'GROZA': { 725 | 'GROZA蹲6倍3': [0, 1, 6], 726 | 'GROZA蹲4倍': [0, 1, 6], 727 | 'GROZA蹲3倍': [0, 1, 6], 728 | 'GROZA蹲2倍': [0, 1, 8], 729 | 'GROZA蹲': [0, 1, 16], 730 | 731 | 'GROZA趴6倍3': [0, 1, 9], 732 | 'GROZA趴4倍': [0, 1, 8], 733 | 'GROZA趴3倍': [0, 1, 9], 734 | 'GROZA趴2倍': [0, 1, 12], 735 | 'GROZA趴': [0, 1, 20], 736 | 737 | 'GROZA站6倍3': [0, 1, 6], 738 | 'GROZA站4倍': [0, 1, 5], 739 | 'GROZA站3倍': [0, 1, 6], 740 | 'GROZA站2倍': [0, 1, 7], 741 | 'GROZA站': [0, 1, 12], 742 | }, 743 | 744 | 'MG3': { // 990 745 | 'MG3蹲6倍6': [0, 1, 7], 746 | 'MG3蹲6倍3': [0, 1, 12], 747 | 'MG3蹲4倍': [0, 1, 12], 748 | 'MG3蹲3倍': [0, 1, 12], 749 | 'MG3蹲2倍': [0, 1, 19], 750 | 'MG3蹲': [0, 1, 35], 751 | 752 | 'MG3趴6倍6': [0, 1, 16], 753 | 'MG3趴6倍3': [0, 1, 31], 754 | 'MG3趴4倍': [0, 1, 22], 755 | 'MG3趴3倍': [0, 1, 31], 756 | 'MG3趴2倍': [0, 1, 46], 757 | 'MG3趴': [0, 1, 78], 758 | 759 | 'MG3站6倍6': [0, 1, 4], 760 | 'MG3站6倍3': [0, 1, 7], 761 | 'MG3站4倍': [0, 1, 6], 762 | 'MG3站3倍': [0, 1, 7], 763 | 'MG3站2倍': [0, 1, 10], 764 | 'MG3站': [0, 1, 16], 765 | }, 766 | } 767 | 768 | const XiaoMiPad6Max14 = { 769 | 'M4': { 770 | 'M4蹲6倍6': [0, 1, 3], 771 | 'M4蹲6倍3': [0, 1, 5], 772 | 'M4蹲4倍': [0, 1, 7], 773 | 'M4蹲3倍': [0, 1, 6], 774 | 'M4蹲2倍': [0, 1, 8], 775 | 'M4蹲': [0, 1, 15], 776 | 'M4趴6倍6': [0, 1, 4], 777 | 'M4趴6倍3': [0, 1, 9], 778 | 'M4趴4倍': [0, 1, 8], 779 | 'M4趴3倍': [0, 1, 9], 780 | 'M4趴2倍': [0, 1, 12], 781 | 'M4趴': [0, 1, 21], 782 | 'M4站6倍6': [0, 1, 2], 783 | 'M4站6倍3': [0, 1, 5], 784 | 'M4站4倍': [0, 1, 4], 785 | 'M4站3倍': [0, 1, 5], 786 | 'M4站2倍': [0, 1, 7], 787 | 'M4站': [0, 1, 12], 788 | }, 789 | 790 | 'SCARL': { 791 | 'SCARL蹲6倍6': [0, 1, 3], 792 | 'SCARL蹲6倍3': [0, 1, 6], 793 | 'SCARL蹲4倍': [0, 1, 5], 794 | 'SCARL蹲3倍': [0, 1, 6], 795 | 'SCARL蹲2倍': [0, 1, 9], 796 | 'SCARL蹲': [0, 1, 15], 797 | 'SCARL趴6倍6': [0, 1, 4], 798 | 'SCARL趴6倍3': [0, 1, 9], 799 | 'SCARL趴4倍': [0, 1, 8], 800 | 'SCARL趴3倍': [0, 1, 9], 801 | 'SCARL趴2倍': [0, 1, 12], 802 | 'SCARL趴': [0, 1, 20], 803 | 'SCARL站6倍6': [0, 1, 2], 804 | 'SCARL站6倍3': [0, 1, 5], 805 | 'SCARL站4倍': [0, 1, 4], 806 | 'SCARL站3倍': [0, 1, 5], 807 | 'SCARL站2倍': [0, 1, 7], 808 | 'SCARL站': [0, 1, 12], 809 | }, 810 | 811 | 'DP28': { 812 | 'DP28蹲6倍6': [0, 1, 6], 813 | 'DP28蹲6倍3': [0, 1, 12], 814 | 'DP28蹲4倍': [0, 1, 11], 815 | 'DP28蹲3倍': [0, 1, 12], 816 | 'DP28蹲2倍': [0, 1, 15], 817 | 'DP28蹲': [0, 1, 27], 818 | 'DP28趴6倍6': [0, 1, 8], 819 | 'DP28趴6倍3': [0, 1, 16], 820 | 'DP28趴4倍': [0, 1, 14], 821 | 'DP28趴3倍': [0, 1, 16], 822 | 'DP28趴2倍': [0, 1, 25], 823 | 'DP28趴': [0, 1, 42], 824 | 'DP28站6倍6': [0, 1, 4], 825 | 'DP28站6倍3': [0, 1, 8], 826 | 'DP28站4倍': [0, 1, 7], 827 | 'DP28站3倍': [0, 1, 8], 828 | 'DP28站2倍': [0, 1, 12], 829 | 'DP28站': [0, 1, 20], 830 | }, 831 | 832 | 'UMP45': { 833 | 'UMP45蹲6倍6': [0, 1, 3], 834 | 'UMP45蹲6倍3': [0, 1, 7], 835 | 'UMP45蹲4倍': [0, 1, 6], 836 | 'UMP45蹲3倍': [0, 1, 7], 837 | 'UMP45蹲2倍': [0, 1, 9], 838 | 'UMP45蹲': [0, 1, 16], 839 | 'UMP45趴6倍6': [0, 1, 4], 840 | 'UMP45趴6倍3': [0, 1, 8], 841 | 'UMP45趴4倍': [0, 1, 6], 842 | 'UMP45趴3倍': [0, 1, 8], 843 | 'UMP45趴2倍': [0, 1, 11], 844 | 'UMP45趴': [0, 1, 18], 845 | 'UMP45站6倍6': [0, 1, 3], 846 | 'UMP45站6倍3': [0, 1, 5], 847 | 'UMP45站4倍': [0, 1, 5], 848 | 'UMP45站3倍': [0, 1, 5], 849 | 'UMP45站2倍': [0, 1, 8], 850 | 'UMP45站': [0, 1, 13], 851 | }, 852 | 853 | 'AKM': { 854 | 'AKM蹲6倍6': [0, 5, 14], 855 | 'AKM蹲6倍3': [0, 1, 4], 856 | 'AKM蹲4倍': [0, 1, 3], 857 | 'AKM蹲3倍': [0, 1, 4], 858 | 'AKM蹲2倍': [0, 1, 6], 859 | 'AKM蹲': [0, 1, 11], 860 | 'AKM趴6倍6': [0, 1, 3], 861 | 'AKM趴6倍3': [0, 1, 7], 862 | 'AKM趴4倍': [0, 1, 5], 863 | 'AKM趴3倍': [0, 1, 7], 864 | 'AKM趴2倍': [0, 1, 8], 865 | 'AKM趴': [0, 1, 15], 866 | 'AKM站6倍6': [0, 1, 2], 867 | 'AKM站6倍3': [0, 1, 3], 868 | 'AKM站4倍': [0, 2, 3], 869 | 'AKM站3倍': [0, 1, 3], 870 | 'AKM站2倍': [0, 1, 5], 871 | 'AKM站': [0, 1, 9], 872 | }, 873 | 874 | 'PKM': { 875 | 'PKM蹲6倍6': [0, 1, 4], 876 | 'PKM蹲6倍3': [0, 1, 6], 877 | 'PKM蹲4倍': [0, 1, 5], 878 | 'PKM蹲3倍': [0, 1, 6], 879 | 'PKM蹲2倍': [0, 1, 9], 880 | 'PKM蹲': [0, 1, 15], 881 | 882 | 'PKM趴6倍6': [0, 1, 7], 883 | 'PKM趴6倍3': [0, 1, 10], 884 | 'PKM趴4倍': [0, 1, 9], 885 | 'PKM趴3倍': [0, 1, 10], 886 | 'PKM趴2倍': [0, 1, 16], 887 | 'PKM趴': [0, 1, 30], 888 | 889 | 'PKM站6倍6': [0, 1, 2], 890 | 'PKM站6倍3': [0, 1, 3], 891 | 'PKM站4倍': [0, 1, 3], 892 | 'PKM站3倍': [0, 1, 3], 893 | 'PKM站2倍': [0, 1, 5], 894 | 'PKM站': [0, 1, 9], 895 | }, 896 | 897 | 'YENIU': { 898 | 'YENIU蹲6倍6': [0, 1, 6], 899 | 'YENIU蹲6倍3': [0, 1, 9], 900 | 'YENIU蹲4倍': [0, 1, 8], 901 | 'YENIU蹲3倍': [0, 1, 9], 902 | 'YENIU蹲2倍': [0, 1, 12], 903 | 'YENIU蹲': [0, 1, 22], 904 | 905 | 'YENIU趴6倍6': [0, 1, 6], 906 | 'YENIU趴6倍3': [0, 1, 10], 907 | 'YENIU趴4倍': [0, 1, 9], 908 | 'YENIU趴3倍': [0, 1, 10], 909 | 'YENIU趴2倍': [0, 1, 13], 910 | 'YENIU趴': [0, 1, 25], 911 | 912 | 'YENIU站6倍6': [0, 1, 4], 913 | 'YENIU站6倍3': [0, 1, 7], 914 | 'YENIU站4倍': [0, 1, 6], 915 | 'YENIU站3倍': [0, 1, 7], 916 | 'YENIU站2倍': [0, 1, 10], 917 | 'YENIU站': [0, 1, 17], 918 | }, 919 | 920 | 'UZI': { 921 | 'UZI蹲': [0, 1, 20], 922 | 'UZI趴': [0, 1, 24], 923 | 'UZI站': [0, 1, 18], 924 | }, 925 | 926 | 'TANGMUXUN': { 927 | 'TANGMUXUN蹲': [0, 1, 15], 928 | 'TANGMUXUN趴': [0, 1, 18], 929 | 'TANGMUXUN站': [0, 1, 12], 930 | }, 931 | 932 | 'M249': { 933 | 'M249蹲6倍6': [0, 1, 7], 934 | 'M249蹲6倍3': [0, 1, 12], 935 | 'M249蹲4倍': [0, 1, 11], 936 | 'M249蹲3倍': [0, 1, 12], 937 | 'M249蹲2倍': [0, 1, 18], 938 | 'M249蹲': [0, 1, 31], 939 | 'M249趴6倍6': [0, 1, 11], 940 | 'M249趴6倍3': [0, 1, 23], 941 | 'M249趴4倍': [0, 1, 20], 942 | 'M249趴3倍': [0, 1, 23], 943 | 'M249趴2倍': [0, 1, 32], 944 | 'M249趴': [0, 1, 52], 945 | 'M249站6倍6': [0, 1, 3], 946 | 'M249站6倍3': [0, 1, 6], 947 | 'M249站4倍': [0, 1, 6], 948 | 'M249站3倍': [0, 1, 6], 949 | 'M249站2倍': [0, 1, 9], 950 | 'M249站': [0, 1, 16], 951 | }, 952 | 953 | 'VECTOR': { 954 | 'VECTOR蹲6倍3': [0, 1, 9], 955 | 'VECTOR蹲3倍': [0, 1, 9], 956 | 'VECTOR蹲2倍': [0, 1, 11], 957 | 'VECTOR蹲': [0, 1, 17], 958 | 'VECTOR趴6倍3': [0, 1, 10], 959 | 'VECTOR趴3倍': [0, 1, 10], 960 | 'VECTOR趴2倍': [0, 1, 12], 961 | 'VECTOR趴': [0, 1, 21], 962 | 'VECTOR站6倍3': [0, 1, 7], 963 | 'VECTOR站3倍': [0, 1, 7], 964 | 'VECTOR站2倍': [0, 1, 9], 965 | 'VECTOR站': [0, 1, 14], 966 | }, 967 | 968 | 'M762': { 969 | 'M762蹲6倍6': [0, 1, 2], 970 | 'M762蹲6倍3': [0, 1, 5], 971 | 'M762蹲4倍': [0, 1, 3], 972 | 'M762蹲3倍': [0, 1, 5], 973 | 'M762蹲2倍': [0, 1, 7], 974 | 'M762蹲': [0, 1, 12], 975 | 'M762趴6倍6': [0, 1, 3], 976 | 'M762趴6倍3': [0, 1, 6], 977 | 'M762趴4倍': [0, 1, 5], 978 | 'M762趴3倍': [0, 1, 6], 979 | 'M762趴2倍': [0, 1, 8], 980 | 'M762趴': [0, 1, 13], 981 | 'M762站6倍6': [0, 1, 2], 982 | 'M762站6倍3': [0, 1, 4], 983 | 'M762站4倍': [0, 1, 3], 984 | 'M762站3倍': [0, 1, 4], 985 | 'M762站2倍': [0, 1, 6], 986 | 'M762站': [0, 1, 9], 987 | }, 988 | 989 | 'VSS': { 990 | 'VSS蹲6倍6': [0, 1, 15], 991 | 'VSS蹲6倍3': [0, 1, 15], 992 | 'VSS蹲4倍': [0, 1, 15], 993 | 'VSS蹲3倍': [0, 1, 15], 994 | 'VSS蹲2倍': [0, 1, 15], 995 | 'VSS蹲': [0, 1, 15], 996 | 997 | 'VSS趴6倍6': [0, 1, 22], 998 | 'VSS趴6倍3': [0, 1, 22], 999 | 'VSS趴4倍': [0, 1, 22], 1000 | 'VSS趴3倍': [0, 1, 22], 1001 | 'VSS趴2倍': [0, 1, 22], 1002 | 'VSS趴': [0, 1, 22], 1003 | 1004 | 'VSS站6倍6': [0, 1, 11], 1005 | 'VSS站6倍3': [0, 1, 11], 1006 | 'VSS站4倍': [0, 1, 11], 1007 | 'VSS站3倍': [0, 1, 11], 1008 | 'VSS站2倍': [0, 1, 11], 1009 | 'VSS站': [0, 1, 11], 1010 | }, 1011 | 1012 | 'MK20H': { 1013 | 'MK20H蹲8倍': [0, 1, 17], 1014 | 'MK20H蹲6倍6': [0, 1, 21], 1015 | 'MK20H蹲6倍3': [0, 1, 37], 1016 | 'MK20H蹲4倍': [0, 1, 34], 1017 | 'MK20H蹲3倍': [0, 1, 37], 1018 | 'MK20H蹲2倍': [0, 1, 51], 1019 | 'MK20H蹲': [0, 1, 86], 1020 | 1021 | 'MK20H趴8倍': [0, 1, 30], 1022 | 'MK20H趴6倍6': [0, 1, 32], 1023 | 'MK20H趴6倍3': [0, 1, 68], 1024 | 'MK20H趴4倍': [0, 1, 51], 1025 | 'MK20H趴3倍': [0, 1, 58], 1026 | 'MK20H趴2倍': [0, 1, 82], 1027 | 'MK20H趴': [0, 1, 110], 1028 | 1029 | 'MK20H站8倍': [0, 1, 13], 1030 | 'MK20H站6倍6': [0, 1, 15], 1031 | 'MK20H站6倍3': [0, 1, 32], 1032 | 'MK20H站4倍': [0, 1, 27], 1033 | 'MK20H站3倍': [0, 1, 32], 1034 | 'MK20H站2倍': [0, 1, 44], 1035 | 'MK20H站': [0, 1, 64], 1036 | }, 1037 | 1038 | 'M417': { // 趴着准一些 1039 | 'M417蹲8倍': [0, 1, 8], 1040 | 'M417蹲6倍6': [0, 1, 10], 1041 | 'M417蹲6倍3': [0, 1, 19], 1042 | 'M417蹲4倍': [0, 1, 17], 1043 | 'M417蹲3倍': [0, 1, 19], 1044 | 'M417蹲2倍': [0, 1, 25], 1045 | 'M417蹲': [0, 1, 42], 1046 | 1047 | 'M417趴8倍': [0, 1, 17], 1048 | 'M417趴6倍6': [0, 1, 19], 1049 | 'M417趴6倍3': [0, 1, 37], 1050 | 'M417趴4倍': [0, 1, 32], 1051 | 'M417趴3倍': [0, 1, 37], 1052 | 'M417趴2倍': [0, 1, 52], 1053 | 'M417趴': [0, 1, 82], 1054 | 1055 | 'M417站8倍': [0, 1, 6], 1056 | 'M417站6倍6': [0, 1, 8], 1057 | 'M417站6倍3': [0, 1, 15], 1058 | 'M417站4倍': [0, 1, 13], 1059 | 'M417站3倍': [0, 1, 15], 1060 | 'M417站2倍': [0, 1, 20], 1061 | 'M417站': [0, 1, 33], 1062 | }, 1063 | 1064 | 'ACVAL': { 1065 | 'ACVAL蹲4倍': [0, 1, 8], 1066 | 'ACVAL蹲3倍': [0, 1, 9], 1067 | 'ACVAL蹲2倍': [0, 1, 12], 1068 | 'ACVAL蹲': [0, 1, 21], 1069 | 'ACVAL趴4倍': [0, 1, 11], 1070 | 'ACVAL趴3倍': [0, 1, 13], 1071 | 'ACVAL趴2倍': [0, 1, 17], 1072 | 'ACVAL趴': [0, 1, 30], 1073 | 'ACVAL站4倍': [0, 1, 7], 1074 | 'ACVAL站3倍': [0, 1, 7], 1075 | 'ACVAL站2倍': [0, 1, 10], 1076 | 'ACVAL站': [0, 1, 18], 1077 | }, 1078 | 1079 | 'MIGUAN': { 1080 | 'MIGUAN蹲6倍3': [0, 1, 5], 1081 | 'MIGUAN蹲4倍': [0, 1, 4], 1082 | 'MIGUAN蹲3倍': [0, 1, 5], 1083 | 'MIGUAN蹲2倍': [0, 1, 6], 1084 | 'MIGUAN蹲': [0, 1, 10], 1085 | 'MIGUAN趴6倍3': [0, 1, 6], 1086 | 'MIGUAN趴4倍': [0, 1, 5], 1087 | 'MIGUAN趴3倍': [0, 1, 6], 1088 | 'MIGUAN趴2倍': [0, 1, 8], 1089 | 'MIGUAN趴': [0, 1, 13], 1090 | 'MIGUAN站6倍3': [0, 1, 3], 1091 | 'MIGUAN站4倍': [0, 1, 3], 1092 | 'MIGUAN站3倍': [0, 1, 3], 1093 | 'MIGUAN站2倍': [0, 1, 5], 1094 | 'MIGUAN站': [0, 1, 8], 1095 | }, 1096 | 1097 | 'AUG': { 1098 | 'AUG蹲6倍6': [0, 1, 4], 1099 | 'AUG蹲6倍3': [0, 1, 8], 1100 | 'AUG蹲4倍': [0, 1, 7], 1101 | 'AUG蹲3倍': [0, 1, 8], 1102 | 'AUG蹲2倍': [0, 1, 11], 1103 | 'AUG蹲': [0, 1, 18], 1104 | 'AUG趴6倍6': [0, 1, 5], 1105 | 'AUG趴6倍3': [0, 1, 10], 1106 | 'AUG趴4倍': [0, 1, 9], 1107 | 'AUG趴3倍': [0, 1, 10], 1108 | 'AUG趴2倍': [0, 1, 14], 1109 | 'AUG趴': [0, 1, 23], 1110 | 'AUG站6倍6': [0, 1, 3], 1111 | 'AUG站6倍3': [0, 1, 6], 1112 | 'AUG站4倍': [0, 1, 5], 1113 | 'AUG站3倍': [0, 1, 6], 1114 | 'AUG站2倍': [0, 1, 8], 1115 | 'AUG站': [0, 1, 14], 1116 | }, 1117 | 1118 | 'P90': { 1119 | 'P90蹲6倍6': [0, 1, 34], 1120 | 'P90蹲6倍3': [0, 1, 34], 1121 | 'P90蹲4倍': [0, 1, 34], 1122 | 'P90蹲3倍': [0, 1, 34], 1123 | 'P90蹲2倍': [0, 1, 34], 1124 | 'P90蹲': [0, 1, 34], 1125 | 1126 | 'P90趴6倍6': [0, 1, 37], 1127 | 'P90趴6倍3': [0, 1, 37], 1128 | 'P90趴4倍': [0, 1, 37], 1129 | 'P90趴3倍': [0, 1, 37], 1130 | 'P90趴2倍': [0, 1, 37], 1131 | 'P90趴': [0, 1, 37], 1132 | 1133 | 'P90站6倍6': [0, 1, 26], 1134 | 'P90站6倍3': [0, 1, 26], 1135 | 'P90站4倍': [0, 1, 26], 1136 | 'P90站3倍': [0, 1, 26], 1137 | 'P90站2倍': [0, 1, 26], 1138 | 'P90站': [0, 1, 26], 1139 | }, 1140 | 1141 | 'GROZA': { 1142 | 'GROZA蹲6倍3': [0, 1, 6], 1143 | 'GROZA蹲4倍': [0, 1, 6], 1144 | 'GROZA蹲3倍': [0, 1, 6], 1145 | 'GROZA蹲2倍': [0, 1, 8], 1146 | 'GROZA蹲': [0, 1, 16], 1147 | 1148 | 'GROZA趴6倍3': [0, 1, 9], 1149 | 'GROZA趴4倍': [0, 1, 8], 1150 | 'GROZA趴3倍': [0, 1, 9], 1151 | 'GROZA趴2倍': [0, 1, 12], 1152 | 'GROZA趴': [0, 1, 20], 1153 | 1154 | 'GROZA站6倍3': [0, 1, 6], 1155 | 'GROZA站4倍': [0, 1, 5], 1156 | 'GROZA站3倍': [0, 1, 6], 1157 | 'GROZA站2倍': [0, 1, 7], 1158 | 'GROZA站': [0, 1, 12], 1159 | }, 1160 | 1161 | 'MG3': { // 990 1162 | 'MG3蹲6倍6': [0, 1, 7], 1163 | 'MG3蹲6倍3': [0, 1, 12], 1164 | 'MG3蹲4倍': [0, 1, 12], 1165 | 'MG3蹲3倍': [0, 1, 12], 1166 | 'MG3蹲2倍': [0, 1, 19], 1167 | 'MG3蹲': [0, 1, 35], 1168 | 1169 | 'MG3趴6倍6': [0, 1, 16], 1170 | 'MG3趴6倍3': [0, 1, 31], 1171 | 'MG3趴4倍': [0, 1, 22], 1172 | 'MG3趴3倍': [0, 1, 31], 1173 | 'MG3趴2倍': [0, 1, 46], 1174 | 'MG3趴': [0, 1, 78], 1175 | 1176 | 'MG3站6倍6': [0, 1, 4], 1177 | 'MG3站6倍3': [0, 1, 7], 1178 | 'MG3站4倍': [0, 1, 6], 1179 | 'MG3站3倍': [0, 1, 7], 1180 | 'MG3站2倍': [0, 1, 10], 1181 | 'MG3站': [0, 1, 16], 1182 | }, 1183 | 1184 | 'MK14': { 1185 | 'MK14蹲6倍6': [0, 2, 5], 1186 | 'MK14蹲6倍3': [0, 1, 4], 1187 | 'MK14蹲4倍': [0, 2, 8], 1188 | 'MK14蹲3倍': [0, 1, 4], 1189 | 'MK14蹲2倍': [0, 1, 6], 1190 | 'MK14蹲': [0, 1, 10], 1191 | 1192 | 'MK14趴6倍6': [0, 2, 7], 1193 | 'MK14趴6倍3': [0, 1, 9], 1194 | 'MK14趴4倍': [0, 2, 14], 1195 | 'MK14趴3倍': [0, 1, 9], 1196 | 'MK14趴2倍': [0, 1, 15], 1197 | 'MK14趴': [0, 1, 18], 1198 | 1199 | 'MK14站6倍6': [0, 1, 1], 1200 | 'MK14站6倍3': [0, 1, 4], 1201 | 'MK14站4倍': [0, 1, 3], 1202 | 'MK14站3倍': [0, 1, 4], 1203 | 'MK14站2倍': [0, 1, 5], 1204 | 'MK14站': [0, 1, 8], 1205 | }, 1206 | }; 1207 | 1208 | export class PressArgs { 1209 | static PressConfig =/* replace start */ MatePad11 /* replace end */ 1210 | 1211 | /** 1212 | * 获取压强配置 1213 | */ 1214 | getGunPressArgs(gunCategory: GunCategory, cnPostureCategory: CnPostureCategory, cnMirrorCategory: CnMirrorCategory) { 1215 | const argsMap = PressArgs.PressConfig[gunCategory]; 1216 | 1217 | if (!argsMap) { 1218 | logerror(`getGunPressArgs: ${gunCategory} 没有相应配置。`) 1219 | return null; 1220 | } 1221 | 1222 | const key = gunCategory + cnPostureCategory + cnMirrorCategory; 1223 | 1224 | const args = argsMap[key]; 1225 | 1226 | if (!args) { 1227 | return null; 1228 | } 1229 | 1230 | const [ x, y, delay ] = args; 1231 | 1232 | return { x, y, delay }; 1233 | } 1234 | } 1235 | 1236 | export const pressArgs = new PressArgs(); 1237 | -------------------------------------------------------------------------------- /src/scripts/pressCtrl.ts: -------------------------------------------------------------------------------- 1 | import { GunCategory, MirrorCategory, PostureCategory } from '../../types'; 2 | import { gun, Gun } from './gun'; 3 | import { Posture, posture } from './posture'; 4 | import { mirror, Mirror } from './mirror'; 5 | import { utils } from './utils'; 6 | import { pressArgs } from './pressArgs'; 7 | import store from './store'; 8 | import { skill } from './skill'; 9 | 10 | export class PressCtrl { 11 | currGunCategory = null as ( null | GunCategory ) 12 | currPostureCategory = null as ( null | PostureCategory ) 13 | currMirrorCategory = null as ( null | MirrorCategory ) 14 | 15 | fire() { 16 | utils.holdPressCurrentKey(); 17 | utils.pauseCustomAim(); 18 | 19 | this.doCustomAim(); 20 | } 21 | 22 | doCustomAim() { 23 | if (!this.check()) { 24 | return; 25 | } 26 | 27 | utils.startCustomAim(); 28 | utils.playCustomAim(); 29 | } 30 | 31 | /** 检查准镜和枪械 */ 32 | check({ mirrorCategory = true, gunCategory = true } = {}) { 33 | if (gunCategory && !gun.isHoldConfiguredGun()) { 34 | return false; 35 | } 36 | 37 | if (mirrorCategory && !mirror.isOpen()) { 38 | return false; 39 | } 40 | 41 | return true; 42 | } 43 | 44 | toggleX6Sight() { 45 | if (!mirror.isOpen()) { 46 | return false; 47 | } 48 | 49 | if (!mirror.isX6Sight()) { 50 | return false; 51 | } 52 | 53 | const currGunCategory = gun.getCurrentGun(); 54 | 55 | if (!currGunCategory) { 56 | return false; 57 | } 58 | 59 | const currMirrorCategory = this.getCurrentMirrorByGun(currGunCategory); 60 | 61 | let adjustedMirror; 62 | 63 | if (currMirrorCategory === Mirror.Categories.X6X3Sight) { 64 | adjustedMirror = mirror.adjustX6ToX6(); 65 | } else { 66 | adjustedMirror = mirror.adjustX6ToX3(); 67 | } 68 | 69 | store.mutations.setMirrorOfAdjustedGun(currGunCategory, adjustedMirror) 70 | 71 | return true; 72 | } 73 | 74 | logErrorPressArgs() { 75 | const status = this.getStatus(); 76 | 77 | if (!status) { 78 | // logerror(`logErrorPressArgs(): status 为 None`) 79 | return; 80 | } 81 | 82 | const { gunCategory, cnPostureCategory, cnMirrorCategory } = status; 83 | const args = pressArgs.getGunPressArgs(gunCategory, cnPostureCategory, cnMirrorCategory); 84 | 85 | logerror(`logErrorPressArgs: ${ gunCategory }${ cnPostureCategory }${ cnMirrorCategory }: ${ JSON.stringify(args) }`) 86 | } 87 | 88 | updatePressArgs = () => { 89 | try { 90 | const args = this.getArgsOfCustomAimPar(); 91 | 92 | if (!args) { 93 | return false; 94 | } 95 | 96 | const { x, y, delay } = args; 97 | 98 | utils.updateCustomAim(x, y, delay); 99 | 100 | return true; 101 | } catch (e) { 102 | return false; 103 | } 104 | } 105 | 106 | getArgsOfCustomAimPar() { 107 | const status = this.getStatus(); 108 | 109 | if (!status) { 110 | // logerror(`getArgsOfCustomAimPar(): status 为 None`) 111 | return; 112 | } 113 | 114 | const { gunCategory, cnPostureCategory, cnMirrorCategory } = status; 115 | 116 | const args = pressArgs.getGunPressArgs(gunCategory, cnPostureCategory, cnMirrorCategory); 117 | 118 | const argsFullKey = `${ gunCategory }${ cnPostureCategory }${ cnMirrorCategory }`; 119 | 120 | if (!args) { 121 | logerror(`getArgsOfCustomAimPar: ${argsFullKey}: 没有对应的配置`) 122 | return; 123 | } 124 | 125 | args.delay += store.state.deltaDelayOfGunPressArgs; 126 | 127 | utils.showTip(`${argsFullKey}: ${ JSON.stringify(args) }`) 128 | 129 | return args; 130 | } 131 | 132 | /** 133 | * 此方法在开镜后执行, 134 | * 135 | * 如未获取到 gun、posture、mirror,则会使用上次识别到的值 136 | */ 137 | getStatus() { 138 | const { 139 | currGunCategory: lastGunCategory, 140 | currMirrorCategory: lastMirrorCategory 141 | } = this; 142 | 143 | let gunCategory = gun.getCurrentGun(); 144 | 145 | if (!gunCategory) { 146 | // logwarning('getStatus: 未识别出当前枪械!尝试使用上次识别出来的枪械'); 147 | 148 | if (!lastGunCategory) { 149 | // logwarning('getStatus: 上次识别出来的枪械为 None'); 150 | return; 151 | } 152 | 153 | gunCategory = lastGunCategory; 154 | } 155 | 156 | let postureCategory = posture.getCurrentPostureCategory(); 157 | 158 | let mirrorCategory = this.getCurrentMirrorByGun(gunCategory); 159 | 160 | if (!mirrorCategory) { 161 | // logwarning('getStatus: 未识别出当前准镜!尝试使用上次识别出来的准镜!'); 162 | 163 | if (!lastMirrorCategory) { 164 | // logwarning('getStatus: 上次识别出来的准镜为 None'); 165 | return; 166 | } 167 | 168 | mirrorCategory = lastMirrorCategory; 169 | } 170 | 171 | this.currGunCategory = gunCategory; 172 | this.currPostureCategory = postureCategory; 173 | this.currMirrorCategory = mirrorCategory; 174 | 175 | const cnPostureCategory = Posture.Mapping[postureCategory]; 176 | const cnMirrorCategory = Mirror.Mapping[mirrorCategory]; 177 | 178 | return { gunCategory, cnPostureCategory, cnMirrorCategory }; 179 | } 180 | 181 | getCurrentMirrorByGun(gunCategory: GunCategory) { 182 | let disabledMirrors: MirrorCategory[] = ['X8Sight']; 183 | 184 | if (Gun.X8SightGuns.includes(gunCategory)) { 185 | disabledMirrors = ['X2Sight', 'RedDotSight', 'HolographicSight', 'MachineSight'] 186 | } 187 | 188 | let mirrorCategory = mirror.getCurrentMirror(disabledMirrors); 189 | 190 | if (mirrorCategory === Mirror.Categories.X6Sight) { 191 | mirrorCategory = store.getters.getMirrorOfAdjustedGun(gunCategory) || Mirror.Categories.X6Sight; 192 | } 193 | 194 | return mirrorCategory; 195 | } 196 | 197 | } 198 | 199 | export const pressCtrl = new PressCtrl(); 200 | -------------------------------------------------------------------------------- /src/scripts/skill.ts: -------------------------------------------------------------------------------- 1 | import store from './store'; 2 | import { mirror } from './mirror'; 3 | import { gun } from './gun'; 4 | import constant, { Keyboard, NodHeadConfig } from './constant'; 5 | import { posture } from './posture'; 6 | import { utils } from './utils'; 7 | 8 | export class Skill { 9 | 10 | 11 | 12 | clickOpenMirrorButton() { 13 | utils.clickPoint(constant.OpenMirrorButtonPoint) 14 | } 15 | 16 | isPressShift() { 17 | return utils.isPressingKey(Keyboard.Shift); 18 | } 19 | 20 | } 21 | 22 | export const skill = new Skill(); 23 | -------------------------------------------------------------------------------- /src/scripts/store.ts: -------------------------------------------------------------------------------- 1 | import { IGetters, IMutations } from '../../types'; 2 | import { utils } from './utils'; 3 | 4 | const state = { 5 | /** 控制 utils.showTip */ 6 | tip: true, 7 | 8 | /** 调整过 6 倍镜倍率 的 枪及倍率 */ 9 | adjust6XSightGuns: {} as Record, // { gun: sight, ... } 10 | 11 | /** 动态调整压枪参数,存储差值 */ 12 | deltaDelayOfGunPressArgs: 0, 13 | 14 | currGun: '', 15 | 16 | leftGun: '', 17 | rightGun: '', 18 | 19 | leftGunMirror: '', 20 | rightGunMirror: '', 21 | 22 | availMirrorList: [], 23 | 24 | }; 25 | 26 | 27 | const getters: IGetters = { 28 | /** 29 | * 获取调整过 6 倍镜倍率的枪的准镜 30 | */ 31 | getMirrorOfAdjustedGun(this: typeof store, gun: string) { 32 | const adjustedX6SightsGuns = this.state.adjust6XSightGuns || {} 33 | return adjustedX6SightsGuns[gun]; 34 | } 35 | }; 36 | 37 | const mutations: IMutations = { 38 | /** 39 | * 设置调整过 6 倍镜倍率的枪及准镜 40 | */ 41 | setMirrorOfAdjustedGun(this: typeof store, gun: string, mirror: string) { 42 | const adjustedX6SightsGuns = this.state.adjust6XSightGuns; 43 | 44 | adjustedX6SightsGuns[gun] = mirror; 45 | 46 | this.state.adjust6XSightGuns = adjustedX6SightsGuns; 47 | }, 48 | 49 | addDelayOfGunPressArgs(this: typeof store, num: number) { 50 | this.state.deltaDelayOfGunPressArgs = this.state.deltaDelayOfGunPressArgs + num; 51 | }, 52 | 53 | /** 54 | * 切换 utils.showTip() 的启用和禁止 55 | */ 56 | toggleEnableOfTip(this: typeof store, ) { 57 | this.state.tip = !this.state.tip; 58 | }, 59 | } 60 | 61 | const store = { 62 | state, 63 | getters, 64 | mutations, 65 | }; 66 | 67 | store.state = new Proxy(state, { 68 | get(target, propName) { 69 | const value = utils.getValueFromGlobalMap(propName); 70 | 71 | // loginfo(`${propName} = ${value}`); 72 | 73 | if (value == null) { 74 | const defaultValue = Reflect.get(target, propName); 75 | // loginfo(`${propName} = ${defaultValue} (default)`); 76 | return defaultValue; 77 | } 78 | 79 | return value; 80 | }, 81 | 82 | set(target, propName, value) { 83 | utils.setValueToGlobalMap(propName, value); 84 | return true; 85 | }, 86 | 87 | deleteProperty(target, propName) { 88 | utils.setValueToGlobalMap(propName, null); 89 | return true; 90 | } 91 | }); 92 | 93 | // 更改 this 的指向 94 | Object.keys(store.mutations).forEach((methodName) => { 95 | if (!store.mutations.hasOwnProperty(methodName)) { 96 | return; 97 | } 98 | 99 | store.mutations[methodName] = store.mutations[methodName].bind(store); 100 | }); 101 | 102 | // 更改 this 的指向 103 | Object.keys(store.getters).forEach((methodName) => { 104 | if (!store.getters.hasOwnProperty(methodName)) { 105 | return; 106 | } 107 | 108 | store.getters[methodName] = store.getters[methodName].bind(store); 109 | }); 110 | 111 | 112 | export default store; 113 | -------------------------------------------------------------------------------- /src/scripts/utils.ts: -------------------------------------------------------------------------------- 1 | import { Point } from '../../types'; 2 | import store from './store'; 3 | 4 | export class Utils { 5 | /** 6 | * mapi.point 是否 存在 7 | * 8 | * @param point { mapi.point } 9 | * @returns {boolean} 10 | */ 11 | isPointExist(point: mapi.point) { 12 | return point.X !== 0 || point.Y !== 0; 13 | } 14 | 15 | /** 16 | * mapi.point 是否 不存在 17 | * 18 | * @param point { mapi.point } 19 | * @returns {boolean} 20 | */ 21 | isPointNotExist(point: mapi.point) { 22 | return point.X === 0 || point.Y === 0; 23 | } 24 | 25 | isImageExist(imgName: string, sim: number, setCol: number, setRow: number, selectCol: number, selectRow: number) { 26 | return this.isPointExist(this.findImage(imgName, sim, setCol, setRow, selectCol, selectRow)); 27 | } 28 | isColorExist(color: string, posList: string) { 29 | return this.isPointExist(mapi.findcolor(color, posList)); 30 | } 31 | 32 | /** 33 | * 包装 mapi.tip(content) 34 | */ 35 | showTip(content: string, duration = 1) { 36 | if (!store.state.tip) { 37 | return; 38 | } 39 | mapi.tip(content, duration); 40 | } 41 | 42 | findImage(imgName: string, sim: number, columnTotal: number, rowTotal: number, selectCol: number, selectRow: number) { 43 | return mapi.findimage(imgName, sim, columnTotal, rowTotal, selectCol, selectRow); 44 | } 45 | 46 | clickImagePosition(imgName: string, sim: number, columnTotal: number, rowTotal: number, selectCol: number, selectRow: number) { 47 | const point = this.findImage(imgName, sim, columnTotal, rowTotal, selectCol, selectRow); 48 | 49 | if (this.isPointNotExist(point)) { 50 | return false; 51 | } 52 | 53 | mapi.click(point); 54 | } 55 | 56 | clickPoint(point: mapi.point | Point) { 57 | let x: number; 58 | let y: number; 59 | 60 | if ('x' in point) { 61 | ({ x, y } = point); 62 | } else { 63 | ({ X: x, Y: y } = point); 64 | } 65 | 66 | mapi.click(x, y); 67 | } 68 | 69 | /** 点击当前按键所在位置 */ 70 | clickCurrentKey() { 71 | mapi.click(); 72 | } 73 | 74 | /** 按 key 按键 pressDuration 毫秒 */ 75 | clickKey(key: string, pressDuration: number = 100) { 76 | mapi.key(key, pressDuration); 77 | } 78 | 79 | /** 重置 准心、方向键 */ 80 | resetAimAndDirection(delay?: number) { 81 | if (delay) { 82 | mapi.delay(delay) 83 | } 84 | mapi.aimreset(); 85 | mapi.directionreset(); 86 | } 87 | 88 | resetAim(delay?: number) { 89 | if (delay) { 90 | mapi.delay(delay) 91 | } 92 | mapi.aimreset(); 93 | } 94 | 95 | /** 96 | * 顺序执行多个函数 97 | */ 98 | series(funcList: Function[], interruptReturnValue = true) { 99 | funcList.some((func) => { 100 | const result = func(); 101 | 102 | return result === interruptReturnValue; 103 | }); 104 | } 105 | 106 | switchToShotMode() { 107 | mapi.shotmode(true); 108 | } 109 | 110 | switchToMouseMode() { 111 | mapi.shotmode(true); 112 | } 113 | 114 | /** 按住当前按键,松开后释放 */ 115 | holdPressCurrentKey() { 116 | mapi.holdpress(); 117 | } 118 | 119 | /** 启动 自定义准心调节 */ 120 | startCustomAim() { 121 | mapi.startcustomaimpar(); 122 | } 123 | 124 | /** 运行 自定义准心调节 */ 125 | playCustomAim() { 126 | mapi.customaimpar(false); 127 | } 128 | 129 | /** 暂停 自定义准心调节 */ 130 | pauseCustomAim() { 131 | mapi.customaimpar(true); 132 | } 133 | 134 | /** 更新 自定义准心调节 参数 */ 135 | updateCustomAim(x: number, y: number, delay: number) { 136 | mapi.changecustomaimpar(x, y, delay); 137 | } 138 | 139 | /** 获取光标的位置 */ 140 | getMousePosition() { 141 | return mapi.getmousepos() 142 | } 143 | 144 | /** 滑动操作 */ 145 | slide(startX: number, startY: number, endX: number, endY: number, interval: number, pointNum: number) { 146 | mapi.slide(startX, startY, endX, endY, interval, pointNum); 147 | } 148 | 149 | /** 延迟 */ 150 | delay(milliseconds: number = 100) { 151 | mapi.delay(milliseconds) 152 | } 153 | 154 | isPressingKey(keyName: string): boolean { 155 | return mapi.keyispress(keyName) 156 | } 157 | 158 | isPressingCurrentKey() { 159 | return mapi.keyispress(); 160 | } 161 | 162 | getValueFromGlobalMap(key: string | Object): any { 163 | return mapi.getglobalmap(key); 164 | } 165 | 166 | setValueToGlobalMap(key: string | Object, value: any) { 167 | mapi.setglobalmap(key, value) 168 | } 169 | } 170 | 171 | export const utils = new Utils(); 172 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": false, 21 | "outDir": "dist" 22 | }, 23 | "include": [ 24 | "src/scripts", 25 | "types" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /types/index.d.ts: -------------------------------------------------------------------------------- 1 | export type Point = { x: number, y: number }; 2 | 3 | export type ImageArgs = [ string, number, number, number, number, number ] 4 | 5 | /** [sim, setCol, setRow, selectCol, selectRow] */ 6 | export type ImageAreaArgs = [ number, number, number, number, number ]; 7 | 8 | export type ColorArgs = [ string, string ]; 9 | 10 | export type PointArgs = [ number, number ]; 11 | 12 | export interface IState { 13 | [prop: string]: any, 14 | } 15 | 16 | export interface IGetters { 17 | [prop: string]: Function, 18 | } 19 | 20 | export interface IMutations { 21 | [prop: string]: Function, 22 | } 23 | 24 | 25 | export type GunCategory = 26 | 'M4' 27 | | 'SCARL' 28 | | 'DP28' 29 | | 'UMP45' 30 | | 'YENIU' 31 | | 'UZI' 32 | | 'VECTOR' 33 | | 'TANGMUXUN' 34 | | 'AKM' 35 | | 'ACVAL' 36 | | 'PKM' 37 | | 'VSS' 38 | | 'MK20H' 39 | | 'M417' 40 | | 'M249' 41 | | 'M762' 42 | | 'AUG' 43 | | 'GROZA' 44 | | 'MG3' 45 | | 'P90' 46 | | 'MIGUAN' 47 | | 'MK14' 48 | ; 49 | 50 | export type GunPosition = 'Left' | 'Right'; 51 | 52 | export type MirrorCategory = 53 | 'MachineSight' 54 | | 'RedDotSight' 55 | | 'HolographicSight' 56 | | 'X2Sight' 57 | | 'X3Sight' 58 | | 'X4Sight' 59 | | 'X6Sight' 60 | | 'X8Sight' 61 | ; 62 | 63 | export type CnMirrorCategory = 64 | '' 65 | | '2倍' 66 | | '3倍' 67 | | '4倍' 68 | | '6倍6' 69 | | '6倍3' 70 | | '8倍' 71 | ; 72 | 73 | 74 | export type MissileCategory = 'FragmentBomb' | 'SmokeBomb' | 'MolotovCocktail'; 75 | 76 | export type MedicineCategory = 77 | 'EnergyDrink' 78 | | 'Painkiller' 79 | | 'EpinephrineInjection' 80 | | 'Bandage' 81 | | 'FirstAidKit' 82 | | 'MedicalFirstAidKit' 83 | 84 | export type PostureCategory = 85 | 'Stand' 86 | | 'Squat' 87 | | 'Prostrate' 88 | 89 | export type CnPostureCategory = 90 | '站' 91 | | '蹲' 92 | | '趴' 93 | 94 | export type PressConfig = { 95 | [key in GunCategory]: IMirrorPressArgs 96 | } 97 | 98 | export interface IMirrorPressArgs { 99 | [prop: string]: [ number, number, number ]; 100 | } 101 | -------------------------------------------------------------------------------- /types/mapi.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace mapi { 2 | /** 3 | * 多点找色、简单找图等返回的 point, 4 | * 5 | * 通过 ( point.X !== 0 || point.Y !== 0 ) 判断是否合法 6 | */ 7 | interface point { 8 | X: number, 9 | Y: number, 10 | } 11 | 12 | /** 13 | * 延时操作,milliseconds为整型,单位毫秒 14 | * @param milliseconds 15 | */ 16 | function delay(milliseconds: number); 17 | 18 | /** 19 | * 长按当前宏按键所指的手机位置 20 | * @param milliseconds 21 | */ 22 | function longpress(milliseconds: number); 23 | 24 | /** 25 | * 长按指定坐标的位置 26 | */ 27 | function longpress(x: number, y: number, milliseconds: number); 28 | 29 | /** 30 | * 弹出消息框 31 | * 32 | * @param info 内容 33 | * @param closeTime 单位 秒,默认 3 秒 34 | */ 35 | function tip(info: string, closeTime?: number): void; 36 | 37 | 38 | /** 39 | * 单点找色,返回当前颜色的坐标 40 | * 41 | * 主要解决部分图标按下后会变色的场景, 42 | * 如要要区分按钮变色状态可以通过此接口处理 43 | * 44 | * @param color 45 | * @param point 46 | */ 47 | function findcolor(color: string, point: point): point; 48 | 49 | /** 50 | * 多点找色,返回当前颜色的坐标点。 51 | * 52 | * 配合 TCG界面里的“取色工具” 一起使用 53 | * 54 | * @param color 55 | * @param poslist 56 | */ 57 | function findcolor(color: string, poslist: string): point; 58 | 59 | /** 60 | * 简单找图,返回当前图标在屏幕的坐标点 61 | * 62 | * @param imgName 图片的名称 63 | * @param sim 相似度 64 | * @param setCol 屏幕分几列 65 | * @param setRow 屏幕分几行 66 | * @param selectCol 取第几列 67 | * @param selectRow 取第几行 68 | */ 69 | function findimage( 70 | imgName: string, 71 | sim: number, 72 | setCol: number, 73 | setRow: number, 74 | selectCol: number, 75 | selectRow: number 76 | ): point; 77 | 78 | /** 79 | * 启动(多段动态调整)鼠标宏 参数获取 80 | * 81 | * 在代码起始位置,写一次就好,参数调节需要使用。 82 | */ 83 | function startsectionaimpar(): void; 84 | 85 | /** 86 | * 改变(多段动态调整)鼠标宏的参数 87 | * 88 | * @param name 当前的名称,相同则不处理 89 | * @param totalTime 弹夹打完所需要的总耗时,单位 毫秒 90 | * @param par 多段参数,数组字符串 91 | * @param offsetPixel 每次压枪像素偏移值,模式二的写法 92 | * @param mode true 使用模式一,false 使用模式二 93 | */ 94 | function changesectionaimpar( 95 | name: string, 96 | totalTime: number, 97 | par: string, 98 | offsetPixel?: number, 99 | mode?: boolean 100 | ): void; 101 | 102 | /** 103 | * 启动自定义鼠标宏, 104 | * 105 | * 在代码起始位置,写一次就好, 106 | * 107 | * 参数调节需要使用 changecustomaimpar, 108 | * 109 | * 启停需要配合使用 customaimpar。 110 | */ 111 | function startcustomaimpar(); 112 | 113 | /** 114 | * 动态调整自定义的鼠标宏参数 115 | * 116 | * @param x 水平方向,每次移动 x 像素 117 | * @param y 垂直方向,每次移动 y 像素 118 | * @param delay 每隔多少毫秒移动一次 119 | */ 120 | function changecustomaimpar(x: number, y: number, delay: number); 121 | 122 | /** 123 | * 控制鼠标宏的启停 124 | * 125 | * @param isPause true 是停止;false 是开始 126 | */ 127 | function customaimpar(isPause: boolean): void; 128 | 129 | /** 130 | * 按住操作,按住当前宏按键所指的手机位置 131 | */ 132 | function holdpress(); 133 | 134 | /** 135 | * 按住操作,按键松开后才会释放此接口 136 | */ 137 | function holdpress(x: number, y: number); 138 | 139 | /** 140 | * 按住操作,按键松开后才会释放此接口 141 | */ 142 | function holdpress(point: point); 143 | 144 | /** 145 | * 执行其他按键的操作, 146 | * 当前按键松开 才会释放 其他按键 147 | * 148 | * @param keyName { string } 如 "W" 149 | */ 150 | function key(keyName: string); 151 | 152 | /** 153 | * 执行其他按键的操作 154 | * releaseTime 毫秒后,释放 其他按键 155 | * 156 | * @param keyName { string } 如 "W" 157 | * @param releaseTime {number} 毫秒数 158 | */ 159 | function key(keyName: string, releaseTime: number); 160 | 161 | /** 162 | * 当前按键按键是否被按下 163 | */ 164 | function keyispress(): boolean; 165 | 166 | /** 167 | * 获取 指定的按键是否被按下 168 | * @param keyName 169 | */ 170 | function keyispress(keyName: string): boolean; 171 | 172 | /** 173 | * 设置全局缓存 map 的键值对 174 | * @param key 175 | * @param value 176 | */ 177 | function setglobalmap(key: string | Object, value: any); 178 | 179 | /** 180 | * 获取全局缓存 map 指定 key 的值,没有则返回 null 181 | * @param key 182 | */ 183 | function getglobalmap(key: string | Object): any; 184 | 185 | /** 186 | * 设置是否为射击模式。射击模式没有鼠标 187 | * 188 | * @param isShotMode { boolean } 是否为射击模式 189 | * @example 按 Tab 键,默认会退出,可用通过 mapi.shotmode(true) 进入射击模式 190 | */ 191 | function shotmode(isShotMode: boolean); 192 | 193 | /** 194 | * 点击当前宏按键所指的手机位置 195 | */ 196 | function click(); 197 | 198 | /** 199 | * 点击操作 200 | * @param point 201 | */ 202 | function click(point: point); 203 | 204 | /** 205 | * 点击操作 206 | * 207 | * @param x {number} 208 | * @param y {number} 209 | */ 210 | function click(x: number, y: number); 211 | 212 | /** 213 | * 获取当前宏按键所指手机屏幕上的坐标 214 | */ 215 | function getkeypos(): point; 216 | 217 | /** 218 | * 获取当前鼠标所指手机屏幕上的坐标 219 | */ 220 | function getmousepos(): point; 221 | 222 | /** 223 | * 准心重置操作, 224 | * 在隐藏鼠标控制视角时,使用此接口会释放视角然后立即在准心位置重新按下, 225 | * 主要解决某些游戏因为点击其他位置导致视角失灵的情况 226 | */ 227 | function aimreset(); 228 | 229 | /** 230 | * 从 (startX, startY) 滑动到 (endX, endY), 231 | * 这段距离总共有 pointNum 个点, 232 | * 两点间所需时间为 interval 233 | */ 234 | function slide(startX: number, startY: number, endX: number, endY: number, interval: number, pointNum: number); 235 | 236 | /** 237 | * WASD方向键重置 238 | * 239 | * 200 毫秒后 重新按WASD 240 | */ 241 | function directionreset(); 242 | /** 243 | * WASD方向键重置 244 | * 245 | * delay 毫秒后 重新按WASD 246 | */ 247 | function directionreset(delay: number); 248 | } 249 | 250 | 251 | /** 252 | * 日志,类别 debug 253 | * @param content {string} 内容 254 | */ 255 | declare function logdebug(content: string): void; 256 | 257 | /** 258 | * 日志,类别 info 259 | * @param content {string} 内容 260 | */ 261 | declare function loginfo(content: string): void; 262 | 263 | /** 264 | * 日志,类别 warning 265 | * @param content {string} 内容 266 | */ 267 | declare function logwarning(content: string): void; 268 | 269 | /** 270 | * 日志,类别 error 271 | * @param content {string} 内容 272 | */ 273 | declare function logerror(content: string): void; 274 | 275 | /** 276 | * 日志,类别 fatal 277 | * @param content {string} 内容 278 | */ 279 | declare function logfatal(content: string): void; 280 | 281 | --------------------------------------------------------------------------------